将在远程文件系统上打开()系统调用块?

时间:2014-05-26 12:07:27

标签: c linux

我想知道Linux最新内核中的open()系统调用是否会阻塞文件系统是作为远程设备挂载的,例如CEPH文件系统还是NFS,并且存在某种类型的网络故障? / p>

2 个答案:

答案 0 :(得分:2)

是的,如果某种网络出现故障,尝试在远程文件系统上打开文件时,open()调用可能会阻塞。

根据远程文件系统的挂载方式,可能需要很长时间(多秒)才能确定远程文件系统不可用,并且在看似过多的时间后返回失败,或者可能只是无限期锁定,直到远程资源再次可用(或直到从系统中删除映射)。

答案 1 :(得分:2)

是。多长时间取决于上行链路的速度(和状态),但您的进程或线程将阻塞,直到远程操作完成。 NFS有点臭名昭着,有些FUSE文件系统会处理阻止任何文件处理的内容,但是你会阻止open()read()write(),经常受到限制网络和其他系统。

不要使用O_NONBLOCK来绕过它,或者你可能正在读取或写入黑洞(无论如何都会阻止它)。