C 将标准输出重定向到几个地方

标签 c linux stdout io-redirection tee

将输出重定向到另一个目的地相当容易。我可以通过以下方式轻松实现这一目标:

freopen ("/def/tty0", "w", stdout);
printf ("Redirected");
fclose (stdout);

但是我怎样才能将它重定向到两个或更多文件呢?我需要与“tee”提供的类似功能。

有什么众所周知的方法吗?

最佳答案

这是不可能直接完成的:每个文件描述符都被分配给一个资源(通常是一个文件)。如果您希望写入FILE 能在写入多个文件时产生效果,则必须采取一些技巧。以下是一些想法:

  • 使用 GNU 独有的函数 fopencookie(3) 来创建一个实际上输出到多个文件的 FILE*。有关更多详细信息,请参阅 fopencookie(3) 的联机帮助页。
  • 制作一个管道,然后使用 fork 。 fork 进程从管道中读取数据,并将其读取到所需的所有文件中。原始进程写入管道。
  • 使用合适的参数调用 tee(1) 并将数据写入 tee(1) 的标准输入。请查看 popen(3),了解执行此操作的有用函数。

关于C 将标准输出重定向到几个地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420631/

相关文章:

c - 如何用Python编写二进制数据并用C读取它?

linux - 如何在unix shell中获取嵌套在同一配置文件中的变量的值

linux - 使用 Wget 获取长 URL

linux - Raspberry Pi GPIO/值文件暂时出现错误权限

c语言,标准输出中的额外消息?

python - 使用带有 sys.stdout 的 Python 'with' 语句

c - 如何纵向遍历一个trie?

c - 反转输入字符串

c - 在 C 代码中循环输入并使用终端一次将数据写入不同的文件

bash - bash脚本-字符串比较产生意外结果