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


前へ 次へ 目次 索引



setgrent (Alpha only)

グループ・データベースをリワインドします。

形式

#include <grp.h>

void setgrent (void);


説明

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

この関数は,必ず成功します。戻り値はありません。また, errnoも設定されません。


setitimer

インターバル・タイマの値を設定します。

形式

#include <time.h>

int setitimer (int which, struct itimerval *value, struct itimerval *ovalue);


引数

which

インターバル・タイマのタイプ。 HP C RTL は ITIMER_REAL のみをサポートしています。

value

タイマ・インターバルとインターバルの終わりまでの残り時間をメンバとして含んでいる itimerval構造体へのポインタ。

ovalue

現在のタイマ・インターバルとインターバルの終わりまでの残り時間をメンバとして含んでいる itimerval構造体へのポインタ。

説明

setitimer関数は,which で指定されたタイマを value で指定された値に設定し, ovalue がゼロ以外の値であれば,タイマの前の値を返します。

タイマ値は itimerval構造体によって定義されます。


       struct itimerval { 
               struct  timeval it_interval; 
               struct  timeval it_value; 
       }; 

itimerval構造体のメンバの値は以下のとおりです。

itimerval メンバの値 意味
it_interval = 0 次にタイマが満了したときにタイマを無効化する ( it_value がゼロ以外の値である場合)。
it_interval = ゼロ以外 タイマが満了したときに, it_value の再ロードに使用される値を指定する。
it_value = 0 タイマを無効化する。
it_value = ゼロ以外 次にタイマが満了するまでの残り時間を示す。

システム・クロックの解像度よりも小さいタイマ値は,この解像度にまで丸められます。

getitimer関数は, <time.h>ヘッダ・ファイルに ITIMER_REAL として定義されている 1 つのインターバル・タイマを提供しています。このタイマはリアル・タイムでデクリメントします。タイマが満了すると,SIGALARM シグナルが送信されます。

注意

setitimerと, alarmsleep,または usleepの間の相互作用は定められていません。


戻り値

0 成功を示します。
- 1 エラーが発生しました。 errno はエラーを示す値に設定されます。


setjmp

ネストした一連の関数呼び出しから,通常の方法を使わずに,つまり一連の return文を使用せずに,定義済みのポイントに制御を移すための手段を提供します。 setjmp関数は,呼び出し元関数のコンテキストを環境バッファに保存します。

形式

#include <setjmp.h>

int setjmp (jmp_buf env);


引数

env

環境バッファ。呼び出し元の関数のレジスタ・コンテキストを保持するのに十分な長さを持つ整数の配列でなくてはなりません。 jmp_buf型は <setjmp.h>ヘッダ・ファイルに定義されています。このバッファには,プログラム・カウンタ (PC) を含む汎用レジスタの内容が格納されます。

説明

setjmpは,初めて呼び出されたときには値 0 を返します。その後, setjmpの呼び出しと同じ環境を指定して longjmpを呼び出すと,制御は通常どおりに返ったかのように再び setjmp呼び出しに戻されます。この 2 回目のリターンにおける setjmpの戻り値は, longjmp呼び出しで指定された値です。 setjmpの真の値を保存するためには,対応する longjmpが呼び出されるまで, setjmpを呼び出す関数を再び呼び出さないようにする必要があります。

setjmp関数はハードウェア汎用レジスタを保存し, longjmp関数はそれらを復元します。 longjmpの後には, volatileとしてマークされていないローカル自動変数を除くすべての変数が, longjmpの時点の値を持つようになります。 volatileとしてマークされていないローカル自動変数の値は不定です。

setjmpおよび longjmp関数は, OpenVMS 条件処理機能を使用して,シグナル・ハンドラによる非ローカル goto を実現します。 longjmp関数は, HP C RTL 指定のシグナルを生成し, OpenVMS 条件処理機能がデスティネーションに戻れるようにすることでインプリメントされています。

HP C RTL は,任意の HP C イメージのシグナル処理を制御できなくてはなりません。 HP C がシグナル処理を制御できるようにするためには,すべての例外処理を VAXC$ESTABLISH関数の呼び出しを通して設定しなくてはなりません。詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2.5 項と, VAXC$ESTABLISH関数を参照してください。

注意

Alpha 固有の非標準的な decc$setjmpおよび decc$fast_longjmp関数が用意されています。標準関数の代わりにこれらの非標準関数を使用するためには,プログラムを __FAST_SETJMPまたは __UNIX_SETJMPマクロを定義してコンパイルする必要があります。

標準の longjmp関数とは異なり, decc$fast_longjmp関数は第 2 引数を 0 から 1 に変換しません。 decc$fast_longjmpの呼び出しの後,対応する setjmp関数は, decc$fast_longjmp呼び出しで指定された第 2 引数とまったく同じ値で返ります。


制限事項

OpenVMS 条件ハンドラから longjmp関数を呼び出すことはできません。ただし,以下のネスト制約の範囲内で, HP C RTL がサポートしている任意のシグナルに対して確立されたシグナル・ハンドラから longjmpを呼び出すことができます。


戻り値

説明のセクションを参照してください。


setlocale

category および locale 引数によって指定された,プログラムのロケールの該当部分を選択します。この関数を使用すると, 1 つのカテゴリ,またはプログラムのカレント・ロケール全体を変更または照会することができます。

形式

#include <locale.h>

char *setlocale (int category, const char *locale);


引数

category

カテゴリの名前。ロケール全体を変更または照会するには, LC_ALL を指定します。その他の有効なカテゴリ名は以下のとおりです。

locale

ロケールを指定する文字列へのポインタ。

説明

setlocale関数は, category および locale 引数によって指定された,プログラムのロケールの該当部分を設定または照会します。 category 引数として LC_ALL を指定すると,ロケール全体が指定されます。その他の値を指定すると,プログラムのロケールの一部のみが指定されます。

locale 引数は,使用するロケールを識別する文字列をポイントします。この引数は以下のいずれかです。


戻り値

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 


setpgid (Alpha only)

ジョブ制御のプロセス・グループ 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 のどちらとも一致しません。


前へ 次へ 目次 索引