ディレクトリ内のファイルを一つずつ読み出す機能
-
19-09-2019 - |
質問
私はそれが作成されるたびに、プロセスデータをディレクトリからファイルを読み込むと、ファイルを削除することになっているCでのSMTP送信者を実装しています。
どのように私はこれを自動的にやっておくべきこのポーリング機能を実装することができますか?
解決
簡単なオプションは、のcronするから定期的にあなたのプログラムを実行することです。このプログラムは、ディレクトリを反復処理するためにのreaddir のLinuxのAPI呼び出しを使用することができます。それは積極的にディレクトリを監視する必要はありません。
ここで簡単なコード例を示します:
#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);
}
免責事項:簡略化のため、私はエラーconditonsをチェックしたり、処理するコードが含まれていませんでした。
他のヒント
inotifyをするに見て、それはあなたのニーズに十分であろうかどうかを確認します。 inotifyのは、あなたのターゲットディレクトリ内のイベントを監視するために、単一のファイル記述子を使用することができます。あなたは(選択を使用してポーリングを回避することができます)と、あなたの処理を行うことができるように、すぐにディレクトリ内に作成したファイルを通知することがます。
この記事には、いくつかのサンプルコードが含まれています。私は、Webについて広め、他の例があると確信しています。
私はあなたの質問にそのプロセス間通信のための良いケースから何を得ることで。
あなたは、ディレクトリ内のファイルが作成されたときに通知する必要があると言います。さて、ファイルを介しプロセス間通信を行うことは、私の意見では悪いです。
Unixでは、あなたはこのガイド詳細。行くための最も簡単な方法でしょうの Unixソケットを使用しました。
あなたは今、あなたがソケットにそれを書くために、実装を変更することができ、プロセス間通信のためのファイルを作成し、他のプロセスを記述した場合。