linux中如果已经打开了一个设备文件,如果我没有关闭就又对它打开 *** 作,会发生什么情况,返回值又是什么?

linux中如果已经打开了一个设备文件,如果我没有关闭就又对它打开 *** 作,会发生什么情况,返回值又是什么?,第1张

那要看这个设备所对应的设备是什么类型的设备了,是独享型还是共享型,允许几个进程同时使用该设备。

独享型设备在同一时刻只允许一个进程使用,其他进程必须进入阻塞队列等待,直到该进程退出时将该资源为空闲的信号量恢复,等待队列中的第一个进程才可以进入。

共享型设备允许同时有多个进程访问某个设备或资源,但是进程的个数可以进行设置,超过这个数的进程只能阻塞等待。

返回值一般情况下,如果正常执行则为0,非正常执行的话,有什么样的返回值要看程序代码中是怎么定义的了。返回值的那个数字不重要,重要的是它所代表的意义。

如果是多线程的话 特可以用互斥锁 使用互斥锁需避免死锁

如果是多进程的话 可以用信号量来避免冲突

要真具体讲 不是一俩句可以说明白的 需要代码 否则太虚了 你可以看看LINUX中多线程和多进程这部分 看明白了就懂了

驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另一种是编译成模块以供动态加载。由于uClinux不支持模块动态加载,而且嵌入式LINUX不能够象桌面LINUX那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而这里只介绍将设备驱动程序静态编译进uClinux内核的方法。下面以UCLINUX为例,介绍在一个以模块方式出现的驱动程序test.c基础之上,将其编译进内核的一系列步骤:

(1) 改动test.c源带代码

第一步,将原来的:#include#includechar kernel_version[]=UTS_RELEASE改动为:#ifdef MODULE#include#includechar kernel_version[]=UTS_RELEASE#else#define MOD_INC_USE_COUNT

#define MOD_DEC_USE_COUNT#endif第二步,新建函数int init_test(void)

将设备注册写在此处:

result=register_chrdev(254,"test",&test_fops)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9032325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存