为什么更多的命令不是用stdin读取输入?

时间:2015-01-19 12:58:31

标签: c linux exec dup2

在more命令中,它不会读取stdin的输入。但是使用dup2()函数将stdin更改为一个文件描述符,那时它将起作用。为什么这样做?

#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
main()
   {
   int fd=open("coprocess.c",O_RDWR);

    if ( fork() ==  0 ) 
    { 
    dup2(fd,0);
    close(fd);
    execl("/bin/more","more",(char *)0);
    printf("error\n");
    }
    else 
    wait(0);

}

1 个答案:

答案 0 :(得分:0)

'more'可以从stdin或命令行上给出的文件中读取。看起来在文件路径是在命令行上给出的情况下,'more'打开该文件并重新执行自己,将打开的文件描述符设置为stdin。

在这样做时,'more'的实现核心总是从stdin读取。