为什么打开我的文件描述符0?

问题描述:

我正在使用一个管道和叉子的程序,并需要将写入结束更改为输出文件。但是当我打开一个文件时,文件描述符是0,通常是stdin,但我认为这是我的一些问题的原因。这是我的代码为什么打开我的文件描述符0?

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

有人可以让我知道它为什么是0吗?或者如何解决它?

这是因为你将它与-1进行比较。

outputfd没有得到open的结果。它得到-1的检查结果。

outputfd在您的代码行中不是输出文件描述符,而是等于FALSE(0)。这是因为open返回的文件描述符是不是== -1

它应该阅读:

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

还是应改为:

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

注意,这需要3个额外的括号 - 一个右括号剩下两个。

只是说明doron's answer

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

让我们简化:首先删除错误,并添加额外的punctutation,使它看起来像一个实际的stement现在

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

,有一个占位符代替函数参数

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

添加括号

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

open()-1的结果是什么时候?操作失败时。因此,让我们假设操作没有失败,用一个正数

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

没有正数都不能等于-1(不包括转换的问题),所以,等价测试总是假取代公开..以及假,在C,通过定义,0

outputfd = 0; 

C,关系运算符具有比higher precedence赋值运算符。