Как напечатать имя вновь созданного файла (ов) в каталоге в C? - PullRequest
0 голосов
/ 05 марта 2019

Этот код сканирует вновь созданные файлы в каталоге, однако, если "% s" должен содержать имя нового файла (ов), этого не происходит.

Я могу представить, что здесь написаны ненужные фрагменты кода, однако, будучи совершенно незнакомым с C, я просто рад, что он компилируется в этот момент (и фактически распознает новые файлы)!

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <sys/inotify.h>

int main (int argc, char *argv[])
{
        char target[FILENAME_MAX];
        int result;
        int fd;
        int wd; /* watch descriptor */
        const int event_size = sizeof(struct inotify_event);
        const int buf_len = 1024 * (event_size + FILENAME_MAX);

        fd = inotify_init();

        if (fd < 0) {
                perror("inotify_init");
        }

        wd = inotify_add_watch(fd, "/home/joe/Documents", IN_CREATE);

        while (1) {
                char buff[buf_len];
                int no_of_events, count = 0;

                no_of_events = read (fd, buff, buf_len);

                while (count < no_of_events) {
                        struct inotify_event *event = (struct inotify_event *)&buff[count];

                        if (event->len) {
                                if (event->mask & IN_CREATE)
                                        if(!(event->mask & IN_ISDIR)) {
                                                printf("The file %s has been created\n", target);
                                                fflush(stdout);
                                        }
                        }
                        count += event_size + event->len;
                }
        }

        return 0;
}

1 Ответ

1 голос
/ 05 марта 2019

Вы печатаете target при получении события, однако target никогда не изменяется.

Имя созданного файла хранится в event->name.Это то, что вы хотите напечатать.

printf("The file %s has been created\n", event->name);
...