1

/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;
}
4

2 に答える 2

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
}

tail のソース コードを調べると、完全な例を見つけることができます。上記のコードは、forward.c からの抜粋を変更したものです。

新しいデータのいくつかのファイルを監視するために使用できselectます (それらを開いたままにしておく必要があります)。

于 2013-10-23T10:51:26.290 に答える