Why does open make my file descriptor 0?

独自空忆成欢 提交于 2019-11-28 02:15:53

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.

doron

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.

pmg

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;
Ignacio Vazquez-Abrams

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!