为什么打开我的文件描述符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;