| 日本-日本語 | 
      
  | 
  
      
  | 
  
| 
 | 
     
OpenVMS マニュアル | 
    
  
  | 
    
     
HP OpenVMS
 | 
    
    
  ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 目次 | 索引 | 
オペレーティング・システムの開発には,C プログラミング言語が適しています。たとえば,UNIX オペレーティング・システムの大部分は C で書かれています。システム・プログラムを作成する場合,プログラムが動作する環境を検索または変更しなければならないことがあります。この章では,このような作業やその他のシステム・タスクを実行するための HP C Run-Time Library (RTL) 関数について説明します。
表 9-1 は, HP C RTL で提供されるすべてのシステム関数を示しています。各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。
| 関数 | 説明 | 
|---|---|
| システム関数---検索およびソート・ユーティリティ | |
| bsearch | ソートされたオブジェクトの配列でバイナリ検索を実行して,指定されたオブジェクトを検索する。 | 
| qsort | クイック・ソート・アルゴリズムを実装することにより,オブジェクトの配列をソートする。 | 
| システム関数---プロセス情報の検索 | |
| ctermid | SYS$COMMAND の等価文字列を与える文字列を返す。これは制御端末の名前である。 | 
| cuserid | 現在のプロセスを開始したユーザの名前を格納した文字列を指すポインタを返す。 | 
| getcwd | 現在のワーキング・ディレクリのファイル指定を指すポインタを返す。 | 
| 
getegid
,
geteuid
,
 getgid , getuid  | 
OpenVMS の用語で,ユーザ識別コード (UIC) からグループ番号とメンバ番号を返す。 | 
| getenv | 現在のプロセスの環境配列を検索し,指定された環境に関連付けられている値を返す。 | 
| getlogin | 現在のセッションに関連付けられているユーザのログイン名を取得する。 | 
| getpid | 現在のプロセスのプロセス ID を返す。 | 
| getppid | 呼び出しプロセスの親プロセス ID を返す。 | 
| getpwnam | ユーザ・データベース内のユーザ名情報にアクセスする。 | 
| getpwuid | ユーザ・データベース内のユーザ ID 情報にアクセスする。 | 
| システム関数---プロセス情報の変更 | |
| chdir | デフォルト・ディレクトリを変更する。 | 
| chmod | ファイルのファイル保護を変更する。 | 
| chown | ファイルのオーナのユーザ識別コード (UIC) を変更する。 | 
| mkdir | ディレクトリを作成する。 | 
| nice | 引数に指定された値だけ,プロセスの基本優先順位に対してプロセス優先順位を上げる,または下げる。 | 
| putenv | 環境変数を設定する。 | 
| setenv | 現在の環境リストに環境変数名を挿入する,またはリセットする。 | 
| setgid, setuid | プログラムの移植性を確保するために実装されており,機能はない。 | 
| sleep , usleep | 少なくとも引数に指定された秒数だけ,現在のプロセスの実行を停止する。 | 
| umask | 新しいファイルが作成されるときに使用されるファイル保護マスクを作成する。古いマスクの値を返す。 | 
| システム関数---日付/時刻情報の取得と変換 | |
| asctime | 年月日時分秒形式の時刻を 26 文字の文字列に変換する。 | 
| clock | プログラムの実行開始以降に使用された CPU 時間をマイクロ秒単位で判断する。 | 
| clock_getres | 指定されたクロックの精度を取得する。 | 
| clock_gettime | 指定されたクロックの現在の時刻 (秒およびナノ秒) を返す。 | 
| clock_settime | 指定されたクロックを設定する。 | 
| ctime | 秒単位の時刻を asctime 関数で生成される形式の ASCII 文字列に変換する。 | 
| decc$fix_time | OpenVMS のバイナリ・システム時刻を UNIX のバイナリ時刻に変換する。 | 
| difftime | 引数によって指定される 2 つの時刻の差を秒単位で計算する。 | 
| ftime | 1970 年 1 月 1 日 00:00:00 からの経過時間を timeb 構造体に返す。 | 
| getclock | システム単位で設定されているクロックの現在の値を取得する。 | 
| getdate | 書式設定された文字列を時刻/日付構造体に変換する。 | 
| getitimer | 間隔タイマの値を返す。 | 
| gettimeofday | 日付と時刻を取得する。 | 
| gmtime | 時間単位を年月日時分秒形式の UTC 時刻に変換する。 | 
| localtime | 時刻 (1970 年 1 月 1 日 00:00:00 からの経過時間を秒数で表現した時刻) を時,分,秒などに変換する。 | 
| mktime | ローカル時刻構造体を Epoch (1970 年 1 月 1 日 00:00:00) からの経過時間に変換する。 | 
| nanosleep | 高精度の sleep (リアルタイム)。指定された時間,プロセスの実行を一時停止する。 | 
| setitimer | 間隔タイマの値を設定する。 | 
| strftime, wcsftime | 指定された書式文字列による制御のもとで,配列に文字を格納する。 | 
| strptime | 文字列を日付と時刻の値に変換する。 | 
| time | 1970 年 1 月 1 日 00:00:00 からの経過時間を秒単位で返す。 | 
| times | 現在のプロセスと終了した子プロセスの累積時間を返す。 | 
| tzset | タイム・ゾーン変換を設定する,またはタイム・ゾーン変換にアクセスする。 | 
| ualarm | 間隔タイマの時間切れを設定または変更する。 | 
| wcsftime | tm 構造体に格納されている日付と時刻の情報を使用して,ワイド文字の出力文字列を作成する。 | 
| システム関数---その他 | |
| VAXC$CRTL_INIT | 実行時環境を初期化し,終了および条件ハンドラを設定する。この結果, HP C RTL 関数を他の言語から呼び出すことができるようになる。 | 
例 9-1 は, cuserid関数の使用方法を示しています。
| 例 9-1 ユーザ名へのアクセス | 
|---|
/*        CHAP_9_GET_USER.C                                   */ 
 
