【问题标题】:Is it possible that application can lose I/O connection to a file?应用程序是否有可能失去与文件的 I/O 连接?
【发布时间】:2011-08-26 05:36:11
【问题描述】:

我有一个 C 应用程序。它在启动时创建了与文件的连接,并连续运行了很多天。

我只连接一次。而不是在代码中重新连接它。 只检查是否

if(NULL == file)

我的应用程序是否会丢失该文件处理程序的 I/O 连接?

如果是。有没有办法,我怎样才能为它创建测试用例?

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    是的,这是可能的。例如,如果文件在另一台机器上或在可移动存储上。然后你可以物理断开/拔出设备,手柄上的后续操作将失败。

    正如 cmets 中的其他人所提到的,您可以通过创建 RAM 磁盘并卸载它或终止驱动程序来在测试用例中模拟它。或者,如果您只关心单向 I/O,也许您可​​以使用管道测试您的代码,然后关闭管道的另一端。

    【讨论】:

    • 有更简单的方法可以通过拦截IO调用来模拟这种情况,见stackoverflow.com/questions/1361518/…
    • @ybungalobill 如果文件是同一台机器,并且在系统驱动器上。我想在那种情况下连接不会丢失吧?或者当 i/o 循环超过 hd 限制时它仍然会发生(我在某处读过那件事但不确定)
    • 你可以有一个崩溃的保险丝驱动器,本地。 (传输端点未连接错误)
    • @Vivek:在受控环境中,假设没有硬件故障,是的,您可以假设它永远不会丢失。一般来说,没有。有很多方法可以让它发生,而且它确实发生了。
    • 是的。在linux上,使用保险丝to mount an fs, even local (e.g. rofs);然后杀死/崩溃保险丝程序(驱动程序)并访问安装点:'endpoint not connected'
    【解决方案2】:

    您可以断开与文件的连接,但它不会将您的文件变量设置为 NULL,症状将是 IO 错误。读或写都会失败。 (对于 C++ 流,将设置 badbit 而不是为格式错误设置的 failbit;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 2018-01-28
      • 2019-10-22
      • 2014-11-24
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多