程序間通訊機制02 管道

2021-08-15 04:43:11 字數 1877 閱讀 8439

當從乙個程序連線資料流到另乙個程序時,我們使用術語「管道」。我們通常是把乙個程序的輸出管道連線到另乙個程序的輸入。

(1)它是半雙工的(即資料只能在乙個方向上流動),具有固定的讀端和寫端。

(2)它只能用於具有親緣關係的程序之間的通訊(也是父子程序或者兄弟程序之間)。

(3)它可以看成是一種特殊的檔案,對於它的讀寫也可以使用普通的read、write 等函式。但是它不是普通的檔案,並不屬於其他任何檔案系統,並且只存在於記憶體中。

(1)fifo可以在無關的程序之間交換資料,與無名管道不同。

(2)fifo有路徑名與之相關聯,它以一種特殊裝置檔案形式存在於檔案系統中。

(1)popen函式方式:

#include 

#include

#include

#include

int main()

pclose(read_fp);

exit(exit_success);

}exit(exit_failure);

}

(2)除了高階的popen函式,還有更底層的pipe函式方式:

#include 

#include

#include

int main()

if (fork_result == 0) else

}exit(exit_failure);

}

分別由兩個檔案共同實現,fifo1.c用來寫管道,fifo.c用來讀管道。

(1)fifo1.c實現:

#include 

#include

#include

#include

#include

#include

#include

#include

#define fifo_name "/tmp/my_fifo"

#define buffer_size pipe_buf

#define ten_meg (1024 * 1024 * 10)

int main()

}printf("process %d opening fifo o_wronly", getpid());

pipe_fd = open(fifo_name, open_mode);

printf("process %d result %d\n", getpid(), pipe_fd);

if (pipe_fd != -1) else

}(void)close(pipe_fd);

} else

printf("process %d finished\n", getpid());

exit(exit_success);

}

(2)fifo2.c實現:

#include 

#include

#include

#include

#include

#include

#include

#include

#define fifo_name "/tmp/my_fifo"

#define buffer_size pipe_buf

int main() while (res > 0);

(void)close(pipe_fd);

} else

printf("process %d finished, %d bytes read\n", getpid(), bytes_read);

exit(exit_success);

}

程序間通訊 匿名管道通訊

將關於匿名管道通訊過程中遇到的問題以及心得總結一下 使用場合 匿名管道通訊對執行緒間通訊和父子程序之間的通訊非常有用 一下 分三部分 1.建立匿名管道 2.建立子程序 1 使用getstdhandle函式獲取標準輸出裝置的控制代碼 2 使用setstdhandle函式將標準輸出到寫匿名管道 3 使用...

程序間通訊方式 管道通訊

c語言中的管道通訊是通過在核心中開闢一塊空間,使用者通過檔案io介面來訪問這塊空空間實現通訊目的。管道的優點是直接訪問記憶體,通訊速度較快。缺點是一方面管道屬於半雙工的通訊,即同一程序只能讀或者寫,無法同時讀寫同一管道。另一方面管道中的資料只能讀一次,無法重複讀取。程序通過檔案io來操作管道,但是不...

程序間通訊 之 管道

一 無名管道 特點 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。1 無名管道的建立 int pipe int pipefd 引數 pipefd 陣列的首位址 返回值 成功返回0,失敗返回 1 注意 無名管道存在核心空間,建立成功會給使用者空間兩個檔案描述符,fd 0 讀管道 fd 1 寫管道...