当前位置: 技术问答>linux和unix
同时把输出重定向到两个文件里
来源: 互联网 发布时间:2016-10-26
本文导语: 如何把一个输出流同时写到2个文件里?像unix下的tee命令一样,可以同时写到多个文件。|tee file1 file2 比如有一个文件描述符a,所有的流都被写到a对应的文件里。 现在我开了一个新的文件,它对应的文件表述符是b...
如何把一个输出流同时写到2个文件里?像unix下的tee命令一样,可以同时写到多个文件。|tee file1 file2
比如有一个文件描述符a,所有的流都被写到a对应的文件里。
现在我开了一个新的文件,它对应的文件表述符是b。
现在我想从某一时刻开始把写到a的内容同时写到b里(前提但是我不知道谁写到a里的)。
我试着用dup2(b,a), 这样可以把内容写到b里,但是a里的就没有了。
因为dup2会先关闭a。
请问有什么办法可以实现我的要求?同时让输入流写到a,b所对应的文件里?
用c,c++实现
谢谢
比如有一个文件描述符a,所有的流都被写到a对应的文件里。
现在我开了一个新的文件,它对应的文件表述符是b。
现在我想从某一时刻开始把写到a的内容同时写到b里(前提但是我不知道谁写到a里的)。
我试着用dup2(b,a), 这样可以把内容写到b里,但是a里的就没有了。
因为dup2会先关闭a。
请问有什么办法可以实现我的要求?同时让输入流写到a,b所对应的文件里?
用c,c++实现
谢谢
|
这个可以去看tee的源代码, 我觉得下面这种方式在应用层可以实现,不一定跟tee的实现完全一致.
首先创建一个管道, 然后把子进程的标准输出用dup定向到这个管道的输入. 这样子进程exec任何命令都输入到了这个管道.
父进程读取管道的输出,然后把所有读到的输出数据,分别写入file1, file2.
首先创建一个管道, 然后把子进程的标准输出用dup定向到这个管道的输入. 这样子进程exec任何命令都输入到了这个管道.
父进程读取管道的输出,然后把所有读到的输出数据,分别写入file1, file2.
|
tee的原理好像就是读取标准输入,同时写入标准输出及命令行中的文件
自己实现也不麻烦
自己实现也不麻烦