-
Notifications
You must be signed in to change notification settings - Fork 768
Pipe: Review Questions
Lawrence Angrave edited this page Nov 27, 2015
·
8 revisions
Question numbers subject to change
Fill in the blanks to make the following program print 123456789. If cat
is given no arguments it simply prints its input until EOF. Bonus: Explain why the close
call below is necessary.
int main() {
int i = 0;
while(++i < 10) {
pid_t pid = fork();
if(pid == 0) { /* child */
char buffer[16];
sprintf(buffer, ______,i);
int fds[ ______];
pipe( fds);
write( fds[1], ______,______ ); // Write the buffer into the pipe
close( ______ );
dup2( fds[0], ______);
execlp( "cat", "cat", ______ );
perror("exec"); exit(1);
}
waitpid(pid, NULL, 0);
}
return 0;
}
## Q2
Use POSIX calls `fork` `pipe` `dup2` and `close` to implement an autograding program. Capture the standardoutput of a child process into a pipe. The child process should `exec` the program `./test` with no additional arguments (other than the process name). In the parent process read from the pipe: Exit the parent process as soon as the captured output contains the ! character. Before exiting the parent process send SIGKILL to the child process. Exit 0 if the output contained a !. Otherwise if the child process exits causing the pipe write end to be closed, then exit with a value of 1. Be sure to close the unused ends of the pipe in the parent and child process
## Q3 (Advanced)
This advanced challenge uses pipes to get an "AI player" to play itself until the game is complete.
The program `tictactoe` accepts a line of input - the sequence of turns made so far, prints the same sequence followed by another turn, and then exits. A turn is specified using two characters. For example "A1" and "C3" are two opposite corner positions. The string `B2A1A3` is a game of 3 turns/plys. A valid response is `B2A1A3C1` (the C1 response blocks the diagonal B2 A3 threat). The output line may also include a suffix `-I win` `-You win` `-invalid` or `-draw`
Use pipes to control the input and output of each child process created. When the output contains a `-`, print the final output line (the entire game sequence and the result) and exit.
Legal and Licensing information: Unless otherwise specified, submitted content to the wiki must be original work (including text, java code, and media) and you provide this material under a Creative Commons License. If you are not the copyright holder, please give proper attribution and credit to existing content and ensure that you have license to include the materials.