2011-03-30 41 views

回答

6

不,如果fopen(path, "w")失败,没有关于文件状态的保证。失败可能来自打开文件,将截断提交到磁盘等操作的任何操作......失败提供的唯一保证是您无权访问该文件。

0

为什么fopen()会失败的唯一原因是如果文件以某种方式无法访问或无法修改。但是,如果您担心正在修改文件,则可以使用带有O_WRITE标志的open()命令。然后可以使用fdopen()将其转换为FILE *指针。

+0

你忽略了硬件故障,这也可能导致'fopen'失败 – JaredPar 2011-03-30 16:18:12

+0

来自'man fopen':“fopen(),fdopen()和freopen()函数也可能失败并为任何为例程malloc(3)指定的错误“。所以,失败的原因比你介绍的要多。 – xappymah 2011-03-30 16:20:31

+0

好的。我不知道。但是,我的解决方案仍然保证文件不被修改。 – Maz 2011-03-30 16:21:38

0

优秀的问题,我想答案是否定的。 fopen必须分配一个FILE结构,而实现它的操作的自然顺序是先打开文件,然后尝试分配FILE。这样,fopen只是一个围绕fdopen(或一些带有一些前导下划线或类似命名空间一致性的类似函数)的包装。

就个人而言,我不会在任何失败后关心文件的状态时使用stdio函数。即使打开了文件,stdio的缓冲也几乎不可能知道,如果写入函数返回失败,则发生错误,甚至更不可能将文件返回到可用的一致状态。

相关问题