Why does open make my file descriptor 0?

前端 未结 4 1327
自闭症患者
自闭症患者 2020-12-07 03:52

I\'m working on a program that is using a pipe and forks and need to change the write end to an output file. But when I open a file the file descriptor is 0 which is usuall

相关标签:
4条回答
  • 2020-12-07 04:33

    In C, relational operators have higher precedence than assignment operators.

    0 讨论(0)
  • 2020-12-07 04:50

    It's because you're comparing it to -1.

    outputfd doesn't get the result of open. It gets the result of the check for -1.

    0 讨论(0)
  • 2020-12-07 04:51

    outputfd in your line of code is not the output file descriptor but rather is equal to FALSE (0). This is because the file descriptor returned by open is not == -1

    It should read:

    outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC);
    if (outputfd < 0)
    {
       // error handling code
    }
    

    Or it should read:

    if ( ( outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) ) == -1)
    {
        // error handling code
    }
    

    Note that this required 3 extra parentheses - one right parenthesis and two left.

    0 讨论(0)
  • 2020-12-07 04:55

    Just illustrating doron's answer:

    >> outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1)

    Let's simplify: first remove errors and add extra punctutation to make it look like an actual stement

       outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1;
    

    Now, replace function parameters with a placeholder

       outputfd = open(<PLACEHOLDER>) == -1;
    

    Add parenthesis

       outputfd = (open(<PLACEHOLDER>) == -1);
    

    When is the result of open() -1? When the operation failed. So let's assume the operation didn't fail and replace the open with a positive number

       outputfd = (<POSITIVENUMBER> == -1);
    

    No positive number can ever be equal to -1 (barring conversion problems) so the equality test is always false ... and false, in C is, by definition, 0

       outputfd = 0;
    
    0 讨论(0)
提交回复
热议问题