前へ | 次へ | 目次 | 索引 |
OpenVMS ファイル指定を UNIX 形式のファイル指定に変換します。
#include <unixlib.h>char *decc$translate_vms (const char *vms_filespec);
vms_filespec
OpenVMS ファイル指定形式で名前を格納したヌル区切り文字列のアドレス。
decc$translate_vms関数は,ファイルが存在するかどうかにかかわらず,指定された OpenVMS ファイル指定を対応する UNIX 形式のファイル指定に変換します。変換された名前文字列はスレッド固有のメモリに格納され,同じスレッドから decc$translate_vmsを呼び出すたびに,このメモリの内容は上書きされます。decc$from_vms関数は既存のファイルだけを変換しますが,この関数はファイルが存在するかどうかにかかわらず変換します。
x UNIX のファイル指定形式で名前を格納したヌル区切り文字列のアドレス。 0 ファイル名がヌルであるか,または構文が不正であることを示します。 - 1 ファイル指定に反復記号 (たとえば [...]a.dat) が含まれているものの,その他の部分は正しいことを示します。OpenVMS の反復記号構文を正しい UNIX 形式のファイル指定に変換することはできません。
/* Demonstrate translation of a "UNIX" name to OpenVMS */ /* form, define a foreign command, and pass the name as */ /* the argument. */ #include <unixlib.h> #include <stdio.h> int main(int argc, char *argv[]) { char *ptr; /* translation result */ ptr = decc$translate_vms( argv[1] ); if ((int) ptr == 0 || (int) ptr == -1) printf( "could not translate %s\n", argv[1]); else printf( "%s is translated to %s\n", argv[1], ptr ); }
現在のプログラムのロケールで,引数が有効なワイド文字であるかどうかを確認します。
#include <unistd.h>int decc$validate_wchar (wchar_t wc);
wc
確認するワイド文字。
decc$validate_wchar関数は,指定された wchar_t型の引数が現在のプログラムのロケールで有効なワイド文字であるかどうかを確認するための便利な方法として使用できます。decc$validate_wcharを呼び出す 1 つの理由として, isw* ワイド文字分類関数およびマクロが,文字プロパティを記述する classmask配列の逆参照を行う前に,引数の有効性を確認できないという理由があげられます。現在のプログラムのロケールのワイド文字の最大値を超える値を isw* 関数に渡すと,割り当てられている classmask配列を超えるメモリにアクセスする可能性があります。
ワイド文字の有効性を確認するための標準的な方法は, wctomb関数を呼び出す方法ですが,この方法では,十分なサイズのマルチバイト文字配列を宣言し,その配列を wctombに渡す必要があるので,使用するのに不便です。
1 指定されたワイド文字が現在のプログラムのロケールで有効なワイド文字であることを示します。 0 指定されたワイド文字が現在のプログラムのロケールで有効なワイド文字でないことを示します。 errno は設定されません。
ファイルの終端 (EOF) メッセージをメールボックスに書き込みます。
#include <unistd.h>int decc$write_eof_to_mbx (int fd);
fd
メールボックスに関連付けられているファイル記述子。
decc$write_eof_to_mbx関数は, EOF (ファイルの終端) メッセージをメールボックスに書き込みます。パイプでないメールボックスの場合, nbytes 引数の値を 0 に設定して write関数を呼び出すと,EOF メッセージがメールボックスに送信されます。しかし,パイプの場合は,メールボックスに EOF メッセージを書き込むには,パイプをクローズするしかありません。
decc$set_child_standard_streams関数の呼び出しによって子の標準入力がパイプにリダイレクトされる場合は,親プロセスはこのパイプに対して decc$write_eof_to_mbxを呼び出すことで,子に EOF メッセージを送信することができます。子がデータを端末から読み込み,Ctrl/Z が押された場合と同じ結果になります。
decc$write_eof_to_mbxを呼び出した後,たとえば他の子との通信のために,パイプを再利用することができます。これが decc$write_eof_to_mbxの目的です。つまり,EOF メッセージを送信するためだけにパイプをクローズするのではなく,パイプを再利用することを許可します。
0 正常終了を示します。 - 1 異常終了を示します。 errno と vaxc$errno は, SYS$QIOW から返された異常終了状態に従って設定されます。
/* decc$write_eof_to_mbx_example.c */ #include <errno.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <unixio.h> #include <descrip.h> #include <ssdef.h> #include <starlet.h> int decc$write_eof_to_mbx( int ); main() { int status, nbytes, failed = 0; int fd, fd2[2]; short int channel; $DESCRIPTOR(mbxname_dsc, "TEST_MBX"); char c; /* first try a mailbox created by SYS$CREMBX */ status = sys$crembx(0, &channel, 0, 0, 0, 0, &mbxname_dsc, 0, 0); if ( status != SS$_NORMAL ) { printf("sys$crembx failed: %s\n",strerror(EVMSERR, status)); failed = 1; } if ( (fd = open(mbxname_dsc.dsc$a_pointer, O_RDWR, 0)) == -1) { perror("? open mailbox"); failed = 1; } if ( decc$write_eof_to_mbx(fd) == -1 ) { perror("? decc$write_eof_to_mbx to mailbox"); failed = 1; } if ( (nbytes = read(fd, &c, 1)) != 0 || errno != 0 ) { perror("? read mailbox"); printf("? nbytes = %d\n", nbytes); failed = 1; } if ( close(fd) == -1 ) { perror("? close mailbox"); failed = 1; } /* Now do the same thing with a pipe */ errno = 0; /* Clear errno for consistency */ if ( pipe(fd2) == -1 ) { perror("? opening pipe"); failed = 1; } if ( decc$write_eof_to_mbx(fd2[1]) == -1 ) { perror("? decc$write_eof_to_mbx to pipe"); failed = 1; } if ( (nbytes = read(fd2[0], &c, 1)) != 0 || errno != 0 ) { perror("? read pipe"); printf("? nbytes = %d\n", nbytes); failed = 1; } /* Close both file descriptors involved with the pipe */ if ( close(fd2[0]) == -1 ) { perror("close(fd2[0])"); failed = 1; } if ( close(fd2[1]) == -1 ) { perror("close(fd2[1])"); failed = 1; } if ( failed ) puts("?Example program failed"); else puts("Example ran to completion"); }
このサンプル・プログラムを実行すると,次の結果が生成されます。
Example ran to completion
指定されたウィンドウで現在のカーソルの位置にある文字を削除します。 delch関数は stdscrウィンドウに対して動作します。
#include <curses.h>int delch();
int wdelch (WINDOW *win);
win
ウィンドウを指すポインタ。
カーソルと同じ行で,カーソルの右側にある文字はすべて左に移動し,行末までブランク文字が追加されます。
OK 正常終了を示します。 ERR エラーを示します。
ファイルを削除します。
#include <unixio.h>int delete (const char *file_spec);
file_spec
OpenVMS または UNIX 形式のファイル指定である文字列を指すポインタ。ファイル指定のバージョン番号にはワイルドカードを指定できますが,他の部分には指定できません。たとえば, filename.txt;* という形式のファイルは削除することができます。
ファイル名にディレクトリを指定し,それがエラーを含む検索リストである場合は, HP C for OpenVMS システムはそのディレクトリをファイル・エラーとして解釈します。HP C RTL では, remove関数と delete関数は機能的に同じです。
removeも参照してください。
注意
C++ プログラマは deleteルーチンを使用できません。これは,C++ の予約語である deleteと競合するからです。 C++ プログラマは代わりに ANSI/ISO C 標準関数である removeを使用してください。
0 正常終了を示します。 0 以外の値 操作が異常終了したことを示します。
現在のカーソルの位置にある行を削除します。 deletelnは stdscrウィンドウに対して動作します。
#include <curses.h>int deleteln();
int wdeleteln (WINDOW *win);
win
ウィンドウを指すポインタ。
削除した行の下にある行はすべて上に移動し,一番下の行はブランク行になります。カーソルの現在の座標 (y,x) は変更されません。
OK 正常終了を示します。 ERR エラーを示します。
指定されたウィンドウをメモリから削除します。
#include <curses.h>int delwin (WINDOW *win);
win
ウィンドウを指すポインタ。
削除するウィンドウにサブウィンドウが含まれている場合は,サブウィンドウは無効になります。親を削除する前にサブウィンドウを削除してください。 delwin関数は,削除したウィンドウが覆っていたすべてのウィンドウの表示を更新します。
OK 正常終了を示します。 ERR エラーを示します。
time1 引数と time2 引数によって指定される 2 つの時刻の差を秒数として計算します。
#include <time.h>double difftime (time_t time2, time_t time1);
time2
time_t型の時刻値。time1
time_t型の時刻値。
time_t型は,次に示すように <time.h>ヘッダ・ファイルに定義されています。
typedef unsigned long int time_t
n double として表した time2 - time1 の値 (秒数)。
ファイル・パス名の親ディレクトリ名を報告します。
#include <libgen.h>関数バリアント dirname関数には, _dirname32および _dirname64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *dirname (char *path);
path
ファイル・パス名。
dirname関数は, UNIX パス名を格納した文字列を指すポインタを受け付け,そのファイルの親ディレクトリのパス名を格納した文字列を指すポインタを返します。パスの後続のスラッシュ (/) 文字はパスの一部として解釈されません。path 引数が次のいずれかである場合,この関数は文字列 "." (ドット) を指すポインタを返します。
- スラッシュ (/) が含まれていない。
- NULL ポインタである。
- 空文字列を指す。
dirname関数は, path 引数によって示される文字列を変更することがあります。
dirname関数と basename関数によって完全なパス名が作成されます。 dirname(path) という式は, basename(path) が見つかったディレクトリのパス名を取得します。
basenameも参照してください。
x path 引数の親ディレクトリである文字列を指すポインタ。 "." path 引数が次のいずれかである場合。
- スラッシュ (/) が含まれていない。
- NULL ポインタである。
- 空文字列を指す。
dirname関数を使用すると,次の例はパス名を読み込み,現在のワーキング・ディレクトリを親ディレクトリに変更し,ファイルをオープンします。
char path [MAXPATHLEN], *pathcopy; int fd; fgets(path, MAXPATHLEN, stdin); pathcopy = strdup(path); chdir(dirname(pathcopy)); fd = open(basename(path), O_RDONLY);
引数を除算した後,商と余りを返します。
#include <stdlib.h>div_t div (int numer, int denom);
numer
int型の分子。denom
int型の分母。
div_t型は,次に示すように <stdlib.h>標準ヘッダ・ファイルに定義されています。
typedef struct { int quot, rem; } div_t;
共用ライブラリのアドレス空間の割り当てを解除します。
#include <dlfcn.h>void dlclose (void *handle);
handle
共用ライブラリを指すポインタ。
dlclose関数は,ハンドルのために HP C RTL によって割り当てられたアドレス空間の割り当てを解除します。OpenVMS システムでは,LIB$FIND_IMAGE_SYMBOL ルーチンによって動的にロードされた共用可能イメージをアンロードする手段はありません。 LIB$FIND_IMAGE_SYMBOL ルーチンは dlsym関数によって呼び出されます。つまり,OpenVMS システムでは, dlsymによってメモリに読み込まれた共用可能イメージが使用しているアドレス空間を解放する手段はありません。
dlopen, dlclose, dlsymの呼び出しで発生した最後のエラーを記述する文字列を返します。
#include <dlfcn.h>char *dlerror (void);
x dlopen , dlclose , dlsym の呼び出しで発生した最後のエラーを記述する文字列。
前へ | 次へ | 目次 | 索引 |