Программа для модификации файловой системы Mac OSX. Ошибка: & quot; регистр kevent: неверный дескриптор файла & quot;

Я пишу программу для мониторинга, когда файлы записываются в файловую систему Mac OSX с использованием C ++. Я вызываю fsevents напрямую, чтобы получить PID процесса, который записал файл в файловую систему.

Когда я запускаю программу под своим именем пользователя, я получаю сообщение об ошибке «kevent register: Bad file descriptor», относящееся к строке 43 моей программы. Если я запускаю его как sudo, программа запускается без ошибок, но никогда не получает уведомления о записанных файлах. Я проверяю это, выпуская: echo "blah" >> /tmp/1234,

Код:

#include "fcntl.h"      //for O_RDONLY
#include "errno.h"      //for errno
#include "stdio.h"    //for fprintf()
#include "string.h"     //for strerror()
#include "stdlib.h"     //for EXIT_SUCCESS
#include "sys/event.h"  //for kqueue() & more
#include "unistd.h"     //for close()
#include <err.h>
#include <sys/ioctl.h>  //for iotcl control working with fsevents

int main(int argc, char *argv[])
{
printf("Exectuted");

struct kevent kev_set;  /* Event we want to monitor */
struct kevent kev_retr; /* Event triggered */
int kq, fd, ret;

// directory to monitor, NO checks for errors here
fd = open ("/dev/fsevents", O_RDONLY);

//if (ioctl(fd, TIOCMGET, &status) >= 0)
//    err(EXIT_FAILURE, "TIOCMGET failed:");

kq = kqueue();
if (kq  == -1)
err(EXIT_FAILURE, "kqueue() failed");

/* Initialize kevent structure. */
EV_SET(&kev_set, fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, NOTE_WRITE, 0, NULL);

/* Attach event to the  kqueue. */
ret = kevent(kq, &kev_set, 1, NULL, 0, NULL);
if (ret == -1)
err(EXIT_FAILURE, "kevent register");

for (;;) {
/* Sleep until something happens */
printf("Starting loop\n");
ret = kevent(kq, NULL, 0, &kev_retr, 1, NULL);
if (ret == -1)
{
err(EXIT_FAILURE, "kevent wait");
}
else if (ret > 0) {
printf("Something was written: ");
}
}

close(fd);

}

Выход:

$ ./fsmon-test
fsmon-test: kevent register: Bad file descriptor

Заранее спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]