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 ...
随机推荐
- 安装Windows更新程序遇到错误:0x80070422
看看服务那里 windows update服务是不是被禁用了? 还有一个问题可能是由于Windows Modules Installer被禁用了.
- SQL用法操作合集
SQL用法操作合集 一.表的创建 1.创建表 格式: 1 CREATE TABLE 表名 2 (列名 数据类型(宽度)[DEFAULT 表达式][COLUMN CONSTRAINT], 3 ... ...
- Hibernate 中出现表名(XXX) is not mapped 问题
今天晚上自己试着用Hibernate去搭建一个Web工程,然后去实现一个简单的登录.通过Hibernate?做查询操作的时候总是报出这样的错:users is?not?mapped. 于是乎去检查了下 ...
- Nuget 命令 NuGet 管理项目库
因为可视化库程序包管理器的局限性,有很多需要的功能在界面中无法完成. 以下技巧均需要在"程序包管理器控制台"中使用命令来完成. 一.改变项目目标框架后,更新程序包 当改变项目的目标 ...
- Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- mongodb集群安装及到现在遇到的一些问题
集群搭建 只有3台服务器,开始搭建mongodb集群里主要参照的是http://www.lanceyan.com/tech/arch/mongodb_shard1.html,端口的设置也是mongos ...
- [LeetCode] Triangle 三角形
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- [LeetCode] Minimum Path Sum 最小路径和
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- 51nod 最小周长
1283 最小周长 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 一个矩形的面积为S,已知该矩形的边长都是整数,求所有 ...
- 使用winmm.dll 获取麦克风声音数据
//录音 /// <summary> /// 初始化录音环境 /// </summary> /// <returns></returns> public ...