【发布时间】:2015-02-12 14:11:32
【问题描述】:
dup 的文档说返回值在新文件描述符中或错误 -1。
我收到了这个错误,我真的不知道为什么:
mav@mav-MS-7592:~/FRI/OSIZPIZ$ gcc pipe.c -o pipe
pipe.c: In function ‘main’:
pipe.c:26:16: error: lvalue required as left operand of assignment
STDIN_FILENO = dup(fd[0]);
这是我的代码:
int main(int argc, char* argv[]){
//fd[0] - reading
//fd[1] - writing
int fd[2];
pid_t childpid;
if(pipe(fd) == -1) errexit("pipe");
//child 0
//parent PID
if((childpid = fork()) == -1) errexit("fork");
if(childpid == 0){
close(fd[1]);
STDIN_FILENO = dup(fd[0]);
}else{
close(fd[0]);
STDOUT_FILENO = dup(fd[1]);
}
return 0;
}
我知道,我可以通过 dup2(fd[0], STDIN_FILENO); 避免这种情况。但我只想用 dup...
提前致谢!
【问题讨论】:
-
STDIN_FILENO(和STDOUT_FILENO)可能是宏,你并不真正知道它们做什么或它们扩展成什么。你应该看看预处理器的输出,看看它到底是什么。 -
哦,谢谢...完全忘记了...
STDIN_FILENO是常量设置为 0 等等。
标签: c pipe pipeline system-calls