日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


HP OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (下巻)


前へ 次へ 目次 索引





setpgrp (Alpha, I64)

プロセス・グループ ID を設定します。



形式

#include <unistd.h>

pid_t setpgrp (void);




説明

呼び出し元プロセスがまだセッション・リーダでなければ, setpgrpは,呼び出し元プロセスのプロセス・グループ ID として,呼び出し元プロセスのプロセス ID を設定します。 setpgrpで新しいセッションが作成される場合,新しいセッションには制御端末はありません。

呼び出し元プロセスがセッション・リーダの場合, setpgrp関数の効果はありません。




戻り値

x 呼び出し元プロセスのプロセス・グループ ID です。




setpwent

ユーザ・データベースをリワインドします。



形式

#include <pwd.h>

void setpwent (void);




説明

setpwent関数は,ユーザ・データベースを実質的にリワインドし,検索を繰り返し実行できるようにします。

戻り値はありませんが,I/O エラーが発生した場合は, errnoに EIO が設定されます。

getpwentも参照してください。




setregid (Alpha, I64)

実グループ 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 を設定する変更以外の変更が要求されました。




setreuid (Alpha, I64)

ユーザ 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 を実装で許されていない値に変更しようとしました。




setsid (Alpha, I64)

セッションを作成し,プロセス・グループ 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 と一致しています。




setstate

乱数ジェネレータの再開と変更を行います。



形式

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 引数が無効。




setuid

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 と一致しない。




setvbuf

入力ファイルまたは出力ファイルに新しいバッファを関連付けます。バッファリングの動作を変更することもあります。



形式

#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 のデフォルトのバッファリング動作を変更するには,ファイルを creatfreopen,または open関数でオープンするときに,ctx,fop,rat,gbc, mbc,mbf,rfm,および rop の RMS キーワードに対して各種の値を指定します。




戻り値

0 成功を示します。
ゼロ以外の値 type または file_ptr に無効な入力値が指定されたか, file_ptr が別のスレッドによって使用されていることを示します ( 『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.9.1 項を参照)。




shm_open (Alpha, I64)

共用メモリ・オブジェクトをオープンします。



形式

#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 ---共用メモリ・オブジェクトを新しく作成するためのメモリ領域が十分にありません。


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項