LINUX.ORG.RU

не работает inotify watch

 ,


0

1

код такой.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/inotify.h>
#define BUF_LEN 128


int main ( int argc, char *argv[] )
{
	int passwd;

	if ( ( passwd = inotify_init1 ( 0 ) ) == -1 ){
		perror ( "inotify_init" );
		exit ( EXIT_FAILURE );
	}


	/* добавить стражей */
	int ret;
	ret = inotify_add_watch ( passwd, "/etc/shadow", IN_ALL_EVENTS );
	if ( ret == -1 ){ perror ( "passwd" ); }

	ssize_t len, i = 0;
	char buf[ BUF_LEN ] __attribute__((aligned(4)));

	while ( 1 ) {
		i = 0;
		len = read ( passwd, buf, BUF_LEN );

		while ( i < len ) {
			struct inotify_event *event = (struct inotify_event *) &buf[i];
			printf ("пароль");

			i += sizeof ( struct inotify_event ) + event->len;
		}
	}
}

УМВР. Твой код ужасен, вот исправленная версия.

#include <stdio.h>
#include <unistd.h>
#include <sys/inotify.h>
#include <errno.h>
#include <error.h>

int
main(int argc, char *argv[])
{
	int passwd = inotify_init1(0);
	if (passwd == -1) error(1, errno, "inotify_init1");

	int ret = inotify_add_watch(passwd, "/etc/shadow", IN_ALL_EVENTS);
	if (ret == -1) error(1, errno, "inotify_add_watch");

	char buf[128];
	int len, i;

	for (;;) {
		i = 0;
		len = read(passwd, buf, sizeof(buf));
		if (len == -1) error(1, errno, "read");

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

			i += sizeof(struct inotify_event) + event->len;
		}
	}
}
# ./a.out & cat /etc/shadow > /dev/null
[1] 18550
got here
got here
got here
#

BIGWELLD ()