日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


HP OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (下巻)


前へ 次へ 目次 索引


オプションの引数を 1 つも指定しなかった場合, HP C RTL はディレクトリにユーザの UIC と親ディレクトリのデフォルトのバージョン制限を設定し,ボリューム・セット内で適当にディレクトリを配置します。何らかの引数を指定した場合,uic 引数と max_versions 引数のデフォルト値は設定されません。

注意

UNIX システム・コール関数 umask, mkdir, creat,および openを使って, OpenVMS RMS デフォルト保護を指定してファイルを作成するには, umaskを直接呼び出さないプログラムから, 0777 のファイル保護モード引数を使用して mkdir, creat,および openを呼び出します。これらのデフォルト保護では,ACL やファイルの前のバージョンなどに基づいて,保護が正しく設定されます。

vfork/ exec呼び出しを行うプログラムでは,新しいプロセス・イメージは, umaskが呼び出されたかどうかの状態を,呼び出し元のプロセス・イメージから継承します。 umask設定と, umask関数が呼び出されたかどうかの状態は,どちらも属性として継承されます。

mode 引数で指定されるファイル保護は,新しいディレクトリのファイル保護が mode 引数とファイル保護マスクの補数のビット論理積に設定されるように,プロセスのファイル保護マスクによって変更されます。

新しいディレクトリには,ゼロの保護値ビットが親ディレクトリから継承されるような形で,親ディレクトリからデフォルトのファイル保護が継承されます。ただし,親ディレクトリのファイル保護の中の,削除アクセスを示すビットは,新しいディレクトリのファイル保護の中の対応するビットには継承されません。




戻り値

0 成功を示します。
-1    失敗を示します。






#1

umask (0002); /* turn world write access off */ 
mkdir ("sys$disk:[.parentdir.childdir]", 0222); /* turn write 
                                                   access on */ 
 
Parent directory file protection: System:RWD, Owner:RWD, Group:R, 
                                                           World:R 

モード引数と, umaskによって設定されたファイル保護マスクの組み合わせから得られるファイル保護は,(0222) & ~(0002),すなわち 0220 です。この保護に親ディレクトリのデフォルト値が適用されると,新しいディレクトリの保護は次のようになります。


File protection:    System:RWD, Owner:RWD, Group:RWD, World:R 

#2

umask (0000); 
mkdir ("sys$disk:[.parentdir.childdir]", 0444);  /* turn read 
                                                    access on */ 
 
Parent directory file protection: System:RWD, Owner:RWD, 
                                               Group:RWD, World:RWD 
 

モード引数と, umaskによって設定されたファイル保護マスクの組み合わせから得られるファイル保護は,(0444) & ~(0000),すなわち 0444 です。この保護に親ディレクトリのデフォルト値が適用されると,新しいディレクトリの保護は次のようになります。


File protection:    System:RW, Owner:RW, Group:RW, World:RW 

削除アクセスは継承されないことに注意してください。




mkstemp

一意のファイル名を作成します。



形式

#include <stdlib.h>

int mkstemp (char *template);




引数



template

一意のファイル名に置き換えられる文字列へのポインタ。 template 引数の中の文字列は,末尾に 6 つの X を含んだファイル名でなくてはなりません。



説明

mkstemp関数は,template がポイントする文字列の末尾の 6 つの X を一意の文字のセットに置き換え,読み書き用にオープンされたファイルのファイル記述子を返します。

template がポイントする文字列は,末尾に 6 つの X を含んだファイル名の形になっていなくてはなりません。 mkstemp関数は,既存のファイル名との重複が起こらないように,個々の X を移植性のあるファイル名文字セットの文字に置き換えます。

template がポイントする文字列が,末尾に 6 つの X を含んでいない場合には, - 1 が返されます。




戻り値

x オープンされたファイル記述子。
-1    エラーを示します ( template がポイントする文字列は,末尾に 6 つの X を含んでいません)。




