オペレーティングシステム関連のユーティリティ
********************************************

int Py_FdIsInteractive(FILE *fp, const char *filename)

   *filename* という名前の標準 I/O ファイル *fp* が対話的
   (interactive) であると考えられる場合に真 (非ゼロ) を返します。これ
   は "isatty(fileno(fp))" が真になるファイルの場合です。グローバルな
   フラグ "Py_InteractiveFlag" が真の場合には、 *filename* ポインタが
   *NULL* か、名前が "'<stdin>'" または "'???'" のいずれかに等しい場合
   にも真を返します。

void PyOS_AfterFork()

   プロセスが fork した後の内部状態を更新するための関数です; fork 後
   Python インタプリタを使い続ける場合、新たなプロセス内でこの関数を呼
   び出さねばなりません。新たなプロセスに新たな実行可能物をロードする
   場合、この関数を呼び出す必要はありません。

int PyOS_CheckStack()

   インタプリタがスタック空間を使い尽くしたときに真を返します。このチ
   ェック関数には信頼性がありますが、 "USE_STACKCHECK" が定義されてい
   る場合 (現状では Microsoft Visual C++ コンパイラでビルドした
   Windows 版) にしか利用できません . "USE_STACKCHECK" は自動的に定義
   されます; 自前のコードでこの定義を変更してはなりません。

PyOS_sighandler_t PyOS_getsig(int i)

   シグナル *i* に対する現在のシグナルハンドラを返します。この関数は
   "sigaction()" または "signal()" のいずれかに対する薄いラッパです。
   "sigaction()" や "signal()" を直接呼び出してはなりません!
   "PyOS_sighandler_t" は "void (*)(int)" の typedef  による別名です。

PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)

   シグナル *i* に対する現在のシグナルハンドラを *h* に設定します; 以
   前のシグナルハンドラを返します。この関数は "sigaction()" または
   "signal()" のいずれかに対する薄いラッパーです。 "sigaction()" や
   "signal()" を直接呼び出してはなりません!  "PyOS_sighandler_t" は
   "void (*)(int)" の typedef  による別名です。


システム関数
************

"sys" モジュールが提供している機能にCのコードからアクセスする関数です
。すべての関数は現在のインタプリタスレッドの "sys" モジュールの辞書に
対して動作します。この辞書は内部のスレッド状態構造体に格納されています
。

PyObject *PySys_GetObject(char *name)
    *Return value: Borrowed reference.*

   "sys" モジュールの *name* オブジェクトを返すか、存在しなければ例外
   を設定せずに *NULL* を返します。

FILE *PySys_GetFile(char *name, FILE *def)

   "sys" モジュール内のオブジェクト *name* に関連付けられた "FILE*" を
   返します。 *name* がなかった場合や "FILE*" に関連付けられていなかっ
   た場合は *def* を返します。

int PySys_SetObject(char *name, PyObject *v)

   *v* が *NULL* で無い場合、 "sys" モジュールの *name* に *v* を設定
   します。 *v* が *NULL* なら、 sys モジュールから *name* を削除しま
   す。成功したら "0" を、エラー時は "-1" を返します。

void PySys_ResetWarnOptions()

   "sys.warnoptions" を、空リストにリセットします。

void PySys_AddWarnOption(char *s)

   "sys.warnoptions" に *s* を追加します。

void PySys_SetPath(char *path)

   "sys.path" を *path* に含まれるパスの、リストオブジェクトに設定しま
   す。 *path* はプラットフォームの検索パスデリミタ(Unixでは ":",
   Windows では ";") で区切られたパスのリストでなければなりません。

void PySys_WriteStdout(const char *format, ...)

   *format* で指定された出力文字列を "sys.stdout" に出力します。切り詰
   めが起こった場合を含め、例外は一切発生しません (後述)。

   *format* は、フォーマット後の出力文字列のトータルの大きさを1000バイ
   ト以下に抑えるべきです。-- 1000 バイト以降の出力文字列は切り詰めら
   れます。特に、制限のない "%s" フォーマットを使うべきではありません
   。"%.<N>s" のようにして N に10進数の値を指定し、<N> + その他のフォ
   ーマット後の最大サイズが1000を超えないように設定するべきです。同じ
   ように "%f" にも気を付ける必要があります。非常に大きい数値に対して
   、数百の数字を出力する可能性があります。

   問題が発生したり、 "sys.stdout" が設定されていなかった場合、フォー
   マット後のメッセージは本物の(Cレベルの) *stdout* に出力されます。

void PySys_WriteStderr(const char *format, ...)

   上と同じですが、 "sys.stderr" か *stderr* に出力します。


プロセス制御
************

void Py_FatalError(const char *message)

   致命的エラーメッセージ (fatal error message) を出力してプロセスを強
   制終了 (kill) します。後始末処理は行われません。この関数は、Python
   インタプリタを使い続けるのが危険であるような状況が検出されたとき;
   例えば、オブジェクト管理が崩壊していると思われるときにのみ、呼び出
   されるようにしなければなりません。Unixでは、標準 C ライブラリ関数
   "abort()" を呼び出して "core" を生成しようと試みます。

void Py_Exit(int status)

   現在のプロセスを終了 (exit) します。この関数は "Py_Finalize()" を呼
   び出し、次いで標準 C ライブラリ関数 "exit(status)" を呼び出します。

int Py_AtExit(void (*func)())

   "Py_Finalize()" から呼び出される後始末処理を行う関数 (cleanup
   function) を登録します。後始末関数は引数無しで呼び出され、値を返し
   ません。最大で 32 の後始末処理関数を登録できます。登録に成功すると
   、 "Py_AtExit()" は "0" を返します;  失敗すると "-1" を返します。最
   後に登録した後始末処理関数から先に呼び出されます。各関数は高々一度
   しか呼び出されません。 Python の内部的な終了処理は後始末処理関数よ
   り以前に完了しているので、 *func* からはいかなる Python API も呼び
   出してはなりません。
