linux网络多人聊天程序,一根管道实现的简单多人聊天程序(-)

#includetypedef struct message_packet

{

char *name_from;

char *name_sendto;

char *msg;

}mp;

int main()

{

char name_fifo[]="fifo_talk";

int fd_w,fd_r,i,j=0;

int rt_mf;

char buf[300]={'\0','\0','\0','\0'};

int rp[3];

int rt_read,rt_wait,rt_write,fd_read;

mp pk_slf;

pid_t pid;

rt_mf=mkfifo(name_fifo,S_IRUSR|S_IWUSR);

printf("please input your name:");

gets(buf);

pk_slf.name_from=(char *)malloc(strlen(buf)+1);

strcpy(pk_slf.name_from,buf);

pid=fork();

if(pid==0)

{

fd_read=open(name_fifo,O_RDONLY);

close(fd_read);

exit(0);

}

sleep(0.5);

rt_wait=waitpid(pid,NULL,WNOHANG);

kill(pid,SIGKILL);

if(rt_wait==0)

{

fd_w=open(name_fifo,O_WRONLY);

printf("who do you want to talk:");

gets(buf);

pk_slf.name_sendto=(char *)malloc(strlen(buf)+1);

strcpy(pk_slf.name_sendto,buf);

printf("%s:",pk_slf.name_from);

gets(buf);

pk_slf.msg=(char *)malloc(strlen(buf)+1);

strcpy(pk_slf.msg,buf);

strcpy(buf,pk_slf.name_sendto);

strcpy(&buf[strlen(buf)+1],pk_slf.name_from);

strcpy(&buf[(strlen(buf)+1)+(strlen(&buf[strlen(buf)+1])+1)],pk_slf.msg);

write(fd_w,&buf[0],300);

close(fd_w);

}

for(;;)

{

for(;;)

{

fd_r=open(name_fifo,O_RDONLY);

rt_read=read(fd_r,&buf[0],300);

close(fd_r);

rp[1]=strlen(buf)+1;

rp[2]=rp[1]+strlen(&buf[rp[1]])+1;

if(strcmp(buf,pk_slf.name_from)!=0)

{

fd_w=open(name_fifo,O_WRONLY);

write(fd_w,&buf[0],300);

close(fd_w);

sleep(0.2);

}

else

{

if(strlen(&buf[rp[1]])!=0)

{

printf("message frome %s:%s\n\n",&buf[rp[1]],&buf[rp[2]]);

break;

}

}

}

fd_w=open(name_fifo,O_WRONLY);

printf("who do you want to talk:");

gets(buf);

pk_slf.name_sendto=(char *)malloc(strlen(buf)+1);

strcpy(pk_slf.name_sendto,buf);

printf("%s:",pk_slf.name_from);

gets(buf);

pk_slf.msg=(char *)malloc(strlen(buf)+1);

strcpy(pk_slf.msg,buf);

strcpy(buf,pk_slf.name_sendto);

strcpy(&buf[strlen(buf)+1],pk_slf.name_from);

strcpy(&buf[(strlen(buf)+1)+(strlen(&buf[strlen(buf)+1])+1)],pk_slf.msg);

write(fd_w,&buf[0],300);

close(fd_w);

}

exit(0);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值