我正在用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我可能做错了什么?
发布于 2021-02-21 11:08:38
我认为您正在使用">“将输出重定向到一个文件。如果您正在执行此操作,请尝试更改为本例中的“命令>文件2>&1”。相应地替换命令和文件。有关更详细的说明,请参阅https://linuxize.com/post/bash-redirect-stderr-stdout/
https://stackoverflow.com/questions/66298701
复制相似问题