1 1.13 joerg /* $NetBSD: mkfifo.c,v 1.13 2011/09/04 20:30:34 joerg Exp $ */ 2 1.7 jtc 3 1.1 cgd /* 4 1.7 jtc * Copyright (c) 1990, 1993 5 1.7 jtc * The Regents of the University of California. All rights reserved. 6 1.1 cgd * 7 1.1 cgd * Redistribution and use in source and binary forms, with or without 8 1.1 cgd * modification, are permitted provided that the following conditions 9 1.1 cgd * are met: 10 1.1 cgd * 1. Redistributions of source code must retain the above copyright 11 1.1 cgd * notice, this list of conditions and the following disclaimer. 12 1.1 cgd * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 cgd * notice, this list of conditions and the following disclaimer in the 14 1.1 cgd * documentation and/or other materials provided with the distribution. 15 1.10 agc * 3. Neither the name of the University nor the names of its contributors 16 1.1 cgd * may be used to endorse or promote products derived from this software 17 1.1 cgd * without specific prior written permission. 18 1.1 cgd * 19 1.1 cgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 1.1 cgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 1.1 cgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 1.1 cgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 1.1 cgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 1.1 cgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 1.1 cgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 1.1 cgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 1.1 cgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 1.1 cgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 1.1 cgd * SUCH DAMAGE. 30 1.1 cgd */ 31 1.1 cgd 32 1.8 lukem #include <sys/cdefs.h> 33 1.1 cgd #ifndef lint 34 1.12 lukem __COPYRIGHT("@(#) Copyright (c) 1990, 1993\ 35 1.12 lukem The Regents of the University of California. All rights reserved."); 36 1.1 cgd #endif /* not lint */ 37 1.1 cgd 38 1.1 cgd #ifndef lint 39 1.7 jtc #if 0 40 1.7 jtc static char sccsid[] = "@(#)mkfifo.c 8.2 (Berkeley) 1/5/94"; 41 1.7 jtc #endif 42 1.13 joerg __RCSID("$NetBSD: mkfifo.c,v 1.13 2011/09/04 20:30:34 joerg Exp $"); 43 1.1 cgd #endif /* not lint */ 44 1.1 cgd 45 1.1 cgd #include <stdio.h> 46 1.2 jtc #include <stdlib.h> 47 1.1 cgd #include <string.h> 48 1.6 jtc #include <locale.h> 49 1.5 jtc #include <errno.h> 50 1.5 jtc #include <sys/types.h> 51 1.5 jtc #include <sys/stat.h> 52 1.5 jtc #include <unistd.h> 53 1.6 jtc #include <err.h> 54 1.1 cgd 55 1.13 joerg __dead static void usage(void); 56 1.2 jtc 57 1.4 jtc int 58 1.13 joerg main(int argc, char *argv[]) 59 1.1 cgd { 60 1.2 jtc int ch, exitval; 61 1.9 enami void *set; 62 1.2 jtc mode_t mode; 63 1.2 jtc 64 1.6 jtc setlocale (LC_ALL, ""); 65 1.6 jtc 66 1.2 jtc /* The default mode is the value of the bitwise inclusive or of 67 1.2 jtc S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTH, and S_IWOTH 68 1.2 jtc modified by the file creation mask */ 69 1.2 jtc mode = 0666 & ~umask(0); 70 1.1 cgd 71 1.6 jtc while ((ch = getopt(argc, argv, "m:")) != -1) 72 1.1 cgd switch(ch) { 73 1.2 jtc case 'm': 74 1.2 jtc if (!(set = setmode(optarg))) { 75 1.11 christos err(1, "Cannot set file mode `%s'", optarg); 76 1.6 jtc /* NOTREACHED */ 77 1.2 jtc } 78 1.2 jtc /* In symbolic mode strings, the + and - operators are 79 1.2 jtc interpreted relative to an assumed initial mode of 80 1.2 jtc a=rw. */ 81 1.9 enami mode = getmode(set, 0666); 82 1.9 enami free(set); 83 1.1 cgd break; 84 1.1 cgd case '?': 85 1.1 cgd default: 86 1.1 cgd usage(); 87 1.1 cgd } 88 1.7 jtc argc -= optind; 89 1.7 jtc argv += optind; 90 1.7 jtc if (argv[0] == NULL) 91 1.1 cgd usage(); 92 1.1 cgd 93 1.1 cgd for (exitval = 0; *argv; ++argv) { 94 1.2 jtc if (mkfifo(*argv, mode) < 0) { 95 1.6 jtc warn("%s", *argv); 96 1.2 jtc exitval = 1; 97 1.1 cgd } 98 1.1 cgd } 99 1.1 cgd exit(exitval); 100 1.1 cgd } 101 1.1 cgd 102 1.13 joerg static void 103 1.13 joerg usage(void) 104 1.1 cgd { 105 1.2 jtc (void)fprintf(stderr, "usage: mkfifo [-m mode] fifoname ...\n"); 106 1.1 cgd exit(1); 107 1.1 cgd } 108