mktemp

テンプレートから一意のファイル名を作成します。



形式

#include <stdlib.h>

char *mktemp (char *template);

関数バリアント mktemp関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _mktemp32_mktemp64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



template

ユーザ定義のテンプレートを含んでいるバッファへのポインタ。テンプレートは namXXXXXX の形式で指定します。末尾の 6 つの X は,一意の文字の並びに置き換えられます。ユーザは最初の 3 つの文字を指定することができます。 template 引数は上書きされるので,文字列リテラル ( constオブジェクト) は指定しないようにしてください。



説明

新規のアプリケーションでは, mktempを使用することは勧められません。推奨される方法については, tmpnamおよび mkstemp関数を参照してください。



戻り値

x テンプレートへのポインタ。このテンプレートの内容は,作成されたファイル名に変更されます。この値が null 文字列へのポインタだった場合には,一意のファイル名が作成できなかったことを示します。




mktime

ローカル時刻構造体を,Epoch からの経過秒数に変換します。



形式

#include <time.h>

time_t mktime (struct tm *timeptr);

関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS Version 7.0 より前の動作と等価な,ローカル時刻ベースの mktime関数へのエントリ・ポイントが使用可能になります。


引数



timeptr

ローカル時刻構造体へのポインタ。



説明

mktime関数は, timeptr がポイントするローカル時刻構造体 ( struct tm) を, time関数が返す値と同じように, Epoch 後の経過秒数 ( time_t変数) に変換します。

構造体の tm_wday要素と tm_yday要素の元の値は無視され,ほかの要素の元の値も, <time.h>で定義されている範囲には制限されません。正常に完了すると,構造体の tm_wday要素と tm_yday要素が適切に設定され,ほかの要素には指定された時刻を表すように,正常な範囲の値が設定されます。

ローカル時刻をエンコードできない場合, mktimeは値 ( time_t) ( - 1) を返します。

time_t型は <time.h>ヘッダ・ファイルに次のように定義されています。


typedef unsigned long int time_t; 

ローカル・タイム・ゾーン情報は, mktimetzsetを呼び出したかのように設定されます。

timeptr がポイントするローカル時刻構造体の中の tm_isdstフィールドが正の値の場合, mktimeは,初期状態では指定された時刻でサマータイム (DST) が有効になっていると仮定します。

tm_isdstが 0 ならば, mktimeは初期状態では DST が有効でないと仮定します。

tm_isdstが負の値ならば, mktimeは指定された時刻で DST が有効になっているかどうかを判定しようと試みます。




戻り値

x 指定されたカレンダ時刻を, time_t 型の値としてエンコードしたもの。
( time_t )(-1)    ローカル時刻をエンコードできませんでした。

戻り値 ( time_t )( - 1) は, Sun Feb 7 06:28:15 2106 という有効な日付も表現できることに注意してください。




mmap

ファイル・システム・オブジェクトを仮想メモリにマップします。この関数はリエントラントです。



形式

#include <types.h>

#include <mman.h>

void mmap (void *addr, size_t len, int prot, int flags, int filedes, off_t off); (X/Open, POSIX-1)

void mmap (void *addr, size_t len, int prot, int flags, int filedes, off_t off ...); (HP C Extension)

関数バリアント mmap関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _mmap32_mmap64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



addr

新しいリージョンの開始アドレス (切り捨てによってページ境界に設定されます)。

len

新しいリージョンのバイト長 (ページ境界に丸められます)。

prot

<mman.h>ヘッダ・ファイルに定義されているアクセス許可。 PROT_NONE,PROT_READ,または PROT_WRITE を指定します。

flags

以下の任意の組み合わせに対するビット論理和演算の結果として得られる,マップされたリージョンの属性。

  • MAP_FILE または MAP_ANONYMOUS

  • MAP_VARIABLE または MAP_FIXED

  • MAP_SHARED または MAP_PRIVATE



filedes

