您的位置:首页 > 移动开发 > 微信开发

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

2010-09-24 11:35 399 查看
今天的作业,花了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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: