HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
乱数ジェネレータの再開と変更を行います。
char *setstate (char *state;)
state
状態情報の配列をポイントします。
setstate関数は,乱数ジェネレータの再開と変更を行います。状態の初期化を行った後, setstate関数を使用すると,状態配列の間で素早く切り替えを行うことができます。 state によって定義された状態は, initstate関数が呼び出されるか, setstate関数が再び呼び出されるまで,それ以降の乱数生成に使用されます。 setstate関数は,以前の状態配列へのポインタを返します。
初期化の後には,次のように異なる 2 つの方法で,状態配列を再開することができます。
- 希望の seed,状態配列,および配列のサイズを指定して, initstate関数を使用する。
- 希望の状態を指定して setstate関数を呼び出した後に,希望の seedを指定して srandom関数を使用する。両方の関数を使用することの利点は,いったん初期化した状態配列のサイズを保存しておかなくてもすむ点にある。
initstate, srandom, および randomも参照してください。
x 以前の状態配列情報へのポインタ。 0 エラーを示します。状態情報は破壊されています。また, errno に次の値が設定されます。
- EINVAL--- state 引数が無効。
POSIX ID が無効化されている場合には,プログラムの移植性のために実装されており,何の機能も持ちません。成功を示す 0 を返します。POSIX ID が有効になっている場合には,ユーザ ID を設定します。
#include <types.h>#include <unistd.h>
int setuid (__uid_t uid); (_DECC_V4_SOURCE)
uid_t setuid (uid_t uid); (not _DECC_V4_SOURCE)
uid
ユーザ ID に設定する値。
setuid関数は, POSIX スタイル識別子が有効の場合でも無効の場合でも使用できます。POSIX 形式の ID は, OpenVMS Version 7.3-2 およびそれ以降でサポートされています。
POSIX ID が無効化されている場合 (デフォルト), setuid関数はプログラムの移植性のために実装されており,何の機能も持ちません。成功を示す 0 を返します。
POSIX ID が有効になっている場合には,次の処理が行われます。
- プロセスが IMPERSONATE 特権を持っている場合, setuid関数は実ユーザ ID,実効ユーザ ID,および保存済みセット・ユーザ ID を uid に設定する。
- プロセスが適切な特権を持っていないが, uid が実ユーザ ID または保存済みセット・ユーザ ID と等しければ, setuid関数は実効ユーザ ID を uid に設定する。実ユーザ ID と保存済みセット・ユーザ ID は変更されない。
POSIX 形式の ID を有効または無効にする方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.7 節を参照してください。
0 成功を示します。 - 1 エラーを示します。関数は errno を以下のいずれかの値に設定します。
- EINVAL--- uid 引数の値が無効で,実装によってサポートされていない。
- EPERM---プロセスは適切な特権を持っておらず, uid は実ユーザ ID または保存済みセット・ユーザ ID と一致しない。
入力ファイルまたは出力ファイルに新しいバッファを関連付けます。バッファリングの動作を変更することもあります。
#include <stdio.h>int setvbuf (FILE *file_ptr, char *buffer, int type, size_t size);
file_ptr
ファイルへのポインタ。buffer
文字配列へのポインタ,または NULL ポインタ。type
バッファリング・タイプ。 <stdio.h>に定義されている, _IOFBF または _IOLBF のいずれかの値を使用します。size
HP C RTL がこのファイルのバッファリングに使用する buffer によって使用されるバイト数。バッファ・サイズは,8192 バイト以上,32767 バイト以下でなくてはなりません。
setvbuf関数は,指定されたファイルがオープンされた後,ただし I/O 操作が実行される前に使用することができます。C RTL では, ANSI に準拠したファイル・バッファリングとして,以下のタイプが用意されています。
行バッファード I/O では,文字はメモリ領域にバッファリングされ,改行文字が現れた時点で,適切な RMS ルーチンが呼び出されてバッファ全体が送信されます。行バッファリングはシステム・オーバヘッドを軽減するのでアンバッファード I/O よりも効率的ですが,出力データをユーザまたはディスクが利用できるタイミングが遅れます。
フル・バッファード I/O では,文字はブレーク文字の有無にかかわらず,バッファがいっぱいになるまでメモリ領域内にバッファリングされます。フル・バッファリングは行バッファリングやアンバッファード I/O よりも効率的ですが,出力データが利用できるようになるタイミングは行バッファリングよりもさらに遅れます。
行バッファード I/O とフル・バッファード I/O を指定するための type 引数としては, <stdio.h>に定義されている値 _IOLBF と _IOFBF をそれぞれ使用します。
HP C RTL では, file_ptr がターミナル・デバイスを指定している場合にだけ行バッファード I/O を使用し,それ以外の場合はフル・バッファード I/O を使用します。
このマニュアルの以前の版では _IONBF もサポートの対象になっていましたが,この版ではサポートの対象から外されているので,注意してください。
HP C RTL は,個々の I/O ストリームに使用されるバッファを自動的に割り当てます。したがって,バッファ割り当てには以下に示す可能性があることになります。
- buffer が NULL ポインタでなく, size が自動的に割り当てられるバッファよりも小さくない場合, setvbufはファイル・バッファとして buffer を使用する。
- buffer が NULL ポインタであるか, size が自動的に割り当てられるバッファよりも小さい場合には,自動的に割り当てられるバッファがバッファ領域として使用される。
- buffer が NULL ポインタで, size が自動的に割り当てられるバッファよりも大きい場合, setvbufは指定されたサイズの新しいバッファを割り当て,これをファイル・バッファとして使用する。
ユーザ・プログラムは,ストリームに対して I/O が実行された後には, buffer の内容に依存してはなりません。 HP C RTL は,どの I/O 操作についても, buffer を使用する場合と使用しない場合があります。
一般に, setvbufまたは setbufを使って, HP C RTL が使用するバッファ・サイズを制御する必要はありません。自動的に割り当てられるバッファ・サイズは,実行される I/O 操作の種類とデバイス特性 (ターミナル,ディスク,ソケットなど) に基づいて,効率性を念頭に置いて選択されます。
setvbufおよび setbuf関数は,バッファを導入して, stdoutストリームに大量のテキストを書き込むときの性能を改善したい場合に有用です。このストリームは,ターミナル・デバイスにバインドされているとき ( 通常のケース ) はバッファリングされておらず, setvbufまたは setbufの呼び出しによって HP C RTL バッファリングが導入されない限り,多数の OpenVMS バッファード I/O 操作が発生します。
setvbuf関数は, HP C RTL が使用するバッファリングを制御するためのみに使用され,下位の RMS I/O 操作が使用するバッファリングは制御しません。 RMS のデフォルトのバッファリング動作を変更するには,ファイルを creat, freopen,または open関数でオープンするときに,ctx,fop,rat,gbc, mbc,mbf,rfm,および rop の RMS キーワードに対して各種の値を指定します。
0 成功を示します。 ゼロ以外の値 type または file_ptr に無効な入力値が指定されたか, file_ptr が別のスレッドによって使用されていることを示します ( 『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.9.1 項を参照)。
共用メモリ・オブジェクトをオープンします。
#include <sys/mman.h>int shm_open (const char *name, int oflag, mode_t mode);
name
共用メモリ・オブジェクトの名前 (文字列) を指すポインタ。oflag
ファイルの状態とアクセス許可を定義するオプション。この引数には, <fcntl.h>ヘッダ・ファイルに定義されているオプション (0 個以上) を,ビット単位の論理和にまとめて指定します。mode
共用メモリ・オブジェクトの許可ビット。この引数は,共用メモリ・オブジェクトを作成するときにだけ使用します。
shm_open関数は,共用メモリ・オブジェクトにファイル記述子を結びつけます。この関数を呼び出すと,共用メモリ・オブジェクトを参照するオープン・ファイル記述と,そのオープン・ファイル記述を参照するオープン・ファイル記述子が作成されます。このファイル記述子は,他の関数がその共用メモリ・オブジェクトを参照するために使用します。 name 引数には,共用メモリ・オブジェクトの名前 (文字列) を指すポインタを指定します。名前は,パス名であってもかまいません。ただしその場合は,そのパス名を参照する他のプロセスが,同じ共用メモリ・オブジェクトを参照することになります。作成された共用メモリ・オブジェクトの状態と関連データはすべて,その共用メモリがアンリンクされるまで保持されます。
shm_open関数からは共用メモリ・オブジェクトのファイル記述子が返されますが,そのファイル記述子には,そのプロセス用に現在オープンされていないファイル記述子から番号の最も小さいものが選択されて,割り当てられます。
オープン・ファイル記述にあるファイル状態フラグとファイル・アクセス・モードには, oflag で指定した次の値 (0 個以上指定可) が設定されます。
O_RDONLY ---読み取りアクセス専用でオープンします。
O_RDWR ---読み取りおよび書き込み用にオープンします。
O_CREAT ---指定した共用メモリ・オブジェクトが存在していなければ,そのメモリ・オブジェクトを作成します。共用メモリ・オブジェクトのユーザ ID とグループ ID は,呼び出しプロセスと同じものになります。また,共用メモリ・オブジェクトの許可ビットについては,そのプロセスのファイル・モード作成マスクに設定されていないビットだけが, mode の値に従って設定されます。
O_EXCL ---O_CREAT を指定したにもかかわらず,その共用メモリ・オブジェクトがすでに存在していれば,その共用メモリ・オブジェクトをオープンしないようにします。このオプションは,必ず O_CREAT と組み合わせて使用します。
O_TRUNC ---共用メモリ・オブジェクトを読み書き両用 (O_RDWR) でオープンできたら,この共用メモリ・オブジェクトを長さ 0 に切り詰めます。共用メモリ・オブジェクトの内容の初期状態は,バイナリでゼロになっています。
n 成功したことを示します。 n はファイル記述子を示す 0 または正の整数で,まだ使用されていないものから番号の最も小さいものが選択されて割り当てられます。このファイル記述子は,共用メモリ・オブジェクトを指しています。 - 1 エラーが発生したことを示します。 errno に,エラーを示す次のいずれかの値が設定されます。
- EACCES ---(1) 共用メモリ・オブジェクトを作成するための許可が認められなかったか, (2) その共用メモリ・オブジェクトがすでに存在していて, oflag で指定した許可が認められなかったか, (3) O_TRUNC が指定されているにもかかわらず,書き込み許可が認められませんでした。
- EEXIST ---O_CREAT と O_EXCL の指定がありましたが,指定された共用メモリ・オブジェクトがすでに存在していました。
- EINTR --- shm_open の処理がシグナルで中断されました。
- EINVAL ---指定された name に対しては, shm_open 操作がサポートされていません。
- EMFILE ---このプロセスで現在使用中のファイル記述子が多すぎます。
- ENAMETOOLONG --- name 引数の長さが PATH_MAX を超えているか,パス名に長さが NAME_MAX を超えているコンポーネントが存在します。
- ENFILE ---システムで現在オープンされている共用メモリ・オブジェクトの数が多すぎます。
- ENOENT ---O_CREAT が設定されていないにもかかわらず,指定された共用メモリ・オブジェクトが存在していません。
- ENOSPC ---共用メモリ・オブジェクトを新しく作成するためのメモリ領域が十分にありません。
共用メモリ・オブジェクトを削除します。
#include <sys/mman.h>int shm_unlink (const char *name);
name
削除する共用メモリ・オブジェクトの名前を示す文字列へのポインタ。
shm_unlink関数は, name (の指す文字列) で指定した共用メモリ・オブジェクトについて,その名前を削除します。ただし shm_unlinkの処理では,共用メモリ・オブジェクトをアンリンクするときにそのオブジェクトの参照元が 1 個以上存在していると,その名前を削除しただけで,呼び出し元へ戻ります。メモリ・オブジェクトの内容は,その時には削除されません。メモリ・オブジェクトの内容が削除されるのは,その共用メモリ・オブジェクトに対して,オープンされている参照とマッピングされている参照がすべて削除された後です。
共用メモリ・オブジェクトは,最後の shm_unlinkが実行された後でも存在し続けることがあるかもしれません。しかし,そのような場合に shm_unlinkでその名前を指定して再使用しようとしても,その名前の共用メモリ・オブジェクトが存在していないかのように処理されるだけです。つまり, shm_openは,O_CREAT を設定しないで呼び出すと失敗し, O_CREAT を設定して呼び出すと,新しい共用メモリ・オブジェクトが作成されます。
0 成功したことを示します。 - 1 失敗したことを示します。指定した共用メモリ・オブジェクトは変更されていません。 errno に,エラーを示す次のいずれかの値が設定されます。
- EACCES ---指定した共用メモリ・オブジェクトをアンリンクするための許可が認められませんでした。
- ENAMETOOLONG --- name 引数の長さが PATH_MAX を超えているか,パス名に長さが NAME_MAX を超えているコンポーネントが存在しています。
- ENOENT ---指定した共用メモリ・オブジェクトが存在していません。
シグナルが配信されたときに実行するアクションを指定します。
#include <signal.h>int sigaction (int sig, const struct sigaction *action, struct sigaction *o_action);
sig
アクションに対応するシグナル。action
sig 引数によって指定されたシグナルの受信時に実行されるアクションを記述する sigaction構造体へのポインタ。o_action
sigaction構造体へのポインタ。 sigaction関数が呼び出しから返ると,以前に指定されたシグナルにアタッチされていたアクションは,この構造体に格納されます。
プロセスは, sigaction関数によって,指定されたシグナルが配信されたときに実行されるアクションの確認と指定の両方を行うことができます。引数は, sigaction関数の動作を次のように決定します。
- sig 引数の指定は,影響を受けるシグナルを識別する。 <signal.h>ヘッダ・ファイルに定義されている, SIGKILL 以外の任意のシグナル値を使用することができる。
sig が SIGCHLD で,SA_NOCLDSTOP フラグが sa_flagsに設定されていない場合には,子プロセスが停止するたびに,呼び出し元プロセスに対して SIGCHLD シグナルが生成される。 sig が SIGCHLD で,SA_NOCLDSTOP フラグが sa_flagsに設定されている場合には, SIGCHLD シグナルはこのような形では生成されない。- action 引数の指定は,null でなければ,シグナルの受信時に実行されるアクションを定義する sigaction構造体をポイントする。 action 引数が null ならば,シグナル処理は変更されないので,この呼び出しを使ってシグナルの現在の処理に関する問い合わせを行うことができる。
- o_action 引数の指定は,null でなければ,指定されたシグナルに以前にアタッチされていたアクションを含んでいる sigaction構造体をポイントする。
sigaction構造体は以下のメンバから構成されています。
void (*sa_handler)(int); sigset_t sa_mask; int sa_flags;
sigaction構造体のメンバは,以下のように定義されています。
sa_handler このメンバは,以下の値を含むことができます。
- SIG_DFL---シグナルの配信時に実行されるデフォルト・アクションを指定する。
- SIG_IGN---シグナルが受信側プロセスに対して何の効果も持たないことを指定する。
- 関数ポインタ---シグナルをキャッチするよう要求する。シグナルは関数呼び出しを引き起こす。
sa_mask このメンバは, sa_handler メンバが指定するシグナル・ハンドラ関数の実行中に,プロセス・シグナル・マスクに含まれるシグナルに加えて,個々のシグナルの配信をブロックするように要求することができます。 sa_flags このメンバは,シグナルの配信時に実行されるアクションをさらに細かく制御するフラグを設定することができます。
sigaction構造体の sa_flagsメンバは,以下の値を持ちます。
SA_ONSTACK このビットを設定すると,システムは, sigstack 関数によって指定されたシグナル・スタック上でシグナル・キャッチ関数を実行します。このビットが設定されていなければ,関数はシグナルの配信先のプロセスのスタック上で実行されます。 SA_RESETHAND このビットを設定すると,シグナルは SIG_DFL に再設定されます。 SIGILL と SIGTRAP は自動的には再設定できないことに注意してください。 SA_NODEFER このビットを設定すると,キャッチされたシグナルは自動的にブロックされません。 SA_NOCLDSTOP このビットが設定されており, sig 引数が SIGCHLD に等しいときに,呼び出し元プロセスの子プロセスが停止した場合,SIGCHLD シグナルは,SIGCHLD で SA_NOCLDSTOP が設定されていない場合にのみ呼び出し元プロセスに送信されます。
前へ 次へ 目次 索引