失败的fopen会影响文件系统吗?

时间:2011-03-30 16:14:36

标签: c unix

如果fopen(path,“w”)成功,则文件将被截断。如果fopen失败,是否保证文件未被修改?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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