HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
指定されたディレクトリをオープンします。
#include <dirent.h>DIR *opendir (const char *dir_name);
dir_name
オープンするディレクトリの名前。
opendir関数は, dir_name で指定されたディレクトリをオープンし,それにディレクトリ・ストリームを関連付けます。ディレクトリ・ストリームの位置は最初のエントリに設定されます。 <dirent.h>ヘッダ・ファイルに定義されている DIR型は,ディレクトリ・ストリームを表します。ディレクトリ・ストリームとは,特定のディレクトリの中のすべてのディレクトリ・エントリの順序付きのシーケンスです。また, opendir関数は,それ以降の操作でディレクトリ・ストリームを識別するためのポインタも返します。 dir_name で指定されたディレクトリにアクセスできない場合,またはストリーム全体を保持するのに十分なメモリがない場合には, NULL ポインタが返されます。
注意
オープンされたディレクトリは,その次にディレクトリをオープンする試みが成功するように,必ず closedir関数でクローズされなくてはなりません。 opendir関数は, readdir, closedir, および rewinddir関数と組み合わせて,ディレクトリの内容を確認するために使用します。
closedirの項のプログラム例を参照してください。
x DIR 型のオブジェクトへのポインタ。 NULL エラーを示します。 errno は以下のいずれかの値に設定されます。
- EACCES--- dir_name のいずれかのコンポーネントに対する検索許可が拒否されたか, dir_name に対する読み込み許可が拒否された。
- ENAMETOOLONG--- dir_name 文字列の長さが PATH_MAX を超えたか,パス名コンポーネントが NAME_MAX よりも長かった。
- ENOENT--- dir_name 引数が,存在しないファイルの名前をポイントしているか,空の文字列である。
win1 を win2 に対して非破壊的にスーパインポーズします。この関数は,両方のウィンドウの開始座標を起点として, win1 の内容を win2 に書き込みます。 win1 上の空白は, win2 上の対応するスペースの内容を変更せずに残します。 overlay関数は,ウィンドウのボックスを可能な限りコピーします。
#include <curses.h>int overlay (WINDOW *win1, WINDOW *win2);
win1
ウィンドウへのポインタ。win2
ウィンドウへのポインタ。
OK 成功を示します。 ERR 失敗を示します。
win1 の内容を破壊的に win2 に書き込みます。
#include <curses.h>int overwrite (WINDOW *win1, WINDOW *win2);
win1
ウィンドウへのポインタ。win2
ウィンドウへのポインタ。
overwrite関数は,両方のウィンドウの開始座標を起点として, win1 の内容を win2 に書き込みます。 win1 上の空白は,win2 上では空白として書き込まれます。この関数は,ウィンドウのボックスを可能な限りコピーします。
OK 成功を示します。 ERR エラーを示します。
ファイル実装特性を取得します。
#include <unistd.h>long int pathconf (const char *path, int name);
path
ファイルまたはディレクトリのパス名。name
問い合わせる構成属性。この属性が,path 引数で指定されたファイルに適用不可能な場合, pathconf関数はエラーを返します。
pathconf関数により,アプリケーションは, path で指定されたファイルの下にあるファイル・システムがサポートしている操作の特性を判定することができます。指定されたファイルの読み込み,書き込み,または実行の許可は不要ですが,パス内の,そのファイルに至るまでのすべてのディレクトリを検索できる必要があります。name 引数のためのシンボリック値は, <unistd.h>ヘッダ・ファイルに次のように定義されています。
_PC_LINK_MAX ファイルへのリンク数の最大値。 path 引数がディレクトリを参照している場合,返される値はディレクトリそのものに適用される。 _PC_MAX_CANON 正規入力行に含まれるバイト数の最大値。これはターミナル・デバイスにのみ適用される。 _PC_MAX_INPUT 入力キューに入れることができる型の数。これはターミナル・デバイスにのみ適用される。 _PC_NAME_MAX ファイル名に含まれるバイト数の最大値 (末尾の null を含まない)。バイト範囲の値は 13〜255 である。これはディレクトリ・ファイルにのみ適用される。返される値は,ディレクトリ内のファイル名に適用される。 _PC_PATH_MAX パス名に含まれるバイト数の最大値 (末尾の null を含まない)。この値はつねに 65,535 以下である。これはディレクトリ・ファイルにのみ適用される。返される値は,指定されたディレクトリがワーキング・ディレクトリである場合の相対パス名の長さの最大値である。 _PC_PIPE_BUF アトミックに書き込まれることが保証されるバイト数の最大値。これは FIFO にのみ適用される。返される値は参照先オブジェクトに適用される。 path 引数がディレクトリを参照している場合,返される値は,ディレクトリ内に存在する,または作成することができるすべての FIFO に適用される。 _PC_CHOWN_RESTRICTED これはディレクトリ・ファイルにのみ適用される。返される値は,ディレクトリ内に存在する,または作成することができるすべての (ディレクトリ以外の) ファイルに適用される。 _PC_NO_TRUNC NAME_MAX で許されるよりも長いコンポーネント名がエラーを引き起こす場合に, 1 を返す。長いコンポーネント名が切り捨てられる場合には,0 (ゼロ) を返す。これはディレクトリ・ファイルにのみ適用される。 _PC_VDISABLE これはつねに 0 (ゼロ) である。無効化文字は定義されない。これはターミナル・デバイスにのみ適用される。
x name で指定された構成属性の,結果として得られた値。 - 1 エラーを示します。 errno は,以下のいずれかの値に設定されます。
- EACCES--- パス接頭辞のコンポーネントに対して,検索許可が拒否された。
- EINVAL--- name 引数は,未知の,または適用不可能な特性を指定している。
- EFAULT--- path 引数は無効なアドレスである。
- ENAMETOOLONG--- path 文字列の長さが PATH_MAX を超えている,またはパス名コンポーネントが NAME_MAX よりも長い。
- ENOENT---指定されたファイルが存在しない,または path 引数が空の文字列をポイントしている。
- ENOTDI--- path 接頭辞のコンポーネントはディレクトリではない。
シグナル・キャッチ関数の実行かプロセスの終了を引き起こすアクションを持つシグナルが送信されるまで,呼び出し元プロセスを一時停止します。
#include <unistd.h>int pause (void);
pause関数は,シグナル・キャッチ関数の実行かプロセスの終了を引き起こすアクションを持つシグナルが送信されるまで,呼び出し元プロセスを一時停止します。アクションがプロセスの終了だった場合, pauseは返りません。
アクションがシグナル・キャッチ関数の実行だった場合, pauseはそのシグナル・キャッチ関数が返った後に返ります。
pause 関数は,シグナルに割り込まれるまでプロセスの実行をいつまでも一時停止するため,成功を示す戻り値はありません。 - 1 pause が返る場合,戻り値は - 1 で, errno は EINTR に設定されます。
プロセスへのパイプをクローズします。
#include <stdio.h>int pclose (FILE *stream);
stream
以前の popen関数の呼び出しから返された,オープン・パイプの FILE構造体へのポインタ。
pclose関数は,呼び出し元プログラムと,実行されるシェル・コマンドの間のパイプをクローズします。 pcloseは, popenでオープンした任意のストリームをクローズする目的に使用します。 pclose関数は,対応するプロセスが終了するのを待ってから,コマンドの終了ステータスとともに返ります。終了ステータスの解釈については, waitpidの説明を参照してください。OpenVMS Version 7.3-1 から, _VMS_WAIT マクロを定義してコンパイルした場合, pclose関数は子プロセスの OpenVMS 完了コードを返すようになりました。
popenも参照してください。
x 子プロセスの終了ステータス。 - 1 エラーを示します。 stream 引数は popen 関数に関連付けられていません。 errno は以下の値に設定されます。
- ECHILD---子プロセスのステータスを取得できない。
stderrに, errnoの現在の値を記述する短いエラー・メッセージを書き込みます。
#include <stdio.h>void perror (const char *str);
str
通常は,エラーを引き起こしたプログラムの名前。
perror関数は,外部変数 errnoのエラー番号を使用して,適切なロケール依存のエラー・メッセージを取得します。この関数が出力するメッセージは, str (ユーザ提供のエラー・メッセージに対する接頭辞),コロンとスペース,メッセージそのもの,そして改行文字から構成されます。発生する可能性のあるエラーのリストについては,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4 章の errnoの説明を参照してください。
strerrorも参照してください。
#include <stdio.h> #include <stdlib.h> main(argc, argv) int argc; char *argv[]; { FILE *fp; fp = fopen(argv[1], "r"); /* Open an input file. */ if (fp == NULL) { /* If the fopen call failed, perror prints out a */ /* diagnostic: */ /* */ /* "open: <error message>" */ /* This error message provides a diagnostic explaining */ /* the cause of the failure. */ perror("open"); exit(EXIT_FAILURE); } else fclose(fd) ; }
親プロセスと子プロセスの間でデータの読み書きに使用できる一時的なメールボックスを作成します。プロセスが通信に使用するチャネルは,パイプと呼ばれます。
#include <unistd.h>int pipe (int array_fdscptr[2]); (ISO POSIX-1)
int pipe (int array_fdscptr[2], ...); (HP C Extension)
array_fdscptr
ファイル記述子の配列。パイプは,メールボックスに関連付けられたファイル記述子の配列として実装されます。これらのメールボックス記述子は, isapipe関数に渡されたときに 1 を返すファイル記述子であるという点で特殊な存在です。ファイル記述子は,次のように割り当てられます。
- 最初の利用可能なファイル記述子が書き込みに割り当てられ,次の利用可能なファイル記述子が読み込みに割り当てられる。
- その後,ファイル記述子は配列に逆順に格納される。要素 0 には読み込みのためのファイル記述子が格納され,要素 1 には書き込みのためのファイル記述子が格納される。
...
3 つのオプションの定位置引数 flag, bufsize,およびbufquota を表します。flag
ビットマスクとして使用されるオプションの引数。O_NDELAY または O_NONBLOCK ビットが設定されていると, array_fdscptr ファイル記述子を通してのメールボックスへの I/O 操作は,他のプロセスを待つのではなく,ただちに終了します。
たとえば,O_NDELAY ビットが設定されており,親プロセスがメールボックスにデータを入れる前に,子プロセスがメールボックスに対する read要求を発行すると, readは 0 ステータスでただちに終了します。 O_NDELAY ビットも O_NONBLOCK ビットも設定されていない場合は,子プロセスは,親プロセスがメールボックスにデータを書き込むまで待ってから読み込みを行います。これは,flag 引数が指定されなかった場合のデフォルトの動作です。
O_NDELAY と O_NONBLOCK の値は <fcntl.h>ヘッダ・ファイルに定義されています。 flag 引数の中のその他のビットはすべて無視されます。この引数は,第 2 のオプションの定位置引数 bufsize が指定されている場合には,必ず指定する必要があります。 bufsize 引数を指定するためだけの目的に flag 引数を指定する場合には,flag として 0 を指定してください。
bufsize
メールボックスのサイズをバイト単位で指定する int型の引数 (オプション)。 512 〜 65535 の値を指定します。この引数に 0 を指定するか,この引数を省略すると,オペレーティング・システムはデフォルトのサイズ (512 バイト) のメールボックスを作成します。
0 より小さい,または 65535 より大きい値を指定すると,予期できない結果となります。
この引数を指定する場合は, flag 引数を前に指定してください。
DECC$PIPE_BUFFER_SIZE 機能論理名を使用しても,メールボックスのサイズを指定できます。 bufsize を指定すると, DECC$PIPE_BUFFER_SIZE の値よりも優先されます。指定しないと,DECC$PIPE_BUFFER_SIZE の値が使用されます。
bufsize と DECC$PIPE_BUFFER_SIZE のどちらも指定しなかった場合は,デフォルトのバッファ・サイズ 512 が使用されます。
bufquota
パイプのメールボックスのバッファ・クォータを指定する int型の引数 (オプション)。 512 〜 2147483647 の値を指定します。OpenVMS Version 7.3-2 で,この引数が追加されました。以前のバージョンの OpenVMS では,バッファ・クォータとバッファ・サイズは同じでした。
DECC$PIPE_BUFFER_QUOTA 機能論理名を使用しても, バッファ・クォータを指定できます。 pipe関数の bufquota オプション引数を指定すると, DECC$PIPE_BUFFER_QUOTA の値よりも優先されます。指定しないと,DECC$PIPE_BUFFER_QUOTA の値が使用されます。
bufquota と DECC$PIPE_BUFFER_QUOTA のどちらも指定しなかった場合,バッファ・クォータは以前と同じように,デフォルトでバッファ・サイズとなります。
パイプのために使われるメールボックスは,一時的なメールボックスです。メールボックスは,そのメールボックスに対するチャネルをオープンしているすべてのプロセスがそれらのチャネルをクローズするまでは削除されません。パイプを最後にクローズするプロセスは,メールボックスに対して,ファイルの終端を示すメッセージを書き込みます。メールボックスは,以下の特性を指定して,$CREMBX システム・サービスを使って作成されます。
- 最大メッセージ長は 512 文字
- バッファ・クォータは 512 文字
- USER および GROUP にすべての特権を与え, SYSTEM または WORLD には何の特権も与えない保護マスク
512 文字のバッファ・クォータは,メールボックスの全体または一部の読み込みを行うまで,メールボックスに 512 文字以上の書き込みを行えないということを意味しています。メールボックス・レコードは,それが含んでいるメッセージのデータ部よりも若干大きいので, 512 文字すべてをメッセージ・データに使用できるわけではありません。バッファのサイズは, pipe関数のオプションの第 3 引数によって代替サイズを指定することで増やすことができます。 OpenVMS システムにおけるパイプは,キャリッジ・コントロール属性を持たないストリーム型のファイルです。 HP C RTL では,これはデフォルトで完全にバッファリングされます。パイプとして使用されるメールボックスは,アプリケーションによって作成されるメールボックスとは異なります。アプリケーションによって作成されるメールボックスは,デフォルトでは,キャリッジ・リターンとキャリッジ・コントロールを含むレコード型のファイルになります。さらに,メールボックスに長さゼロのレコードを書き込んだときと,メールボックスがクローズされるたびに,EOF が書き込まれます。一方,パイプでは,パイプの最後のクローズのみが EOF を書き込みます。
パイプは, vforkと exec関数が呼び出される前に,親プロセスによって作成されます。子プロセスは,まず pipeを呼び出すことで,パイプのオープン・ファイル記述子を継承します。その後, getname関数を使って,必要ならばパイプに関連付けられているメールボックスの名前を返すことができます。 getnameから返されるメールボックス名は, nnnn または nnnnn を一意の数として, _MBAnnnn: (Alpha only) または _MBAnnnnn: (I64 only) の形式を持っています。
親と子の両方が,パイプに対してどのファイル記述子が割り当てられるのかを事前に知る必要があります。この情報は実行時に取得することはできません。このため, HP C for OpenVMS プログラムにおいてファイル記述子がどのように使われるかを理解しておくことが重要となります。ファイル記述子の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。
ファイル記述子 0,1,および 2 は, HP C for OpenVMS プログラムでは,それぞれ stdin(SYS$INPUT), stdout(SYS$OUTPUT), および stderr(SYS$ERROR) に対してオープンされています。このため, pipeが呼び出されたときに他のファイルがオープンされていない場合, pipeはファイル記述子 3 を書き込み用に,ファイル記述子 4 を読み込み用に割り当てます。 pipeから返される配列では,要素 0 に 4 が,要素 1 に 3 が格納されます。
前へ 次へ 目次 索引