均為整理的資料,侵刪.
ipc的通訊方式-管道.管道一般分為匿名管道和有名管道.
管道是最基本的程序通訊的方式.
匿名管道特點只能在父子程序之間進行使用.
有名管道客戶克服管道沒有名字的限制.因此,除了具有管道所具有的功能之外,還允許無親緣關係程序之間的通訊.
匿名管道(pipe)
特徵:
要實現管道,我們首先介紹兩個函式:
1.建立管道
呼叫 int pipe(int pipefd[2])
實現通訊的步驟如下:
//僅作參考例子
#include#include#include#includeint main()
pid_t pid = fork();
if(pid == 0)else;
int re = read(fds[0],buf,34);
printf("%s\n",buf);
close(fds[0]);
exit(0);
}return 0;
}
有名管道(fifo)
匿名管道雖然實現了程序間通訊,但是有一定的侷限性: 匿名管道必須是有血緣關係的程序進行通訊; 第二它只能單工通訊,乙個程序寫乙個程序讀.
有名管道
系統函式建立
- int mknod(const char * path,mode_t mod , dev_t dev);
- int mkfifo(const char * path, mod_t mod);
#include #include #include int main()
return 0;
}
後續的操作,我們可以把這個命名管道當作普通檔案一樣進行操作:open(),write(),read(),close().
操作命名通道肯定要考慮預設情況的阻塞特性.
性質:
舉例
#include #include #include #include #include int main()
char se[100] = "he"
wirte(re,se,strlen(se));
return 0;
}
#include #include #include #include #include int main()
char se[100] ;
read(re,se,100);
return 0;
}
程序間通訊 管道
include int pipe int fd 2 返回值 若成功,返回0,若出錯,返回 1經由引數fd返回兩個檔案描述符 fd 0 為讀而開啟,fd 1 為寫而開啟。fd 1 的輸出是fd 0 的輸入。else if pid 0 子程序 else else if pid 0 父程序 printf ...
程序間通訊 管道
原文 程序間通訊 管道 管道簡介 常說的管道都是匿名半雙工管道,匿名半雙工管道在系統中是沒有實名的,並不可以在檔案系統中以任何方式看到該管道。它只是程序的一種資源,會隨著程序的結束而被系統清除。管道通訊是在unix系統中應用比較頻繁的一種方式,例如使用grep查詢 ls grep ipc 顧名思義,...
程序間通訊 管道
程序間通訊,又稱為ipc,包含以下型別 半雙工管道fifo 全雙工管道 訊息佇列 訊號 訊號量共享記憶體 套接字socket streams。一,管道是unix系統ipc的最古老形式,他具有兩種侷限性 1 資料只能在乙個方向上流動 2 只能在具有公共祖先的程序之間使用。乙個管道由乙個程序建立,然後該...