linux 下串口独占方式打开
参考文章: http://blog.csdn.net/rl529014/article/details/51336161
http://blog.csdn.net/lin_fs/article/details/7804494
http://blog.csdn.net/querdaizhi/article/details/7478169
以flock函数打开设备文件打开,是独占整个文件
int fd;
char com_name[]={};
sprintf(com_name,"/dev/ttyS100%d",com_port);
// sprintf(com_name,"/dev/ttyS%d",1);
// printf("before first open\n");
fd = open(com_name, O_RDWR|O_NOCTTY|O_NDELAY);
// fd = open(com_name, O_RDWR|O_EXCL,0444);
if (fd < )
{
perror("open serial port");
return(-);
} if(flock(fd,LOCK_EX|LOCK_NB)==)
{
printf("the file was not locked.\n");
}
else
{
printf("the file was locked.\n");
close(fd);
return -;
} if (fcntl(fd, F_SETFL, ) < )
{
perror("fcntl F_SETFL\n");
} if (isatty(STDIN_FILENO) == )
{
perror("standard input is not a terminal device");
} return fd;
以fcntl方式打开设备文件:
int fd;
char com_name[]={};
sprintf(com_name,"/dev/ttyS100%d",com_port);
// sprintf(com_name,"/dev/ttyS%d",1);
// printf("before first open\n");
fd = open(com_name, O_RDWR|O_NOCTTY|O_NDELAY);
// fd = open(com_name, O_RDWR|O_EXCL,0444);
if (fd < )
{
perror("open serial port");
return(-);
}
// printf("first open\n");
struct flock lock;
lock.l_type=F_WRLCK;
lock.l_pid=getpid();
lock.l_whence=SEEK_SET;
lock.l_start=;
lock.l_len=;
fcntl(fd,F_GETLK,&lock);
if(lock.l_type != F_UNLCK){
// printf("%d\n", lock.l_type);
return -;
}
lock.l_type=F_WRLCK;
lock.l_pid=getpid();
lock.l_whence=SEEK_SET;
lock.l_start=;
lock.l_len=;
if(fcntl(fd, F_SETLKW,&lock) < ){
perror("fcntl F_SETLKW\n");
}
if (isatty(STDIN_FILENO) == )
{
perror("standard input is not a terminal device");
}
return fd;
F_SETLKW 与 F_SETFL的区别是如果有其他锁阻止该锁被建立,则调用进程进入睡眠状态,等待该锁释放。一旦这个调用开始了等待,就只有在能够进行加锁或者收到信号时才会返回。
而且F_SETFL设置方式为fcntl(STDOUT_FILENO,F_SETFL,flags),而非fcntl(fd, F_SETLKW,&lock),无法建立锁机制。 F_SETFL 与 F_SETLKW 使用差别比较大
linux 下串口独占方式打开的更多相关文章
- Linux下串口编程入门
简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...
- Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)
摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...
- 在Linux下的中断方式读取按键驱动程序
// 在Linux下的中断方式读取按键驱动程序 //包含外部中断 休眠 加入poll机制 // 采用异步通知的方式 // 驱动程序发 ---> app接收 (通过kill_fasync()发送) ...
- Linux下查看某个进程打开的文件数-losf工具常用参数介绍
Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...
- "无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法
当程序用ado的jet4.0方式连接mdb数据库的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”. ADOConne ...
- linux下串口通信与管理
linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...
- Access无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开
使用SQL Server导入有密码的Access数据库内容,连接时出现错误提示: Access无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开 参考百度信息,可以点上图中的高级,在 ...
- Django项目部署在Linux下以进程方式启动
Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...
- Microsoft Jet 数据库引擎打不开文件,它已经被别的用户以独占方式打开,或没有查看数据的权限。
System.Data.OleDb.OleDbException (0x80004005): Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\gonghouxie\wwwroo ...
随机推荐
- PHP环境的搭建(Apache)
一,下载XAMPP集成软件包. 二,Apache的安装配置: Apache的安装就点击下一步下一步,默认路径在系统的C盘. 三,在star Apache的时候,出现了端口号80冲突(被占用),解决 ...
- Softreference | WeakReference
转自:http://blog.csdn.net/kavendb/article/details/5935577 本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱 ...
- [LeetCode] Paint House II 粉刷房子之二
There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- 【MySQL】mysql 1449 : The user specified as a definer ('root'@'%') does not exist
权限问题,授权 给 root 所有sql 权限 1.mysql> grant all privileges on *.* to root@"%" identified by ...
- 用Model-View-ViewModel构建iOS App(转)
转载自 Model-View-ViewModel for iOS [译] 如果你已经开发一段时间的iOS应用,你一定听说过Model-View-Controller, 即MVC.MVC是构建iOS a ...
- coocs2d-x 分辨率
config.lua: CC_DESIGN_RESOLUTION = { width = , height = , autoscale = "FIXED_HEIGHT", call ...
- c# json总结
json确实很好用,但是网上写的很多都很复杂,不适合自己,然后每次写了又记不住,又要反复找,所以将其中的代码写下来.以后看这个就可以了 都引用了 Newtonsoft.Json 1.ashx,asmx ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- django用户认证
利用django自带认证功能实现用户登录认证. views.py # Create your views here. from django.shortcuts import render_to_re ...