| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <stdio.h> |
| #include <unistd.h> |
| #include <fcntl.h> |
| |
| #include <lib/fdio/watcher.h> |
| |
| zx_status_t callback(int dirfd, int event, const char* fn, void* cookie) { |
| const char* path = cookie; |
| |
| switch (event) { |
| case WATCH_EVENT_ADD_FILE: |
| fprintf(stderr, "watch: added '%s/%s'\n", path, fn); |
| break; |
| case WATCH_EVENT_REMOVE_FILE: |
| fprintf(stderr, "watch: removed '%s/%s'\n", path, fn); |
| break; |
| case WATCH_EVENT_IDLE: |
| fprintf(stderr, "watch: waiting...\n"); |
| break; |
| } |
| return ZX_OK; |
| } |
| |
| int main(int argc, char** argv) { |
| if (argc != 2) { |
| return -1; |
| } |
| |
| int fd; |
| if ((fd = open(argv[1], O_DIRECTORY | O_RDONLY)) < 0) { |
| fprintf(stderr, "cannot open directory '%s'\n", argv[1]); |
| } |
| |
| zx_status_t status; |
| if ((status = fdio_watch_directory(fd, callback, ZX_TIME_INFINITE, argv[1])) < 0) { |
| fprintf(stderr, "fdio watch directory failed: %d\n", status); |
| return -1; |
| } |
| |
| return 0; |
| } |