// writer1 - send messages to a FIFO #include "yadda.h" int main(int argc, char *argv[]) { char *fname, *message; int fd, exit_status = 0; size_t len; ssize_t amount; if (argc != 3) { fputs("Usage: writer1 fifo-name message\n", stderr); exit(1); } fname = argv[1]; message = argv[2]; if ((len = strlen(message)) > MSG_MAX) { warnx("message is too long, truncating"); len = MSG_MAX; exit_status = 2; } #ifdef __OpenBSD__ if (pledge("dpath stdio rpath wpath unveil", NULL) == -1) err(1, "pledge"); if (unveil(fname, "cw") == -1) err(1, "unveil"); if (unveil(NULL, NULL) == -1) err(1, "unveil"); #endif if (mkfifo(fname, 0600) == -1 && errno != EEXIST) err(1, "mkfifo '%s'", fname); fd = open(fname, O_WRONLY | O_NDELAY); // whoops, there is no reader if (fd == -1) err(1, "open '%s'", fname); if ((amount = write(fd, message, len)) == -1) err(1, "write"); if ((size_t) amount != len) { warnx("incomplete write (%ld,%lu)", amount, len); exit_status = 2; } exit(exit_status); }