参考文章: 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 下串口独占方式打开的更多相关文章

  1. Linux下串口编程入门

    简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介  串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...

  2. Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)

    摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...

  3. 在Linux下的中断方式读取按键驱动程序

    // 在Linux下的中断方式读取按键驱动程序 //包含外部中断 休眠 加入poll机制 // 采用异步通知的方式 // 驱动程序发 ---> app接收 (通过kill_fasync()发送) ...

  4. Linux下查看某个进程打开的文件数-losf工具常用参数介绍

    Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

  5. "无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法

    当程序用ado的jet4.0方式连接mdb数据库的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”. ADOConne ...

  6. linux下串口通信与管理

    linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...

  7. Access无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开

    使用SQL Server导入有密码的Access数据库内容,连接时出现错误提示: Access无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开 参考百度信息,可以点上图中的高级,在 ...

  8. Django项目部署在Linux下以进程方式启动

    Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...

  9. Microsoft Jet 数据库引擎打不开文件,它已经被别的用户以独占方式打开,或没有查看数据的权限。

    System.Data.OleDb.OleDbException (0x80004005): Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\gonghouxie\wwwroo ...

随机推荐

  1. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

  2. h5+mui

    参考链接http://blog.csdn.net/tbwood/article/details/42081861 待补充

  3. Django基础,Day1 - 环境安装与pycharm创建django项目

    Django是一个高级Python Web框架,支持快速部署,清理和实用的设计.它可以被轻易部署和提供实用的组件,而开发人员只需要专注于写自己的应用程序,而不需要重复造轮子.并且Django是自由和开 ...

  4. knockout学习笔记10:demo

    前面已经介绍了ko的基本用法,结合官方文档,基本就可以实际应用了.本章作为ko学习的最后一篇,实现一个简单的demo.主要集中在ko,所以后台数据都是静态的.类似于博园,有一个个人文章的分类列表,一个 ...

  5. KD-tree(2维)

    用于动态插入以及求某点的最近点的距离(BZOJ2648,BZOJ2716) #include <cstdio> #include <cmath> #include <al ...

  6. 网络切片在5G中的应用

    SDNLAB君 • 16-11-25 •1509 人围观 5G和网络切片 当5G被广泛提及的时候,网络切片是其中讨论最多的技术.像KT.SK Telecom.China Mobile.DT.KDDI. ...

  7. 在Eclipse中使用建立使用Gradle做依赖管理的Spring Boot工程

    前述: Gradle存在很长时间了,以前只知道Maven和ivy ,最近才知道有这个存在,因为以后要用这个了; 所以,要先学会怎么用这个工具,就从建立一个简单工程开始! 实际上以前是见过Gradle的 ...

  8. JavaScript面向对象的程序设计

    ECMAScript支持面对对象(oo)编程,但不使用类或接口.对象可以在代码执行过程中创建和增强,因此具有动态性而非严格定义的实体.在没有类的情况下,可以此采用下列模式创建对象. 工厂模式,使用简单 ...

  9. OpenStack从入门到放弃

    OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...

  10. DOM基础知识

    DOM BOMDOM 文档对象模型 document.BOM 浏览器界面上所有内容 broder object.没有括号属性.()方法 DOM写法 document.作用 做特效 找到 摘出元素 增删 ...