-
Notifications
You must be signed in to change notification settings - Fork 0
/
12_Unnamed_Pipe_String_Reverse.c
71 lines (56 loc) · 1.39 KB
/
12_Unnamed_Pipe_String_Reverse.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Q. Create an unnamed pipe for inter-process communication.
// Accept a string input and then pass the data from child process
// to parent process to reverse it and again pass it back to
// child process to print it.
#include <stdio.h>
#include <unistd.h>
int main()
{
int f, fd[2], len = 0;
char data[50], buf[50];
printf("Enter the input string: ");
for (int i = 0; i < 6; i++)
{
scanf("%c", &data[i]);
}
pipe(fd);
f = fork();
// The creation of the process was unsuccessful
if (f < 0)
{
printf("Error occurred!\n");
}
// Child process
else if (f == 0)
{
printf("Child: Passing the data to Parent.\n");
write(fd[1], data, 6); // Send data to parent
sleep(5);
read(fd[0], data, 50); // Received reversed string from parent
printf("Child saying: %s.\n", data);
}
// Parent process
else
{
read(fd[0], buf, 50); // Received data from child
// String reverse
int i = 0, j = 6 - 1;
while (i < j)
{
char temp = buf[i];
buf[i++] = buf[j];
buf[j--] = temp;
}
write(fd[1], buf, sizeof(buf)); // Send the reversed string to child
printf("Parent: Passing the reversed string to child.\n");
}
}
/*
Output:
s4shibam@SHIBAM:~/OS$ gcc 12_Unnamed_Pipe_String_Reverse.c
s4shibam@SHIBAM:~/OS$ ./a.out
Enter the input string: qwerty
Child: Passing the data to Parent.
Parent: Passing the reversed string to child.
s4shibam@SHIBAM:~/OS$ Child saying: ytrewq.
*/