4

mount(2)我在单线程进程中使用 Linux 的功能。但是像 CD-ROM 这样的设备的安装可能需要一段时间(我见过的最糟糕的是 40 秒!),因为它会考虑一点,启动磁盘,然后才会安装文件系统。这可能会在相当长的时间内阻止进程处理其他事件。

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

知道操作是否完成对我来说不是问题,因为我已经在同一个线程中阅读了内核 uevents。

4

3 回答 3

13

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

于 2009-01-28T02:34:26.890 回答
2

如果您想以单线程方式执行此操作,您可以手动执行 mount 命令并将其置于后台并使用 select() 或其他方式轮询完成。然而,这很骇人听闻,与在程序中分叉和调用 mount() 并没有太大区别。

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

于 2009-01-28T02:50:10.947 回答
2

您可以让安装过程在后台运行。运行类似的东西:

system("mount -a ");

system("mount -a &");

这将使安装在后台为您完成。

但是仔细看了一下,这个方案不是用C接口而是用系统接口

于 2009-01-28T08:23:06.313 回答