blob: 71ed712b2deae30010147c374efd8bf91675607b [file] [log] [blame]
#include <sched.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <parlib/vcore.h>
void child_handler(int readfd, int writefd)
{
char c;
read(readfd, &c, 1);
close(readfd);
printf("Child read from pipe0\n");
printf("Child writing to pipe1\n");
write(writefd, "", 1);
close(writefd);
exit(0);
}
void parent_handler(int readfd, int writefd)
{
/* Force the child to run first. */
for (int i = 0; i < 10; i++)
sched_yield();
char c;
printf("Parent writing to pipe0\n");
write(writefd, "", 1);
close(writefd);
read(readfd, &c, 1);
close(readfd);
printf("Parent read from pipe1\n");
exit(0);
}
int main(int argc, char **argv)
{
int pipe0[2];
int pipe1[2];
pipe(pipe0);
pipe(pipe1);
pid_t child = fork();
if (child == 0) {
close(pipe0[1]);
close(pipe1[0]);
child_handler(pipe0[0], pipe1[1]);
} else {
close(pipe0[0]);
close(pipe1[1]);
parent_handler(pipe1[0], pipe0[1]);
}
return 0;
}