Certo dia, recebi um arquivo na lista freebsd-hackers, que funcionou muito bem; testei algumas vezes, funcionou OK, e tenho ele guardado na manga para caso alguem dia utilize; bem, chegou o dia: compile usando: gcc -o fwatch fwatch.c
fwatch.c ------------------------------------------------------------------------------------------------ /* * Copyright (c) 2003-2004 Daichi GOTO <[EMAIL PROTECTED]> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #include <sys/types.h> #include <sys/event.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <sysexits.h> #include <time.h> #define kevent_add(kq, ev) kevent((kq), (ev), 1, NULL, 0, NULL) #define kevent_poll(kq, ev) kevent((kq), NULL, 0, (ev), 1, NULL) static void usage(void); static void addwatchfile(int, int); static void watchfile(int); int main(int argc, char *argv[]) { int kq; int filedesc; int count; if (2 > argc) { usage(); exit(EX_USAGE); } kq = kqueue(); for (count = 1; count < argc; count++) { filedesc = open(argv[count], O_RDONLY); if (-1 == filedesc) { fprintf(stderr, "error: cannot open file: %d\n", errno); exit(EX_NOINPUT); } addwatchfile(kq, filedesc); } watchfile(kq); exit(EX_OK); } static void usage(void) { fprintf(stderr, "usage: fwatch files...\n"); } static void addwatchfile(int kq, int filedesc) { struct kevent event; EV_SET(&event, filedesc, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME, 0, 0); kevent_add(kq, &event); } static void watchfile(int kq) { struct kevent event; kevent_poll(kq, &event); } ------------------------------------------------------------------------------------------------ On 6/9/06, Pedro Henrique Morsch Mazzoni <[EMAIL PROTECTED]> wrote: > Olá pessoal, > > Estou procurando um modo de rodar um script sempre que um arquivo > determinado seja alterado. > Preciso de algo que não ocupe CPU ( loops :) ). Também não pode ser o FAM. > Alguma dica? > > Grato, > Pedro MAzzoni > ------------------------- > Histórico: http://www.fug.com.br/historico/html/freebsd/ > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd > ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd