您好,登錄后才能下訂單哦!
- #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))//創(chuàng)建管道
- {
- perror("pipe\n");
- exit(1);
- }
- //創(chuàng)建子程序
- if((ret=fork()) < 0)//創(chuàng)建失敗
- {
- perror("fork\n");
- exit(1);
- }
- else if(ret == 0)//子程序
- {
- FILE* fp;
- close(pipefd[0]);//關(guān)閉管道可讀端
- fp = fopen("./main.c","r"); //打開(kāi)已存在可讀文件
- if(NULL == fp)
- {
- perror("fopen\n");
- exit(1);
- }
- while(fgets(buf,MAXLINE,fp) != NULL)//將文件內(nèi)容全部讀入管道
- {
- int n = strlen(buf);
- if(n != write(pipefd[1],buf,n))
- {
- perror("write\n");
- exit(1);
- }
- }//end while
- if(ferror(fp))//在讀的過(guò)程文件是否有報(bào)錯(cuò)
- {
- perror("ferror\n");
- exit(1);
- }
- close(pipefd[1]);//關(guān)閉文件可寫(xiě)端
- exit(0);//退出子程序
- }
- else
- {
- close(pipefd[1]);//關(guān)閉管道可寫(xiě)端
- if(-1 == wait(NULL))//等待子程序完全將文件內(nèi)容讀入到管道
- {
- perror("wait\n");
- exit(1);
- }
- if(dup2(pipefd[0],STDIN_FILENO) != STDIN_FILENO)//重新設(shè)置標(biāo)準(zhǔn)輸入為管道可讀端
- {
- perror("dup2\n");
- exit(1);
- }
- if(execl("/bin/more","more",(char*)0) < 0 )//分頁(yè)程序 自動(dòng)調(diào)用標(biāo)準(zhǔn)輸入文件 顯示管道內(nèi)容
- {
- perror("execl\n");
- exit(1);
- }
- }
- return 0;
- }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。