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

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)

   Return the "FILE*" associated with the object *name* in the "sys"
   module, or *def* if *name* is not in the module or is not
   associated with a "FILE*".

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, ...)

   As above, but write to "sys.stderr" or *stderr* instead.


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

void Py_FatalError(const char *message)

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

void Py_Exit(int status)

   Exit the current process.  This calls "Py_Finalize()" and then
   calls the standard C library function "exit(status)".

int Py_AtExit(void (*func)())

   Register a cleanup function to be called by "Py_Finalize()".  The
   cleanup function will be called with no arguments and should return
   no value.  At most 32 cleanup functions can be registered.  When
   the registration is successful, "Py_AtExit()" returns "0"; on
   failure, it returns "-1".  The cleanup function registered last is
   called first. Each cleanup function will be called at most once.
   Since Python’s internal finalization will have completed before the
   cleanup function, no Python APIs should be called by *func*.
