命名管道(FIFO) Linux进程进程间的通信之命名管道(FIFO)
2012-04-22 15:11
681 查看
Linux进程进程间的通信之命名管道(FIFO) 命名管道(FIFO),它和一般的管道一样。都是作为中间的邮递员来实现两个进程间的通信交流。 命名管道(FIFO)有几个特点: 1.命名管道(FIFO)是作为一种特殊的设备文件而存在。 2.通过FIFO管道不同进程间可以通过管道实现数据交流。而不像pipe只能用在有亲缘关系的进程间。 3.当使用完该管道的进程执行所有的I/O操作后,命名管道仍然存在文件系统中,以便以后继续使用。 那么我们怎么来创建一个命名管道(FIFO)呢? 1.我们可以用命令行的方式进行创建。 mkfifo 文件名 (文件名 就是我们要创建的管道) 注意文件类型和颜色大小。在后面的例子我们用完后再看。 2.第二种通过系统调用使用mkfifo函数。 #include<stat.h> #include<sys/types.h> int mkfifo(const char * pathname ,mode_t mode); 功能:就是创建一个命名管道 返回值:成功返回0,失败返回-1。 参数: pathname 是在那个命令下创建命名管道。 mode 模式即该命名管道的权限。 下面看个例子: #include<stdio.h> #include<sys/stat.h> #include<sys/types.h> #include<stdlib.h> #include<string.h> #include<fcntl.h> #include<sys/wait.h> #include<unistd.h> #define LEN 1024 int main(int argc ,char*argv[]) { int result; pid_t pid; char buf[LEN]; int fd,flag=0; unlink("fifo"); result=mkfifo("fifo",0777);//创建的命名管道为755 if(result==-1){ perror("mkfifo error:");// print a system error message exit(EXIT_FAILURE); } if((pid=fork())==-1){//创建一个子进程 perror("fork error:"); exit(EXIT_FAILURE); }else if(pid==0){//子进程 fd=open("fifo",O_RDONLY); //以只读的方式打开刚才创建的命名管道 while(1){ read(fd,buf,LEN);//读取命名管道中的数据放到buf中 printf("read from pipe: %s\n",buf); if(strcmp(buf,"exit")==0){//if读到的字符串为exit则退出 exit(EXIT_SUCCESS); } } }else{//父进程 fd=open("fifo",O_WRONLY); //以只读的方式打开刚才创建的命名管道 while(1){ waitpid(pid,NULL,WNOHANG); //等待子进程退出父进程用来回收资源等 if(flag==1){ exit(EXIT_SUCCESS); close(fd); } scanf("%s",buf); write(fd,buf,strlen(buf)+1); //向管道中写入数据 if(strcmp(buf,"exit")==0){ flag=1;//退出标志 sleep(1);//保证子进程先退出 } } } return 0; } 运行结果为: 可以看出管道文件fifo的大小还是o,它只是中间介质。用来实先进程间通信的工具。 |
相关文章推荐
- linux 命名管道fifo实现进程间小数据通信
- 服务器serverbuffergcc数据结构Linux进程通信:命名管道FIFO小结
- Linux进程通信:命名管道FIFO小结
- Linux进程通信:命名管道FIFO小结
- Linux进程通信:命名管道FIFO小结
- Linux间进程通信-----之使用命名管道
- linux进程间的通信(C): 命名管道
- Linux(八):进程通信IPC(二)之命名管道
- Linux进程通信之管道和FIFO
- 【Linux进程通信】管道,FIFO
- Linux----进程间通信-管道与两个命名管道实现进程双向通信
- [置顶] 【Linux】 进程通信--命名管道
- linux进程通信之命名管道
- 进程间的通信之命名管道(FIFO)
- Linux进程通信之管道和FIFO
- linux 进程学习笔记-named pipe (FIFO)命名管道
- 进程间的通信(二)命名管道fifo
- Linux进程间的通信——有名管道fifo与守护进程deamon
- Linux进程通信 命名管道
- linux下进程间的通信——有名管道fifo学习笔记