1

ファイルが作成されるたびにディレクトリからファイルを読み取り、データを処理し、ファイルを削除することになっているCでSMTP送信者を実装しています。

これを自動的に実行し続ける必要があるこのポーリング機能を実装するにはどうすればよいですか?

4

2 に答える 2

5

簡単なオプションは、プログラムをcronから定期的に実行することです。このプログラムは、Linux API 呼び出しreaddirを使用して、ディレクトリを反復処理できます。ディレクトリを積極的に監視する必要はありません。

簡単なコード例を次に示します。

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main()
{
   DIR* dp = opendir(".");
   struct dirent* de;
   while (de = readdir(dp))
   { 
     if (de->d_type != DT_REG) // Only print regular files
        continue;
      printf("Found file %s\n", de->d_name);
   }
   closedir(dp);
}

免責事項: 簡単にするために、エラー条件をチェックまたは処理するためのコードは含めませんでした。

于 2009-11-11T13:40:12.607 に答える
3

inotifyを調べて、ニーズに十分かどうかを確認してください。inotify を使用すると、単一のファイル記述子を使用して、ターゲット ディレクトリ内のイベントを監視できます。select() を使用してポーリングを回避し、ディレクトリに作成されたファイルがあればすぐに通知を受けて、処理を行うことができます。

この記事には、いくつかのサンプル コードがあります。ウェブ上には他にも例が広がっていると思います。

于 2009-11-11T13:20:51.183 に答える