您好,登錄后才能下訂單哦!
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #define MAXLINE 100
- char buf[MAXLINE];
- int main(int argc, char** agrv)
- {
- int pipefd[2];
- int ret;
- if(0 != pipe(pipefd))//創建管道
- {
- perror("pipe\n");
- exit(1);
- }
- //創建子程序
- if((ret=fork()) < 0)//創建失敗
- {
- perror("fork\n");
- exit(1);
- }
- else if(ret == 0)//子程序
- {
- FILE* fp;
- close(pipefd[0]);//關閉管道可讀端
- fp = fopen("./main.c","r"); //打開已存在可讀文件
- if(NULL == fp)
- {
- perror("fopen\n");
- exit(1);
- }
- while(fgets(buf,MAXLINE,fp) != NULL)//將文件內容全部讀入管道
- {
- int n = strlen(buf);
- if(n != write(pipefd[1],buf,n))
- {
- perror("write\n");
- exit(1);
- }
- }//end while
- if(ferror(fp))//在讀的過程文件是否有報錯
- {
- perror("ferror\n");
- exit(1);
- }
- close(pipefd[1]);//關閉文件可寫端
- exit(0);//退出子程序
- }
- else
- {
- close(pipefd[1]);//關閉管道可寫端
- if(-1 == wait(NULL))//等待子程序完全將文件內容讀入到管道
- {
- perror("wait\n");
- exit(1);
- }
- if(dup2(pipefd[0],STDIN_FILENO) != STDIN_FILENO)//重新設置標準輸入為管道可讀端
- {
- perror("dup2\n");
- exit(1);
- }
- if(execl("/bin/more","more",(char*)0) < 0 )//分頁程序 自動調用標準輸入文件 顯示管道內容
- {
- perror("execl\n");
- exit(1);
- }
- }
- return 0;
- }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。