【问题标题】:dup error: lvalue required as left operand of assignmentdup 错误:需要左值作为赋值的左操作数
【发布时间】: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


【解决方案1】:

STDIN_FILENOconstant defined in unistd.h

为文件流定义了以下符号常量:

STDIN_FILENO stdin 的文件编号。它是 0。 STDOUT_FILENO stdout 的文件编号。它是 1。 STDERR_FILENO stderr 的文件编号。是 2。

因为它是一个常数,你不能重新分配它们。

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 2011-03-04
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多