检查是否存在文件或文件夹阻塞或非阻塞?
access( fname, F_OK ) // blocking ?打开dir /文件阻塞还是非阻塞?
opendir(dir); // blocking?
open(fd..); // blocking?列表是阻塞还是非阻塞?
readdir // blocking?我的意思是要花很长时间才能回来。
发布于 2019-06-01 01:26:52
(我假设您的意思是“块”,因为它通常在Unix手册和相关文档中使用:也就是说,您在询问这些操作是否涉及等待I/O完成的较长时间的调用过程。如果这不是你的意思,请编辑你的问题来澄清。)
简单的回答是,所有这些系统调用都可能阻塞。
长话短说:
access系统调用是正确使用的情况。相反,只需继续尝试打开文件,输入目录,然后检查是否失败。
话虽如此,access、stat和lstat可以出于与open同样的理由而阻塞(下面将讨论)。fstat不能保证不阻塞,但通常可以假定它不会阻塞。open和opendir可以阻塞,即使您使用O_NONBLOCK。最常见的情况是,当您试图打开的文件或目录位于远程文件系统上时,请确定文件是否存在,并允许您访问该文件,这涉及到通过网络发送数据包。
在POSIX中没有任何解决办法,因为无法表示正在进行的open操作。networking将创建套接字(不能阻止的socket)与将其连接到远程对等端的请求(connect,可以)分开,因此当connect返回将errno设置为EINPROGRESS的−1时,您已经知道了套接字描述符号,并且可以在其上进行select。如果open给您EINPROGRESS,您就不会有select的文件描述符了。readdir可以阻止所有相同的原因,普通的老read可以阻止。同样,您注意到的最常见的情况是目录位于远程文件系统上。本例中的问题是DIR抽象妨碍了以正常方式请求非阻塞I/O。https://stackoverflow.com/questions/56403154
复制相似问题