【发布时间】:2020-04-29 09:30:52
【问题描述】:
我编写了一个设备驱动程序,它可以创建 3 个具有相同文件系统的设备。因此,基本上所有 3 个设备在调用时都会重定向到相同的文件操作。 还有另一个用户程序可以逐个打开单个设备以访问其中的数据。假设我在访问另一个设备之前没有关闭设备,会有什么后果?
fd1 = open("/dev/dummy1", O_RDWR);
if(fd1 < 0){
printf("Cannot open file");
return -1;
}
if(ioctl(fd1, DV_DAT, data) == -1){
printf("issue in getting data\n");
}
else{
printf("%d\n", data);
}
fd2 = open("/dev/dummy2", O_RDWR);
if(fd2 < 0){
printf("Cannot open file");
return -1;
}
if(ioctl(fd2, DV_DAT, data) == -1){
printf("issue in getting data\n");
}
else{
printf("%d\n", data);
}
close(fd2);
fd3 = open("/dev/dummy3", O_RDWR);
if(fd3 < 0){
printf("Cannot open file");
return -1;
}
if(ioctl(fd3, DV_DAT, data) == -1){
printf("issue in getting data\n");
}
else{
printf("%d\n", data);
}
close(fd3);
close(fd1);
这个尝试是为了测试一个真实的场景,其中所有三个设备节点都被认为是独立的,并且可以被不同的程序同时访问。这是当一个程序已经打开文件并在另一个程序打开文件时正在处理它。
有什么办法可以解决这个问题?我如何确保不会导致内核崩溃?
【问题讨论】:
-
开发人员懒得考虑对象生命周期的大多数文件操作问题。您正在等待的后果是内核崩溃。
标签: file-io linux-device-driver fopen ioctl