一部のディレクトリでの新しいファイルの作成を監視し、inotifyに関するこのリンクを読みたいです。私は実装が好きで、それを使用しました。ただし、私の場合、レベル 3 までのサブディレクトリを持つディレクトリを監視したいと考えています。
私の考えでは、新しいディレクトリが作成されるたびに監視を追加することですが、これを行うには、作成されたディレクトリのパスを知る必要があります。残念ながら、 のイベント構造体からinotify
は、作成されたファイル ディレクトリの名前しかわかりません。パスはわかりません。誰かがこれについてのアイデアを提案できますか?
add_watch(fd,root);
if ( event->mask & IN_CREATE) {
if (event->mask & IN_ISDIR){
printf("%d DIR::%s CREATED\n", event->wd,event->name );
strcpy(new_dir,root);
strcat(new_dir,"/");
strcat(new_dir,event->name);
add_watch(fd,new_dir);
add_watch は次のとおりです。
void add_watch(int fd, char *root)
{
int wd;
struct dirent *entry;
DIR *dp;
dp = opendir(root);
if (dp == NULL)
{
perror("Error opening the starting directory");
exit(0);
}
/* add watch to starting directory */
wd = inotify_add_watch(fd, root, IN_CREATE | IN_MODIFY | IN_MOVED_TO);
これはルート ディレクトリでは問題ありません。レベル 1 のサブディレクトリも監視されますが、レベル 2 のサブディレクトリに監視を追加しようとすると、パスが正しくありません。
netbeans7.2、ubuntu12 で c++ で書いています。