Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does open make my file descriptor 0?

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 usually stdin but which I think is the cause of some of my problems. Here is my code

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

Can someone let me know why it is 0? Or how to fix it?

like image 615
TrentEllingsen Avatar asked Nov 27 '25 15:11

TrentEllingsen


1 Answers

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.

like image 178
doron Avatar answered Nov 29 '25 11:11

doron



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!