Linux multiple open a device
Linux multiple open a device
a device = /dev/wiegand
Linux在多次打开同一个设备(/dev/wiegand)的时候,打开结果都是成功,但是在用wiegand发送协议号码的时候,数据出现了丢失。
问题:
➀Linux能够同时打开一个设备吗?
②同时写设备的时候,难道不应该是另外一个打开失败吗?
③是否可以锁定/lock/(f)lock这个设备呢?
④flock锁,有哪几种工作模式?
flock是一种 建议性/advisory 锁,非 mandatory/强制性 锁。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/file.h>
int timeloop = 5;
int main(int argc, char*argv[])
{
int ret;
int fd1 = open("./tmp.txt", O_RDWR);
int fd2 = open("./tmp.txt", O_RDWR);
printf("fd1: %d, fd2: %d\n", fd1, fd2);
ret = flock(fd1, LOCK_EX);
printf("get lock1, ret: %d\n", ret);
//sleep(5);
while(timeloop > 0)
{
printf("%d\n", timeloop);
sleep(1);
timeloop--;
}
flock(fd1, LOCK_UN);
ret = flock(fd2, LOCK_EX);
printf("get lock2, ret: %d\n", ret);
return 0;
}
结果是:
fd1: 3, fd2: 4
get lock1, ret: 0
5
4
3
2
1
get lock2, ret: 0
参考:
1、Linux flock
2、Linux 下fcntl的使用
3、2 Types of Linux File Locking (Advisory, Mandatory Lock Examples)
4、Linux 2.6 中的文件锁
5、fcntl()、lockf、flock的区别