在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);
}
答案 0 :(得分:0)
'more'可以从stdin或命令行上给出的文件中读取。看起来在文件路径是在命令行上给出的情况下,'more'打开该文件并重新执行自己,将打开的文件描述符设置为stdin。
在这样做时,'more'的实现核心总是从stdin读取。