LinuxのREADV和writev

Unixシステムは、長いREADVと支持writev 2つのシステム・コールと命名されている。これらの「ベクター」バージョンを読み出して、構造体の配列を使用して、バッファと、各ポインタの長さの値を含む書き込む。呼び出しをREADVオンすることが望まれますそれぞれの数は、命令キャッシュを読んでください。その代わり、writevは一緒に、各キャッシュの内容を収集し、単一の書き込み動作としてそれらを送信します。

 

あなたのドライバはベクトル演算を処理する方法を提供していない場合は、READVとwritevは、あなたの読み取りを呼び出すことで実装され、複数回書き込みする。しかし、多くの場合、直接実装READVとwritevは、より大きな効率を得ることができます。

 

プロトタイプベクトル演算は以下のとおりです。

 

ssize_tの(* READV)(構造体ファイル*の財投、constの構造体IOVEC * IOV、unsigned long型のカウント、loff_t

*するPPO);

ssize_tの(* writev)(構造体ファイル*の財投、constの構造体IOVEC * IOV、unsigned long型のカウント、loff_t

*するPPO);

 

ここで、同じパラメータと読み出しと書き込みとするPPOの財投。IOVEC構造で定義され

<Linuxの/ uio.h>、のように:

 

構造体IOVEC

{

無効ユーザー* iov_base。kernel_size_tのiov_len;

}。

 

各IOVECが転送されるデータを記述する; ...これは(ユーザ空間で)iov_baseに始まり、彼らは、ドライバを呼び出す前のiov_lenバイト長countパラメータは、アプリケーションによって作成されたこれらの構造が、カーネルのコピーIOVEC何を伝えていますスペースをカーネルに。

 

最も単純なダイレクトベクトル演算サイクルの実装が、ドライブの各機能を読み書きIOVECアドレスと長さの出入り、しかし、効果的かつ正確な動作は、しばしば、よりスマートに駆動する必要がある。例えば、テープドライブに全体の内容は、テープ上の一つの記録としてIOVEC構造をwritevばなりません。

 

多くのドライバーが、しかし、これらの方法により自分自身を実装するの恩恵を受けていない、彼らは読み取りを使用してスカルカーネルを省略して、最終的な結果は同じであるシミュレートするために、それらを書くいます。

おすすめ

転載: www.cnblogs.com/fanweisheng/p/11138704.html