diff options
author | Matthew Strapp <msattr@gmail.com> | 2020-10-19 07:55:41 -0500 |
---|---|---|
committer | Matthew Strapp <msattr@gmail.com> | 2020-10-19 07:55:41 -0500 |
commit | 89ba57eb2b9e024996da29ba5e429adf15b27a6d (patch) | |
tree | 2edbdec54f9316c0110cab2aeaa599ce1dc14dee /csci4061/101920_breakout/pipe_template.c | |
parent | add new breakout (diff) | |
download | homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.tar homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.tar.gz homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.tar.bz2 homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.tar.lz homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.tar.xz homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.tar.zst homework-89ba57eb2b9e024996da29ba5e429adf15b27a6d.zip |
add breakouts
Diffstat (limited to 'csci4061/101920_breakout/pipe_template.c')
-rw-r--r-- | csci4061/101920_breakout/pipe_template.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/csci4061/101920_breakout/pipe_template.c b/csci4061/101920_breakout/pipe_template.c new file mode 100644 index 0000000..bb59d8d --- /dev/null +++ b/csci4061/101920_breakout/pipe_template.c @@ -0,0 +1,72 @@ +// ----------------------------------------------------------------------------- +// Pipes +// +// Write a program that creates a child process and pipes the string +// "hello child" to the child to be printed. The parent should wait for the +// child to terminate +// +// Template: Implement the TODOs +// +// Expected output: +// Parent Sending: hello child +// Child Received: hello child +// ----------------------------------------------------------------------------- + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/wait.h> +#include <unistd.h> + +int main(void) { + // Open pipe + // TODO + int ends[2]; + pipe(ends); + + char string_to_send[] = "hello child"; + int bytes_to_send_recv = strlen(string_to_send) + 1; + + // Create child process + pid_t pid = fork(); + if (pid < 0) { + // Error + fprintf(stderr, "ERROR: Failed to fork\n"); + } + else if (pid > 0) { + // Parent + printf("Parent Sending: %s\n", string_to_send); + + // Parent doesn't need read file descriptor + // TODO + close(ends[0]); + // Write the string to the pipe + // TODO + write(ends[1], string_to_send, bytes_to_send_recv); + // Done writing + // TODO + close(ends[1]); + // Wait for child to terminate + wait(NULL); + } + else { + // Child + + char *recv_buffer = malloc(bytes_to_send_recv); + + // Child doesn't need write file descriptor + // TODO + close(ends[1]); + // Read the string from the pipe + // TODO + read(ends[0], recv_buffer, bytes_to_send_recv); + // Done reading + // TODO + close(ends[0]); + // Print result + printf("Child Received: %s\n", recv_buffer); + free(recv_buffer); + } + + return 0; +} |