我对从管道中使用数据的更便携但最快捷的方式感兴趣。
例如,在linux中我能想到的最快的方法如下:
#define _GNU_SOURCE
/* ... */
int fd;
int pipefd[2];
pipe(pipefd);
/* ... */
fd = open("/dev/null", O_WRONLY);
splice(pipefd[0], NULL, fd, NULL, INT_MAX, SPLICE_F_MOVE);
......但它不便携。
更新1:
如果我关闭整个管道并在每次需要时创建一个管道怎么办?
/*consume*/
close(pipefd[0]);
close(pipefd[1]);
它会比使用其他方法更快,即read()/ write()?
答案 0 :(得分:2)
您确定此操作对您的程序至关重要吗?如果没有,只使用最简单的东西,可能是行cat the_pipe > /dev/null
或C中的等价物,循环读取(2)数据块(比如4KiB,或者可能得到“最佳”大小) ,在当前的Linux上,管道中的最大数据是64KiB;看一下pipe(7))。
也许更容易关闭数据的生产者,而不是只是把它扔掉?在性能方面,这是无法击败的......
答案 1 :(得分:0)
使用read
功能。
请参阅此处的手册页 - http://linux.die.net/man/3/read