Skip to content
Snippets Groups Projects
Commit 1659e22a authored by Marc Feger's avatar Marc Feger
Browse files

Fork and Pipe QSum example

parent 9cd458dc
Branches master
No related tags found
No related merge requests found
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
int main(int argc, char *argv[]){
pid_t pid;
char data[80];
int rb;
int pipe_ends[2]; // 0 read, 1 write
int status = 1;
pipe(pipe_ends);
pid = fork();
if(pid == (pid_t)0){
printf("Child: %d\n", getpid());
int qsum = 0;
close(pipe_ends[0]); // want to write
for(int i = 0; i < strlen(argv[1]); i++){
qsum += (int)(argv[1][i] - '0');
}
sprintf(data, "%d", qsum);
write(pipe_ends[1], data, strlen(data));
close(pipe_ends[1]);
sleep(5);
exit(0);
}else{
printf("Parent: %d\n", getpid());
waitpid(pid, &status, 0);
close(pipe_ends[1]);
int rd = read(pipe_ends[0], data, 79);
data[rd] = '\0';
close(pipe_ends[0]);
printf("Done with status: %d\nqsum: %s\n", status, data);
}
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment