gpt4 book ai didi

c++ - 在 C++ 中写入不可靠的磁盘时引发 I/O 错误

转载 作者:行者123 更新时间:2023-11-30 04:31:54 25 4
gpt4 key购买 nike

假设您在 C++ 中有以下内容:

ofstream myfile;
myfile.open (argv[1]);

if (myfile.is_open()){
for(int n=0;n<=10;n++){
myfile << "index="<<n<<endl;
sleep(1);
}
}else{
cerr << "Unable to open file";
}

myfile.close();

在写入时,您正在写入的磁盘或介质变得不可用,但会在 close() 时恢复,因此您在这两者之间丢失了数据。或者假设您写入 USB 闪存驱动器,并且在写入过程中设备被拔出并重新插入。

你怎么能检测到?我尝试检查将写入放入 try {} catchflags()rdstate(),随便你怎么说,但到目前为止似乎都没有去工作。

最佳答案

我不认为这是你可以在 stdio 级别检测到的东西。通常,当硬盘驱动器暂时停止响应时,操作系统会自动重试命令,直到它们成功或达到超时为止,此时您的系统调用可能会收到错误。 (OTOH 它可能不会,因为您的调用可能已经返回,在数据被写入内存文件系统缓存之后但在任何命令被发送到实际磁盘之前)

如果你真的想检测易损坏的硬盘驱动器,你可能需要编写低得多的代码,例如编写您自己的硬件驱动程序。

关于c++ - 在 C++ 中写入不可靠的磁盘时引发 I/O 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com