通知get目录
inotify get directory
我想监视某些目录中新文件的创建,并阅读有关inotify的链接。我喜欢这个实现并使用了它。然而,在我的例子中,我想监视一个目录,它有多达3级的子目录。
我的想法是在每次创建新目录时添加一个watch,但为了做到这一点,我需要知道创建目录的路径。不幸的是,inotify
的事件结构只能给我创建的文件目录的名称,而不能给它的路径。有人能给点建议吗?
add_watch(fd,root);
if ( event->mask & IN_CREATE) {
if (event->mask & IN_ISDIR){
printf("%d DIR::%s CREATEDn", event->wd,event->name );
strcpy(new_dir,root);
strcat(new_dir,"/");
strcat(new_dir,event->name);
add_watch(fd,new_dir);
where add_watch is:
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);
这对于根目录来说是可以的,一级子目录也会被监视,但是当我试图向二级子目录添加监视时,路径不正确。
用c++编写netbeans7.2,ubuntu12.
我在Github上有一个支持inotify目录创建/删除事件的工作示例。一个小的Watch类负责将wd (Watch描述符)映射到文件/文件夹名。下面的代码片段展示了如何处理inotify CREATE和DELETE事件。完整的示例在Github上。
if ( event->mask & IN_CREATE ) {
current_dir = watch.get(event->wd);
if ( event->mask & IN_ISDIR ) {
new_dir = current_dir + "/" + event->name;
wd = inotify_add_watch( fd, new_dir.c_str(), WATCH_FLAGS );
watch.insert( event->wd, event->name, wd );
total_dir_events++;
printf( "New directory %s created.n", new_dir.c_str() );
} else {
total_file_events++;
printf( "New file %s/%s created.n", current_dir.c_str(), event->name );
}
} else if ( event->mask & IN_DELETE ) {
if ( event->mask & IN_ISDIR ) {
new_dir = watch.erase( event->wd, event->name, &wd );
inotify_rm_watch( fd, wd );
total_dir_events--;
printf( "Directory %s deleted.n", new_dir.c_str() );
} else {
current_dir = watch.get(event->wd);
total_file_events--;
printf( "File %s/%s deleted.n", current_dir.c_str(), event->name );
}
}
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Cpp-Tuple使用带有变量的get
- 如何在c++中打印目录
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- C++将目录中的所有文件与::filesystem进行比较
- 在C++中使用LZ4压缩目录
- visual c++,如何获取解决方案目录中的代码
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何在文档文件夹中创建目录
- g++编译包含的头:没有这样的文件或目录
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- cmake:添加要搜索头文件的目录
- 通过 get-Method 访问变量在类外不起作用
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 通知get目录
- 解析get中的cpp文件时筛选目录包含在python绑定/clang中