我對使用管道數據更便攜但最快的方式感興趣。消耗管道數據的最佳方式是什麼?
例如,在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()更快嗎?
'pipe'符合POSIX標準,所以它可以在符合POSIX的系統上移植。不過,「splice」只是Linux系統調用。 – nhahtdh
爲什麼要使用管道中的數據? [你真正的問題是什麼?](http://mywiki.wooledge.org/XyProblem) – thkala
@thkala我只想從管道中消耗數據。我正在實現一個服務器,**例如**,假設有一個傳入連接,服務器處理請求並準備所有必需的事情以迴應客戶端,但發生了一些事情;客戶端關閉了連接。在這一點上,服務器不能迴應客戶端,現在服務器需要從中恢復以處理其他請求。 現在,您將如何處理之前由服務器填充的pipefd [0]內的數據?國際海事組織,或者你cosume數據或關閉管道。 – yeyo