我已经在CentOS系统上安装了一个Windows共享文件夹。当我尝试使用read system调用读取一个大文件时,如果网络连接中断,则读取将挂起,并将我的程序置于不间断睡眠状态。这听起来不对。即使我使用o_nonblock打开文件,读取也会挂起。我原希望这本书最终会过时,但事实并非如此。
如果读取只是要阻塞而不返回任何错误,如何在网络上实现可靠的复制操作?
我认为使用异步模式和选择调用也不会对我有帮助。
read总是一个阻塞调用吗?
谢谢
加纳库
最佳答案
您可以尝试将远程文件系统挂载为CIFS而不是SMB。mount.cifs支持soft
选项(也是默认选项),当网络或服务器出现故障而不是挂起时,该选项将导致返回错误。
从手册页:
soft:(默认)当服务器崩溃时,访问CIFS装载的文件系统上的文件的程序不会挂起,并将错误返回给用户应用程序。
关于linux - 如果网络连接断开,读取系统调用是否会永久挂起smb挂载上的文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11057512/