POSIX open()在SMB共享上挂起。

问题描述 投票:1回答:1

我有一个问题,当我在linux下用以下方法挂载一个Windows SMB共享时,我有一个问题 mount.cifs 并从我的C++程序中写入文件。这样做很好,但一旦出现网络问题(即Windows服务器断线),用POSIX开文件 open() 将无限期地挂起。同样的情况也发生在POSIX的 close() 如果文件打开时共享断开,则调用该函数。使用 std::ofstream 揭示了类似的问题。

是否有

  • 另一个版本 open() close() 超时后返回的方法?
  • 如何在不杀死试图打开的线程的情况下,从另一个线程释放打开的呼叫?
  • 有什么方法可以事先测试调用是否会挂起?
c++ linux posix smb
1个回答
2
投票

当一个信号到达时,系统调用会被中断。errno 会返回EINTR。

你可以使用 alarm() 前的系统调用来调度超时后的SIGALRM。

您也可以在系统调用前使用 alarm() 如果系统调用在超时之前成功返回,则取消一个待定的SIGARLM。

© www.soinside.com 2019 - 2024. All rights reserved.