一个用管道实现的聊天小程序
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;
}
代码分两部分:一部分是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;
}
相关文章推荐
- 使用最新Netty实现一个简单的聊天程序
- 利用有名管道实现进程间通信(聊天小程序)
- 使用Remoting开发分布式应用(四) ——采用回调实现一个聊天程序
- 用red5和flex实现的一个小的聊天程序
- 使用UDP实现一个简单的聊天程序。
- 使用最新Netty实现一个简单的聊天程序
- socket实现的一个基本点对点聊天程序
- 一个简单的聊天程序--命名管道FIFO
- 一个简单的聊天程序--命名管道FIFO
- 编写一个聊天程序:有接收数据部分,和发数据的部分, 这两部分需要同时执行,使用多线程实现,一个控制接收,一个控制发送
- 实现的一个聊天程序
- Java_常瑞鹏 java_网络编程实现一个 聊天程序
- 用命令管道来实现简单的本地聊天小程序
- java网络编程实现一个聊天程序
- java网络编程实现一个聊天程序
- 一个Java实现的简单的多个客户端聊天程序(未测试)
- 网络编程应用:基于TCP协议【实现一个聊天程序】
- 一个实现长整型数相加减的小程序
- 用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。
- [微信小程序]实现一个自定义遮罩层组件(完整示例代码附效果图)