问题描述
我正在用 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,strlen(error_message));
}
我的输出如下所示:
An error has occurred
Raise error method is reached
我可能做错了什么?
解决方法
我认为您正在使用“>”将输出重定向到文件。如果您正在这样做,请尝试更改为此示例“命令 > 文件 2>&1”。相应地替换命令和文件。有关更详细的说明,请参阅 https://linuxize.com/post/bash-redirect-stderr-stdout/