一个用管道实现的聊天小程序

今天的作业,花了2小时,终于完成了。废话少说,直接贴代码.

代码分两部分:一部分是lucy   一部分是petter

//-------------------------------------------lucy.c-------------------------------------------

#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<signal.h>
int main()
{
 int fdr,fdw;
 char rbuffer[50]="";
 char wbuffer[50]="";
 pid_t pid;
 if((mkfifo("chat1",O_CREAT))<0&&errno!=EEXIST)
 {
  perror("mkfifo1 chat1 error");
  exit(1);
 }
 if((mkfifo("chat2",O_CREAT))<0&&errno!=EEXIST)
 {
  perror("mkfifo2 chat2  error");
  exit(1);
 }
 printf("wait petter!/n");
 /* 
 if((fdw=open("chat1",O_WRONLY))<0)
 {
  perror("open chat1 error");
  exit(1);
 }
 if((fdr=open("chat2",O_RDONLY))<0)
 {
  perror("open chat2 error");
  exit(1);
 }  
 printf("welcome petter!/n");
*/
 if((pid=fork())<0)
 {
  perror("fork error");
 }
 else if(pid==0)
 {
  if((fdr=open("chat2",O_RDONLY))<0)
  { 
   perror("open chat2 error");
   exit(1);
  }
  printf("welcome petter!/n");

  while(1)
  {
   memset(rbuffer,0,50);
   if(read(fdr,rbuffer,50)==0)
   {
    unlink("chat1");
    unlink("chat2");
    kill(pid,SIGSTOP);
    exit(1);
   }
   printf("/r lucy:%s/n petter: ",rbuffer);
   fflush(stdout);
  }
 }
 else
 {
  if((fdw=open("chat1",O_WRONLY))<0)
  {
   perror("open chat1 error");
   exit(1);
  }
  while(1)
  {

   memset(wbuffer,0,50);
   printf("lucy:");
   fgets(wbuffer,50,stdin);
   wbuffer[strlen(wbuffer)-1]='/0';
   write(fdw,wbuffer,strlen(wbuffer));
  }
 }
 return 0;
}

//----------------------------------------petter.c-------------------------------------------------------

#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<signal.h>
int main()
{
 int fdr,fdw;
 char rbuffer[50]="";
 char wbuffer[50]="";
 pid_t pid;
 if((mkfifo("chat1",O_CREAT))<0&&errno!=EEXIST)
 {
  perror("mkfifo chat1 error");
  exit(1);
 }
 if((mkfifo("chat2",O_CREAT))<0&&errno!=EEXIST)
 {
  perror("mkfifo chat2 error");
  exit(1);
 }
 printf("wait lucy!/n");
 /*
 if((fdw=open("chat2",O_WRONLY))<0)
 {
  perror("open chat2 error");
  exit(1);
 }
 */
 /* 
 if((fdr=open("chat1",O_RDONLY))<0)
 {
  perror("open chat2 error");
  exit(1);
 } 
 */
// printf("welcome lucy!/n");

 if((pid=fork())<0)
 {
  perror("fork error");
 }
 else if(pid==0)
 {
  if((fdr=open("chat1",O_RDONLY))<0)
  {
   perror("open chat2 error");
   exit(1);
  }
  printf("welcome lucy!/n");   
  while(1)
  {
   memset(rbuffer,0,50);
   if(read(fdr,rbuffer,50)==0)
   {
    unlink("chat1");
    unlink("chat2");
    kill(pid,SIGSTOP);
    exit(1);
   }
   printf("/r petter: %s/n lucy: ",rbuffer);
   fflush(stdout);
  }
 }
 else
 {
  if((fdw=open("chat2",O_WRONLY))<0)
  {
   perror("open chat2 error");
   exit(1);
  }

  while(1)
  {
   memset(wbuffer,0,50);
   printf("petter:");
   fgets(wbuffer,50,stdin);
   wbuffer[strlen(wbuffer)-1]='/0';
   write(fdw,wbuffer,strlen(wbuffer));
  }
 }
 return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值