問題タブ [sendfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
906 参照

c++ - linux-aio で sendfile() のような操作は可能ですか?

バッファリングせずに、ユーザー空間との間でデータを転送せずに、あるファイル記述子から別のファイル記述子にデータを送信したいと考えています。そのような sendfile64() 関数は linux-aio で可能ですか?

いくつかの linux-aio の例 (C/C++) と単純なファイル コピー プログラムを調べました。これらの例はすべて、読み取り -> バッファ -> 書き込みを行います。

よろしく、フィリップ

0 投票する
2 に答える
1312 参照

ruby-on-rails - Rails 4、アセット パイプラインにより、ユーザーがダウンロード可能なファイルが 2 回ダウンロードされる

ユーザーがファイルをアップロードしたりファイルをダウンロードしたりできる「uploads」という名前のアプリ ディレクトリにフォルダーがあります。ダウンロードの承認を制御したいので、uploads フォルダーを public ディレクトリに入れたくありません。

私のコントローラーには、次のものがあります。

これは実際にはうまく機能します。問題は、実稼働サーバーで rake assets:precompile を実行し、assets ディレクトリを作成すると、ファイルが 2 回ダウンロードされることです。ファイルを初めてダウンロードするとき、ブラウザは何もしていないかのように動作しますが (読み込みが回転していない)、Google Chrome Web 開発者の [ネットワーク] タブでデータが転送されているのがわかります。ファイルがダウンロードされると、ユーザーにファイルをダウンロードするかどうかを尋ねるプロンプトが表示されます。

public ディレクトリの assets フォルダーを削除すると、この問題は解消されますが、アセット パイプラインを使用したいと考えています。また、アセット パイプラインの要件を require_tree から require_directory に変更してみました。

send_file をアセット パイプラインで適切に動作させる方法を知っている人はいますか?

ありがとう。

0 投票する
2 に答える
119 参照

c# - C# での送信ファイルのプログラミング

Windows 上の任意のファイル/フォルダーに対して実行できるファイルの送信操作を検出、ブロック、または一般的に参照するにはどうすればよいでしょうか。送信ファイルが発生したときに正確に何が起こっているのか、.NET に組み込みのプログラミング機能があるのか​​、それとも移動の動作に似ているのか (最初に削除されてから新しい場所に作成されます)。

ファイルの送信がいつ行われたかを検出する方法があるかどうか、またはファイルの送信が実行されたときにウィンドウがファイル/フォルダーに対して何をするかを知りたいだけです。

0 投票する
2 に答える
4915 参照

linux - 大きなデータをソケットに書き込むときのコピーの最小化

画像 (大容量データ) を処理するアプリケーション サーバーを作成しています。画像データをクライアントに送り返すときは、コピーを最小限に抑えようとしています。クライアントに送信する必要がある処理済みの画像は、jemalloc から取得したバッファーにあります。データをクライアントに送り返す方法は次のとおりです。

1) 単純な書き込み呼び出し。

2) jemalloc の代わりに mmap を介してバッファーを取得しますが、jemalloc は既に mmap を使用してバッファーを作成していると思います。次に、write の簡単な呼び出しを行います。

3) 以前と同様に mmap を介してバッファーを取得します。次に、sendfile を使用してデータを送信します。

(1) と (2) は、jemalloc がおそらく最初に mmap を介してメモリを割り当てることを考えると、おそらく同じことを行うようです。(3)についてはよくわかりません。これは本当に利益につながりますか?Linux のゼロコピー方法に関するこの記事の図 4 は、sendfile を使用してそれ以上のコピーを防止できることを示唆しています。

データはソケット バッファにコピーされません。代わりに、データの所在と長さに関する情報を含む記述子のみがソケット バッファーに追加されます。DMA エンジンは、データをカーネル バッファからプロトコル エンジンに直接渡すため、残りの最終コピーが削除されます。

すべてがうまくいけば、これは勝利のように思えます。ただし、mmaped バッファーがカーネル バッファーとしてカウントされるかどうかはわかりません。また、いつこのバッファを安全に再利用できるかわかりません。fd と長さはソケット バッファーに追加される唯一のものであるため、カーネルが実際にこのデータをソケットに非同期で書き込むと仮定します。もしそうなら、sendfileからの戻りは何を意味しますか? このバッファを再利用するタイミングを知るにはどうすればよいですか?

だから私の質問は:

  1. 大きなバッファ (私の場合は画像) をソケットに書き込む最速の方法は何ですか? 画像はメモリに保持されます。
  2. mmap されたファイルで sendfile を呼び出すのは良い考えですか? はいの場合、落とし穴は何ですか? これは勝利にさえつながりますか?
0 投票する
1 に答える
191 参照

c - Cでファイルを複数回コピーして、連続して大きなファイルを作成するにはどうすればよいですか

メガバイトの正確な倍数 (つまり、正確に 10 MB、50 MB、100 MB であり、どのくらいの大きさにする必要があるかはわかりません) で、さまざまなサイズの大きなテキスト ファイルを多数作成する必要があります。

ファイルをすべて 1 または 0 にしたくないので、約 10 MB のテキスト ファイルがあり、そのテキストを必要なだけコピーしてファイルを作成したいと考えています。

read() と write() の代わりに sendfile を使用するようにというアドバイスを見てきました。10MB のファイルから 1MB のファイルを作成するようなものを書きましたが、10MB を超えるファイルを作成するために EOF をヒットしたら、どうすればループすることができるのでしょうか。

これは最終的には Linux コンピューターで使用されますが、現在は C の Cygwin (Windows) で記述しています。

0 投票する
0 に答える
446 参照

vb.net - ソケット vb.net でマルチングの大きなファイルを送信する

LAN チャットに関するアプリをコーディングしています。同じポートでマルチング ファイルの大きな同期を送信したいのですが、どうすればよいですか? ケース1ファイル1ポートでマルチングファイルを送信できます:(助けてください、ありがとう。