/* Using cuserid, this program returns the user name.         */ 
 
#include <stdio.h> 
 
main() 
{ 
    static char string[L_cuserid]; 
 
    cuserid(string); 
    printf("Initiating user: %s\n", string); 
} 
 | 
TOLLIVER という名前のユーザがプログラムを実行すると, stdoutに次の情報が表示されます。
$ RUN EXAMPLE1 Initiating user: TOLLIVER  | 
例 9-2 は, getenv関数の使用方法を示しています。
| 例 9-2 端末情報へのアクセス | 
|---|
/*        CHAP_9_GETTERM.C                              */ 
 
/* Using getenv, this program returns the terminal.     */ 
 
#include <stdio.h> 
#include <stdlib.h> 
 
main() 
{ 
    printf("Terminal type: %s\n", getenv("TERM")); 
} 
 | 
132 カラム・モードの VT100 端末で 例 9-2 を実行すると,次の情報が表示されます。
$ RUN EXAMPLE3 Terminal type: vt100-132  | 
例 9-3 は, getenvを使用してユーザのデフォルト・ログイン・ディレクトリを調べる方法と, chdirを使用してそのディレクトリに変更する方法を示しています。
| 例 9-3 デフォルト・ディレクトリの操作 | 
|---|
/*       CHAP_9_CHANGE_DIR.C                                    */ 
    
/* This program performs the equivalent of the DCL command      */ 
/* SET DEFAULT SYS$LOGIN. However, once the program exits, the  */ 
/* directory is reset to the directory from which the program   */ 
/* was run.                                                     */ 
 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
 
main() 
{ 
    char *dir; 
    int i; 
 
    dir = getenv("HOME"); 
    if ((i = chdir(dir)) != 0) { 
        perror("Cannot set directory"); 
        exit(0); 
    } 
 
    printf("Current directory: %s\n", dir); 
} 
 | 
例 9-3 を実行すると,次の情報が表示されます。
$ RUN EXAMPLE4 Current directory: dba0:[tolliver] $  | 
例 9-4 は, time, localtime, strftime関数を使用して端末に正しい日付と時刻をプリントする方法を示しています。
| 例 9-4 日付と時刻のプリント | 
|---|
/*        CHAP_9_DATE_TIME.C                                    */ 
 
/* The time function returns the time in seconds; the localtime */ 
/* function converts the time to hours, minutes, and so on;     */ 
/* the strftime function uses these values to obtain a string   */ 
/* in the desired format.                                       */ 
 
#include <time.h> 
#include <stdio.h> 
 
#define MAX_STRING 80 
 
main() 
{ 
    struct tm *time_structure; 
    time_t time_val; 
    char output_str[MAX_STRING]; 
 
    time(&time_val); 
    time_structure = localtime(&time_val); 
 
    /* Print the date  */ 
 
    strftime(output_str, MAX_STRING, 
             "Today is %A, %B %d, %Y", time_structure); 
 
    printf("%s\n", output_str); 
 
    /* Print the time using a 12-hour clock format. */ 
 
    strftime(output_str, MAX_STRING, 
             "The time is %I:%M %p", time_structure); 
 
    printf("%s\n", output_str); 
}    
 | 
例 9-4 を実行すると,次の情報が表示されます。
$ RUN EXAMPLE5 Today is Thursday, May 20, 1993 The time is 10:18 AM $  | 
| 目次 | 索引 | 
      
  | 
  ||||||||