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
是constant defined in unistd.h
:
为文件流定义了以下符号常量:
STDIN_FILENO
stdin的文件号。它是0。
STDOUT_FILENO
标准输出的文件号。是1。
STDERR_FILENO
stderr的文件编号。是2
由于这是一个常数,因此您无法重新分配它们。
关于c - dup错误:左值必须作为赋值的左操作数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28479641/