POSIX open() 在 SMB 共享上挂起
POSIX open() hangs on SMB share
我在使用 mount.cifs
在 linux 下安装 Windows SMB 共享并从我的 C++ 程序写入文件时遇到问题。这工作正常,但一旦出现网络问题(即 Windows 服务器断开连接),使用 POSIX open()
打开文件将无限期挂起。如果共享在文件打开时断开连接,则 POSIX close()
调用也会发生同样的情况。使用 std::ofstream
揭示了类似的问题。
有没有
-
open()
/ close()
的另一个版本 returns 超时后?
- 一种在不杀死试图打开的线程的情况下从另一个线程释放打开调用的方法?
- 预先测试呼叫是否会挂起的方法?
系统调用在信号到达时中断; errno
将 return EINTR.
您可以在系统调用之前使用 alarm()
来在超时期限后安排 SIGALRM。
如果系统调用 return 在超时期限到期之前成功,您还可以使用 alarm()
取消挂起的 SIGARLM。
我在使用 mount.cifs
在 linux 下安装 Windows SMB 共享并从我的 C++ 程序写入文件时遇到问题。这工作正常,但一旦出现网络问题(即 Windows 服务器断开连接),使用 POSIX open()
打开文件将无限期挂起。如果共享在文件打开时断开连接,则 POSIX close()
调用也会发生同样的情况。使用 std::ofstream
揭示了类似的问题。
有没有
-
open()
/close()
的另一个版本 returns 超时后? - 一种在不杀死试图打开的线程的情况下从另一个线程释放打开调用的方法?
- 预先测试呼叫是否会挂起的方法?
系统调用在信号到达时中断; errno
将 return EINTR.
您可以在系统调用之前使用 alarm()
来在超时期限后安排 SIGALRM。
如果系统调用 return 在超时期限到期之前成功,您还可以使用 alarm()
取消挂起的 SIGARLM。