将输出重定向到另一个目的地相当容易。我可以通过以下方式轻松实现这一目标:
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/