我正在尝试编写一个检查目录中文件的程序。创建新文件时,我必须检查它是否可执行,如果是,我必须执行它。
我正在使用 inotify 接口,它运行良好,但是当我尝试使用 stat(2) 检查文件是否可执行时遇到了一些问题。我发现我没有执行它的权限。
将我要检查的目录的绝对路径传递给程序是否会产生权限问题?
int main(int argc,char * argv []){
int fd,wd,len,i=0;
char buffer [EVENT_SIZE_BUF];
if(argc != 2)
usage();
if((fd = inotify_init()) == -1)
perror("inotify_init()");
if((wd = inotify_add_watch(fd,argv[1],IN_CREATE) -1))
perror("inotify_add_watch()");
while(1){
if((len = read(fd,buffer,EVENT_SIZE_BUF)) < 0)
perror("read()");
struct inotify_event * ev = (struct inotify_event *)&buffer;
if(ev->len > 0){
if(ev->mask & IN_CREATE && ((ev-> mask & IN_ISDIR) == 0x00)){
printf("SPY; new file is created %s\n",ev->name);
char * path = strcat(argv[1],ev->name);
printf("%s\n",path);
struct stat sb;
if(!stat(path,&sb)){
printf( (S_ISDIR(sb.st_mode)) ? "d" : "-");
printf( (sb.st_mode & S_IRUSR) ? "r" : "-");
printf( (sb.st_mode & S_IWUSR) ? "w" : "-");
printf( (sb.st_mode & S_IXUSR) ? "x" : "-");
printf( (sb.st_mode & S_IRGRP) ? "r" : "-");
printf( (sb.st_mode & S_IWGRP) ? "w" : "-");
printf( (sb.st_mode & S_IXGRP) ? "x" : "-");
printf( (sb.st_mode & S_IROTH) ? "r" : "-");
printf( (sb.st_mode & S_IWOTH) ? "w" : "-");
printf( (sb.st_mode & S_IXOTH) ? "x" : "-");
fflush(stdout);
printf("\n");
}
}else{ printf("dir\n"); }
}
}
inotify_rm_watch(fd,wd);
close(fd);
return 0;
}