私の問題は、inotifyを使用して複数のディレクトリを監視し、read()関数を使用して変更を読み取ることです。私のポイントは、read()関数が現在監視されているディレクトリに何かが起こるまでプログラムを停止するため、このすべてのディレクトリを「同時に」(「for」ループ)監視できないということです。
簡略化された「メイン」コードがあります。
while (1){
for(int i = 0; i < numberOfDirectories; i++){
string fileEnd = get_event(fd[i], catalogs[i]).c_str());
if(string != "") do some code;
}
sleep(1);
}
get_eventが変更されたファイルへのパスを返す場合、fd [i]はinotifyのインスタンスであり、catalogs[i]には監視対象ディレクトリの名前が含まれます。
そして、get_evenfuncのコードがいくつかあります。
#define BUFF_SIZE ((sizeof(struct inotify_event)+FILENAME_MAX)*1024)
string get_event(int fd, string target)
{
ssize_t len;
char buff[BUFF_SIZE] = {0};
len = read (fd, buff, BUFF_SIZE);
この時点で、メインの「for」ループは動作を停止し、最初のディレクトリで何かが発生するまで待ちます。変更を待つのではなく、監視対象ディレクトリに変更があるかどうかを確認したいだけです。
ヘルプ:<