我想弄清楚如何正确使用tee
。在我的申请中,tee
由于某种原因总是返回EINVAL
。我变得绝望了,并试图运行tee
手册页中列出的示例应用程序(例如:https://linux.die.net/man/2/tee),但却发现即使该示例代码总是失败:{{1例如,当使用它时,如下所示:tee: Invalid argument
。知道为什么会这样吗?
来自die.net的示例代码:
cat tee.c | ./tee tee.log
答案 0 :(得分:2)
tee
需要两个文件描述符fd_in
和fd_out
的管道。
您的调用不为第二个文件描述符提供管道,而是提供引用TTY的文件描述符。另请注意,联机帮助页中的示例专门使用尾随| cat
:
The example below implements a basic tee(1) program using the tee() system call.
Here is an example of its use:
$ date |./a.out out.log | cat
Tue Oct 28 10:06:00 CET 2014
$ cat out.log
Tue Oct 28 10:06:00 CET 2014
不使用第二个(或第一个)参数的管道文件描述符符合EINVAL的条件:
EINVAL fd_in or fd_out does not refer to a pipe; or fd_in and fd_out refer to
the same pipe.