IPC(一)---------匿名管道
一、管道的分類
管道分為匿名管道和命名管道。
匿名管道:
(1)、在關係程式中進行(父程式和子程式、兄弟程式之間)
(2)、由pipe系統呼叫,管道由父程式建立。
(3)、 管道位於核心空間、其實是一塊快取。
命名管道:
(1)、任何兩個程式間都可通過命名管道進行資料傳輸。
(2)、通過系統呼叫mkfifo建立。
(3)、本質是核心中的一塊快取,另外在檔案系統中以一個特殊的裝置檔案(管道檔案)存在。
二、本篇主要講匿名管道:
管道建立:
#include <unistd.h>
int pipe(int fd[2]);
返回: 成功返回0,出錯返回-1;
fd[0]: 為pipe的讀端
fd[1]:為pipe的寫端
三、管道建立和讀寫程式碼:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int main()
{
int fd[2];
pid_t pid;
//管道建立成功後,fd[0]是讀管道,fd[1]是寫管道
if(pipe(fd) < 0)
{
printf("pipe error\n");
exit(-1);
}
if((pid = fork())< 0)
{
printf("fork error\n");
exit(-1);
}
if(pid == 0)//子程式
{
close(fd[0]);//子程式關掉讀管道
printf("child process\n");
int start = 1,end = 100;
write(fd[1],&start,sizeof(start));
write(fd[1],&end,sizeof(end));
exit(0);
}
else
{
printf("parent child\n");
close(fd[1]);//父程式關掉寫管道
int start = 0,end = 0;
read(fd[0],&start,sizeof(start));
read(fd[0],&end,sizeof(end));
printf("start=%d,end=%d\n",start,end);
exit(0);
}
return 0;
}
執行結果:
相關文章
- 匿名管道通訊實現
- Linux系統程式設計之匿名管道Linux程式設計
- Windows程式通訊之一看就懂的匿名管道通訊Windows
- dotnet 替換 ASP.NET Core 的底層通訊為命名管道的 IPC 庫ASP.NET
- IPC call
- Android IPC 之AIDLAndroidAI
- IPC之套接字
- IPC 方法分類
- 管道 |
- linux ipc namespace筆記Linuxnamespace筆記
- Android IPC 機制分析Android
- Switch to short timeout for ipc polling
- angular 管道Angular
- 【linux】管道!!!Linux
- redis管道Redis
- Filter管道Filter
- Linux 管道Linux
- [Linux]管道Linux
- 推薦一個 PHP 管道外掛 LeaguePipelinePHP
- Go的程式設計模式一-管道PipelineGo程式設計設計模式
- 一行命令搭建內部的管道
- 介紹 Linux 中的管道和命名管道Linux
- 演算法鏈與管道(上):建立管道演算法
- 匿名物件物件
- IPC-程式間通訊
- 速度不夠,管道來湊——Redis管道技術Redis
- 推薦一個 PHP 管道外掛 League\PipelinePHP
- 一文學會Vue中介軟體管道Vue
- mongodb 聚合管道MongoDB
- windows命名管道Windows
- 管道系統
- Linux管道符Linux
- Linux 之管道Linux
- 關於IPC-Message通訊
- IPC(InterProcess Communication):程序間通訊
- Lazarus使用IPC收發訊息
- electron-ipc通訊效能分析
- JavaScript 匿名函式JavaScript函式