📄 fifo_server.cpp
字号:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <iostream>
#include <errno.h>
using namespace std;
#define FIFO_NAME1 "fifo_test1"//client 利用此管道读,server 用此管道写
#define FIFO_NAME2 "fifo_test2"//client 利用此管道写,server 用此管道读
int main(int argc,char **argv)
{
char wr_buf[512]="server data";
if(mkfifo(FIFO_NAME1,O_CREAT|O_EXCL)<0&&(errno!=EEXIST))
cout<<"create fifo error"<<endl;
int wr_fd;
//if(argc==2&&strcmp(argv[1],"-b")==0)
wr_fd=open(FIFO_NAME1,O_WRONLY,0);
//else
// wr_fd=open(FIFO_NAME1,O_WRONLY|O_NONBLOCK,0);
if(wr_fd!=-1)
cout<<"open success"<<endl;
else{
perror("open fail");
return 0;
}
int rd_pid;
if((rd_pid=fork())==0)//创建一个读进程,从管道2读数据
{
int rd_fd=open(FIFO_NAME2,O_RDONLY,0);//以只读阻塞方式打开管道
if(rd_fd<0){
perror("child process open fail");
exit(1);
}
char rd_buf[512];
for(;;)
{
int rd_num=read(rd_fd,rd_buf,512);
if(rd_num>0)
printf("the real read data is:%s",rd_buf);
}
}
for(;;)//父进程向管道1写数据
{
int write_num=write(wr_fd,wr_buf,sizeof(wr_buf));
if(write_num==-1){
if(errno=EAGAIN)
cout<<"write fifo error,try later:"<<endl;
}
else
cout<<"real write num is:"<<write_num<<endl;
cout<<"real write data is"<<wr_buf<<endl;
memset(wr_buf,0,sizeof(wr_buf));
scanf("%s",wr_buf);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -