C程序不';t在while循环中保存到文件

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) {

我写了一个o程序,它必须在inf while循环中工作。在循环中,程序必须将一些数据保存到文件并关闭此文件。在循环中有一个睡眠功能,可使程序睡眠10秒钟。然后我想检查文件中的内容,但它是空的。如果程序在没有循环的情况下运行,则一切正常

完整的代码相当庞大,所以我提供了一个简短的版本

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
失败,程序将不会正常运行。