C程序不';t在while循环中保存到文件
我写了一个o程序,它必须在inf while循环中工作。在循环中,程序必须将一些数据保存到文件并关闭此文件。在循环中有一个睡眠功能,可使程序睡眠10秒钟。然后我想检查文件中的内容,但它是空的。如果程序在没有循环的情况下运行,则一切正常 完整的代码相当庞大,所以我提供了一个简短的版本C程序不';t在while循环中保存到文件,c,linux,fopen,fclose,C,Linux,Fopen,Fclose,我写了一个o程序,它必须在inf while循环中工作。在循环中,程序必须将一些数据保存到文件并关闭此文件。在循环中有一个睡眠功能,可使程序睡眠10秒钟。然后我想检查文件中的内容,但它是空的。如果程序在没有循环的情况下运行,则一切正常 完整的代码相当庞大,所以我提供了一个简短的版本 main() { FILE* fp; while(1) { fp=fopen(SAVE_FILE, "awt"); if(fp==NULL) {
main()
{
FILE* fp;
while(1)
{
fp=fopen(SAVE_FILE, "awt");
if(fp==NULL)
{
printf("Error while opening the save file \n");
}
fprintf(fp, "%s",'this is saved text');
fclose(fp);
sleep(10);
}
}
您知道如何正确关闭此文件,以便在执行睡眠功能时读取数据吗
(这是在linux上运行的)您的代码必须是
int main()
{
FILE* fp;
while(1)
{
fp=fopen(SAVE_FILE, "at");
if(fp==NULL)
{
printf("Error while opening the save file \n");
}
else
{
fprintf(fp, "%s\n","this is saved text");
fclose(fp);
}
sleep(10);
}
}
您编写了要保存在“
之间的字符串。必须对字符串文本使用“
此外,您只能使用一个选项打开文件
编译时应始终使用-Wall选项。gcc为您的代码显示警告
test.c:662:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]
fprintf(fp, "%s",'this is saved text');
a
和w
模式是相互排斥的。您可以删除w
并重新检查吗?与您的问题没有直接关系,但是printf(“打开保存文件时出错”);
后面应该跟继续;
,否则您将得到fprintf(fp,…)
其中fp
为NULL
。为什么每次迭代都要关闭此文件?只需执行fsync
以确保数据将在文件中!@Eddy\Em您确定fsync
刷新stdio缓冲区吗?您确实需要fflush(fp)
在调用fsync
@kmbm'这是在之间保存的文本“
而不是”
之前:这是您的实际代码吗?使用-Wall
编译时应产生警告,例如警告:格式“%s”要求参数类型为“char*”,
可能要编辑以包含继续也会导致打开文件失败,这将导致一些有趣的问题。@LukePark并将fclose
更改为fsync
。else
子句比continue
的想法要好得多。如果删除continue
,如果fopen
失败,程序将不会正常运行。