/* $NetBSD: not.c,v 1.1.1.2 2009/12/02 00:25:58 haad Exp $ */ #include <unistd.h> #include <stdio.h> #include <stdarg.h> #include <sys/types.h> #include <sys/wait.h> int main(int args, char **argv) { pid_t pid; int status; int FAILURE = 6; if (args < 2) { fprintf(stderr, "Need args\n"); return FAILURE; } pid = fork(); if (pid == -1) { fprintf(stderr, "Could not fork\n"); return FAILURE; } else if (pid == 0) { /* child */ execvp(argv[1], &argv[1]); /* should not be accessible */ return FAILURE; } else { /* parent */ waitpid(pid, &status, 0); if (!WIFEXITED(status)) { if (WIFSIGNALED(status)) fprintf(stderr, "Process %d died of signal %d.\n", pid, WTERMSIG(status)); /* did not exit correctly */ return FAILURE; } /* return the opposite */ return !WEXITSTATUS(status); } /* not accessible */ return FAILURE; } |