C将标准输出重定向到多个位置

C将标准输出重定向到多个位置,c,linux,stdout,io-redirection,tee,C,Linux,Stdout,Io Redirection,Tee,将输出重定向到另一个目的地相当容易。我可以通过以下方式轻松实现: freopen ("/def/tty0", "w", stdout); printf ("Redirected"); fclose (stdout); 但我如何将其重定向到两个或更多文件?我需要类似于“tee”提供的功能 有什么众所周知的方法吗?这是不可能直接做到的:每个文件描述符只分配给一个资源(通常是一个文件)。如果您想写入一个文件以产生对多个文件的写入,您必须做一些技巧。以下是一些想法: 使用GNU only函数fope

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

freopen ("/def/tty0", "w", stdout);
printf ("Redirected");
fclose (stdout);
但我如何将其重定向到两个或更多文件?我需要类似于“tee”提供的功能


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

这是不可能直接做到的:每个文件描述符只分配给一个资源(通常是一个文件)。如果您想写入一个
文件
以产生对多个文件的写入,您必须做一些技巧。以下是一些想法:

  • 使用GNU only函数
    fopencookie(3)
    创建一个实际输出到多个文件的
    文件*
    。有关更多详细信息,请参阅
    fopencookie(3)
    的手册页
  • 做一根管子,然后用叉子叉。分叉进程从管道中读取内容,并将其读取的内容写入所需的所有文件。原始进程写入管道
  • 使用合适的参数调用
    tee(1)
    ,并将数据写入
    tee(1)
    的标准输入。查看
    popen(3)
    ,了解一个有用的函数

否,您必须手动对其进行编码。
tee
命令通过两个文件进行编码:标准输出和另一个文件,并将所有输入写入这两个文件。这就是tee所做的一切。众所周知的方法是tee