mknod.c (856B)
1 /* See LICENSE file for copyright and license details. */ 2 #include <sys/stat.h> 3 #include <sys/sysmacros.h> 4 #include <sys/types.h> 5 6 #include <fcntl.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <string.h> 10 #include <unistd.h> 11 12 #include "util.h" 13 14 static void 15 usage(void) 16 { 17 eprintf("usage: %s [-m mode] name type major minor\n", argv0); 18 } 19 20 int 21 main(int argc, char *argv[]) 22 { 23 mode_t type, mode = 0644; 24 dev_t dev; 25 26 ARGBEGIN { 27 case 'm': 28 mode = estrtol(EARGF(usage()), 8); 29 break; 30 default: 31 usage(); 32 } ARGEND; 33 34 if (argc != 4) 35 usage(); 36 37 if (strlen(argv[1]) != 1 || !strchr("ucb", argv[1][0])) 38 eprintf("mknod: '%s': invalid type\n", argv[1]); 39 type = (argv[1][0] == 'b') ? S_IFBLK : S_IFCHR; 40 41 dev = makedev(estrtol(argv[2], 0), estrtol(argv[3], 0)); 42 43 if (mknod(argv[0], type|mode, dev) == -1) 44 eprintf("mknod: '%s':", argv[0]); 45 return 0; 46 }