10-05-2012, 01:02 PM
NP LABMANUAL
nplabmanual.doc (Size: 135.5 KB / Downloads: 57)
Week1.
1. Implement the following forms of IPC.
A) Pipes B) FIFO
A)PIPES.C
#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
#include<wait.h>
#define MAXBUFF 1024
main()
{
int childpid,pipe1[2],pipe2[2];
if(pipe(pipe1)<0|pipe(pipe2)<0)
printf("pipe creation error");
if((childpid=fork())<0)
printf("cannot fork");
else if(childpid>0)
{
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe1[1]);
while(wait((int *)0)!=childpid)
close(pipe2[0]);
close(pipe1[1]);
exit(0);
}
else
{
close(pipe1[1]);
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
close(pipe1[0]);
close(pipe2[1]);
exit(0);
}
}
client(int readfd,int writefd)
{
char buff[MAXBUFF];
int n;
if(fgets(buff,MAXBUFF,stdin)==NULL)
printf("client:filename read error");
n=strlen(buff);
if(buff[n]=='\n')
n--;
if(write(writefd,buff,n)!=n)
printf("client:filename write error");
while((n=read(readfd,buff,MAXBUFF))>0)
if(write(1,buff,n)!=n)
printf("client:data write error");
}
server(int readfd,int writefd)
{
char buff[MAXBUFF];
int n,fd;
if((n=read(readfd,buff,MAXBUFF))<=0)
printf("server:readfilename error");
buff[n]='\0';
if((fd=open(buff,0))<0)
printf("file cannot be opened");
else
{
while((n=read(fd,buff,MAXBUFF))>0)
if(write(writefd,buff,n)!=n)
printf("server:data write error");
}
}
OUTPUT
[nplab@itserver 07711A1263]$ cc ipc.c
[nplab@itserver 07711A1263]$ ./a.out
first.c
main(int argc,char *argv[])
{
int I;
printf(“Total number of arguments=%d\n”,argc);
for(i=1;i<argc;i++)
printf(“%s\n”,argv[i]);
}
B) fifo.c
#include<stdio.h>
#include<sys/stat.h>
#include<unistd.h>
#include<sys/types.h>
#include<wait.h>
#include<sys/errno.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#define PERMS 0666
#define MAXBUFF 1024
main()
{
int childpid,readfd,writefd;
mknod("FIFO1",S_IFIFO|PERMS,0); mknod("FIFO2",S_IFIFO|PERMS,0);
if((childpid=fork())<0)
{
printf("cannot fork");
exit(1);
}
else if(childpid>0)
{
if((writefd=open("FIFO1",1))<0)
{
printf("Parent : can't open read fifo");
exit(1);
}
if((readfd=open("FIFO2",0))<0)
{
printf("parent: can't open read fifo");
exit(1);
}
client(readfd,writefd);
while(wait((int *)0)!=childpid)
close(readfd);
close(writefd);
}
else
{
if((readfd=open("FIFO1",0))<0)
{
printf("child:can't open read fifo");
exit(1);
}
if((writefd=open("FIFO2",1))<0)
{
printf("child:can't open write fifo");
exit(1);
}
server(readfd,writefd);
close(readfd);
close(writefd);
exit(0);
}
}
client(int readfd,int writefd)
{
char buff[MAXBUFF];
int n;
if((fgets(buff,MAXBUFF,stdin))==NULL)
printf("clint:filename read error");
n=strlen(buff);
if(buff[n-1]=='\n')
n--;
if(write(writefd,buff,n)!=n)
printf("clint:filename write error"); while((n=read(readfd,buff,MAXBUFF))>0)
if(write(1,buff,n)!=n)
printf("client:data write error");
}
server(int readfd,int writefd)
{
char buff[MAXBUFF];
int n,fd;
if((n=read(readfd,buff,MAXBUFF))<=0)
printf("server:read filename error");
buff[n]='\0';
if((fd=open(buff,0))<0)
printf("file con't be open");
else
{
while((n=read(fd,buff,MAXBUFF))>0)
if(write(writefd,buff,n)!=n)
printf("server:data write error");
}
}