open関数から返された,新しいマップされたファイル・リージョンにマップしたいファイル。

off

バイト数で指定されるオフセット。 off_tデータ型は,64 ビット整数または 32 ビット整数です。 64 ビット・インタフェースでは, 2 GB よりも大きなファイル・サイズを扱うことができます。これは,コンパイル時に _LARGEFILE 機能テスト・マクロを次のように定義することで選択できます。


CC/DEFINE=_LARGEFILE 



...

MAP_SHARED の SYS$CRMPSC システム・サービスのための追加のフラグを指定するオプションの整数。 mmap関数のこのオプションの引数 ( HP C 拡張) は, OpenVMS Version 7.2 で導入されました。



説明

mmap関数は,新しいマップされたファイル・リージョン,新しいプライベート・リージョン,または新しい共用メモリ・リージョンを作成します。

アプリケーションは, mmapを, readwrite,標準入出力などの他のファイル・アクセス方式と組み合わせて使用するときには,同期が正しく行われるように注意する必要があります。

また,呼び出し元のアプリケーションは, mmapを呼び出す前に,範囲 [off, off+len] の中のすべてのバイトがファイルに書き込まれていることを確認しなくてはなりません ( たとえば fsync関数を使用します)。この条件が満たされていないと, mmapは実行に失敗し, errnoを ENXIO (そのようなデバイスまたはアドレスは存在しない) に設定します。

addr および len 引数は,要求された開始アドレスと長さを,新しいリージョンのバイト数として指定します。アドレスは, sysconf(_SC_PAGE_SIZE)から返されるページ・サイズの倍数です。

len 引数が sysconf(_SC_PAGE_SIZE)から返されるページ・サイズの倍数でなかった場合,リージョンの終端と,リージョンの終端を含んでいるページの終端の間のアドレスに対するすべての参照の結果は未定義となります。

flags 引数は,マップされたリージョンの属性を指定します。 flags の値は, <mman.h>ヘッダ・ファイルに定義されている次のシンボリック名のリストのフラグのビット論理和演算によって作成されます。

MAP_FILE マップされたファイル・リージョンを作成する。
MAP_ANONYMOUS 名前なしのメモリ・リージョンを作成する。
MAP_VARIABLE リージョンを計算されたアドレスに配置する。
MAP_FIXED リージョンを固定されたアドレスに配置する。
MAP_SHARED 変更点を共用する。
MAP_PRIVATE 変更点はプライベートである。

MAP_FILE および MAP_ANONYMOUS フラグは,マップしようとしているリージョンがマップされたファイル・リージョンなのか,匿名の共用メモリ・リージョンなのかを制御します。いずれかのフラグが選択されている必要があります。

flags 引数の中で MAP_FILE が設定されている場合:

  • 新しいマップされたファイル・リージョンが作成され, filedes 引数に関連付けられたファイルがマッピングされる。

  • off 引数は,マッピングが開始されるファイル・バイト・オフセットを指定する。このオフセットは, sysconf(_SC_PAGE_SIZE)から返されるページ・サイズの倍数でなくてはならない。

  • マップされたファイル・リージョンの終端がファイルの終端よりも後にある場合,ファイルの終端を越えたオフセットに対応するマップされたファイル・リージョンの中のアドレスへのすべての参照の結果は不定となる。

flags 引数の中で MAP_ANONYMOUS が設定されている場合:

  • 新しいメモリ・リージョンが作成され,すべてゼロに初期化される。

  • filedes 引数が - 1 でなければ, mmap関数は実行に失敗する。

要求されたアドレスが null でなく,リージョンをこのアドレスに置くことが可能であれば,新しいリージョンは要求されたアドレスに配置されます。要求されたアドレスが null であるか,要求されたアドレスにリージョンを置くことができない場合には, MAP_VARIABLE および MAP_FIXED フラグがリージョンの配置を制御します。いずれかのフラグが選択されている必要があります。

