前へ | 次へ | 目次 | 索引 |
ファイルを任意のバイト位置に置き,新しい位置を返します。
#include <unistd.h>off_t lseek (int file_desc, off_t offset, int direction);
file_desc
open, creat, dup,または dup2から返された整数。offset
バイト単位で指定されるオフセット。 off_tデータ型は,32 ビット整数または 64 ビット整数です。 64 ビット・インタフェースでは, 2 GB よりも大きなファイル・サイズを扱うことができます。これは,コンパイル時に _LARGEFILE 機能テスト・マクロを次のように定義することで選択できます。
CC/DEFINE=_LARGEFILE
direction
オフセットを,ファイルの先頭から順方向に計測するのか (direction=SEEK_SET),現在位置から順方向に計測するのか (direction=SEEK_CUR),またはファイルの終端から逆方向に計測するのか (direction=SEEK_END) を示す整数。
lseek関数は,キャリッジ・コントロールのない固定長レコード・アクセス・ファイルまたはストリーム・アクセス・ファイルを任意のバイト・オフセットに置くことができますが,その他のすべてのファイルはレコード境界に置くことしかできません。使用可能な標準 I/O 関数は,レコード・ファイルを,その先頭バイト,ファイルの終端,またはレコード境界に置きます。このため, lseekに与えられる引数は,ファイルの先頭または終端,現在位置からの 0 オフセット (任意のレコード境界),または以前の有効な lseek呼び出しから返された位置を指定していなくてはなりません。
この関数は,新しいファイル位置を off_t型の整数として返します。これは,offset 引数と同じく, _LARGEFILE が定義されている場合には 64 ビット整数で,定義されていない場合には 32 ビット整数です。
任意のタイプのファイルで任意のバイト位置を設定できる移植性の高い方法については, fgetposおよび fsetpos関数を参照してください。
警告
ストリーム・ファイルにアクセスしているときに,ファイルの終端を越えてシークを行い,ファイルへの書き込みを行うと, lseek関数はスキップされたバイトにゼロを充填して穴を作成します。一般にレコード・ファイルでは, lseekに対する命令は,以前の lseekの有効な呼び出しから返された絶対位置か,ファイルの先頭または終端への移動に限定するべきです。 lseekの呼び出しがこれらの条件を満たしていなかった場合の結果は予測不可能です。
open, creat, dup, dup2, fseekも参照してください。
x 新しいファイル位置。 - 1 ファイル記述子が未定義であるか,ファイルの先頭よりも前に対するシークが試みられたことを示します。
特定のファイルに対する I/O が完了するのを待ちます。
#include <stdio.h>int lwait (int fd);
fd
オープン・ファイルに対応するファイル記述子。
lwait関数は,主に保留中の非同期 I/O が完了するのを待つために使用されます。
0 実行に成功したことを示します。 - 1 エラーを示します。
メモリの領域を割り当てます。これらの関数は AST リエントラントです。
#include <stdlib.h>関数バリアント malloc関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _malloc32と _malloc64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。void *malloc (size_t size);
size
割り当てる合計のバイト数。
malloc関数は,引数として指定されたバイト数の,連続したメモリ領域を割り当てます。スペースの初期化は行われません。
注意
mallocルーチンはシステム・ルーチン LIB$VM_MALLOC を呼び出します。 LIB$VM_MALLOC はメモリを割り当てるための汎用ルーチンとして設計されており,幅広いシナリオでブロックの割り当てと再割り当てを効率的に行う目的に呼び出されます。最も一般的な用途は,比較的小さなメモリ・ブロックの管理ですが,これらの状況でのメモリ割り当ての最も重要な側面は効率性です。LIB$VM_MALLOC は,大きなブロックの分割と隣接するブロックのマージのためにヒープ・ストレージが使い尽くされた場合には,独自の空きスペースを使って要求の処理を行います。メモリはフラグメント化され,未使用ブロックが残ることがあります。ヒープ・ストレージが使い尽くされると,LIB$VM_MALLOC は要求を満たすために独自の空きスペースとマージ済みブロックを管理しますが,さまざまなサイズのメモリ割り当てが行われると,どうしても未使用のブロックが生じます。
LIB$VM_MALLOC はすべての状況で最適な対応を行えるわけではないので,メモリ使用上の特殊なニーズがある場合には,プログラマは独自のメモリ管理を行うようにしてください。これにより,個々のアプリケーションでメモリを最適に使用することができます。
『OpenVMS Programming Concepts Manual』は,使用可能ないくつかのメモリ割り当てルーチンについて解説しています。これらは 3 つの階層レベルにグループ化されています。
- 一番上のレベルには, RTL ヒープ管理ルーチンの LIB$GET_VM と LIB$FREE_VM があります。これらは,任意のサイズのメモリ・ブロックの割り当てと解放を行うメカニズムを提供しています。またこのレベルには,LIB$CREATE_VM_ZONE などのように,ゾーンの概念に基づくルーチンがあります。
- 次のレベルには, RTL ページ管理ルーチンの LIB$GET_VM_PAGE と LIB$FREE_VM_PAGE があります。これらは,指定された数の連続したページを割り当てます。
- 一番下のレベルには, $CRETVA や $EXPREG などのメモリ管理システム・サービスがあります。これらを使用すると,アドレス空間の割り当てを細かく制御することができます。ただしこのレベルでは,プログラマが割り当てを正確に管理する必要があります。
x クォドワード境界に配置された第 1 バイトのアドレス。 NULL 関数が十分なメモリを割り当てられなかったことを示します。 errno は ENOMEM に設定されます。
マルチバイト文字を構成するバイトの数を決定します。
#include <stdlib.h>int mblen (const char *s, size_t n);
s
マルチバイト文字へのポインタ。n
マルチバイト文字を構成するバイト数の最大値。
文字が n バイト以下である場合, mblen関数は s がポイントするマルチバイト文字を構成するバイトの数を返します。文字が n バイトよりも大きい場合,関数はエラーを示す - 1 を返します。この関数は,プログラムのカレント・ロケールの LC_CTYPE カテゴリの影響を受けます。
x 次の n 個以下のバイトが有効な文字を構成している場合,マルチバイト文字を構成するバイトの数。 0 s が NULL または NULL 文字へのポインタであることを示します。 - 1 エラーを示します。関数は errno を,無効な文字が検出されたことを示す EILSEQ に設定します。
マルチバイト文字を構成するバイトの数を決定します。
#include <wchar.h>size_t mbrlen (const char *s, size_t n, mbstate_t *ps);
s
マルチバイト文字へのポインタ。n
マルチバイト文字を構成するバイト数の最大値。ps
mbstate_tオブジェクトへのポインタ。 NULL ポインタが指定された場合,関数は内部の mbstate_tオブジェクトを使用します。 mbstate_tは,状態依存のコードセットのための変換状態を保持する目的に使われる不透明のデータ型です。
mbrlen関数は,次の呼び出しと等価です。
mbrtowc(NULL, s, n, ps != NULL ? ps : &internal)
internal は, mbrlen関数の mbstate_tオブジェクトです。
s がポイントするマルチバイト文字が n バイト以下であれば,関数は文字を構成するバイトの数を返します ( シフト・シーケンスを含みます )。
エンコーディング・エラーが発生するか,次の n バイトが不完全な,しかし有効なマルチバイト文字の一部でありうるバイト列である場合,関数はそれぞれ - 1 または - 2 を返します。
mbrtowcも参照してください。
x マルチバイト文字を構成するバイトの数。 0 s が NULL ポインタまたは null バイトへのポインタであることを示します。 - 1 エンコーディング・エラーが発生したことを示します。次の n 個以下のバイトは,完全で有効なマルチバイト文字を構成しません。 errno は EILSEQ に設定されます。変換状態は未定義です。 - 2 不完全な,しかし有効なマルチバイト文字の一部でありうるバイト列であることを示します ( n 個すべてのバイトが処理されています)。
マルチバイト文字を,そのワイド文字表現に変換します。
#include <wchar.h>size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
pwc
結果として得られるワイド文字コードへのポインタ。s
マルチバイト文字へのポインタ。n
マルチバイト文字を構成するバイト数の最大値。ps
mbstate_tオブジェクトへのポインタ。 NULL ポインタが指定された場合,関数は内部の mbstate_tオブジェクトを使用します。 mbstate_tは,状態依存のコードセットのための変換状態を保持する目的に使われる不透明のデータ型です。
s が NULL ポインタである場合, mbrtowcは次の呼び出しと等価です。
mbrtowc(NULL, "", 1, ps)
この場合,pwc と n の値は無視されます。
s が NULL ポインタでない場合, mbrtowcは s がポイントするバイトから始まる最高 n バイトの内容を検査し,次のマルチバイト文字を完成させるために必要なバイト数を決定します ( シフト・シーケンスを含みます )。
次のマルチバイト文字が完成したと判断した場合,関数は対応するワイド文字の値を決定し, pwc が NULL ポインタでなければ,その値を pwc がポイントするオブジェクトに格納します。対応するワイド文字が null ワイド文字である場合,結果として得られる状態は初期変換状態です。
mbrtowcがカウント関数として呼び出された場合,つまり pwc が NULL ポインタで, s が NULL ポインタでも null バイトへのポインタでもなかった場合,内部の mbstate_tオブジェクトの値は変更されません。
x マルチバイト文字を構成するバイトの数。 0 次の n 個以下のバイトは,null ワイド文字 ( pwc が NULL ポインタでない場合に格納される値) に対応するマルチバイト文字を完成させます。 null バイトに対応するワイド文字コードはゼロです。 - 1 エンコーディング・エラーを示します。次の n 個以下のバイトは,完全で有効なマルチバイト文字を構成しません。 errno は EILSEQ に設定されます。変換状態は未定義です。 - 2 不完全な,しかし有効なマルチバイト文字の一部でありうるバイト列であることを示します (n 個すべてのバイトが処理されています)。
マルチバイト文字のシーケンスを,対応するワイド文字コードのシーケンスに変換します。
#include <stdlib.h>size_t mbstowcs (wchar_t *pwcs, const char *s, size_t n);
pwcs
結果として得られるワイド文字コードのシーケンスが格納される配列へのポインタ。s
マルチバイト文字の配列へのポインタ。n
pwcs がポイントする配列に格納できるワイド文字コードの数の最大値。
mbstowcs関数は, s がポイントする配列内のマルチバイト文字のシーケンスを,コード n 個を上限としてワイド文字コードのシーケンスに変換し, pwcs がポイントする配列に格納しますこの関数は,プログラムのカレント・ロケールの LC_CTYPE カテゴリの影響を受けます。コピーが互いにオーバラップするオブジェクト間で行われた場合の動作は未定義です。
x 変更される,または必要とされる配列要素の数。末尾のゼロ・コードは含みません。返される値が n の場合には,配列の末尾にはゼロは格納されません。 pwcs が NULL ポインタならば, mbstowcs はワイド文字配列に必要とされる要素の数を返します。 ( size_t ) - 1 エラーが発生したことを示します。関数は errno を,無効な文字が検出されたことを示す EILSEQ に設定します。
マルチバイト文字を,それと等価なワイド文字に変換します。
#include <stdlib.h>int mbtowc (wchar_t *pwc, const char *s, size_t n);
pwc
結果として得られるワイド文字コードへのポインタ。s
マルチバイト文字へのポインタ。n
次のマルチバイト文字を構成するバイトの数の最大値。
文字が n バイト以下である場合, mbtowc関数は s がポイントするマルチバイト文字を,それと等価なワイド文字に変換します。文字が無効であるか,n バイトよりも大きい場合,関数はエラーを示す - 1 を返します。pwc が NULL ポインタで,s が null ポインタでない場合,関数は (n の値にかかわらず) s がポイントするマルチバイト文字を構成するバイト数を判定します。
この関数は,プログラムのカレント・ロケールの LC_CTYPE カテゴリの影響を受けます。
x s がポイントする有効な文字を構成するバイト数。 0 s は NULL ポインタであるか,null バイトへのポインタです。 - 1 エラーを示します。関数は errno を,無効な文字が検出されたことを示す EILSEQ に設定します。
前へ | 次へ | 目次 | 索引 |