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_FILENOconstant defined in unistd.h


  为文件流定义了以下符号常量:
  
  STDIN_FILENO
      stdin的文件号。它是0。
  STDOUT_FILENO
      标准输出的文件号。是1。
  STDERR_FILENO
      stderr的文件编号。是2


由于这是一个常数,因此您无法重新分配它们。

关于c - dup错误:左值必须作为赋值的左操作数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28479641/

10-11 16:26