/* * This code is identical to running * w | wc -w * in bash */ #include #include void child(int pfd[2]) { close(pfd[1]); dup2(pfd[0], STDIN_FILENO); close(pfd[0]); char cmd[] = "/usr/bin/wc"; char *args[] = {"wc", "-w", NULL}; execve(cmd, args, NULL); } void parent(int pfd[2]) { close(pfd[0]); dup2(pfd[1], STDOUT_FILENO); close(pfd[1]); char cmd[] = "/usr/bin/w"; char *args[] = {"wc", NULL}; execve(cmd, args, NULL); } int main (void) { int pfd[2]; pipe(pfd); int pid = fork(); if (pid == 0) { child(pfd); } else { parent(pfd); } }