参考文章: 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. 安装Windows更新程序遇到错误:0x80070422

    看看服务那里 windows update服务是不是被禁用了? 还有一个问题可能是由于Windows Modules Installer被禁用了.

  2. SQL用法操作合集

    SQL用法操作合集   一.表的创建 1.创建表 格式: 1 CREATE TABLE 表名 2 (列名 数据类型(宽度)[DEFAULT 表达式][COLUMN CONSTRAINT], 3 ... ...

  3. Hibernate 中出现表名(XXX) is not mapped 问题

    今天晚上自己试着用Hibernate去搭建一个Web工程,然后去实现一个简单的登录.通过Hibernate?做查询操作的时候总是报出这样的错:users is?not?mapped. 于是乎去检查了下 ...

  4. Nuget 命令 NuGet 管理项目库

    因为可视化库程序包管理器的局限性,有很多需要的功能在界面中无法完成. 以下技巧均需要在"程序包管理器控制台"中使用命令来完成. 一.改变项目目标框架后,更新程序包 当改变项目的目标 ...

  5. Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  6. mongodb集群安装及到现在遇到的一些问题

    集群搭建 只有3台服务器,开始搭建mongodb集群里主要参照的是http://www.lanceyan.com/tech/arch/mongodb_shard1.html,端口的设置也是mongos ...

  7. [LeetCode] Triangle 三角形

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  8. [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 ...

  9. 51nod 最小周长

    1283 最小周长 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 一个矩形的面积为S,已知该矩形的边长都是整数,求所有 ...

  10. 使用winmm.dll 获取麦克风声音数据

    //录音 /// <summary> /// 初始化录音环境 /// </summary> /// <returns></returns> public ...