程序通訊 管道聽課筆記

2021-08-30 23:12:02 字數 1933 閱讀 5002

[size=medium]程序間通訊(ipc)作用[/size]

1.資料傳輸

2.共享資源

3.通知事件

4.程序控制

[size=medium]ipc的方式 6種[/size]

1.管道(pipe)和有名管道(fifo)

2.訊號(signal)

3.訊息佇列

4.共享記憶體

5.訊號量

6.套接字

[size=x-large]管道[/size]

一程序寫入管道尾部,另一程序從管道頭讀出

讀空管道,程序被阻塞

寫滿管道,程序被阻塞

[img]

[size=large]無名管道[/size]多用於父子程序間的通訊

int pipe(int filedis[2])//建立無名管道

filedis檔案描述符

filedis[0]用於讀管道

filedis[1]用於寫管道

//管道的建立和關閉

#include

#include

#include

#include

int main()else

//關閉pipe

close(pipe_fd[0]);

colse(pipe_fd[1]);

}

通常[color=red]先建立乙個管道, 再通過fork建立乙個子程序[/color],子程序會繼承父程序所建立的管道

[img]

[size=large]有名管道[/size]

#include

#include

int mkfifo(const char *pathname, mode_t mode)

pathname:fifo的路徑

讀寫管道時: 非阻塞標誌o_nonblock,非阻塞時,出錯立即返回,errno是enxio

刪除管道

unlink(const char *pathname)

讀有名管道

#include

#include

#include

#include

#include

#include

#include

#define fifo "/tmp/myfifo"

main(int argc,char** argv)

while(1)

printf("read %s from fifo\n",buf_r);

sleep(1);

} pause(); /*暫停,等待訊號*/

unlink(fifo); //刪除檔案

}

寫有名管道

#include

#include

#include

#include

#include

#include

#include

#define fifo_server "/tmp/myfifo"

main(int argc,char** argv)

strcpy(w_buf,argv[1]);

/* 向管道寫入資料 */

if((nwrite=write(fd,w_buf,100))==-1)

else

printf("write %s to the fifo\n",w_buf);

}

程序通訊 管道通訊

程序間通訊 目的 資料傳輸 乙個程序需要將它的資料傳送給另乙個程序 資源共享 多個程序之間共享同樣的資源 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件 程序控制 有些程序希望完全控制另乙個程序的執行 如debug程序 此時控制程序希望能夠攔截另乙個程序的所有操作,並能夠及...

程序通訊 管道通訊

自己的理解,首先要區分概念 管道和管道通訊 所謂 管道 是指用於連線乙個讀程序和乙個寫程序以實現它們之間通訊的乙個共享檔案,又名pipe檔案 是一種特殊的檔案,這就意味著你可以向操作檔案一樣操作無名管道,無名管道在核心中對應的是一段特殊的記憶體空間,這段記憶體空間由作業系統進行管理,對使用者是不可見...

Linux 程序通訊(管道)筆記

當今比較常用的有 管道 使用簡單 訊號 開銷最小 共享對映區 無血緣關係 本地套接字 最穩定 管道又分為 無名管道和有名管道fifo 無名管道 只能用於有親屬關係的程序間 有名管道 可以用在有親屬關係的程序間也可用在無親屬關係的程序間 管道是基於檔案描述符的通訊方式,當乙個管道建立時,它會建立兩個檔...