前へ | 次へ | 目次 | 索引 |
現在のプロセスを開始したユーザの名前を格納した文字列を指すポインタを返します。
#include <unistd.h> (X/Open, POSIX-1)関数バリアント cuserid関数には, _cuserid32および _cuserid64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。#include <stdio.h> (X/Open)
char *cuserid (char *str);
str
この引数が NULL の場合は,ユーザ名は内部的に格納されます。引数が NULL でない場合は,長さが L_cuserid( <stdio.h>ヘッダ・ファイルで定義) の記憶域を指すポインタであり,名前はその記憶域に格納されます。ユーザ名がヌル文字列の場合は,NULL を返します。
ポインタ 文字列を指すポインタ。 NULL ユーザ名がヌル文字列の場合。
この関数を使用すると,他の言語から HP C RTL を呼び出したり,メイン関数が C で作成されていないときに HP C RTL を使用することができます。この関数は実行時環境を初期化し,終了ハンドラと条件ハンドラの両方を設定します。 VAXC$CRTL_INITは DECC$CRTL_INITの同意語です。どちらの名前も同じルーチンを起動します。
#include <signal.h>void DECC$CRTL_INIT(void);
次の例は, DECC$CRTL_INIT関数を使用して HP C RTL を呼び出す Pascal プログラムを示しています。
$ PASCAL EXAMPLE1 $ LINK EXAMPLE1 $ TY EXAMPLE1.PAS PROGRAM TESTC(input, output); PROCEDURE DECC$CRTL_INIT; extern; BEGIN DECC$CRTL_INIT; END
共用可能イメージでこの関数を呼び出す必要があるのは,そのイメージにシグナル処理,環境変数,I/O,終了処理,デフォルト・ファイル保護マスクのための HP C 関数が含まれている場合や,コンテキストを継承する子プロセスである場合だけです。
初期化処理の多くは 1 回だけ実行されますが, DECC$CRTL_INITは複数回呼び出しても安全です。OpenVMS VAX システムでは, DECC$CRTL_INITは, DECC$CRTL_INITが呼び出されるたびに DECC$CRTL_INITを呼び出すルーチンのフレーム内で, HP C RTL の内部 OpenVMS 例外ハンドラを設定します。
現在の呼び出しスタック内の少なくとも 1 つのフレームで, UNIX シグナルにマッピングされる OpenVMS 例外に対してハンドラが設定されている必要があります。
機能値にアクセスするためのインデックスを返します。
int decc$feature_get_index (char *name);
name
サポートされる機能の一覧で,名前として渡される文字列を指すポインタ。
decc$feature_get_index関数は,サポートされる機能の一覧から, name として渡された文字列を検索します。名前が見つかると, decc$feature_get_indexは ( 負でない ) インデックスを返します。このインデックスを使用して,機能の値を設定したり,取得することができます。 name の比較では,大文字と小文字は区別されません。エラーが発生すると, - 1 が返され, errnoはエラーを示すように設定されます。
decc$feature_get_name, decc$feature_get_value, decc$feature_set_valueも参照してください。
n 負でないインデックス。このインデックスを使用して,機能に対して指定された値を設定するか,または値を取得することができます。 - 1 エラーを示します。 errno が設定されます。
次のサンプル・モジュールでは,アプリケーションのデフォルト値を設定します。モジュールはアプリケーションとは別にコンパイルし,リンク時にイメージに取り込むことができます。
static int set_feature_default(char *name, int value) { int index = decc$feature_get_index(name); if (index == -1 || decc$feature_set_value(index, 0, value) == -1) { perror(name); return -1; } return 0; } static void my_init( void) { set_feature_default("DECC$POSIX_SEEK_STREAM_FILE" , TRUE); set_feature_default("DECC$ARGV_CASE_PARSE_STYLE" , TRUE); set_feature_default("DECC$EFS_CASE_PRESERVE" , TRUE); set_feature_default("DECC$FILE_SHARING" , TRUE); } #pragma nostandard globaldef { "LIB$INITIALIZ" } readonly _align (LONGWORD) int spare[8] = {0}; globaldef { "LIB$INITIALIZE" } readonly _align (LONGWORD) void (*x_my_init)() = my_init; #pragma standard
機能名を返します。
char *decc$feature_get_name (int index);
index
0 から,割り当てられている最大の機能までの整数値。
decc$feature_get_name関数は,index で指定されるエントリの機能名を格納したヌル区切り文字列を指すポインタを返します。index の値は,0 から,割り当てられている最大の機能までの範囲です。 index の値に対応する機能がない場合は, NULL ポインタが返されます。エラーが発生すると,NULL が返され, errnoはエラーを示すように設定されます。
decc$feature_get_index, decc$feature_get_value, decc$feature_set_valueも参照してください。
x index で指定されるエントリの機能の名前を格納したヌル区切り文字列を指すポインタ。 NULL エラーを示します。 errno が設定されます。
C RTL 機能の取得と設定の例については, decc$feature_get_indexを参照してください。
mode 引数に応じて,機能値を返します。
int decc$feature_get_value (int index, int mode);
index
0 から,割り当てられている最大の機能までの整数値。mode
返す機能値を示す整数。mode に対して指定できる値は次のとおりです。0 デフォルト値
1 現在の値
2 最小値
3 最大値
4 初期化状態
decc$feature_get_value関数は, index によって指定される機能の値を取得します。 mode は,どの値を返すかを指定します。デフォルト値とは,論理名によって設定されていない場合や, decc$feature_set_valueの呼び出しで変更されていない場合に使用される値です。
mode = 4 の場合は,初期化状態が返されます。初期化状態の値は次のとおりです。
0 初期化されていない
1 論理名によって設定
2 decc$feature_set_valueによって設定
- 1---デフォルト値に初期化エラーが発生すると, - 1 が返され, errnoはエラーを示すように設定されます。
decc$feature_get_index, decc$feature_get_name, decc$feature_set_valueも参照してください。
n 指定された index 引数と mode 引数に対応する整数。 - 1 エラーを示します。 errno が設定されます。
C RTL 機能の取得と設定の例については, decc$feature_get_indexを参照してください。
index で指定される機能のデフォルト値または現在の値を設定します。
int decc$feature_set_value (int index, int mode, int value);
index
0 から,割り当てられている最大の機能までの整数値。mode
デフォルト値を設定するのか,現在の機能値を設定するのかを示す整数値。 mode に対して指定できる値は次のとおりです。0 デフォルト値
1 現在の値value
設定する機能値。
decc$feature_set_value関数は, index によって指定される機能のデフォルト値または現在の値 (mode 引数で指定) を設定します。この関数が正常終了すると,前の値が返されます。
エラーが発生すると, - 1 が返され, errnoはエラーを示すように設定されます。
decc$feature_get_index, decc$feature_get_name, decc$feature_get_valueも参照してください。
n 前の機能値。 - 1 エラーを示します。 errno が設定されます。
C RTL 機能の取得と設定の例については, decc$feature_get_indexを参照してください。
OpenVMS バイナリ・システム時刻を UNIX バイナリ時刻に変換します。
#include <unixlib.h>unsigned int decc$fix_time (void *vms_time);
vms_time
OpenVMS バイナリ時刻を格納したクォドワードのアドレス。
unsigned int quadword[2]; unsigned int *vms_time = quadword;
decc$fix_timeルーチンは, OpenVMS バイナリ・システム時刻 (1858 年 11 月 17 日 00:00 からの経過時間 (100 ナノ秒単位) を格納した 64 ビット・クォドワード) を UNIX バイナリ時刻 (1970 年 1 月 1 日 00:00 からの経過時間 (秒数) を格納したロングワード) に変換します。このルーチンは,OpenVMS システム・サービスおよび RMS サービスから返されたバイナリ時刻を, ctimeや localtimeなどの HP C RTL ルーチンで使用される形式に変換するのに役立ちます。
x 1970 年 1 月 1 日 00:00 からの経過時間 (秒数) を格納したロングワード。 ( unsigned int )( - 1) エラーを示します。戻り値 ( unsigned int )( - 1) は, 2106 年 2 月 7 日日曜日 06:28:15 という有効な日付も表すことに注意してください。
#include <unixlib.h> #include <stdio.h> #include <starlet.h> /* OpenVMS specific SYS$ routines) */ main() { unsigned int current_vms_time[2]; /*quadword for OpenVMS time*/ unsigned int number_of_seconds; /* number of seconds */ /* first get the current system time */ sys$gettim(¤t_vms_time[0]); /* fix the time */ number_of_seconds = decc$fix_time(¤t_vms_time[0]); printf("Number of seconds since 00:00 January 1, 1970 = %d", number_of_seconds); }
この例では, HP C で decc$fix_timeルーチンを使用する方法を示しています。また,SYS$GETTIM システム・サービスの使い方も示しています。
OpenVMS ファイル指定を UNIX 形式のファイル指定に変換します。
#include <unixlib.h>int decc$from_vms (const char *vms_filespec, int action_routine, int wild_flag);
vms_filespec
OpenVMS ファイル指定形式の名前を格納したヌル区切り文字列のアドレス。action_routine
指定された OpenVMS ファイル名から有効な UNIX 形式のファイル名への変換を格納したヌル区切り文字列を唯一の引数として受け付けるルーチンのアドレス。action_routine が 0 以外の値 (TRUE) を返した場合は,ファイル変換は続行されます。 0 (FALSE) を返した場合は,ファイル変換はそれ以上続行されません。
wild_flag
0 または 1 を値によって渡します。 0 を指定した場合は,vms_filespec で検出されたワイルドカードは展開されません。0 以外の値を指定した場合は,ワイルドカードが展開され,それぞれの展開結果が action_routine に渡されます。展開されたファイル名のうち,既存の UNIX 形式のファイルに対応するファイル名だけが渡されます。
decc$from_vmsルーチンは,指定された OpenVMS ファイル指定を対応する UNIX 形式のファイル指定に変換します。 OpenVMS ワイルドカードを指定することができます。ワイルドカードは UNIX 形式のファイル指定で,対応する既存のファイルのリストに変換されます。
x 指定された OpenVMS ファイル指定から作成されたファイル名の数。
/* This example must be run as a foreign command */ /* and be supplied with an OpenVMS file specification. */ #include <unixlib.h> #include <stdio.h> int main(int argc, char *argv[]) { int number_found; /* number of files found */ int print_name(); /* name printer */ printf("Translating: %s\n", argv[1]); number_found = decc$from_vms(argv[1], print_name, 1); printf("\n%d files found", number_found); } /* print the name on each line */ print_name(char *name) { printf("\n%s", name); /* will continue as long as success status is returned */ return (1); }
この例では, HP C で decc$from_vmsルーチンを使用する方法を示しています。コマンド・ラインに指定された OpenVMS ファイル指定と一致する既存のファイルをリストした lsコマンドの単純形式が作成されます。対応するファイルは UNIX 形式のファイル指定で表示されます。
文字列をパターンと照合します。
#include <unixlib.h>int decc$match_wild (char *test_string, char *string_pattern);
test_string
ヌル区切り文字列のアドレス。string_pattern
照合するパータンを格納した文字列のアドレス。このパターンには正規表現 (範囲 [a-z] など) だけでなく,ワイルドカード (アスタリスク (*),疑問符 (?),パーセント記号 (%)) なども含むことができます。
decc$match_wildルーチンは,指定されたテスト文字列が,パータンによって指定される文字列セットのメンバであるかどうかを判断します。
1 (TRUE) 文字列はパターンと一致します。 0 (FALSE) 文字列はパターンと一致しません。
/* Define as a foreign command and then provide */ /* two arguments: test_string, string_pattern. */ #include <unixlib.h> #include <stdio.h> int main(int argc, char *argv[]) { if (decc$match_wild(argv[1], argv[2])) printf("\n%s matches %s", argv[1], argv[2]); else printf("\n%s does not match %s", argv[1], argv[2]); }
レコードをファイルから読み込みます。
#include <stdio.h>int decc$record_read (FILE *fp, void *buffer, int nbytes);
fp
ファイル・ポインタ。ファイル・ポインタは,読み込みのために現在オープンされているファイルを参照しなければなりません。buffer
入力データが格納される連続した記憶域のアドレス。nbytes
読み込み操作で読み込まれる最大バイト数。
decc$record_read関数は OpenVMS システム固有であり,移植可能なアプリケーションを作成する場合は使用すべきではありません。この関数は read関数と同じですが,最初の引数がファイル記述子ではなく,ファイル・ポインタである点が異なります。
x 読み込んだ文字数。 - 1 物理的な入力エラー,不正なバッファ・アドレス,保護違反,未定義ファイル記述子などの読み込みエラーを示します。
前へ | 次へ | 目次 | 索引 |