我正在尝试使用管道将标准输入管道传输到文件中 我看到它的方式是,我需要让stdin成为管道的写入端 对于代码,这是我到目前为止:
int main(int argc, char** argv) {
int fd[2];
pipe(fd);
fd_set in;
FD_ZERO(&in);
FD_SET(fd[0], &in);
if(fork() == 0){
close(fd[0]);
dup2(fd[1], 0);
return 1;
}
else{
close(fd[1]);
select(fd[1] + 1, &in, NULL, NULL, NULL);
if(FD_ISSET(fd[0], &in)){
char buff[1024];
while(read(fd[0], &buff, sizeof(buff)) != 0){
write(1, buff, strlen(buff));
}
}
}
}
select语句会触发,但是当我从fd [0]读取时,那里什么也没有 有什么东西我不见了吗?
答案 0 :(得分:0)
在stdin上使用freopen()。这应该可以解决问题。
答案 1 :(得分:0)
dup2(fd[1], 0);
没有做你需要它做的事情。通话结束后,当某些内容写入您的流程的STDIN时,它不会进入管道fd[1]
。它只是使文件描述符0
引用进程中的管道 。什么都没有写入管道,所以没有什么可读的。