除了 stdout/stderr 之外,如何在 Linux 上创建自定义文件描述符?

问题描述 投票:0回答:1

我想创建一个特殊的文件描述符以与 /dev/std{in,out,err} 共存。例如,假设创建了 /dev/fd/3 和 /dev/customout,并且所有程序和脚本都可以像使用 stderr 一样使用它。

特别是,如果我有以下脚本demo.sh

#!/usr/bin/env bash

echo hello from fd 3 aka customout >& /dev/customout

echo hello from stdout

这样调用可以让 customout 保持沉默

./demo.sh 3>/dev/null

应仅输出标准输入数据(加上任何标准错误)

hello from stdout

并像这样调用以沉默标准输入

./demo.sh 1>/dev/null

应仅输出自定义数据(加上任何标准错误)

hello from fd 3 aka customout

但是不重定向的调用应该显示一切:

./demo.sh

应该输出stdout、stderr、customout

hello from fd 3 aka customout
hello from stdout

附注也许“客户”是这个概念的更好名称。

存在这个问题,但它并不完全是我想要实现的目标:

如何在linux上创建自定义文件描述符

linux file-descriptor stderr
1个回答
0
投票

程序继承其父程序的 fd。如果你编写一个打开 4 个 fd 的 shell 并使用 fork/execve 启动一个程序,那么它将继承 4 个 fd。另请参阅 execve() 和共享文件描述符

© www.soinside.com 2019 - 2024. All rights reserved.