379_demos/lab2/demos/w2wc_short.c
2024-09-24 15:52:03 -06:00

40 lines
656 B
C

/*
* This code is identical to running
* w | wc -w
* in bash
*/
#include <stdio.h>
#include <unistd.h>
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);
}
}