⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fifo_server.cpp

📁 一个使用匿名管道进行通信的示例程序
💻 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 + -