0% found this document useful (0 votes)
296 views4 pages

C Pipe Programming in Ubuntu

1) The document discusses implementing pipes for inter-process communication in Ubuntu. Pipes allow processes to share information by connecting the standard output of one process to the standard input of another. 2) It provides code for a C program that creates a pipe and uses it to transmit messages between a parent and child process. 3) Another code sample shows using multiple pipes to split a string between processes, then transmit the halves to additional processes to check if the string is a palindrome. This demonstrates inter-process communication.

Uploaded by

ridhu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
296 views4 pages

C Pipe Programming in Ubuntu

1) The document discusses implementing pipes for inter-process communication in Ubuntu. Pipes allow processes to share information by connecting the standard output of one process to the standard input of another. 2) It provides code for a C program that creates a pipe and uses it to transmit messages between a parent and child process. 3) Another code sample shows using multiple pipes to split a string between processes, then transmit the halves to additional processes to check if the string is a palindrome. This demonstrates inter-process communication.

Uploaded by

ridhu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Practical 3

Aim : (a) Write a program in C to implement pipe in Ubuntu.


(b) Write a program to do inter process communication using Pipe.

Hardware / Software Required : Oracle Virtual Machine, Ubuntu.iso file


Theory :
Pipes
Pipes are used to allow one or more processes to have information flow between them. The most common
example of this is with the shell.
$ ls | wc l
As weve seen the std-out from the left side (ls) is connected to the std-in on the right side (wc -l).As far the
each program is concerned, it is reading or writing as it normally does. Both processes are running
concurrently.
There are 2 types of pipes:
1)unnamed pipes 2)named pipes
The examples we seen at the shell command line are unnamed. They are created, used and destroyed within
the life a set of processes. Each end of the pipe has its own file descriptor. One end is for reading and one end
is for writing. When you are done with a pipe, it is closed like any other file.
Named pipes (fifo) have three advantages:

You don't have to start the reading/writing processes at the same time.

You can have multiple readers/writers which do not need common ancestry.

As a file you can control ownership and permissions.

Program :
(a) Program in C to implement pipe in Ubuntu
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define MSGLEN 64
int main()
{ int

fd[2];

int

result;

pid_t pid;

//Creating a pipe
exit (1);
}

result = pipe (fd);

if (result < 0) {

//failure in creating a pipe

//Creating a child process pid = fork(); if (pid < 0) {


//failure in creating a child
perror
("fork");
exit(2);
}
if (pid == 0) {
//Child process
char message[MSGLEN];
while(1) {
//Clearing the message
memset (message, 0,
sizeof(message));
printf ("Enter a message: ");
scanf ("%s",message);
//Writing message to the pipe
write(fd[1], message, strlen(message));
}

exit (0);

}
else {

//Parent Process

char message[MSGLEN];

perror("pipe");

while (1) {
//Clearing the message buffer
memset (message, 0, sizeof(message));
//Reading message from the pipe
message, sizeof(message));

read (fd[0],

printf("Message entered %s\n",message);


}
exit(0);
}}
(b) Program to do inter process communication using Pipe.
#include<stdio.h>
#include<unistd.h>
#include<string.h>
main() { int p1[2],p2[2],p3[2],p4[2]; int i,j=0,k=0,l=0;
char r[10],s[10],t[10],u[10]; printf("\t PROCESS 1.ENTER THE
STRING"); scanf("%s",r); pipe(p1); pipe(p2);
write(p1[1],r,sizeof(r)); write(p2[1],r,sizeof(r)); int a=fork();
if(a==0) {
printf("\n\t PROCESS 2:it splits the given string\n");
read(p1[0],r,sizeof(r)); int n=strlen(r);
for(i=0;i<n/2;i++)
{

s[i]=r[i];

}
for(i=n/2;i<=n;i++)
{ t[j++]=r[i]; } pipe(p3);
pipe(p4);
write(p3[1],s,sizeof(s));
write(p4[1],t,sizeof(t)); int
b=fork(); if(b==0)
{ printf("p4 %d\t",getpid()); printf("p2 %d\n",getppid());
read(p3[0],s,sizeof(s)); printf("\t PROCESS 4:sub string \t %s
\t",s);
printf("no of char=%d \n",strlen(s));

} else { int c=fork(); if(c==0) { printf("p5


%d\t",getpid()); printf("p2 %d\n",getppid());
read(p4[0],t,sizeof(t)); printf("\t PROCESS 5:sub string \t %s
\t",t);
printf("no of char=%d \n",strlen(t));
} else { wait(); printf("p2 %d\t",getpid());
printf("p1 %d\n",getppid());
} }} else { wait(); int
d=fork(); if(d==0)
{
printf("p3 %d\t",getpid()); printf("p1
%d\n",getppid()); read(p2[0],r,sizeof(r));
for(i=strlen(r)-1;i>=0;i--)
{

u[l++]=r[i];

}
for(i=0;i<strlen(r);i++)
{

if(u[i]==r[i])
else

k++;

continue;

}
if(k==strlen(r))
printf("\t PROCESS 3: the given string is palindrome\n");

else

printf("\t PROCESS 3: the given string is not palindrome\n");


}

else

{
printf("p1 %d\t",getpid());
printf("kernal %d\t\n",getppid());
}
}
}

Conclusion :
By studying this practical we learnt to implement inter process communication using pipes in Ubuntu.

You might also like