前へ | 次へ | 目次 | 索引 |
ファイル記述子に関連付けられているファイルをクローズします。
#include <unistd.h>int close (int file_desc);
file_desc
ファイル記述子。
close関数は,暗黙に fflushを呼び出すことにより,バッファに格納されているデータを書き込みます。書き込みが失敗した場合は (たとえば,ディスクが満杯であったり,ユーザのクォータが超過したため), closeは実行を続行します。この関数は OpenVMS チャネルをクローズし,バッファの割り当てを解除し,ファイル記述子 (または FILE ポインタ) に関連付けられているメモリを解放します。バッファに格納されているデータは消失し,ファイル記述子 (または FILE ポインタ) はファイルを参照しなくなります。バッファに格納されているデータを書き込むときに発生したエラーから回復する必要がある場合は, closeを呼び出す前に, fsync(または fflush) を明示的に呼び出す必要があります。
0 ファイルが正しくクローズされたことを示します。 - 1 ファイル記述子が未定義であるか,ファイルのクローズでエラーが発生したことを示します (たとえば,バッファに格納されているデータを書き込むことができないなど)。
#include <unistd.h> int fd; . . . fd = open ("student.dat", 1); . . . close(fd);
ディレクトリをクローズします。
#include <dirent.h>int closedir (DIR *dir_pointer);
dir_pointer
オープンされているディレクトリの dir構造体を指すポインタ。
closedir関数は,ディレクトリ・ストリームをクローズし, dir_pointer 引数に関連付けられている構造体を解放します。関数から戻るときに,dir_pointer の値は必ずしも DIR型のアクセス可能なオブジェクトを示すとは限りません。DIR型は, <dirent.h>ヘッダ・ファイルに定義されており,特定のディレクトリ内のすべてのディレクトリ・エントリを順に並べたシーケンスであるディレクトリ・ストリームを表します。ディレクトリ・エントリはファイルを表します。 readdir関数の操作とは非同期的に,ファイルをディレクトリから削除したり,ディレクトリに追加することができます。
注意
後でディレクトリを正しくオープンすることができるように,オープンされているディレクトリは必ず closedir関数を使用してクローズする必要があります。
次の例では, opendir関数, readdir関数, closedir関数を使用して,ディレクトリからエントリ名を検索する方法を示しています。
#include <dirent.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define FOUND 1 #define NOT_FOUND 0 static int dir_example(const char *name, unsigned int unix_style) { DIR *dir_pointer; struct dirent *dp; if ( unix_style ) dir_pointer = opendir("."); else dir_pointer = opendir(getenv("PATH")); if ( !dir_pointer ) { perror("opendir"); return NOT_FOUND; } /* Note, that if opendir() was called with UNIX style file */ /* spec like ".", readdir() will return only a single */ /* version of each file in the directory. In this case the */ /* name returned in d_name member of the dirent structure */ /* will contain only file name and file extension fields, */ /* both lowercased like "foo.bar". */ /* If opendir() was called with OpenVMS style file spec, */ /* readdir() will return every version of each file in the */ /* directory. In this case the name returned in d_name */ /* member of the dirent structure will contain file name, */ /* file extension and file version fields. All in upper */ /* case, like "FOO.BAR;1". */ for ( dp = readdir(dir_pointer); dp && strcmp(dp->d_name, name); dp = readdir(dir_pointer) ) ; closedir(dir_pointer); if ( dp != NULL ) return FOUND; else return NOT_FOUND; } int main(void) { char *filename = "foo.bar"; FILE *fp; remove(filename); if ( !(fp = fopen(filename, "w")) ) { perror("fopen"); return (EXIT_FAILURE); } if ( dir_example( "FOO.BAR;1", 0 ) == FOUND ) puts("OpenVMS style: found"); else puts("OpenVMS style: not found"); if ( dir_example( "foo.bar", 1 ) == FOUND ) puts("UNIX style: found"); else puts("UNIX style: not found"); fclose(fp); remove(filename); return( EXIT_SUCCESS ); }
0 正常終了を示します。 - 1 エラーを示します。エラーの詳細はグローバルな errno に指定されます。
ウィンドウ内のビデオ表示属性 attr を無効にします。 clrattr関数は stdscrウィンドウに対して動作します。
#include <curses.h>int clrattr (int attr);
int wclrattr (WINDOW *win, int attr);
win
ウィンドウを指すポインタ。attr
ビデオ表示属性 (点滅,太字,反転表示,下線のいずれか)。これらの属性は定義済み定数 _BLINK,_BOLD,_REVERSE, _UNDERLINE によって表されます。複数の属性をクリアするには,次に示すように,ビット単位の OR 演算子 (|) で区切ります。
clrattr(_BLINK | _UNDERLINE);
これらの関数は HP C for OpenVMS システム固有であり,移植できません。
OK 正常終了を示します。 ERR エラーを示します。
ウィンドウの内容を現在のカーソルの位置からウィンドウの最下部まで消去します。 clrtobot関数は stdscrウィンドウに対して動作します。
#include <curses.h>int clrtobot();
int wclrtobot (WINDOW *win);
win
ウィンドウを指すポインタ。
OK 正常終了を示します。 ERR エラーを示します。
ウィンドウの内容を指定されたウィンドウの現在のカーソルの位置から行末まで消去します。 clrtoeol関数は stdscrウィンドウに対して動作します。
#include <curses.h>int clrtoeol();
int wclrtoeol (WINDOW *win);
win
ウィンドウを指すポインタ。
OK 正常終了を示します。 ERR エラーを示します。
文字列値によって定義されるシステム変数の現在の値を返します。
#include <unistd.h>size_t confstr (int name, char *buf, size_t len);
name
システム変数の設定。name 引数に対して指定できる値は, <unistd.h>ヘッダ・ファイルに定義されている _CS_X 名です。buf
confstr関数が name の値をコピーする先のバッファを指すポインタ。len
name の値が格納されるバッファのサイズ。
confstr関数を使用すると,アプリケーションは文字列値によって定義される特定のシステム・パラメータ,リミット,オプションの現在の設定を判断することができます。この関数は主に,アプリケーションで PATH環境変数のシステム・デフォルト値を判断するために使用されます。次の条件が満たされる場合は, confstr関数は値を buf によって示される len バイトのバッファにコピーします。
- len 引数が 0 でない。
- name 引数にシステムで定義されている値が指定されている。
- buf 引数が NULL ポインタでない。
返された文字列が末尾のヌルも含めて len バイトより長い場合は, confstr関数は文字列を len - 1 バイトに切り捨て,結果の末尾にヌルを追加します。アプリケーションは, confstr関数から返された値を, len 引数の値と比較することにより,文字列が切り捨てられたことを検出できます。
<limits.h>ヘッダ・ファイルには,システムで定義されているリミットが格納されています。 <unistd.h>ヘッダ・ファイルには,システム定義環境変数が格納されています。
name の文字列値を格納するのに必要なバッファのサイズを判断するには,次のように入力します。
confstr(_CS_PATH, NULL, (size_t) 0)
confstr関数は必要なバッファのサイズを返します。
0 エラーを示します。指定された name の値に応じて,次のいずれかになります。
- 不正な場合, errno は EINVAL に設定されます。
- システム定義値がない場合, errno は設定されません。
n 値を格納するのに必要なバッファのサイズ。
- name 引数の値がシステム定義値の場合は, confstr は値全体を格納するのに必要なバッファのサイズを返します。この戻り値が len の値より大きい場合は, buf の値として返された文字列は切り捨てられます。
- len 引数の値が 0 に設定されている場合や, buf の値が NULL の場合は, confstr はシステム定義値全体を格納するのに必要なバッファのサイズを返します。文字列の値はコピーされません。
y と同じ符号で x を返します。
#include <math.h>double copysign (double x, double y);
float copysignf (float x, float y); (Alpha only)
long double copysignl (long double x, long double y); (Alpha only)
x
実数値。y
実数値。
copysign関数は y と同じ符号を付けて x を返します。IEEE 754 では, copysign(x,NaN), copysignf(x,NaN), copysignl(x,NaN) は +x または - x を返すように要求されています。
x y と同じ符号を付けた x の値。
ラジアン単位の引数の余弦を返します。
#include <math.h>double cos (double x);
float cosf (float x); (Alpha only)
long double cosl (long double x); (Alpha only)
double cosd (double x); (Alpha only)
float cosdf (float x); (Alpha only)
long double cosdl (long double x); (Alpha only)
x
実数値として表したラジアン値。
cos関数は,引数の余弦 (ラジアン単位) を返します。cosd関数は,引数の余弦 (度単位) を返します。
|x| = 無限大は不正な引数です。
x 引数の余弦。 HUGE_VAL 引数が大きすぎることを示します。 errno は ERANGE に設定されます。
ラジアン単位の引数の双曲線余弦を返します。
#include <math.h>double cosh (double x);
float coshf (float x); (Alpha only)
long double coshl (long double x); (Alpha only)
x
実数値で表したラジアン値。
cosh関数は x の双曲線余弦を返します。これらの関数は (e**x + e**( - x))/2 として定義されます。
x 引数の双曲線余弦。 HUGE_VAL 引数が大きすぎることを示します。 errno は ERANGE に設定されます。
ラジアン単位の引数の余接を返します。
#include <math.h>double cot (double x);
float cotf (float x); (Alpha only)
long double cotl (long double x); (Alpha only)
double cotd (double x); (Alpha only)
float cotdf (float x); (Alpha only)
long double cotdl (long double x); (Alpha only)
x
実数値で表したラジアン値。
cot関数は,引数の余接 (ラジアン単位) を返します。cotd関数は,引数の余接 (度単位) を返します。
x = 0 は不正な引数です。
x 引数の余接。 HUGE_VAL 引数が 0 であることを示します。 errno は ERANGE に設定されます。
新しいファイルを作成します。
#include <fcntl.h>int creat (const char *file_spec, mode_t mode); (ISO POSIX-1)
int creat (const char *file_spec, mode_t mode, ...); (HP C Extension)
file_spec
有効なファイル指定を格納したヌル区切り文字列。mode
ファイル保護モードを指定する符号なし値。コンパイラはモードおよび現在の保護モードの補数に対してビット単位の AND 操作を実行します。モードを作成するには,ビット単位の OR 演算子 (|) を使用してモードの組み合わせを作成します。モードは次のとおりです。
0400 OWNER:READ 0200 OWNER:WRITE 0100 OWNER:EXECUTE 0040 GROUP:READ 0020 GROUP:WRITE 0010 GROUP:EXECUTE 0004 WORLD:READ 0002 WORLD:WRITE 0001 WORLD:EXECUTE
システムにはオーナと同じと特権が与えられます。 WRITE 特権がある場合は,DELETE 特権もあるものと解釈されます。
注意
UNIX システム呼び出し関数 umask, mkdir, creat, openを使用して, OpenVMS RMS のデフォルト保護でファイルを作成するには, umaskを絶対に呼び出すことがないプログラムでファイル保護モード引数を 0777 に設定して, mkdir, creat, openを呼び出します。これらのデフォルト保護には, ACL やファイルの前のバージョンなどをもとに正しく設定された保護が含まれます。vfork/ execを呼び出すプログラムでは,新しいプロセス・イメージは, umaskが呼び出しプロセス・イメージから呼び出されたかどうかを継承します。 umaskの設定と, umask関数がこれまで呼び出されたかどうかは,どちらも継承される属性です。
...
次の形式の文字列で構成される省略可能な引数リスト。
"keyword = value",...,"keyword = value"
"acc" または "err" の場合は,次の形式になります。
"keyword"
ここで,keyword はファイル・アクセス・ブロック (FAB) またはレコード・アクセス・ブロック (RAB) の RMS フィールドです。 value はそのフィールドに代入できる有効な値です。一部のフィールドには,複数の値を指定できます。このような場合,値はコンマで区切ります。
RMS コールバック・キーワード "acc" と "err" だけは値を受け付けないキーワードです。これらのキーワードの後には,使用するコールバック・ルーチンを指すポインタを指定し,さらにコールバック・ルーチンの最初の引数として使用されるユーザ指定値を指すポインタを指定します。たとえば, acc_callbackというアクセス・コールバック・ルーチンを設定し,そのルーチンの最初の引数が openの呼び出しの整数変数 first_argを指すポインタの場合,次の文を使用できます。
open("file.dat", O_RDONLY, 0 ,"acc", acc_callback, &first_arg)
コールバック・ルーチンに対する 2 番目の引数と 3 番目の引数はそれぞれ, FAB と RAB を指すポインタでなければならず,ルーチンの戻り値の型は intでなければなりません。コールバックが 0 より小さい値を返す場合は, open, creat, fopenは異常終了します。エラー・コールバックはエラー条件を修正し,0 以上の状態を返すことにより, creat呼び出しを続行できます。上記の open文を例にとってみると, acc_callbackの関数プロトタイプは次の文のようになります。
#include <rms.h> int acc_callback(int *first_arg, struct FAB *fab, struct RAB *rab);
FAB と RAB は <rms.h>ヘッダ・ファイルに定義されており,ルーチンに渡される実際のポインタは,ファイル file.dat をオープンするために使用される RAB と FAB を指すポインタです。
前へ 次へ 目次 索引