書き込みは、 Unix系オペレーティングシステムのカーネルが提供する最も基本的なルーチンの1つです。これは、ユーザーが宣言したバッファから、ファイルなどの指定されたデバイスにデータを書き込みます。これは、システムコールを直接使用してプログラムからデータを出力する主要な方法です。書き込み先は数値コードで識別されます。書き込むデータ(例えばテキスト)は、ポインタとバイト数で指定されるサイズによって定義されます。
writeしたがって、3つの引数を取る。
書き込み呼び出しインターフェース[ 1 ] [ 2 ] [ 3 ]はPOSIX仕様によって標準化されています。書き込み関数を呼び出すことで、データがファイルに書き込まれます。関数プロトタイプは次のとおりです。
ssize_t write ( int fildes , const void * buf , size_t nbyte );上記の構文では、ssize_tは ですtypedef。これは で定義されている符号付きデータ型ですstddef.h。 はwrite()符号なし値を返さないことに注意してください。エラーが発生した場合は -1 を返すため、符号付き値を返す必要があります。 write 関数は、ファイルに正常に書き込まれたバイト数を返します。この値は、指定されたnbytes より少ない場合があります。例外的な状況が発生した場合は -1 を返します。エラーに関する以下のセクションを参照してください。
歴史的に、Linux は異なるアーキテクチャに対して異なるシステムコール テーブルを使用していました。x86-64ではコール番号 1 ですが、ARM では 4 です。[ 4 write]しかし、Linuxでサポートされているより新しいアーキテクチャでは、共通のシステムコール テーブルが採用されており、そのコール番号は64です。[ 6 ]write
ソフトウェアをコンパイルする際、カーネルはターゲットアーキテクチャの呼び出し番号をCヘッダー<linux/unistd.h>内の整数定数として公開します。[ 7 ]いくつかのマクロは の形式で定義されており__NR_xxx、これはシステムコール の呼び出し番号に展開されますxxx。そのため、writeの呼び出し番号は として公開されます。このヘッダーは、 Cプリプロセッサ を使用するアセンブラコード__NR_writeによってもインクルードされることがあります。