2010-09-29 60 views
0

我试图根据文件内容退出while循环。文件存在并且是空的,或者在程序初始化时被垃圾填充。我在外部修改了这个文件,并希望循环根据文件的修改方式退出。在C中,如何根据文件内容退出循环

目前,我开始几个线程,打开我正在阅读的文件。检查第一个字节。如果它是一个,我退出,否则启动循环。

当我想退出。我在第一个字节中放置了一个,但是看起来我的文件再也不会被读取了。

虽然循环语句和变量定义每个环的样子:

while(strcmp(fileContents, "1\n") != 0){ 

    lengthRead = fread(fileContents, 1, size, isRecording); 
    fseek(isRecording, 0, SEEK_SET); 

我知道有可能是更简单的方式来退出while循环外,但根据我的项目,我可以的唯一途径的架构看看如何控制这个就是根据文件内容退出。

+2

共享内存?套接字?检查第二个文件的存在? – 2010-09-29 18:15:43

+1

这里有一个可疑的事情:你使用'fread()'从文件中得到一个字节,然后用'strcmp()'比较两个字节('“1 \ n”')。 – aschepler 2010-09-29 18:19:07

+1

它看起来很可疑,但fread实际上一次读取1个字节,大小为字节数。 – pri0ritize 2010-09-29 18:33:15

回答

1

如果您的其他线程正在使用fwrite()写入文件,请不要忘记调用fflush()将更改实际写入文件(否则,它们可能会保留缓存在内存中)。

正如Dave Jarvis所提到的,还有很多其他的选择可以与另一个线程同步。例如,如果您使用pthreads,pthread_cond_signal和pthread_cond_wait。

+0

这不是最简单的系统解释,但该文件正在由外部程序修改。基本上只是一个简单的Python脚本。在调试时,C似乎从不会看到文件中所做的更改。我想知道是否需要在使用fread()重新定义“fileContents”之前打开,读取并关闭文件。戴夫贾维斯检查文件的存在的想法是一个好主意,但我会看到,如果这是一个可能的解决方案。 – pri0ritize 2010-09-29 18:34:49

+0

好的,在这种情况下,你不能做pthread事情,但共享内存和套接字选项仍然可行。 – 2010-09-29 18:37:03

+0

+1。同意:不要忘记'fflush()'。 – 2010-09-29 18:42:42