Как создать поток поверх inotify - я должен? - PullRequest
1 голос
/ 26 января 2012

У меня есть следующий код, который контролирует папку.

Я наблюдаю за папкой.Нужно ли создавать поток, если к этой папке обращаются постоянно?Также я хотел бы спросить, как я могу создать непрерывно работающий процесс над этим кодом?Мне бы хотелось, чтобы он работал в процессе запуска файлов (cpu - верхняя часть командной строки).

Нужна помощь.Цени !!

Вот код:

/*

Simple example for inotify in Linux.

*/

#include <sys/inotify.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
    int fd,wd,wd1,i=0,len=0;
    char pathname[100],buf[1024];
    struct inotify_event *event;

    fd=inotify_init1(IN_NONBLOCK);
    /* watch /test directory for any activity and report it back to me */

    wd=inotify_add_watch(fd,"/home/folder",IN_ALL_EVENTS`);

    while(1){
        //read 1024  bytes of events from fd into buf
        i=0;
        len=read(fd,buf,1024);

        while(i<len)
         {
            event=(struct inotify_event *) &buf[i];


            /* check for changes */
            if(event->mask & IN_OPEN)
             {   printf("\n %s :was opened\n",event->name);
                char*path="/home/folder/";
                char*file=event->name;
                int n=sizeof(path)+sizeof(file);
                char *result=(char *)malloc(512);
                strcpy(result,path); // copy string one into the result.
                strcat(result,file); // append string two to the result
                puts (result);

                int pp=sizeof(result);
                char *run="/home/test/./userr ";
                int l=sizeof(run);

                char *cmd=(char *)malloc(1000);
                strcpy(cmd,run);
                strcat(cmd,result);
                puts (cmd);


        }
            if(event->mask & IN_MODIFY)
                  printf("%s : modified\n",event->name);

            if(event->mask & IN_ATTRIB)
                  printf("%s :meta data changed\n",event->name);

            if(event->mask & IN_ACCESS)
                  printf("%s :was read\n",event->name);

            if(event->mask & IN_CLOSE_WRITE)
                  printf("%s :file opened for writing was closed\n",event->name);

            /* update index to start of next event */
            i+=sizeof(struct inotify_event)+event->len;
        }

    }

}

Не могли бы вы опубликовать мой код изменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...