ftruncate 使用 fopen 打开的文件

use*_*271 3 c linux

平台是ARM上的Ubuntu Linux。我想将字符串写入文件,但我希望每次都截断文件然后写入字符串,即不追加。

我有这个代码:

f=fopen("/home/user1/refresh.txt","w");
fputs( "{"some string",f);
fflush(f);
ftruncate(fileno(f),(off_t)0);
flcose(f);
Run Code Online (Sandbox Code Playgroud)

如果我运行它然后检查文件,它的长度将为零,并且打开时,其中将没有任何内容。如果我删除fflush呼叫,它不会是 0 (将是 11),当我打开它时,其中会出现“一些字符串”。这是正常行为吗?我调用没有问题fflush,但我想在循环中执行此操作,并且调用fflush可能会大大增加执行时间。

pax*_*blo 5

您不应该像这样混合文件句柄和文件描述符调用。

在没有 fflush 的情况下,几乎可以肯定会发生的是,some string正在等待文件句柄缓冲区传递到文件描述符。然后,您截断文件描述符并关闭文件句柄,刷新字符串,因此它会显示在文件中。

使用fflush,some string将其发送到文件描述符,然后截断它。如果不再进行刷新,文件将保持被截断的状态。