1e66f31c5Sopenharmony_ci#include <stdio.h> 2e66f31c5Sopenharmony_ci#include <stdlib.h> 3e66f31c5Sopenharmony_ci 4e66f31c5Sopenharmony_ci#include <uv.h> 5e66f31c5Sopenharmony_ci 6e66f31c5Sopenharmony_ciuv_loop_t *loop; 7e66f31c5Sopenharmony_ciconst char *command; 8e66f31c5Sopenharmony_ci 9e66f31c5Sopenharmony_civoid run_command(uv_fs_event_t *handle, const char *filename, int events, int status) { 10e66f31c5Sopenharmony_ci char path[1024]; 11e66f31c5Sopenharmony_ci size_t size = 1023; 12e66f31c5Sopenharmony_ci // Does not handle error if path is longer than 1023. 13e66f31c5Sopenharmony_ci uv_fs_event_getpath(handle, path, &size); 14e66f31c5Sopenharmony_ci path[size] = '\0'; 15e66f31c5Sopenharmony_ci 16e66f31c5Sopenharmony_ci fprintf(stderr, "Change detected in %s: ", path); 17e66f31c5Sopenharmony_ci if (events & UV_RENAME) 18e66f31c5Sopenharmony_ci fprintf(stderr, "renamed"); 19e66f31c5Sopenharmony_ci if (events & UV_CHANGE) 20e66f31c5Sopenharmony_ci fprintf(stderr, "changed"); 21e66f31c5Sopenharmony_ci 22e66f31c5Sopenharmony_ci fprintf(stderr, " %s\n", filename ? filename : ""); 23e66f31c5Sopenharmony_ci system(command); 24e66f31c5Sopenharmony_ci} 25e66f31c5Sopenharmony_ci 26e66f31c5Sopenharmony_ciint main(int argc, char **argv) { 27e66f31c5Sopenharmony_ci if (argc <= 2) { 28e66f31c5Sopenharmony_ci fprintf(stderr, "Usage: %s <command> <file1> [file2 ...]\n", argv[0]); 29e66f31c5Sopenharmony_ci return 1; 30e66f31c5Sopenharmony_ci } 31e66f31c5Sopenharmony_ci 32e66f31c5Sopenharmony_ci loop = uv_default_loop(); 33e66f31c5Sopenharmony_ci command = argv[1]; 34e66f31c5Sopenharmony_ci 35e66f31c5Sopenharmony_ci while (argc-- > 2) { 36e66f31c5Sopenharmony_ci fprintf(stderr, "Adding watch on %s\n", argv[argc]); 37e66f31c5Sopenharmony_ci uv_fs_event_t *fs_event_req = malloc(sizeof(uv_fs_event_t)); 38e66f31c5Sopenharmony_ci uv_fs_event_init(loop, fs_event_req); 39e66f31c5Sopenharmony_ci // The recursive flag watches subdirectories too. 40e66f31c5Sopenharmony_ci uv_fs_event_start(fs_event_req, run_command, argv[argc], UV_FS_EVENT_RECURSIVE); 41e66f31c5Sopenharmony_ci } 42e66f31c5Sopenharmony_ci 43e66f31c5Sopenharmony_ci return uv_run(loop, UV_RUN_DEFAULT); 44e66f31c5Sopenharmony_ci} 45