三通总是返回EINVAL

时间:2016-11-05 12:48:56

标签: c linux

我想弄清楚如何正确使用tee。在我的申请中,tee由于某种原因总是返回EINVAL。我变得绝望了,并试图运行tee手册页中列出的示例应用程序(例如:https://linux.die.net/man/2/tee),但却发现即使该示例代码总是失败:{{1例如,当使用它时,如下所示:tee: Invalid argument。知道为什么会这样吗?

来自die.net的示例代码:

cat tee.c | ./tee tee.log

1 个答案:

答案 0 :(得分:2)

tee需要两个文件描述符fd_infd_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.