MSX-DOS2 FCS 03 77

From Z80 Machines Wiki
Jump to: navigation, search

3.77親プロセスへの再結合(61H)

パラメータ:C = 61H(_JOIN)

B =親のプロセスID、またはゼロ

結果:A =エラー

B =子からの主エラーコード

C =子からの2次エラーコード

この関数は、指定された親プロセスに戻り、子プロセスが終了したエラーコードをレジスタBに返し、子からの2次エラーコードをレジスタCに返します。親プロセスと子プロセスの関係は厳密に1対1です。 1つ目は、この関数は適切なプロセスIDを与えることで、いくつかのレベルに戻ることができるということです。プロセスIDが無効な場合、 ".IPROC"エラーが返されます。

子プロセスのファイルハンドルセットは自動的に閉じられ、親プロセスのファイルハンドルセットは再びアクティブになります。また、子プロセスが割り当てたユーザーRAMセグメントも解放されます。

この関数に渡されたプロセスIDがゼロの場合、部分的なシステムの再初期化が行われます。すべてのファイルハンドルが閉じられ、標準の入力ハンドルと出力ハンドルが再び開かれ、すべてのユーザーセグメントが解放されます。この後コマンドインタプリタは一貫した状態にはならないので、コマンドインタプリタに戻ることを意図している場合、これは通常ユーザプログラムによって行われるべきではありません。

この関数は、実際にファイルハンドルを閉じる前、したがってディスクにアクセスする前に、メモリの解放とプロセスIDの調整が行われるように細心の注意を払います。これにより、ディスクエラーが発生して中止された場合でも、結合操作は正常に行われたことになります。しかし、 "join 0"でディスクエラーが発生して中止された場合、デフォルトのファイルハンドルの再初期化は行われていません。この場合、別の "join 0"関数呼び出しが行われるべきであり、これはディスクへのアクセスを試みず(すべてのファイルが閉じられているため)、成功するでしょう。

この関数呼び出しが0F37Dh経由で行われた場合、レジスタBとCはエラーコードを返さないことに注意してください。これは、プログラムの終了と中止の処理がアプリケーションプログラムによって行われる必要があるためです。エラーコードはアボートベクタに渡され、そこにあるコードは必要であればエラーコードを覚えていなければなりません。一次および二次エラーコードの意味については、 "エラーコードで終了"機能(機能62h)を参照してください。