我正在开发一个使用管道和分叉的程序,并且需要将写入端更改为输出文件。但是当我打开一个文件时,文件描述符为 0,这通常是标准输入,但我认为这是我的一些问题的原因。这是我的代码
if (outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1)
{
// open failed
}
谁能告诉我为什么是0?或者如何解决?
我正在开发一个使用管道和分叉的程序,并且需要将写入端更改为输出文件。但是当我打开一个文件时,文件描述符为 0,这通常是标准输入,但我认为这是我的一些问题的原因。这是我的代码
if (outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1)
{
// open failed
}
谁能告诉我为什么是0?或者如何解决?
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 个额外的括号 - 一个右括号和两个左括号。
这是因为您将其与-1
.
outputfd
没有得到open
. 它得到检查的结果-1
。
只是说明了多伦的答案:
>> outputfd = open("文件", O_RDWR | O_CREAT | O_TRUNC) == -1)
让我们简化一下:首先删除错误并添加额外的标点符号,使其看起来像一个真正的词干
outputfd = open("file", O_RDWR | O_CREAT | O_TRUNC) == -1;
现在,用占位符替换函数参数
outputfd = open(<PLACEHOLDER>) == -1;
添加括号
outputfd = (open(<PLACEHOLDER>) == -1);
open() -1 的结果是什么时候?当操作失败时。所以让我们假设操作没有失败并将 open 替换为正数
outputfd = (<POSITIVENUMBER> == -1);
没有任何正数可以等于 -1(除非有转换问题),所以相等性测试总是错误的......并且错误,C
根据定义,0
outputfd = 0;
在 C 中,关系运算符的优先级高于赋值运算符。