Linux进程通信之管道
進(jìn)程間完成數(shù)據(jù)傳遞需要借助操作系統(tǒng)提供的特殊的方法,比如:文件、管道、信號、共享內(nèi)存、消息隊(duì)列、套接字、命名管道等。但現(xiàn)在常用的進(jìn)程間通信方式有:
管道 – 使用最簡單
?????? pipe
?????? 管道一般讀寫行為
FIFO(有名管道):
?????? 用于非血緣關(guān)系進(jìn)程間通信
信號 – 開銷最小
共享映射區(qū) – 無血緣關(guān)系
?????? nmap
?????? 函數(shù)的參數(shù)使用注意事項(xiàng)
?????? 用于非血緣關(guān)系進(jìn)程間的通信
本地套接字 – 最穩(wěn)定
?
Linux下其中文件類型
-?????? 文件
d???? 目錄
l ??? 符號鏈接
偽文件:
s????? 套接字
b???? 塊設(shè)備
c???? 字符設(shè)備
p???? 管道
其中文件、目錄、符號鏈接是占用磁盤存儲的。
?
管道:
?
管道的原理:管道實(shí)為內(nèi)核使用環(huán)形隊(duì)列機(jī)制,借助內(nèi)核緩沖區(qū)(4K)實(shí)現(xiàn)。
管道的局限性:
?
pipe()函數(shù)實(shí)現(xiàn)管道通信:
/*** pipe.c ***/ #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h>int main() {int fd[2];pid_t pid;int ret = pipe(fd);if(-1 == ret){perror("pipe error:");exit(1);}pid = fork();if(-1 == pid){perror("pipe error:");exit(1);}else if(0 == pid) //son process read {close(fd[1]);char buf[1024];ret = read(fd[0],buf,sizeof(buf));if(0 == ret){printf("ret = %d\n",ret);}write(STDOUT_FILENO,buf,ret);}else //father process write {sleep(1);close(fd[0]);write(fd[1],"hello pipe\n",strlen("hello pipe\n"));}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/11311586.html
總結(jié)
以上是生活随笔為你收集整理的Linux进程通信之管道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 成都欢乐谷需要带身份证吗
- 下一篇: Linux进程通信之文件
