#include #include #include #include #include #include #include #include #include int debug = 0; #define DEBUG(x) if (debug) fprintf x ; static inline pid_t Fork(void) { pid_t pid; if ((pid=fork()) < 0) { perror("Fork: "); exit(1); } return pid; } static inline int Execl(const char *path, const char *arg0, ...) { int rc; if ((rc=execl(path,arg0,0)) < 0) { perror("Execl: "); exit(1); } return rc; } static inline int Execvp(const char *path, char * const argv[]) { int rc; if ((rc=execvp(path,argv)) < 0) { perror("Execvp: "); exit(1); } return rc; } static inline pid_t Wait(int *status) { pid_t pid; if ((pid=wait(status)) < 0) { perror("Wait: "); exit(1); } return pid; } static inline pid_t Waitpid(pid_t pid, int *status, int options) { pid_t ret; if ((ret=waitpid(pid,status,options)) < 0) { perror("Waitpid: "); exit(1); } return ret; } static inline int Read(int fd, char *buf, size_t n) { int rc = read(fd, buf, n); if (rc < 0) { DEBUG( (stderr, "pid %d, Read: n = %d, but rc = %d\b", getpid(), n, rc) ); exit(1); } return rc; } static inline int Write(int fd, char *buf, size_t n) { int rc = write(fd, buf, n); if (rc < 0) { DEBUG( (stderr, "pid %d, Read: n = %d, but rc = %d\b", getpid(), n, rc) ); exit(1); } return rc; } static inline int Pipe(int fd[]) { int rc = pipe(fd); if (rc < 0) { perror("Pipe: "); exit(1); } return rc; } static inline int Dup2(int oldfd, int newfd) { int rc = dup2(oldfd, newfd); if (rc < 0) { perror("Dup2: "); exit(1); } return rc; }