进程通信---管道通信

来源:互联网 发布:php阿里蜘蛛池 编辑:程序博客网 时间:2024/05/01 22:33
进程间通信

目的

数据传输——一个进程需要将它的数据发送给另一个进程

资源共享——多个进程之间共享同样的资源

通知事件——一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件

进程控制——有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变

 

 

管道通信

·管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。

·一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据

·数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。

·管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞

    

无名管道:

1.pipe

函数的原型:int pipe(int fds[2])

函数的参数:新建的两个描述符fds数组返回,fds[0]表示管道的读取端,fds[1]表示管道的写入端。

返 回 值:成功0,出错-1

头 文 件:#include <unistd.h>

 

管道读写:

1.先创建管道pipe;

2.fork创建子进程

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <unistd.h>  
  2. #include <errno.h>  
  3. #include <stdio.h>  
  4. #include <stdlib.h>  
  5.    
  6. int main()  
  7. {  
  8. int pipe_fd[2];  
  9. if(pipe(pipe_fd)<0)  
  10. {  
  11. printf("pipe create error\n");  
  12. return -1;  
  13. }  
  14. else  
  15. printf("pipe create success\n");  
  16. close(pipe_fd[0]);  
  17. close(pipe_fd[1]);  
  18. }  


 

有名管道:

·创建管道mkfifo

·打开管道open

·读管道read

·写管道write

·关闭管道close

·删除管道unlink

 

2.mkfifo

函数的作用:创建有名管道

函数的原型:int mkfifo(const char * filename,mode_t mode)

参数的作用:filename:有名管道的路径、名称

            mode:打开管道的方式

             O_NONBLOCK:  FIFO打开的时候,费阻塞

             O_RDONLY:  只读

             O_WRONLY:  只写

             O_RDWR:  可读

     关于:有名管道的可以用于两个没有任何关系的进程,

无名管道用于父子进程之间的通信;

0 0
原创粉丝点击