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


OpenVMS マニュアル


 

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

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

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


目次 索引




独立した子プロセスを作成します。この関数は非リエントラントです。

形式

#include <unistd.h>

int vfork (void); (_DECC_V4_SOURCE)

pid_t vfork (void); (not _DECC_V4_SOURCE)


説明

HP C for OpenVMS システムの用意している vfork関数は,他の C の実装の fork関数とは異なります。 表 1-12 に,両者の間の主な違い 2 つを示します。

表 1-12 vfork 関数と fork 関数
vfork 関数 fork 関数
exec 関数とともに使用される。 非同期処理で, exec 関数なしで使用できる。
親プロセスの一部の特性を共用する独立した子プロセスを作成する。 vfork が呼び出されたポイントで分岐する,親プロセスの正確な複製を作成する。親と子は,異なる実行段階にある同じプロセスであるかのように振る舞う。

vfork関数は,それ以降の exec関数の呼び出しのために必要なセットアップを行います。 vforkはプロセスは作成しませんが,以下のステップを実行します。

  • 後に exec関数の呼び出しのリターン・アドレスとして使用されるリターン・アドレス ( vfork呼び出しのアドレス ) を保存する。

  • 現在のコンテキストを保存する。

  • 初めて呼び出されたとき ( exec関数の呼び出しの前) には整数 0 を返す。対応する exec関数呼び出しが行われた後は, exec関数は vfork呼び出しのポイントで親プロセスに制御を返し,戻り値として子プロセスのプロセス ID を返す。 exec関数が実行に失敗しない限り,呼び出しが vfork関数に対して 1 回, exec関数に対して 1 回行われたにもかかわらず,制御は vforkから 2 回返ったように見える。

vfork関数の動作は, setjmp関数の動作に似ています。 vforksetjmpは,どちらも後に使用されるリターン・アドレスを設定し,このアドレスをセットアップするために初めて呼び出されたときには整数 0 を返し,第 2 の戻り値を,対応する execまたは longjmp関数呼び出しからではなく,自分で返したような形で返します。

しかし, setjmpとは違って vforkでは, volatile で修飾されたものも含むすべてのローカルな自動変数が, vforkの呼び出しとそれに対応する execルーチンの呼び出しの間で変更された場合には,不定の値を持つ可能性があります。


戻り値

0 コンテキストの作成に成功したことを示します。
ゼロ以外 子プロセスのプロセス ID (PID) を示します。
-1    エラーを示します。-- 子プロセスの作成に失敗しました。


目次 索引

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