首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >沉默标准/标准标准

沉默标准/标准标准
EN

Stack Overflow用户
提问于 2021-12-15 22:27:43
回答 2查看 288关注 0票数 2

什么是与this C++ answer的C等价的临时 silencing output to cout/cerr,然后恢复 it?

如何保持沉默和恢复stderr/stdout

(需要这样做才能使我调用的第三方库中的噪音保持安静,并在调用后恢复。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-15 22:48:36

这是一次可怕的黑客攻击,但应该有效:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>


int
suppress_stdout(void)
{
    fflush(stdout);
    int fd = dup(STDOUT_FILENO);
    freopen("/dev/null", "w", stdout);
    return fd;
}

void
restore_stdout(int fd)
{
    fflush(stdout);
    dup2(fd, fileno(stdout));
    close(fd);
}

int
main(void)
{
    puts("visible");
    int fd = suppress_stdout();
    puts("this is hidden");
    restore_stdout(fd);
    puts("visible");
}
票数 3
EN

Stack Overflow用户

发布于 2021-12-15 22:29:59

代码语言:javascript
复制
#include <stdio.h>

#ifdef _WIN32
#define NULL_DEVICE "NUL:"
#define TTY_DEVICE "COM1:"
#else
#define NULL_DEVICE "/dev/null"
#define TTY_DEVICE "/dev/tty"
#endif

int main() {
    printf("hello!\n");

    freopen(NULL_DEVICE, "w", stdout);
    freopen(NULL_DEVICE, "w", stderr);

    printf("you CAN'T see this stdout\n");
    fprintf(stderr, "you CAN'T see this stderr\n");

    freopen(TTY_DEVICE, "w", stdout);
    freopen(TTY_DEVICE, "w", stderr);

    printf("you CAN see this stdout\n");
    fprintf(stderr, "you CAN see this stderr\n");
    return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70371091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档