ref: de5a561819ef32c1db7c882bf3bfd769300f68d4
dir: /src/post.c/
#include <u.h> #include <libc.h> void usage(void) { fprint(2, "usage: %s [-q] [-m mode] file [name]\n", argv0); exits("usage"); } int openrw(char *n) { int fd; if((fd = open(n, ORDWR)) >= 0) return fd; if((fd = open(n, OREAD)) >= 0) return fd; if((fd = open(n, OWRITE)) >= 0) return fd; return -1; } void main(int argc, char *argv[]) { int mode = 0660, quiet = 0; int fd, srvfd; char name[256]; ARGBEGIN{ case 'm': mode = strtoul(EARGF(usage()), nil, 8); break; case 'q': quiet = 1; break; default: usage(); }ARGEND; if(argc == 0 || argc > 2) usage(); if(argc == 2) snprint(name, sizeof name, "/srv/%s", argv[1]); else snprint(name, sizeof name, "/srv/post.%d", getpid()); if((fd = openrw(argv[0])) == -1) sysfatal("open: %r"); if((srvfd = create(name, OWRITE, mode)) == -1) sysfatal("create: %r"); fprint(srvfd, "%d", fd); if(!quiet) print("%s\n", name); exits(nil); }