0

パイプからデータを消費するための、よりポータブルで最速の方法に興味があります。

たとえば、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() を使用するよりも高速ですか?

4

2 に答える 2

2

この操作がプログラムのパフォーマンスにとって重要であると確信していますか? そうでない場合は、機能する最も単純なもの、おそらくラインに沿ったもの、cat the_pipe > /dev/nullまたは C の同等のもの、データのブロックを read(2) するループ (たとえば 4KiB、または現在の Linux で「最適な」サイズを取得する) を使用します。パイプの最大データは 64KiB です; pipe(7) を見てください)。データをただ捨てるよりも、データの作成者を黙らせた方が簡単なのではないでしょうか? 性能面では、これに勝るものはありません...

于 2013-01-20T03:33:49.793 に答える
0

機能を使用してくださいread。ここの man ページを参照してください - http://linux.die.net/man/3/read

于 2013-01-16T09:40:00.163 に答える