命名管道实现进程的信息传递【mkfifo函数、open函数】
生活随笔
收集整理的這篇文章主要介紹了
命名管道实现进程的信息传递【mkfifo函数、open函数】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 代碼實現
- mkfifo函數
- open函數
代碼實現
#include<fcntl.h> // open() #include<sys/wait.h> // wait() #include<sys/types.h> // mkfifo() #include<sys/stat.h> // mkfifo() #include<iostream> #include<unistd.h> // fork()using namespace std;#define MAXLINE 80int main(){char buff[MAXLINE];if(mkfifo("fifo", 0664) == -1){cerr << "mififo: " << endl;exit(1);}pid_t pid = fork();if(pid < 0){cerr << "fork: " << endl;exit(1);}if(pid == 0){int read_fd = open("fifo", O_RDONLY);int len = read(read_fd, buff, MAXLINE);write(STDOUT_FILENO, buff, len);close(read_fd);exit(0);}else{int write_fd = open("fifo", O_WRONLY);write(write_fd, "cow a cow a!\n", 13);close(write_fd);wait(NULL);} }輸出結果:
mkfifo函數
mkfifo 是一個建立命名管道的函數。
表頭文件: #include<sys/types.h> #include<sys/stat.h> 定義函數: int mkfifo(const char * pathname,mode_t mode); 依參數 `pathname `建立特殊的 `FIFO` 文件,該文件必須不存在。 參數mode為該文件的權限。open函數
open 是 UNIX 系統(包括 LINUX、Mac 等)的系統調用函數,區別于C語言庫函數 fopen 。以可寫的方式 fopen 一個文件時,如果 文件不存在則會自動創建 ,而 open 一個文件時必須 明確 O_CREAT 才會創建文件 ,否則文件不存在就出錯返回。
頭文件:#include<fcntl.h> 定義函數: int open(constchar*pathname,int flags); int open(constchar*pathname,int flags,mode_t mode); 參數說明: 1.pathname —— 是待打開/創建文件的POSIX路徑名(如/home/user/a.cpp)。 2.flags —— 于指定文件的打開/創建模式,這個參數可由以下一個或者多個常量(定義于fcntl.h)進行“或”運算,構成falgs。 3.mode —— 僅當創建新文件時(即 使用了O_CREAT 時)才使用,用于指定文件的訪問權限位(access permission bits)。 參數選項:O_RDONLY: 只讀打開O_WRONLY: 只寫打開O_RDWR: 讀,寫打開 這三個常量,必須指定一個且只能指定一個O_CREAT: 若文件不存在,則創建它,需要使用mode選項。來指明新文件的訪問權限。O_APPEND: 追加寫,如果文件已經有內容,這次打開文件所寫的數據附加到文件的末尾而不覆蓋原來的內容。 返回值:成功:新打開的文件描述符。失敗:-1。 open返回的文件描述符一定是最小的而且沒有被使用的。總結
以上是生活随笔為你收集整理的命名管道实现进程的信息传递【mkfifo函数、open函数】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《四大名捕之铁手》超详全攻略
- 下一篇: 放鸽子什么的最讨厌了 15个跳票至201