程序間通訊 管道學習筆記

2021-10-03 14:23:38 字數 1417 閱讀 9242

均為整理的資料,侵刪.

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 只能在具有公共祖先的程序之間使用。乙個管道由乙個程序建立,然後該...