0% found this document useful (0 votes)
120 views

Unix Network Programming

The document describes 4 programs that use different interprocess communication mechanisms in Unix: 1) The first program uses a file to pass a sequence number between processes. 2) The second program uses pipes to communicate between a client and server process. 3) The third program uses FIFOs for interprocess communication between a client and server. 4) The fourth program demonstrates using message queues for communication between processes.

Uploaded by

Jekin Dadhaniya
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
120 views

Unix Network Programming

The document describes 4 programs that use different interprocess communication mechanisms in Unix: 1) The first program uses a file to pass a sequence number between processes. 2) The second program uses pipes to communicate between a client and server process. 3) The third program uses FIFOs for interprocess communication between a client and server. 4) The fourth program demonstrates using message queues for communication between processes.

Uploaded by

Jekin Dadhaniya
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 31

UNIX NETWORK

PROGRAMMING

Assignment :Unix Programs


Submitted By: Ayush Agarwal
MCA II
09811007

Submitted To:
Prof. Mohan Lal

program 1: read and write sequence number from


a file
/*******************************seqno.c**************************/
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#define SEQFILE "seqno.txt"
#define MAXBUFF 100
int seqno=0;
main()
{
int fd,i,n;
char buff[MAXBUFF+1];
int pid=getpid();
if((fd=open(SEQFILE,2))<0)
perror("can't open file");
for(i=0;i<20;i++)
{
lseek(fd,0L,0);
if((n=read(fd,buff,MAXBUFF))<0)
perror("file read error");
buff[n]='\0';
if((n=sscanf(buff,"%d\n",&seqno))!=1)
perror("seq no read error");
seqno++;
printf("pid=%d seqno=%d\n",pid,seqno);
sprintf(buff,"%03d\n",seqno);
lseek(fd,0L,0);
n=strlen(buff);
if(write(fd,buff,n)!=n)
perror("write error");
}
}

/***********************OUTPUT*******************************/

Program 2: Pipe between two process (client &


server)

/*****************************server.c********************************/
#include<stdio.h>
#include<sys/errno.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#define MAXBUFF 1024
server(readfd,writefd)
int readfd;
int writefd;
{
char buff[MAXBUFF];

char errmesg[256],*sys_err_str();
int n,fd;
extern int errno;
if((n=read(readfd,buff,MAXBUFF))<=0)
perror("Server:filename read error");
buff[n]='\0';
if((fd=open(buff,0))<0){
sprintf(errmesg,":can't open , %s\n","file");
strcat(buff,errmesg);
n=strlen(buff);
if(write(writefd,buff,n)!=n)
perror("Server:mesg write error");
}else {
while((n=read(fd,buff,MAXBUFF))>0)
if(write(writefd,buff,n)!=n)
perror("Server:data write error");
if(n<0) perror("Server:data read error");
}
}

/***************************client.c**************************/
#include<stdio.h>
#include<sys/errno.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#define MAXBUFF 1024
client(readfd,writefd)
int readfd;
int writefd;
{
char buff[MAXBUFF];
int n;
printf("Please enter the file name::");
if(fgets(buff,MAXBUFF,stdin)==NULL)

perror("Client:filename read error");


n=strlen(buff);
if(buff[n-1]=='\n') n--;
if(write(writefd,buff,n)!=n)
perror("Client:filename write error");
printf("Here is the content of the file::\n\n");
while((n=read(readfd,buff,MAXBUFF))>0)
if(write(1,buff,n)!=n)
perror("Client:data write error");
if(n<0) perror("Client:data read error");
}

/**************************pipe.c******************************/
#include<stdio.h>
#include<sys/errno.h>
#include<unistd.h>
#include<stdlib.h>
#include"client.c"
#include"server.c"
main()
{
int childpid,pipe1[2],pipe2[2];
if((pipe(pipe1)<0)||(pipe(pipe2)<0))
perror("can't create pipes");
if((childpid=fork())<0){
perror("can't fork");
}
else if(childpid>0){
/*parent*/
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe1[1]);
while(wait((int *)0)!= childpid) /*wait for child*/
close(pipe1[1]);
close(pipe2[0]);

exit(0);
}
else
{
close(pipe1[1]);
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
close(pipe1[0]);
close(pipe2[1]);
exit(0);
}
}

OUTPUT:

Program 3: fifo between two process (client &


server)
/******************************fifo.h***********************/
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/errno.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
extern int errno;
#define FIFO1 "/tmp/fifo.1"
#define FIFO2 "/tmp/fifo.2"
#define PERMS 0666

