busybox/coreutils/fsync.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * Mini fsync implementation for busybox
   4 *
   5 * Copyright (C) 2008 Nokia Corporation. All rights reserved.
   6 *
   7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
   8 */
   9
  10//usage:#define fsync_trivial_usage
  11//usage:       "[-d] FILE..."
  12//usage:#define fsync_full_usage "\n\n"
  13//usage:       "Write files' buffered blocks to disk\n"
  14//usage:     "\n        -d      Avoid syncing metadata"
  15
  16#include "libbb.h"
  17#ifndef O_NOATIME
  18# define O_NOATIME 0
  19#endif
  20
  21/* This is a NOFORK applet. Be very careful! */
  22
  23int fsync_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  24int fsync_main(int argc UNUSED_PARAM, char **argv)
  25{
  26        int status;
  27        int opts;
  28
  29        opts = getopt32(argv, "d"); /* fdatasync */
  30        argv += optind;
  31        if (!*argv) {
  32                bb_show_usage();
  33        }
  34
  35        status = EXIT_SUCCESS;
  36        do {
  37                int fd = open_or_warn(*argv, O_NOATIME | O_NOCTTY | O_RDONLY);
  38
  39                if (fd == -1) {
  40                        status = EXIT_FAILURE;
  41                        continue;
  42                }
  43                if ((opts ? fdatasync(fd) : fsync(fd))) {
  44                        //status = EXIT_FAILURE; - do we want this?
  45                        bb_simple_perror_msg(*argv);
  46                }
  47                close(fd);
  48        } while (*++argv);
  49
  50        return status;
  51}
  52