You are on page 1of 11

3.

a) AIM: Inter process communication using pipes

Program:

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
int main()
{
int pfds[2];
char buf[20];
if(pipe(pfds)==-1)
{
perror("pipes");
exit(1);
}
printf("wirting to file descriptor %d\n",pfds[1]);
write(pfds[1],"ashok",6);
printf("reading from the file descriptor %d\n",pfds[0]);
read(pfds[0],buf,6);
printf("read data is %s",buf);
}

ouput:

writing tt file descriptor 4


reading from the file descriptor 3
read data is ashok

b) AIM: Inter process communication using named pipes

Program:

producer.c

#include<stdio.h>

#include<sys/stat.h>

#include<string.h>

#include<unistd.h>

#include<fcntl.h>

#include<errno.h>

#include<stdlib.h>

#define FIFO_NAME "XYZ"

void main()

int num,fd;
char s[300];

mknod(FIFO_NAME,S_IFIFO|0666,0);

printf("waiting for readers\n");

fd=open(FIFO_NAME,O_WRONLY);

printf("got a reader type some stuff");

while(gets(s),!feof(stdin))

if((num=write(fd,s,strlen(s)))==-1)

perror("write");

else

printf("speak:wrote %d bytes\n", num);

OUTPUT:

waiting for readers

got a reader type some stuff

hi hello

speak:wrote 8 bytes

Consumer.c

#include<stdio.h>

#include<sys/stat.h>

#include<unistd.h>

#include<sys/types.h>

#include<fcntl.h>

#include<errno.h>

#define FIFO_NAME "XYZ"

void main()

char s[300];
int num,fd;

mknod(FIFO_NAME,S_IFIFO|0666,0);

printf("waiting for writers\n");

fd=open(FIFO_NAME,O_RDONLY);

printf("got a writer\n");

do

if((num=read(fd,s,300))==-1)

perror("read");

else

s[num]='\0';

printf("read %s ",s);

}while(num>0);

OUTPUT:

waiting for writers

got a writer

read hi hello

5. AIM: Write C program to implement TCP echo program using sockets?

Program:

/*tcpserver.c*/

#include<stdio.h>

#include<unistd.h>

#include<sys/socket.h>

#include<sys/types.h>

#include<netinet/in.h>

#include<string.h>
#define MAXLINE 5544

void main(int arg, char *argv[])

int sockfd,connfd,childpid,n;

unsigned short port;

int len;

char mesg[1024];

struct sockaddr_in servaddr,cliaddr;

port=(unsigned short)atoi(argv[1]);

if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)

/* creation of datagram socket */

perror("socket");

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family=AF_INET;

servaddr.sin_addr.s_addr=htonl(INADDR_ANY);

servaddr.sin_port=htons(port);

if((bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)))<0)

/* biding of socket to socket address */

perror("bind");

listen(sockfd,5); / server accepts maximum 5 clients requests at a time */

for(;;)

len=sizeof(cliaddr);

connfd=accept(sockfd,(struct sockaddr *)&cliaddr,&len);

close(sockfd);*/

n=write(sockfd,mesg,MAXLINE);

read(sockfd,mesg,MAXLINE);

}
OUTPUT:

/home/ashok/~ cc tcpserver.c

/home/ashok/~ ./a.out 2233

/*tcpclient.c*/

#include<stdio.h>

#include<unistd.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<string.h>

#include<sys/types.h>

#define MAXLINE 5544

void main(int argc,char *argv[])

int sockfd,n;

unsigned short port;

int len;

char mesg[1024];

struct sockaddr_in servaddr;

port=(unsigned short)atoi(argv[1]);

if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)

/* creation of data gram sockets */

perror("socket");

bzero(&servaddr,sizeof(servaddr)); /* initialize all socket address structures to zero*/

servaddr.sin_family=AF_INET;

inet_pton(AF_INET,argv[2],&servaddr.sin_addr);

len=sizeof(servaddr);

connect(sockfd,(struct sockaddr *)&servaddr,len);

while(fgets(mesg,MAXLINE,stdin)!=NULL)

{
write(sockfd,mesg,MAXLINE);

read(sockfd,mesg,MAXLINE);

printf("\n %s",mesg);

Output: /home/ashok/~ cc tcpclient.c

/home/ashok/~ ./a.out 2233 127.0.0.1

hi

hi

hello

hello

6. AIM: Write C program to implement UDP echo program using sockets?

Program:

/*udp server.c*/
#include<unistd.h>
#include<sys/socket.h>
#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<errno.h>
#define MAXLINE 5555
void main(int argc,char *argv[])
{
int sockfd,n;
unsigned short port;
socklen_t len;
char mesg[1024];
struct sockaddr_in servaddr,cliaddr;
port=(unsigned short)atoi(argv[1]);
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0) /* creation of sockets*/
printf("error in socket creation");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(port);
len=sizeof(servaddr);
if(bind(sockfd,(struct sockaddr *)&servaddr,len)<0) /* binding to socket address */
perror("\nbind");
for(;;) /* infinite loop */
{
len=sizeof(cliaddr);
n=recvfrom(sockfd,&mesg,MAXLINE,0,(struct sockaddr *)&cliaddr,&len);
sendto(sockfd,&mesg,n,0,(struct sockaddr *)&cliaddr,len);
}
}