/**************************servermain.c******************/
#include "fifo.h"
#include "server.c"
main(int argc, char **argv)
{
int readfd, writefd;
/* create two FIFOs; OK if they already exist */
if ((mknod(FIFO1, S_IFIFO|PERMS,0) < 0) && (errno != EEXIST))
printf("can't create %s", FIFO1);
if ((mknod(FIFO2, S_IFIFO|PERMS,0) < 0) && (errno != EEXIST))
{ unlink(FIFO1);
printf("can't create %s", FIFO2);
}
readfd = open(FIFO1, 0);
writefd = open(FIFO2,1);
server(readfd, writefd);
close(readfd);
close(writefd);
exit(0); }

/*************************clientmain.c********************/
#include "fifo.h"
#include "client.c"
int main(int argc, char **argv)
{
int readfd, writefd;
if((writefd = open(FIFO1,1))<0)
perror(client :cant open write fifo: %s ,FIFO1);
if((readfd = open(FIFO2,0))<0)
perror(client :cant open read fifo: %s ,FIFO2);
client(readfd, writefd);
close(readfd);
close(writefd);
if( unlink(FIFO1)<0)
perror(client :cant unlink fifo: %s ,FIFO1);
if(unlink(FIFO2)<0)
perror(client :cant unlink fifo: %s ,FIFO2);
exit(0);
}

OUTPUT:

Program 4: MESSAGE QUEUE between two process


(client & server)
/***********************mesg.h************************/
#define MAXMESGDATA (4096-16)
#define MESGHDRSIZE (sizeof(Mesg)-MAXMESGDATA)
typedef struct
{
int mesg_len;
long mesg_type;
char mesg_data[MAXMESGDATA];
}Mesg;

/***************************mesgq.h******************/
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<string.h>
#include<sys/errno.h>
#include<stdio.h>
#include<unistd.h>
#include "mesg.h"
extern int errno;
#define MKEY1 1234L
#define MKEY2 2345L
#define PERMS 0666

/**********************send_recv_fun.c*******************/
#include "mesgq.h"
mesg_recv(int id,Mesg *mesgptr)
{
int n;
n=msgrcv(id,(char *)&(mesgptr->mesg_type),MAXMESGDATA,mesgptr>mesg_type,0);

if((mesgptr->mesg_len=n)<0)
perror("msgrcv error");
return n;
}
mesg_send(int id,Mesg * mesgptr)
{
if(msgsnd(id,(char*)&(mesgptr->mesg_type),mesgptr->mesg_len,0)!=0)
perror("mesg send error");
}

/**************************server.c**********************/

#include "send_recv_fun.c"
Mesg mesg;
extern int errno;
server(int ipcreadfd,int ipcwritefd)
{
char errmesg[256];
int n,filefd;
mesg.mesg_type=1L;
if((n=mesg_recv(ipcreadfd,&mesg))<=0)
perror("server:filename read error");
mesg.mesg_data[n]='\0';
if((filefd=open(mesg.mesg_data,0))<0)
{
sprintf(errmesg,":can't open,%s\n","file");
strcat(mesg.mesg_data,errmesg);
mesg.mesg_len=strlen(mesg.mesg_data);
mesg_send(ipcwritefd,&mesg);
}
else
{
while( (n=read(filefd,mesg.mesg_data,MAXMESGDATA))>0)
mesg.mesg_len=n;
mesg_send(ipcwritefd,&mesg);
}

close(filefd);
if(n<0)
perror("server:read error");
mesg.mesg_len=0;
mesg_send(ipcwritefd,&mesg);
}
/***************************servermain.c******************************/

