Linux进程通信之管道
生活随笔
收集整理的這篇文章主要介紹了
Linux进程通信之管道
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
進程間完成數據傳遞需要借助操作系統提供的特殊的方法,比如:文件、管道、信號、共享內存、消息隊列、套接字、命名管道等。但現在常用的進程間通信方式有:
管道 – 使用最簡單
?????? pipe
?????? 管道一般讀寫行為
FIFO(有名管道):
?????? 用于非血緣關系進程間通信
信號 – 開銷最小
共享映射區 – 無血緣關系
?????? nmap
?????? 函數的參數使用注意事項
?????? 用于非血緣關系進程間的通信
本地套接字 – 最穩定
?
Linux下其中文件類型
-?????? 文件
d???? 目錄
l ??? 符號鏈接
偽文件:
s????? 套接字
b???? 塊設備
c???? 字符設備
p???? 管道
其中文件、目錄、符號鏈接是占用磁盤存儲的。
?
管道:
?
管道的原理:管道實為內核使用環形隊列機制,借助內核緩沖區(4K)實現。
管道的局限性:
?
pipe()函數實現管道通信:
/*** 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; }?
轉載于:https://www.cnblogs.com/wanghao-boke/p/11311586.html
總結
以上是生活随笔為你收集整理的Linux进程通信之管道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷需要带身份证吗
- 下一篇: Linux进程通信之文件