提问者:小点点

SMB共享上的POSIX open()挂起


我在linux下用mount.cifs挂载Windows SMB共享并从C++程序写入文件时遇到了一个问题。 这可以正常工作,但一旦出现网络问题(即Windows服务器断开连接),使用POSIXopen()打开文件将无限期挂起。 如果文件打开时共享断开连接,则POSIXclos()调用也会发生同样的情况。 使用std::ofstream会发现类似的问题。

有吗

  • 超时后返回的Open()/Close()的另一个版本?
  • 从另一个线程释放打开的调用而不终止试图打开的线程的方法?
  • 预先测试呼叫是否挂起的方法?

共1个答案

匿名用户

当信号到达时,系统调用中断; errno将返回EINTR。

您可以在syscall之前使用alarm()来排定超时周期之后的SIGALRM。

如果系统调用在超时期限到期之前成功返回,您还可以使用alarm()取消挂起的SIGARLM。