output:
/home/ashok/~ cc udpserver.c
/home/ashok/~ ./a.out 4455

/*udpclient.c*/

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#include<errno.h>
#define MAXLINE 5566

void main(int argc,char **argv[])


{

int sockfd,n,len;
char mesg[1024];
unsigned short port;
char sendline[MAXLINE],recvline[MAXLINE];
struct sockaddr_in servaddr;
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0) /* creating sockets */
{
perror("socket");
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
port=(unsigned short)atoi(argv[1]);

servaddr.sin_port=htons(port);
if((inet_pton(AF_INET,argv[2],&servaddr.sin_addr))<0)
{
perror("inet_pton");
}
len=sizeof(servaddr);
while(fgets(sendline,MAXLINE,stdin)!=NULL)
{

sendto(sockfd,&sendline,strlen(sendline),0,(struct sockaddr *)&servaddr,len);


n=recvfrom(sockfd,&recvline,MAXLINE,0,(struct sockaddr *)&servaddr,&len);
recvline[n]=0;

printf("\n %s",recvline);
}
}
output:

/home/ashok/~ cc udpclient.c
/home/ashok/~ ./a.out 4455 127.0.0.1
hi

hi

hello

hello

20. AIM: Write a program to demonstrate the use of Execl Family System Calls or functions.

1. execl()

2. execv()

3. execle()

4. execve()

5. execlp()

6. execvp()

Program:

a) /* to demonstrate the use of execl() system call */

#include<stdio.h>
#include<unistd.h>
void main()
{
printf("\n Before execl() function");

execl("/bin/ls","ls","-l",NULL);

printf("\n after execl function");


}

Output:

Before execl() function

-rw-rw-r-- 1 anil anil 2 nov 24 2014 hello.c

-rw-rw-r-- 2 raju raju 1 dec 21 2014 arm.c

b) /* to demonstrate the use of execv() system call*/

#include<stdio.h>
#include<unistd.h>
void main()
{
char *a[3];

a[0]="ls"

a[1]="-l"
a[2]=0;
printf("\n Before execv() function");

execv("/bin/ls",a);

printf("\n after execv function");


}

Output:

Before execv() function


-rw-rw-r-- 1 anil anil 2 nov 24 2014 hello.c
-rw-rw-r-- 2 raju raju 1 dec 21 2014 arm.c

NOTE: The only difference between execl() and execv() system calls is while the first one takes arguments as a list,
the second system call takes arguments as vector.

c) /* to demonstrate the use of execlp() system call*/

#include<stdio.h>
#include<unistd.h>
void main()
{
printf("\n Before execlp() function");

execlp("ls","ls","-l",0);

printf("\n after execlp function");


}

Output:

Before execlp() function


-rw-rw-r-- 1 anil anil 2 nov 24 2014 hello.c
-rw-rw-r-- 2 raju raju 1 dec 21 2014 arm.c
---------------------------------------------------
---------------------------------------------------

d) /* To demonstrate the use of execvp() system call */

#include<stdio.h>
#include<unistd.h>
void main()
{
char *a[3];

a[0]="ls"

a[1]="-l"
a[2]=0;
printf("\n Before execlp() function");
execlp("ls",a);

printf("\n after execlp() function");


}

Output:

Before execlp() function


-rw-rw-r-- 1 anil anil 2 nov 24 2014 hello.c
-rw-rw-r-- 2 raju raju 1 dec 21 2014 arm.c
---------------------------------------------------
---------------------------------------------------

e) /* printing environment variables using environ variable */


/* environdemo.c*/

#include<stdio.h>
#include<unistd.h>
extern char **environ; /* environ is a predefined extern variable */
void main()
{
int i;
for(i=0;environ[i];i++)
{
printf("%s\n",environ[i]);
}
}

Ouput:

execute the above code and it will display all the environment variables available in a process

f) /* To demonstrate the use of execle() system call */


/* excledemo.c*/

#include<stdio.h>
#include<unistd.h.
void main()
{
char *x[3];

int i;
x[0]="abc=/tmp"; /*environment variables */
x[1]="xyz=/bin"; /*environment variables*/
x[2]=0;
if(fork()==0)
{
execle("./environdemo", "environdemo",(char *)0, x); /* supplying environment
variables(x) to execle() system call*/
}
wait(&i);
}
Output;
/home/anil/~$ cc excledemo.c
/homr/anil/~$ ./a.out
/home/anil/~$

g) /* to demonstrate the use of execve() system call */


/* execve()demo.c */

#include<stdio.h>
#include<unistd.h.
void main()
{
char *x[3],*y[2]; /as we need to supply the arguments as a vector we used extra pointer variable*/

int i;
x[0]="abc=/tmp"; /*environment variables */
x[1]="xyz=/bin"; /*environment variables*/
x[2]=0;
y[0]="environdemo";
y[1]=0;
if(fork()==0)
{
execve("./environdemo", y, x); /* supplying environment variables(x) to
execve() system call, y is vector containing the arguments to be supplied*/
}
wait(&i);
}

Output;
/home/anil/~$ cc excvedemo.c
/homr/anil/~$ ./a.out
/home/anil/~$

Now go back to previous program environdemo.c and execute it again

/home/anil/~$ cc environdemo.c
/home/anil/~$ ./a.out

now it display environment variables like /tmp and /bin environment variables but not all environment variables.

You might also like