【问题标题】:print to stderr is not reaching stderr打印到 stderr 未达到 stderr
【发布时间】: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

我可能做错了什么?

【问题讨论】:

标签: c stderr


【解决方案1】:

我认为您正在使用“>”将输出重定向到文件。如果您正在这样做,请尝试更改为此示例“命令 > 文件 2>&1”。相应地替换命令和文件。更详细的解释参考https://linuxize.com/post/bash-redirect-stderr-stdout/

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 2016-03-13
    • 2020-01-24
    • 2016-12-24
    • 2011-07-31
    • 2020-09-03
    • 1970-01-01
    • 2011-08-10
    • 2011-06-18
    相关资源
    最近更新 更多