fsfreeze.c - ubase - suckless linux base utils
 (HTM) git clone git://git.suckless.org/ubase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       fsfreeze.c (899B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <sys/ioctl.h>
            3 #include <sys/stat.h>
            4 #include <sys/types.h>
            5 
            6 #include <fcntl.h>
            7 #include <stdio.h>
            8 #include <stdlib.h>
            9 #include <unistd.h>
           10 
           11 #include "util.h"
           12 
           13 #define FIFREEZE        _IOWR('X', 119, int)        /* Freeze */
           14 #define FITHAW                _IOWR('X', 120, int)        /* Thaw */
           15 
           16 static void
           17 usage(void)
           18 {
           19         eprintf("usage: %s (-f | -u) mountpoint\n", argv0);
           20 }
           21 
           22 int
           23 main(int argc, char *argv[])
           24 {
           25         int fflag = 0;
           26         int uflag = 0;
           27         long p = 1;
           28         int fd;
           29 
           30         ARGBEGIN {
           31         case 'f':
           32                 fflag = 1;
           33                 break;
           34         case 'u':
           35                 uflag = 1;
           36                 break;
           37         default:
           38                 usage();
           39         } ARGEND;
           40 
           41         if (argc != 1)
           42                 usage();
           43 
           44         if ((fflag ^ uflag) == 0)
           45                 usage();
           46 
           47         fd = open(argv[0], O_RDONLY);
           48         if (fd < 0)
           49                 eprintf("open: %s:", argv[0]);
           50         if (ioctl(fd, fflag == 1 ? FIFREEZE : FITHAW, &p) < 0)
           51                 eprintf("%s %s:", fflag == 1 ? "FIFREEZE" : "FITHAW", argv[0]);
           52         close(fd);
           53         return 0;
           54 }