【发布时间】:2021-05-23 16:36:23
【问题描述】:
我正在用 C 语言编写一个“shell”项目,当我尝试写入 stderr(发生错误时)时,会打印消息(stdout)但输出字符串没有到达 stderr(脚本对此进行测试,并且我们可以假设它有效)。
这就是我的脚本的结构
int main(int argc, char * argv) {
...
while(some_expression) {
switch(other_expression) {
...
case k:
raise_error();
break;
...
}
}
}
raise_error() 看起来像这样:
void raise_error() {
char error_message[30] = "An error has occurred\n";
write(STDERR_FILENO, error_message, strlen(error_message));
}
当我检查应该包含错误消息(由测试脚本生成)的文件时,它是空的,但错误消息出现在控制台输出(stdout)中。如果删除 main 中的所有内容,只需放入 raise_error(),它就会正常工作,并且错误消息会出现在 stderr 文件中。我还修改了 raise_error() 的下一个方式:
void raise_error() {
printf("Raise error method is reached");
char error_message[30] = "An error has occurred\n";
write(STDERR_FILENO, error_message, strlen(error_message));
}
然后我的输出如下所示:
An error has occurred
Raise error method is reached
我可能做错了什么?
【问题讨论】: