當從乙個程序連線資料流到另乙個程序時,我們使用術語「管道」。我們通常是把乙個程序的輸出管道連線到另乙個程序的輸入。
(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 寫管道...