0

inotify()を使用してディレクトリ DIR を監視するコードを作成し、ファイルが DIR に移動すると、そのファイルの .txt 出力を取得します (ネットワーク インターフェイスのフローを含む nfcapd ファイル)。これは 5 分ごとに発生します。

その後、独自のプリプロセッサを記述して Snort を拡張できる Snort の DPX スターター キットを使用しました。このプリプロセッサは、他のすべてのプリプロセッサと同様に、新しいパケットが利用可能になるたびに実行される関数にすぎません。私の問題は、新しいファイルが以前のコードからエクスポートされたときに(5分ごとに)、プリプロセッサの関数内でそのファイルを読み取ることです。

それで、時間を取得して、それが目的の時間である場合にのみ実行する方法はありますか?

if (time is 15:36){
    func(output.txt);}

私はcで書いています。

ありがとう

4

2 に答える 2

1

を使用しているためinotify、環境が POSIX シグナルをサポートしていると想定しています。

を使用alarm()して、所定の時間が経過した後にシグナルを発生させ、適切なシグナル ハンドラーに必要な作業を実行させることができます。あなたのコードで非常に醜い無限ループになると私が思うことを避けるでしょう。

したがって、あなたの場合、関数処理SIGALRMはそれが何時だったかを心配する必要はなく、入力されたという事実によって所定の時間が経過したことがわかります。ただし、関数が何をすべきかを知るためにアクセスできるコンテキストを提供する必要があります。コードを見ずに方法を提案するのは難しいです。

あなたがこれで正しい道を進んでいるかどうかは完全にalarm()はわかりませんが、あなたが説明したことを考えると、使用するのがおそらく最も健全なアプローチになるでしょう。

于 2013-02-10T15:17:27.913 に答える
1

次のようなことができます。

#include <time.h>
...

time_t t = time(NULL); //obtain current time in seconds
struct tm broken_time;
localtime_r(&t, &broken_time); // split time into fields

if(broken_time.tm_hour == 15 && broken_time.tm_min == 36) { //perform the check
    func(output.txt);
}
于 2013-02-10T15:05:35.147 に答える