sendfile()
は、マシンAからマシンBにデータを取得するために、「ファイル」ディスクリプタから「ソケット」ディスクリプタにデータを送信するために使用できます。 "socket"記述子から同様のゼロコピーのセマンティクスを持つファイルへの受信側?私はsendfile()
が助けにならないと思うのは、sendfile()
が "ページ/バッファ"キャッシュであるデータのソースを必要とするからです。私の理解は正しいのですか?この状況ではsplice()
が役に立ちますか?sendfile()およびsplice()の理解
6
A
答えて
11
sendfile
の制限についてはこれが正しいです。そして、はい、splice
が助けになるかもしれませんが、それは自明ではありません。splice
は、ソースファイル記述子またはターゲットファイル記述子の少なくとも1つがパイプであることを要求します。したがって、ソケットからプレーンなファイル記述子に直接splice
することはできません。
概念的に、あなたはそれを動作させるために何ができるかです:
- セットアップは、あなたのインバウンドソケットFDと出力ファイルのFD普段
- がループに
pipe(2)
- とのパイプを作成して:パイプの読み出し側から番目に
splice
- ライト付きパイプの書き込み側にソケットから読み出さ
splice
れた電子ファイルも
すべてのデータが読み込まれるまで、最後の手順を繰り返します。
Zero-Copy in Linux with sendfile() and splice()には、この手法の実装があります。
関連する問題
- 1. Android:TabLayout、ViewPager、フラグメント、およびアダプターの理解
- 2. 理解度:後および:前
- 3. T-SQL stdev、stdevp、var、およびvarpの理解
- 4. 非同期およびコールバックの理解と命名規則
- 5. ZFデータベースセッションの使用、保護、理解、および取得方法
- 6. NSMutableStringおよびメモリ管理
- 7. XMLファイルの解釈および操作
- 8. DOM解析およびJavaScriptの実行
- 9. オーディオストリーミング、NSTimer、およびJSONシナリオの解析
- 10. Javaおよびメモリ管理のオブジェクトライフサイクル?
- 11. Pythonのビデオおよびオーディオ処理ライブラリ
- 12. CakePHPのログインおよびセッション管理
- 13. Java演算子の論理&&および||
- 14. ミュートおよびミュート解除ボタントグルHTML5オーディオ
- 15. フリーダイヤルブリッジオブジェクト、保持および解放
- 16. 解析および保存するクラス
- 17. メモリ管理、ヒープ破損、およびC++
- 18. Windows、Linux、およびメモリ管理
- 19. iOSメモリ管理、UIWindow addSubview:およびタブコントローラ
- 20. SDL、OpenGLおよびIOS処理例外
- 21. バッチプログラミング、エラー処理、およびスタートコマンド
- 22. Android:inputTypeなしおよび物理キーボード
- 23. 処理ループ、ミリ秒およびランダム
- 24. Entity Framework:EntityCollection.AttachおよびEntityReference.Attachの目的を理解できません
- 25. 出力を処理するためのJSON/XML解析およびjQueryコールバック
- 26. XML解析(および検証)Cプログラムの解析
- 27. SQLクエリのINSERT、DELETE、およびUPDATEの論理クエリ処理フェーズ
- 28. クラス、モジュール、およびクラス<<自己方法を理解していない
- 29. VB.NETの代理人およびマルチキャスト代理人
- 30. 開発者および管理者の問題管理システム
2.6.33以降、sendfileのout_fdには、ソケットだけでなく、任意のファイル記述子を使用できます。 – ldrg
4.2スプライス()の場合と同じです。 – technosaurus