gpt4 book ai didi

c++正确关闭cout

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:31 24 4
gpt4 key购买 nike

我想编写一个充当远程 shell 的守护进程。因此,我必须关闭 stdin、stdout 和 stderr。

现在我想知道这是如何正确完成的。

std::streambuf * old = std::cout.rdbuf(mStdOut.rdbuf());
std::cout << "Bla" << std::endl;
std::string text = mStdOut.str();

这有效,流现在被重定向。但“老”是什么意思?这不是应该删除的旧缓冲区吗?当我尝试删除它时,我得到一个空指针异常,即使指针本身不是 NULL。那么我怎样才能摆脱它,或者我可以简单地忽略它呢?如果忽略它,守护进程是否正确地与终端解除关联?

stderr 和 stdin 也是如此,但我认为处理方式是一样的。

最佳答案

您需要做的就是关闭实际的文件描述符。这当然是特定于平台的,但守护进程也是如此。因此,对于 POSIX 平台,您可以为此使用 POSIX API。重定向 cout 后,您可以:

close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

您可能还想阅读:

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

关于c++正确关闭cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com