前へ | 次へ | 目次 | 索引 |
プロセス・グループ ID を設定します。
#include <unistd.h>pid_t setpgrp (void);
呼び出し元プロセスがまだセッション・リーダでなければ, setpgrpは,呼び出し元プロセスのプロセス・グループ ID として,呼び出し元プロセスのプロセス ID を設定します。 setpgrpで新しいセッションが作成される場合,新しいセッションには制御端末はありません。呼び出し元プロセスがセッション・リーダの場合, setpgrp関数の効果はありません。
x 呼び出し元プロセスのプロセス・グループ ID です。
ユーザ・データベースをリワインドします。
#include <pwd.h>void setpwent (void);
setpwent関数は,ユーザ・データベースを実質的にリワインドし,検索を繰り返し実行できるようにします。戻り値はありませんが,I/O エラーが発生した場合は, errnoに EIO が設定されます。
getpwentも参照してください。
実グループ ID と実効グループ ID を設定します。
#include <unistd.h>int setregid (gid_t rgid, gid_t egid);
rgid
実グループ ID として設定する値。egid
実効グループ ID として設定する値。
setregid関数は,呼び出し元プロセスの実グループ ID と実効グループ ID を設定するために使用されます。 rgid が - 1 の場合,実グループ ID は変更されません。 egid が - 1 の場合,実効グループ ID は変更されません。実グループ ID と実効グループ ID には,一度の呼び出しで異なる値を設定できます。IMPERSONATE 特権を持つプロセスだけが,実グループ ID と実効グループ ID に任意の有効な値を設定できます。
特権のないプロセスは,実グループ ID として exec関数による保存済みセット・グループ ID を設定するか,実効グループ ID として保存済みセット・グループ ID または実グループ ID を設定することができます。
呼び出し元プロセスの補助グループ ID は変更されません。
セット・グループ ID プロセスが,自身の実効グループ ID として自身の実グループ ID を設定した場合,実効グループ ID を保存済みセット・グループ ID に戻すことができます。
0 成功を示します。 - 1 エラーを示します。どのグループ ID も変更されず, errno に以下のいずれかの値が設定されます。
- EINVAL -- rgid 引数または egid 引数の値が,不正または範囲外です。
- EPERM -- プロセスに IMPERSONATE 特権がなく,実グループ ID として保存済みセット・グループ ID を設定したり,実効グループ ID として実グループ ID または保存済みグループ ID を設定する変更以外の変更が要求されました。
ユーザ ID を設定します。
#include <unistd.h>int setreuid (uid_t ruid, uid_t euid);
ruid
実ユーザ ID として設定する値。euid
実効ユーザ ID として設定する値。
setreuid関数は,現在のプロセスの実ユーザ ID と実効ユーザ ID として, ruid 引数と euid 引数で指定された値を設定します。 ruid または euid が - 1 の場合,現在のプロセスの,対応する実効ユーザ ID や実ユーザ ID は,変更されません。IMPERSONATE 特権のあるプロセスは,どちらの ID にも任意の値を設定できます。特権のないプロセスは,euid 引数がプロセスの実ユーザ ID,実効ユーザ ID,または保存済みユーザ ID と等しい場合だけ,実効ユーザ ID を設定できます。
IMPERSONATE 特権のないプロセスが,実ユーザ ID を,プロセスの現在の実ユーザ ID,実効ユーザ ID,または保存済みユーザ ID と一致する値に変更できるかどうかは,規定されていません。
0 成功を示します。 - 1 エラーを示します。この関数は,以下のいずれかの値を errno に設定します。
- EINVAL -- ruid 引数または euid 引数の値が,不正または範囲外です。
- EPERM -- 現在のプロセスに IMPERSONATE 特権がなく,実効ユーザ ID を実ユーザ ID や保存済みセット・ユーザ ID 以外の値に変更しようとしたか,実ユーザ ID を実装で許されていない値に変更しようとしました。
セッションを作成し,プロセス・グループ ID を設定します。
#include <unistd.h>pid_t setsid (void);
setsid関数は,呼び出し元プロセスがプロセス・グループ・リーダでなければ,新しいセッションを作成します。戻ったときには,呼び出し元プロセスは,この新しいセッションのセッション・リーダとなっており,また新しいプロセス・グループのプロセス・グループ・リーダとなっています。制御端末は持っていません。呼び出し元プロセスのプロセス・グループ ID には,呼び出し元プロセスのプロセス ID と同じ値が設定されます。呼び出し元プロセスは,新しいプロセス・グループ内で唯一のプロセスであり,また新しいセッション内で唯一のプロセスです。
x 呼び出し元プロセスのプロセス・グループ ID です。 (pid_t) - 1 エラーを示します。この関数は,次の値を errno に設定します。
- EPERM -- 呼び出し元プロセスがすでにプロセス・グループ・リーダであるか,呼び出し元プロセス以外のプロセスのプロセス・グループ ID が,呼び出し元プロセスのプロセス ID と一致しています。
乱数ジェネレータの再開と変更を行います。
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 バージョン 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>に定義されている, _IONBF,_IOFBF,または _IOLBF のいずれかの値を使用します。size
HP C RTL がこのファイルのバッファリングに使用する buffer によって使用されるバイト数。バッファ・サイズは,8192 バイト以上,32767 バイト以下でなくてはなりません。
setvbuf関数は,指定されたファイルがオープンされた後,ただし I/O 操作が実行される前に使用することができます。ANSI C 標準は,ファイルのバッファリングに関して,以下のタイプを定義しています。アンバッファード I/O では,個々の I/O 操作がただちに実行されます。出力文字または出力行は,制御がプログラムに戻される前に出力デバイスに書き込まれます。入力文字または入力行は, HP C RTL による先読みが行われることなく,プログラムに直接送信されます。
行バッファード I/O では,文字はメモリ領域にバッファリングされ,改行文字が現れた時点で,適切な RMS ルーチンが呼び出されてバッファ全体が送信されます。行バッファリングはシステム・オーバヘッドを軽減するのでアンバッファード I/O よりも効率的ですが,出力データをユーザまたはディスクが利用できるタイミングが遅れます。
フル・バッファード I/O では,文字はブレーク文字の有無にかかわらず,バッファがいっぱいになるまでメモリ領域内にバッファリングされます。フル・バッファリングは行バッファリングやアンバッファード I/O よりも効率的ですが,出力データが利用できるようになるタイミングは行バッファリングよりもさらに遅れます。
アンバッファード,行バッファード,およびフル・バッファード I/O を指定する type 引数としては,それぞれ <stdio.h>に定義されている値 _IONBF,_IOLBF,および _IOFBF を使用します。
type として _IONBF が指定されている場合, I/O はアンバッファードとなり, buffer および size 引数は無視されます。
type として _IOLBF または _IOFBF が指定されている場合, HP C RTL は, file_ptr がターミナル・デバイスを指定している場合には行バッファード I/O を,そうでない場合にはフル・バッファード I/O を使用します。
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 <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 が設定されていない場合にのみ呼び出し元プロセスに送信されます。
前へ 次へ 目次 索引