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
", fd1, fd2);
	ret = flock(fd1, LOCK_EX);
	printf("get lock1, ret: %d
", ret);
	//sleep(5);
	
	while(timeloop > 0)
	{
		printf("%d
", timeloop);
		sleep(1);

		timeloop--;
	}

	flock(fd1, LOCK_UN);

	ret = flock(fd2, LOCK_EX);
	printf("get lock2, ret: %d
", 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的区别

原文地址:https://www.cnblogs.com/xuanyuanchen/p/6060703.html