2013-10-17 32 views
1

是否可以在Linux上的C++應用程序中使用mmap(),該應用程序必須接收來自文件的管道輸入,如果是這樣,比從流中讀取個別/ page_amount字節更快嗎?在接收管道數據的應用程序中使用mmap()?

我不確定mmap()是可能的,因爲管道系統涉及一個流,而不會mmap()立即需要所有的數據availale?

回答

1

您不能mmap一個流,因爲流緩衝區中的數據只能讀取一次。可接收數據的長度在運行時也是不確定的。你最好的選擇是給mmap足夠的內存空間,然後用它作爲接收緩衝區。

如果您使用stdio函數從您的流中讀取數據,那麼塊大小無關緊要。圖書館將自動選擇最優的一個(通常一次一頁)。但是,如果您打算使用read,那麼以大塊頁面閱讀將會爲您提供最佳性能。

+0

因此,page_size字節上的read()是讀取管道輸入的最快方法嗎?比將mmap()中的page_size字節讀入並迭代它更快?我只需要查看每個字節一次。 – mezamorphic

+0

@mezamorphic這些將同樣快,但可能更快更便攜的方式將'fread'('stdio.h')放入任何具有最適合您的應用程序的塊大小的任意緩衝區中。 –

相關問題