Linux中的非阻塞安装

时间:2009-01-28 02:29:03

标签: c linux mount

我在单线程进程中使用Linux的mount(2)函数。但是安装像CD-ROM这样的设备可能需要一段时间(最糟糕的是我看到的是40秒!),因为它会稍微思考,旋转磁盘,然后才会挂载文件系统。这可能会阻止该过程在相当长的时间内处理其他事件。

我似乎找不到以非阻塞方式挂载文件系统的方法。 有没有办法在没有多线程或分叉的情况下异步挂载文件系统?

知道动作是否完整对我来说不是问题,因为我已经在同一个帖子中阅读了内核uevents。

3 个答案:

答案 0 :(得分:13)

没有。如果不启动另一个线程或fork(),则必须等待mount()返回。

答案 1 :(得分:2)

如果您想以单线程方式执行此操作,可以手动执行mount命令并对其进行后台处理,并使用select()或其他方式轮询完成。但是,这是hackish,并且与在程序中分叉和调用mount()没有什么不同。

另外值得注意的是,我经历过mount()阻塞整个进程(以及关联的线程),因此对于真正的异步行为,分叉可能是要走的路。

答案 2 :(得分:2)

您可以让安装过程在后台运行。 坚持运行如:

system("mount -a ");

system("mount -a &");

这将让mouning在后台完成。

但仔细观察后,此解决方案不使用C接口,而是使用系统接口