gpt4 book ai didi

shell - 我可以创建自己的不同于 stdout 和 stderr 的输出流吗?

转载 作者:行者123 更新时间:2023-12-01 09:56:20 24 4
gpt4 key购买 nike

unistd.h 的 UNIX 手册页状态:

The following symbolic constants are defined for file streams:
STDIN_FILENO File number of stdin. It is 0.
STDOUT_FILENO File number of stdout. It is 1.
STDERR_FILENO File number of stderr. It is 2.

grepping 我所有的头文件,我发现这是真的。
[/usr]grep -r "STDIN_FILENO" include
include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */

[/usr] grep -r "STDOUT_FILENO" include
include/unistd.h:#define STDOUT_FILENO 1 /* Standard output. */

[/usr]grep -r "STDERR_FILENO" include
include/boost/asio/detail/impl/handler_tracking.ipp: ::write(STDERR_FILENO, line, length);
include/unistd.h:#define STDERR_FILENO 2 /* Standard error output. */

即使它们被定义了,它们似乎也从未被我机器上的任何其他 std 头文件使用。我觉得这很奇怪。也许 0,1 和 2 用于其他地方而不是定义的宏。宏只是存在被引用作为如何配置流的指示..?

无论如何,我们可以通过执行以下操作在 shell 中捕获特定的输出流:
./program 1> stdout.txt
./program 2> stderr.txt
./program > both.txt 2>&1

我想创建自己的输出流,并通过执行以下操作捕获它:
./program 3> mine.txt

我试着四处搜索 unistd.h以及 <iostream> 包含的其他文件看看如何 std::coutstd::cerr工作,但正如你想象的那样,我迷路了,困惑了。

我更感兴趣的是你是否能做到这一点,而不是这是否是一个好主意。

最佳答案

当您调用 open ,它返回一个数字。您将该号码传递给 readwrite .但是,您可以运行如下命令:

mycommand 3 3>bloop.txt

在 mycommand 中,将 argv[1] 转换为数字,并将其传递给 write。

关于shell - 我可以创建自己的不同于 stdout 和 stderr 的输出流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153251/

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