使用C连续读取已打开的文件

时间:2013-10-23 10:10:20

标签: c file-io polling

我正在实现一个低权重的应用程序,我必须经常打开并读取/ proc / pid或tid / task / stat细节。如果应用程序是多线程的,我必须阅读更多的stat文件。因此,打开,读取和关闭使我的监控应用程序非常慢。是否有解决方案可以避免重复打开文件并仍然能够读取更新的内容?

我进行了以下实验,但我没有看到成功。我更改了“test.txt”中的数据,但未读取新数据。是因为文件没有在内存中更新?当我修改并保存“test.txt”时会发生什么?

#include <stdio.h>
int main()
{
    FILE * pFile;
    char mystring [100];
    pFile = fopen ("test.txt" , "r");
    while(1){
        if (pFile == NULL) perror ("Error opening file");
        if ( fgets (mystring , 100 , pFile) != NULL ){
            puts (mystring);
            fseek ( pFile , 0 , SEEK_SET );
        }
        sleep(1);
    }
    fclose (pFile);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

for (;;) {
    while ((ch = getc(fp)) != EOF)  {
        if (putchar(ch) == EOF)
            perror("Output error");
    }
    if (ferror(fp)) {
        printf("Input error: %s", errno);
        return;
    }
    (void)fflush(stdout);
    sleep(1); // Or use select
}

您可以通过研究source code for tail找到完整的示例。上面的代码是来自forward.c的修改摘录。

您可以使用select监控多个文件以获取新数据(您需要将其保持打开状态)。

答案 1 :(得分:0)

尝试使用rewind()并且不要关闭您的文件。

完成阅读操作后,请关闭文件。