HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
encrypt関数で使用するエンコード・キーを設定します。
#include <unistd.h>#include <stdlib.h>
void setkey (const char *key;)
key
0,1 を含む,長さ 64 の文字配列。
setkeyの引数には,数値の 0 と 1 からなる文字 (正確にはバイト・データ) だけを含む,長さが 64 の文字配列を指定します。マシンにキーとして設定されるのは,この文字列,つまりバイト列を 8 個のグループに分けて,その各グループの最下位ビットを無視した 56 ビットです。戻り値はありません。
cryptと encryptも参照してください。
category および locale 引数によって指定された,プログラムのロケールの該当部分を選択します。この関数を使用すると, 1 つのカテゴリ,またはプログラムのカレント・ロケール全体を変更または照会することができます。
#include <locale.h>char *setlocale (int category, const char *locale);
category
カテゴリの名前。ロケール全体を変更または照会するには, LC_ALL を指定します。その他の有効なカテゴリ名は以下のとおりです。
- LC_COLLATE
- LC_CTYPE
- LC_MESSAGES
- LC_MONETARY
- LC_NUMERIC
- LC_TIME
locale
ロケールを指定する文字列へのポインタ。
setlocale関数は, category および locale 引数によって指定された,プログラムのロケールの該当部分を設定または照会します。 category 引数として LC_ALL を指定すると,ロケール全体が指定されます。その他の値を指定すると,プログラムのロケールの一部のみが指定されます。locale 引数は,使用するロケールを識別する文字列をポイントします。この引数は以下のいずれかです。
- パブリック・ロケールの名前
次の形式でパブリック・ロケールを指定します。
language_country.codeset[@modifier]
関数は,論理名 SYS$I18N_LOCALE によって定義された位置で,パブリック・ロケール・バイナリ・ファイルを探します。ファイル・タイプのデフォルトは. LOCALE です。名前の中のピリオド (.) とアットマーク (@) 文字は,下線 (_) に置き換えられます。
たとえば,指定された名前が "zh_CN.dechanzi@radical" だった場合,関数は SYS$I18N_LOCALE:ZH_CN_DECHANZI_RADICAL.LOCALE バイナリ・ロケール・ファイルを探します。- ファイル指定
バイナリ・ロケール・ファイルを指定します。任意の有効なファイル指定を使用することができます。デバイスまたはディレクトリが省略された場合,関数は現在の呼び出し元デバイスとディレクトリを,省略されたコンポーネントのデフォルト値として使用します。ファイルが見つからなかった場合,関数は SYS$I18N_LOCALE 論理名によって定義されたデバイスとディレクトリをデフォルト値として適用します。ファイル・タイプのデフォルト値は .LOCALE です。
ワイルドカードは使用できません。バイナリ・ロケール・ファイルはリモート・ノード上には存在できません。- "C"
C ロケールを指定します。プログラムが setlocaleを呼び出さない場合には, C ロケールがデフォルトとなります。- "POSIX"
C ロケールと同じです。- ""
ロケールが国際環境論理名の設定をもとに初期化されることを指定します。関数は,定義されている論理名を発見するまで,次の順序で論理名をチェックします。
- LC_ALL
- カテゴリに対応する論理名。たとえば,カテゴリとして LC_NUMERIC が指定されている場合, setlocaleがチェックする最初の論理名は LC_NUMERIC となる。
- LANG
- SYS$LC_ALL
- SYS$LC_* 論理名によって定義される,カテゴリのシステム・デフォルト。たとえば,LC_NUMERIC カテゴリのデフォルトは, SYS$LC_NUMERIC 論理名によって定義される。
- SYS$LANG
どの論理名も定義されていなければ,デフォルトでは C ロケールが使用されます。 SYS$LC_* 論理名は,システムのスタートアップ時にセットアップされます。
locale 引数と同様に,国際環境論理名の等価名は,パブリック・ロケールの名前か,ファイル指定となります。 setlocale関数はこの等価名を, locale 引数で指定されたかのように扱います。- NULL
setlocaleにカレント・ロケールを照会させます。関数は,プログラムのロケールの category に関連付けられた部分を記述する文字列へのポインタを返します。 LC_ALL カテゴリを指定すると,ロケール全体を記述する文字列が返されます。ロケールの変更は行われません。- 前の setlocaleの呼び出しから返された文字列
関数は,プログラムのロケールの category に関連付けられた部分を復元します。文字列がロケール全体の記述を含んでいる場合には,文字列の category に対応する部分が使用されます。文字列がプログラムのロケールのうちの 1 つのカテゴリの部分を記述している場合には,そのロケールが使用されます。つまり,たとえば LC_COLLATE カテゴリを指定した setlocale呼び出しから返された文字列を使って, LC_MESSAGES カテゴリに同じロケールを設定することができます。
指定されたロケールが使用可能である場合, setlocaleは,プログラムのロケールの category に関連付けられた部分を記述する文字列へのポインタを返します。LC_ALL カテゴリでは,返される文字列はプログラムのロケール全体を記述します。エラーが発生した場合には,NULL ポインタが返され,プログラムのロケールは変更されません。
setlocaleへのそれ以降の呼び出しは,返された文字列を上書きします。ロケールのその部分を復元する必要がある場合には,プログラム内で文字列を保存しておくようにしてください。呼び出し元のプログラムは,返される文字列の形式または長さに関する仮定を行うべきではありません。
x ロケールを記述する文字列へのポインタ。 NULL エラーが発生したことを示します。 errno が設定されます。
#include <errno.h> #include <stdio.h> #include <locale.h> /* This program calls setlocale() three times. The second call */ /* is for a nonexistent locale. The third call is for an */ /* existing file that is not a locale file. */ main() { char *ret_str; errno = 0; printf("setlocale (LC_ALL, \"POSIX\")"); ret_str = (char *) setlocale(LC_ALL, "POSIX"); if (ret_str == NULL) perror("setlocale error"); else printf(" call was successful\n"); errno = 0; printf("\n\nsetlocale (LC_ALL, \"junk.junk_codeset\")"); ret_str = (char *) setlocale(LC_ALL, "junk.junk_codeset"); if (ret_str == NULL) perror(" returned error"); else printf(" call was successful\n"); errno = 0; printf("\n\nsetlocale (LC_ALL, \"sys$login:login.com\")"); ret_str = (char *) setlocale(LC_ALL, "sys$login:login.com"); if (ret_str == NULL) perror(" returned error"); else printf(" call was successful\n"); }
この例のプログラムを実行すると,次の結果が生成されます。
setlocale (LC_ALL, "POSIX") call was successful setlocale (LC_ALL, "junk.junk_codeset") returned error: no such file or directory setlocale (LC_ALL, "sys$login:login.com") returned error: nontranslatable vms error code: 0x35C07C %c-f-localebad, not a locale file
ジョブ制御のプロセス・グループ ID を設定します。
#include <unistd.h>int setpgid (pid_t pid, pid_t pgid);
pid
プロセス・グループ ID を設定するプロセスのプロセス ID。pgid
プロセス・グループ ID として設定する値。
setpgid関数は,既存のプロセス・グループに参加したり,呼び出し元プロセスのセッション内に新しいプロセス・グループを作成するために使用します。セッション・リーダのプロセス・グループ ID は変更されません。成功して終了すると,プロセス ID が pid であるプロセスのプロセス・グループ ID として, pgid が設定されます。特別なケースとして,pid が 0 の場合は,呼び出し元プロセスのプロセス ID が使用されます。また,pgid が 0 の場合は,指定したプロセスのプロセス・グループ ID が使用されます。
0 成功を示します。 - 1 エラーを示します。この関数は,以下のいずれかの値を errno に設定します。
- EACCES -- pid 引数の値が,呼び出し元プロセスの子プロセスのプロセス ID と一致し,その子プロセスが exec ファミリ関数のいずれかを正常に実行していました。
- EINVAL -- pgid 引数の値が 0 より小さいか,実装でサポートされていない値でした。
- EPERM -- pid 引数で指定されたプロセスは,セッション・リーダです。 pid 引数の値が,呼び出し元プロセスの子プロセスのプロセス ID と一致し,その子プロセスが,呼び出し元プロセスと同じセッションに属していません。 pgid 引数の値は有効ですが, pid 引数で指定されたプロセスのプロセス ID と一致していず,呼び出し元プロセスと同じセッション内に, pgid 引数の値と一致するプロセス・グループ ID を持つプロセスがありません。
- ESRCH -- pid 引数の値が,呼び出し元プロセスのプロセス ID,呼び出し元プロセスの子プロセスのプロセス ID のどちらとも一致しません。
プロセス・グループ 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 と同じ値が設定されます。呼び出し元プロセスは,新しいプロセス・グループ内で唯一のプロセスであり,また新しいセッション内で唯一のプロセスです。setsid関数のプロトタイプが見えるようにするには, __USE_LONG_GID_T 機能マクロを有効にする必要があります。
x 呼び出し元プロセスのプロセス・グループ ID です。 (pid_t) - 1 エラーを示します。この関数は,次の値を errno に設定します。
- EPERM -- 呼び出し元プロセスがすでにプロセス・グループ・リーダであるか,呼び出し元プロセス以外のプロセスのプロセス・グループ ID が,呼び出し元プロセスのプロセス ID と一致しています。
| 前へ | 次へ | 目次 | 索引 |