0
在命令行上,sort
程序可以給予輸入,^D
作爲輸入排序程序如何遇到EOF?
$ sort
xyz
def
abc
^D
abc
def
xyz
下面程序正在使用管來執行相同的端部,
#include<stdio.h>
#include<stdlib.h>
int main(void){
FILE *pipeFP;
char *str[3] = {"xyz\n", "def\n", "abc\n"};
if((pipeFP = popen("sort", "w")) == NULL){
perror("popen error");
exit(1);
}
/*
popen() performs the following:
1) In parent process, calls pipe() for creating two descriptors, read descriptor is closed, write descriptor is converted to FILE type stream
2) In parent process, calls fork() to create child process and execs with sort program.
3) In child process, write end descriptor is closed, read descriptor is dup2 to stdin
*/
/* Sending string list to sort program*/
fputs(str[0], pipeFP);
fputs(str[1], pipeFP);
fputs(str[2], pipeFP);
pclose(pipeFP);
}
在這種程序,^D
未發送至sort
子進程,sort
如何實現e nd的輸入?
你正在關閉管道幾乎終止輸入流.... –
@EugeneSh。你的意思是,在關閉寫入流('pclose(pipeFP)')後實際給出輸出 – overexchange
你可以很容易地驗證它... –