#include "server.c"
main()
{
int readid,writeid;
if((readid=msgget(MKEY1,PERMS|IPC_CREAT))<0)
perror("Server: can't get message queue 1");
if((writeid=msgget(MKEY2,PERMS|IPC_CREAT))<0)
perror("Server: can't get message queue 2");

server(readid,writeid);
exit(0);

/*********************************client.c*************************/

#include "send_recv_fun.c"
Mesg mesg;
client( int ipcreadfd, int ipcwritefd)
{
int n;
printf("Please enter the file name::");
if(fgets(mesg.mesg_data,MAXMESGDATA,stdin)==NULL)
perror("filename read error");
n=strlen(mesg.mesg_data);
if(mesg.mesg_data[n-1]=='\n')
n--;
mesg.mesg_len=n;

mesg.mesg_type=1L;
mesg_send(ipcwritefd,&mesg);
printf("Here is the content of the file::\n\n");
while((n=mesg_recv(ipcreadfd,&mesg))>0)
if(write(1,mesg.mesg_data,n)!=n)
perror("client:data write errors");
if(n<0)
perror("data read error");

/*******************************clientmain.c*************************/

#include "client.c"
main()
{
int readid,writeid;
if((writeid=msgget(MKEY1,0))<0)
perror("Client: can't get message queue 1");
if((readid=msgget(MKEY2,0))<0)
perror("Client: can't get message queue 2");
client(readid,writeid);
if(msgctl(readid,IPC_RMID,(struct msqid_ds *)0)<0)
perror("client: RMID mesg queue 1");
if(msgctl(writeid,IPC_RMID,(struct msqid_ds *)0)<0)
perror("client: RMID mesg queue 2");
exit(0);
}

/*************************OUTPUT***************************/

Program 5: multiplexing MESSAGEs between


process (client & server)
/*************************server.c*************************/
#include "send_recv_fun.c"
Mesg mesg;
main()
{
int id;
if((id=msgget(MKEY1,PERMS|IPC_CREAT))<0)
printf("Server:can't get message queue 1");
server(id);
exit(0);
}
/*server function */
server(int id)
{

char errmesg[256];
int n,filefd;
mesg.mesg_type=1L;
if((n=mesg_recv(id,&mesg))<=0)
printf("server:filename read error");
mesg.mesg_data[n]='\0';
mesg.mesg_type=2L;
if((filefd=open(mesg.mesg_data,0))<0)
{
sprintf(errmesg,":can't open,%s\n","file");
strcat(mesg.mesg_data,errmesg);
mesg.mesg_len=strlen(mesg.mesg_data);
mesg_send(id,&mesg);
}
else
{
while( (n=read(filefd,mesg.mesg_data,MAXMESGDATA))>0)
mesg.mesg_len=n;
mesg_send(id,&mesg);
}
close(filefd);
if(n<0)
printf("server read error");
mesg.mesg_len=0;
mesg_send(id,&mesg);
}

/*****************************client.c*****************************/

#include "send_recv_fun.c"
Mesg mesg;
main()
{
int id;

if((id=msgget(MKEY1,0))<0)
perror("CLIENT:can't msgget message queue 1");
client(id);
if(msgctl(id,IPC_RMID,(struct msqid_ds *) 0)<0)
perror("client:cant RMID message queue 1");
exit(0);
}
/*client function */
client( int id)
{
int n;
printf("Please give a file name to read it::");
if(fgets(mesg.mesg_data,MAXMESGDATA,stdin)==NULL)
printf("filename read error");
n=strlen(mesg.mesg_data);
if(mesg.mesg_data[n-1]=='\n')
n--;
mesg.mesg_len=n;
mesg.mesg_type=1L;
mesg_send(id,&mesg);
printf("Here is the file content::\n\n");
mesg.mesg_type=2L;
while((n=mesg_recv(id,&mesg))>0)
if(write(1,mesg.mesg_data,n)!=n)
perror("client:data write errors");
if(n<0)
perror("data read error");
}

/**************************OUTPUT**************************/

Socket programming
/**********************util_routines.c*************************/
/*readn function*/
int
readn(fd,ptr,nbytes)
register int fd;
register char *ptr;
register int nbytes;
{
int nleft,nread;
nleft=nbytes;
while(nleft>0)
{

nread=read(fd,ptr,nleft);
if(nread<0) return nread;
else if(nread ==0)
break;
nleft-=nread;
ptr+=nread;
}
return(nbytes-nleft);
}

/*writen function */
int
writen(fd,ptr,nbytes)
register int fd;
register char *ptr;
register int nbytes;
{
int nleft,nwrite;
nleft=nbytes;
while(nleft>0)
{
nwrite=write(fd,ptr,nleft);
if(nwrite<=0) return nwrite;
nleft-=nwrite;
ptr+=nwrite;
}
return(nbytes-nleft);
}

/*readline function*/
int

readline(fd,ptr,maxlen)
register int fd;
register char *ptr;
register int maxlen;
{
int n,rc;
char c;
for(n=1;n<maxlen;n++){
if ((rc=read(fd,&c,1))==1){
*ptr++=c;
if(c=='\n')
break;
}else if(rc==0){
if(n==1)return 0;
else break;
}else return (-1);
}
*ptr=0;
return n;
}

/****************************str_echo.c************************/
#include <stdio.h>
#include<string.h>
#define MAXLINE 512
str_echo( int sockfd)
{
char line[MAXLINE];
int n;
for(;;){
n=readline(sockfd,line,MAXLINE);
if(n==0)
return;
else if(n<0)

perror("str_echo:readline error ");

if (writen(sockfd, line, n) !=n )


perror("str_echo: writen error");

/****************************str_cli.c**************************/
#include <stdio.h>
#include<string.h>
#define MAXLINE 512
str_cli(FILE *fp, int sockfd)
{
char sendline[MAXLINE], recvline[MAXLINE+1];
int n;
printf("Client:");
while (fgets(sendline, MAXLINE, fp) != NULL) {
n=strlen(sendline);
if(writen(sockfd,sendline,n)!=n)
perror("str_cli:writen error on socket");
printf("Server:");
printf("Client:");
if (n=(readline(sockfd, recvline, MAXLINE)) < 0)
perror("str_cli: readline error");
recvline[n]=0;
fputs(recvline, stdout);
}
if(ferror(fp))
perror("str_cli:error reading file");
}
/***********************************dg_echo.c**************************/
#include<sys/types.h>
#include<sys/socket.h>
#define MAXLINE 512
dg_echo(sockfd,pcli_addr,maxclilen)
int sockfd;

struct sockaddr *pcli_addr;


int maxclilen;
{
int n,clilen;
char mesg[MAXLINE];
for(;;){
clilen=maxclilen;
n=recvfrom(sockfd,mesg,MAXLINE,0,pcli_addr,&clilen);
if(n<=0)
printf("dg:echo:recieve error");

if(sendto(sockfd,mesg,n,0,pcli_addr,clilen)!=n)
printf("dg:echo:sendto error");

}
/*****************************dg_cli.c**********************************/
#include<sys/types.h>
#include<sys/socket.h>
#define MAXLINE 512
dg_cli(FILE *fp, int sockfd,struct sockaddr * pserv_addr,int servlen)
{
char sendline[MAXLINE], recvline[MAXLINE+1];
int n;
printf("Client:");
while (fgets(sendline, MAXLINE, fp) != NULL) {
n=strlen(sendline);
if(sendto(sockfd,sendline,n,0,pserv_addr,servlen)!=n)
printf("dg_cli:writen error on socket");
if (n=(recvfrom(sockfd, recvline, MAXLINE,0,(struct sockaddr *)0,(int
*)0)) < 0)
printf("dg_cli: readline error");
recvline[n]=0;
printf("Server:");
fputs(recvline, stdout);
printf("Client:");
}
if(ferror(fp))
printf("dg_cli:error reading file");

/********************************inet.h****************************/
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include "util_routines.c"
#include "str_echo.c"
#include "str_cli.c"
#include "dg_echo.c"
#include "dg_cli.c"
#define SERV_UDP_PORT 7000
#define SERV_TCP_PORT 6000
#define SERV_HOST_ADDR "127.0.0.1"
char *pname;
/********************************unix.h*******************************/
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<sys/un.h>
#include<unistd.h>
#include "util_routines.c"
#include "str_echo.c"
#include "str_cli.c"
#include "dg_echo.c"
#include "dg_cli.c"
#define UNIXSTR_PATH "./unixstr"
#define UNIXDG_PATH "./unixdg"
#define UNIXDG_TMP "/tmp/dg.abcdef"

char *pname;

Program 6: INET tcp program (client & server)


/*************************tcp_server.c**************************/
#include "inet.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd,newsockfd,clilen,childpid;
struct sockaddr_in serv_addr,cli_addr;
pname=argv[0];
if((sockfd = socket(AF_INET, SOCK_STREAM,0))<0)
printf("server: can't open socket stream");
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port = htons(SERV_TCP_PORT);
if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
printf("server: can't bind address");
listen(sockfd,5);
for(;;){
clilen=sizeof(cli_addr);
newsockfd=accept(sockfd,(struct sockaddr *)&cli_addr,&clilen);
if(newsockfd<0)
printf("server: accept error");
if((childpid=fork())<0)

printf("server: fork error");

}
}

else if(childpid==0)
{
close(sockfd);
str_echo( newsockfd);
exit(0);
}
close(newsockfd);

/****************************tcp_client.c****************************/
#include "inet.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd;
struct sockaddr_in serv_addr;
pname=argv[0];
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(SERV_HOST_ADDR);
serv_addr.sin_port = htons(SERV_TCP_PORT);
if((sockfd = socket(AF_INET, SOCK_STREAM,0))<0)
printf("client: can't open socket stream");
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
printf("client: can't connect to server");
str_cli(stdin, sockfd);
exit(0);
}

/******************************OUTPUT******************************/

Program 7: INET udp program (client & server)


/*****************************udp_server.c*****************************/
#include "inet.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd;
struct sockaddr_in serv_addr,cli_addr;
pname=argv[0];

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


printf("server: can't open socket stream");
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port = htons(SERV_UDP_PORT);
if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
printf("server: can't bind address");
dg_echo(sockfd,(struct sockaddr *)&cli_addr,sizeof(cli_addr));
}
/********************************udp_client.c***************************/
#include "inet.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd;
struct sockaddr_in serv_addr,cli_addr;
pname=argv[0];
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(SERV_HOST_ADDR);
serv_addr.sin_port = htons(SERV_UDP_PORT);
if((sockfd = socket(AF_INET, SOCK_DGRAM,0))<0)
printf("client: can't open socket stream");
bzero((char *)&cli_addr, sizeof(cli_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port = htons(0);
if(bind(sockfd,(struct sockaddr *)&cli_addr,sizeof(cli_addr))<0)
printf("client: can't bind address");

dg_cli(stdin,sockfd,(struct sockaddr *) & serv_addr,sizeof(serv_addr));


close(sockfd); //exit(0);
}

/*************************OUTPUT****************************/

Program 8: unix tcp program (client & server)


/****************************unix_tcp_server*******************/
#include "unix.h"
int
main(argc, argv)
int argc;
char *argv[];
{

int sockfd,newsockfd,clilen,childpid,servlen;
struct sockaddr_un serv_addr,cli_addr;
pname=argv[0];
if((sockfd = socket(AF_UNIX, SOCK_STREAM,0))<0)
perror("server: can't open socket stream");
unlink(UNIXSTR_PATH);
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path,UNIXSTR_PATH);
servlen=strlen(serv_addr.sun_path)+sizeof(serv_addr.sun_family);
if(bind(sockfd,(struct sockaddr *)&serv_addr,servlen)<0)
perror("server: can't bind address");
listen(sockfd,5);
for(;;){
clilen=sizeof(cli_addr);
newsockfd=accept(sockfd,(struct sockaddr *)&cli_addr,&clilen);
if(newsockfd<0)
perror("server: accept error");
if((childpid=fork())<0)
perror("server: fork error");
else if(childpid==0)
{
close(sockfd);
str_echo( newsockfd);
exit(0);
}
close(newsockfd);
}
}

/**************************unix_tcp_client***************************/
#include "unix.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd,servlen;
struct sockaddr_un serv_addr;
pname=argv[0];
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path,UNIXSTR_PATH);
servlen=strlen(serv_addr.sun_path)+sizeof(serv_addr.sun_family);
if((sockfd = socket(AF_UNIX, SOCK_STREAM,0))<0)
perror("client: can't open socket stream");
if(connect(sockfd,(struct sockaddr *)&serv_addr,servlen)<0)
perror("client: can't connect to server");
str_cli(stdin, sockfd);
close(sockfd);
exit(0);
}

/******************************OUTPUT*****************************/

Program 9: unix udp program (client & server)


/***************************unix_udp_server************************/
#include "unix.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd,servlen;
struct sockaddr_un serv_addr,cli_addr;
pname=argv[0];
if((sockfd = socket(AF_UNIX, SOCK_DGRAM,0))<0)
perror("server: can't open socket datagram");
unlink(UNIXSTR_PATH);
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;

strcpy(serv_addr.sun_path,UNIXDG_PATH);
servlen=strlen(serv_addr.sun_path)+sizeof(serv_addr.sun_family);
if(bind(sockfd,(struct sockaddr *)&serv_addr,servlen)<0)
perror("server: can't bind address");
dg_echo( sockfd,(struct sockaddr *)&cli_addr,sizeof(cli_addr));
exit(0);
}
/****************************unix_udp_client**********************/

#include "unix.h"
int
main(argc, argv)
int argc;
char *argv[];
{
int sockfd,clilen,servlen;
char *mktemp();
struct sockaddr_un serv_addr,cli_addr;
pname=argv[0];
unlink(UNIXSTR_PATH);
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path,UNIXDG_PATH);
servlen=strlen(serv_addr.sun_path)+sizeof(serv_addr.sun_family);
if((sockfd = socket(AF_UNIX, SOCK_DGRAM,0))<0)
perror("client: can't open socket data gram");
bzero((char *)&cli_addr, sizeof(cli_addr));
cli_addr.sun_family = AF_UNIX;
strcpy(cli_addr.sun_path,UNIXDG_TMP);
mktemp(cli_addr.sun_path);
clilen=strlen(cli_addr.sun_path)+sizeof(cli_addr.sun_family);
if(bind(sockfd,(struct sockaddr *)&cli_addr,clilen)<0)
perror("client: can't bind address");

dg_cli(stdin, sockfd,(struct sockaddr *)&serv_addr,servlen);


close(sockfd);
unlink(cli_addr.sun_path);
exit(0);
}

/*****************************OUTPUT***********************/

THANK YOU

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy