我正在尝试学习并编写了一个小程序,应该定期将文本写入文件。
$ cat test.c
inner
文件#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
int main() {
printf("First\n");
errno = 0;
FILE *f = fopen("test.file", "a");
int c = 0;
//int fd = 0;
if (f == NULL) {
printf("Something went wrong %d\n", errno);
return 1;
}
//fd = fileno(f);
printf("Starting loop\n");
while(1) {
c = fprintf(f, "12345\n");
//syncfs(fd);
printf("print %d, %d\n", c, errno);
sleep(10);
}
return 0;
}
已存在且不为空。我用
test.file
test.c
问题是$ gcc -Wall test.c
没有更新,尽管似乎没有任何错误。样本输出
test.file
所以它说$ ./a.out
First
Starting loop
print 6, 0
print 6, 0
写了6个字节而fprintf()
为零是正确的。
我虽然它可能与文件系统缓存有关(我实际上是想了解文件系统,所以这个想法可能完全是疯了),所以我添加了对errno
的调用以强制写入数据磁盘。此部分在上面的源代码中已注释掉。它仍然不起作用。
如果我将syncfs()
中的模式从fopen()
更改为a
并重新运行该程序,则w
将被清除,因此我正在查看正确的文件。< / p>
为什么它没有附加?
test.file
gcc 5.4.0