我在单线程进程中使用Linux的mount(2)
函数。但是安装像CD-ROM这样的设备可能需要一段时间(最糟糕的是我看到的是40秒!),因为它会稍微思考,旋转磁盘,然后才会挂载文件系统。这可能会阻止该过程在相当长的时间内处理其他事件。
我似乎找不到以非阻塞方式挂载文件系统的方法。 有没有办法在没有多线程或分叉的情况下异步挂载文件系统?
知道动作是否完整对我来说不是问题,因为我已经在同一个帖子中阅读了内核uevents。
答案 0 :(得分:13)
没有。如果不启动另一个线程或fork()
,则必须等待mount()
返回。
答案 1 :(得分:2)
如果您想以单线程方式执行此操作,可以手动执行mount命令并对其进行后台处理,并使用select()或其他方式轮询完成。但是,这是hackish,并且与在程序中分叉和调用mount()没有什么不同。
另外值得注意的是,我经历过mount()阻塞整个进程(以及关联的线程),因此对于真正的异步行为,分叉可能是要走的路。
答案 2 :(得分:2)
您可以让安装过程在后台运行。 坚持运行如:
system("mount -a ");
做
system("mount -a &");
这将让mouning在后台完成。
但仔细观察后,此解决方案不使用C接口,而是使用系统接口