Skip to content

Commit 595c841

Browse files
committed
this is the example of full duplex communication
1 parent 981339d commit 595c841

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

pipe004.c

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include<stdio.h>
2+
#include<unistd.h>
3+
4+
int main() {
5+
int pipefds1[2], pipefds2[2];
6+
int rs1, rs2;
7+
int pid;
8+
char pipe1writemessage[20] = "Welcome";
9+
char pipe2writemessage[20] = "Prakhar";
10+
char readmessage[20];
11+
rs1 = pipe(pipefds1);
12+
13+
if (rs1 == -1) {
14+
printf("Unable to create pipe 1 \n");
15+
return 1;
16+
}
17+
rs2 = pipe(pipefds2);
18+
19+
if (rs2 == -1) {
20+
printf("Unable to create pipe 2 \n");
21+
return 1;
22+
}
23+
pid = fork();
24+
25+
if (pid != 0) // Parent process
26+
{
27+
close(pipefds1[0]); // Close the unwanted pipe1 read side
28+
close(pipefds2[1]); // Close the unwanted pipe2 write side
29+
printf("Parent: Write pipe 1 – %s\n", pipe1writemessage);
30+
write(pipefds1[1], pipe1writemessage, sizeof(pipe1writemessage));
31+
read(pipefds2[0], readmessage, sizeof(readmessage));
32+
printf("Parent: Read pipe 2 – %s\n", readmessage);
33+
} else { //child process
34+
close(pipefds1[1]); // Close the unwanted pipe1 write side
35+
close(pipefds2[0]); // Close the unwanted pipe2 read side
36+
read(pipefds1[0], readmessage, sizeof(readmessage));
37+
printf("Child: Read pipe 1 – %s\n", readmessage);
38+
printf("Child: Write pipe 2 – %s\n", pipe2writemessage);
39+
write(pipefds2[1], pipe2writemessage, sizeof(pipe2writemessage));
40+
}
41+
return 0;
42+
}

0 commit comments

Comments
 (0)