#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <limits.h> #include <string.h> #include <sys/wait.h> #include <error.h> #define DEF_PAGER "/bin/more" //定義處理函數(shù) #define MAXLINE 4096 //行最大字符數(shù) int main(int argc, char *argv[]) { int n; int fd[2]; pid_t pid; char *pager, *argv0; char line[MAXLINE]; FILE *fp; if (argc != 2) //如果參數(shù)不正確 { printf("請(qǐng)輸入正確的命令:<pathname>\n"); exit(1); } if ((fp = fopen(argv[1], "r")) == NULL) //如果以只讀打開(kāi)argv[1]指向的文件出錯(cuò) { printf("不能打開(kāi)文件%s", argv[1]); exit(1); } if (pipe(fd) < 0) //創(chuàng)建管道失敗 { printf("創(chuàng)建管道失敗\n"); exit(0); } if ((pid = fork()) < 0) //創(chuàng)建子進(jìn)程失敗 { printf("創(chuàng)建子進(jìn)程失敗\n"); exit(0); } else if (pid > 0) { //父進(jìn)程 close(fd[0]); //關(guān)閉讀文件描述符 //將argv[1]通過(guò)管道發(fā)送 while (fgets(line, MAXLINE, fp) != NULL) { n = strlen(line); if (write(fd[1], line, n) != n) { printf("寫(xiě)管道失敗\n"); exit(1); } } if (ferror(fp)) //如果文件描述符出錯(cuò) { printf("fgets 失敗\n"); exit(1); } close(fd[1]); // if (waitpid(pid, NULL, 0) < 0) { printf("waitpid失敗\n"); exit(1); } exit(0); } else //子進(jìn)程 { close(fd[1]); if (fd[0] != STDIN_FILENO) { if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO) { printf("dup2到標(biāo)準(zhǔn)輸入失敗\n"); exit(1); } close(fd[0]); /* don't need this after dup2 */ } //exec函數(shù)的參數(shù) if ((pager = getenv("PAGER")) == NULL) { pager = DEF_PAGER; } if ((argv0 = strrchr(pager, '/')) != NULL) { argv0++; } else { argv0 = pager; } if (execl(pager, argv0, (char *)0) < 0) { printf("調(diào)用execl失敗%s", pager); exit(1); } } exit(0); }
網(wǎng)頁(yè)題目:[Linux管道和IPC]管道的實(shí)際應(yīng)用2
網(wǎng)站路徑:http://aaarwkj.com/article12/gdisdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App設(shè)計(jì)、網(wǎng)站策劃、微信小程序、網(wǎng)站改版、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
全網(wǎng)營(yíng)銷(xiāo)推廣知識(shí)