日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

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


目次 索引




共用メモリ・オブジェクトをオープンします。

形式

#include <sys/mman.h>

int shm_open (const char *name, int oflag, mode_t mode);


引数



name

共用メモリ・オブジェクトの名前 (文字列) を指すポインタ。

oflag

ファイルの状態とアクセス許可を定義するオプション。この引数には, <fcntl.h>ヘッダ・ファイルに定義されているオプション (0 個以上) を,ビット単位の論理和にまとめて指定します。

mode

共用メモリ・オブジェクトの許可ビット。この引数は,共用メモリ・オブジェクトを作成するときにだけ使用します。

説明

shm_open関数は,共用メモリ・オブジェクトにファイル記述子を結びつけます。この関数を呼び出すと,共用メモリ・オブジェクトを参照するオープン・ファイル記述と,そのオープン・ファイル記述を参照するオープン・ファイル記述子が作成されます。このファイル記述子は,他の関数がその共用メモリ・オブジェクトを参照するために使用します。 name 引数には,共用メモリ・オブジェクトの名前 (文字列) を指すポインタを指定します。名前は,パス名であってもかまいません。ただしその場合は,そのパス名を参照する他のプロセスが,同じ共用メモリ・オブジェクトを参照することになります。

作成された共用メモリ・オブジェクトの状態と関連データはすべて,その共用メモリがアンリンクされるまで保持されます。

shm_open関数からは共用メモリ・オブジェクトのファイル記述子が返されますが,そのファイル記述子には,そのプロセス用に現在オープンされていないファイル記述子から番号の最も小さいものが選択されて,割り当てられます。

オープン・ファイル記述にあるファイル状態フラグとファイル・アクセス・モードには, oflag で指定した次の値 (0 個以上指定可) が設定されます。

O_RDONLY ---読み取りアクセス専用でオープンします。

O_RDWR ---読み取りおよび書き込み用にオープンします。

O_CREAT ---指定した共用メモリ・オブジェクトが存在していなければ,そのメモリ・オブジェクトを作成します。共用メモリ・オブジェクトのユーザ ID とグループ ID は,呼び出しプロセスと同じものになります。また,共用メモリ・オブジェクトの許可ビットについては,そのプロセスのファイル・モード作成マスクに設定されていないビットだけが, mode の値に従って設定されます。

O_EXCL ---O_CREAT を指定したにもかかわらず,その共用メモリ・オブジェクトがすでに存在していれば,その共用メモリ・オブジェクトをオープンしないようにします。このオプションは,必ず O_CREAT と組み合わせて使用します。

O_TRUNC ---共用メモリ・オブジェクトを読み書き両用 (O_RDWR) でオープンできたら,この共用メモリ・オブジェクトを長さ 0 に切り詰めます。

共用メモリ・オブジェクトの内容の初期状態は,バイナリでゼロになっています。


戻り値

n 成功したことを示します。 n はファイル記述子を示す 0 または正の整数で,まだ使用されていないものから番号の最も小さいものが選択されて割り当てられます。このファイル記述子は,共用メモリ・オブジェクトを指しています。
-1    エラーが発生したことを示します。 errno に,エラーを示す次のいずれかの値が設定されます。

  • EACCES ---(1) 共用メモリ・オブジェクトを作成するための許可が認められなかったか, (2) その共用メモリ・オブジェクトがすでに存在していて, oflag で指定した許可が認められなかったか, (3) O_TRUNC が指定されているにもかかわらず,書き込み許可が認められませんでした。

  • EEXIST ---O_CREAT と O_EXCL の指定がありましたが,指定された共用メモリ・オブジェクトがすでに存在していました。

  • EINTR --- shm_open の処理がシグナルで中断されました。

  • EINVAL ---指定された name に対しては, shm_open 操作がサポートされていません。

  • EMFILE ---このプロセスで現在使用中のファイル記述子が多すぎます。

  • ENAMETOOLONG --- name 引数の長さが PATH_MAX を超えているか,パス名に長さが NAME_MAX を超えているコンポーネントが存在します。

  • ENFILE ---システムで現在オープンされている共用メモリ・オブジェクトの数が多すぎます。

  • ENOENT ---O_CREAT が設定されていないにもかかわらず,指定された共用メモリ・オブジェクトが存在していません。

  • ENOSPC ---共用メモリ・オブジェクトを新しく作成するためのメモリ領域が十分にありません。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.