flags 引数の中で MAP_VARIABLE が設定されている場合:

  • 要求されたアドレスが null であるか,システムがリージョンを要求されたアドレスに置くことができない場合,リージョンはシステムによって選択されたアドレスに配置される。

flags 引数の中で MAP_FIXED が設定されている場合:

  • 要求されたアドレスが null でない場合, mmap関数は,要求されたアドレスがすでに他のリージョンの一部であっても実行に成功する ( アドレスが既存のリージョン内にある場合,そのリージョン内のページと, 2 つのリージョンがオーバラップする領域内のページに対する効果は,それらがアンマップされた場合と同じになる。言い換えると,addraddr + len の間でマップされているものはすべてアンマップされる )。

  • 要求されたアドレスが null で, MAP_FIXED が指定されている場合の結果は未定義である。

MAP_PRIVATE および MAP_SHARED フラグは,マップされたファイルまたは共用メモリ・リージョンに対する変更の可視性を制御します。いずれかのフラグが選択されている必要があります。

flags 引数の中で MAP_SHARED が設定されている場合:

  • リージョンがマップされたリージョンである場合,リージョンに対する変更は, MAP_SHARED を使って同じリージョンをマップしている他のプロセスから見える。

  • リージョンがマップされたファイル・リージョンである場合,リージョンに対する変更はファイルに書き込まれる ( バッファ・キャッシュの遅れのために,変更はただちにファイルに書き込まれるわけではないことに注意すること。つまり,ファイルへの書き込みは,バッファ・キャッシュを再利用する必要が生じるまでは行われない。変更をただちにファイルに書き込む必要がある場合には, msync関数を使用する )。

flags 引数の中で MAP_PRIVATE が設定されている場合:

  • 呼び出し元プロセスがマップされたリージョンに加えた変更は, MAP_PRIVATE または MAP_SHARED を使って同じリージョンをマップしている他のプロセスからは見えない。

  • 呼び出し元プロセスがマップされたリージョンに加えた変更は,ファイルには書き込まれない。

リージョンを MAP_SHARED を使ってマップしたプロセスによって加えられた変更が,同じリージョンを MAP_PRIVATE を使ってマップしている他のプロセスから見えるかどうかは定められていません。

prot 引数は,マップされたリージョンに対するアクセス許可を指定します。以下のいずれかを指定します。

PROT_NONE アクセスなし
PROT_READ 読み込み専用
PROT_WRITE 読み書きアクセス

mmap関数が実行に成功したら,filedes 引数は,マップされたリージョンやマップされたファイルの内容に影響を与えずにクローズすることができます。個々のマップされたリージョンは,オープン・ファイル記述子に似たファイル参照を作成し,ファイル・データが割り当て解除されるのを防ぎます。

注意

OpenVMS 固有のファイル参照には,以下の規則が適用されます。

  • 追加のファイル参照のために, filedes がファイルの共用を指定してオープンされていなかった場合, mmapはファイル共用を有効にしてファイルを再オープンする。

  • マップされたリージョンに対してファイル参照が追加されている場合,マップされているファイルに対するそれ以降の open, fopen,または create呼び出しは,ファイル共用を指定しなくてはならない。

write関数を使って行われるファイルの変更は,マップされたリージョンから見ることができ,マップされたリージョンに対する変更は, read関数で見ることができます。

注意

OpenVMS Version 7.2 およびそれ以降の mmap関数は, MAP_SHARED 要求を処理する際に,SYS$CRMPSC サービスの flags 引数を, MAP_SHARED 要求を処理するために自分で設定したビットと,呼び出し元がオプションの引数で指定したビットのビット論理和として作成します。

デフォルトでは, mmap関数は MAP_SHARED のために一時的なグループ・グローバル・セクションを作成します。オプションの mmap引数は,呼び出し元に対し, SYS$CRMPSC システム・サービスの機能への直接のアクセスを提供します。


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項