我想将一个fifo重定向到stdout和 我阅读了文档http://man7.org/linux/man-pages/man2/tee.2.html
它说tee(int fd_in, int fd_out,...)
但是当我向第一个参数抛出一个fifo fd时,它表示无效错误。
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
int main() {
int num = 0, fd;
char fifo[] = "/tmp/tmpfifo";
fd = open(fifo, O_RDONLY, 0644);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
num = tee(fd, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
if (num < 0) {
perror("tee");
exit(EXIT_FAILURE);
}
fprintf(stderr,"%d\n", num);
return 0;
}
控制台显示:tee:无效参数。 第一个争论应该是stdin?
答案 0 :(得分:2)
确保您的this.dateRangeForm = new FormGroup({
holidayDataControl: new FormControl(null, Validators.required)
});
是管道。
stdout
(其中rm -f /tmp/tmpfifo
mkfifo /tmp/tmpfifo
echo hello world > /tmp/tmpfifo &
./a.out | cat #ensure that the program's stdout is a pipe
是您的计划)适合我。
答案 1 :(得分:1)
来自tee()
的手册页:
tee()从引用的管道复制最多len个字节的数据 文件描述符fd_in到文件引用的管道 描述符fd_out。
因此,两个文件描述符必须引用管道。
致电tee()
:
tee(fd, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
fd
是一个fifo,它又是一个管道,但STDOUT_FILENO
可能不会引用管道。
STDIN_FILENO
和STDOUT_FILENO
不一定是管道。
如果希望STDOUT_FILENO
引用管道,可以通过以下方式在shell的命令行运行程序:
yourProgram | cat