2016-09-16 13 views
4

void quick_exit(int exit_code)はc11標準に含まれていましたが、void exit(int exit_code)はc11標準より前に存在していた機能の違いは何ですか?exitとquick_exitの相違

+0

'quick_exit'は、' atexit'で登録されたハンドラを呼び出しません。 –

+0

私はそれを重複としてマークするのに十分ではありませんが、あなたに[読んでください](http://stackoverflow.com/questions/9758495/what-is-the-difference-between-stdquick-exit-and-stdabort- and-why-was-stdq)?どのくらいの研究をしていますか? –

+0

@Weather Vane、それほど見つけられないので、とても感謝しています。私はそれを見つけましたが、私は明確に理解していませんでしたが、1つの機能を使用すると、他のときにも、私はc11の標準のためにそれほど検索していなかったので、あなたが推奨する投稿を見つけることは起こりませんでした。 – coder

答えて

4

exitは、ストリームバッファがフラッシュされ、閉じられることを保証します。quick_exitのこのような動作は、標準では指定されていません。

これらを使用すると、完全なクリーニング(atexitで登録された機能による)で終了するアプリケーションと、あまりにも多くのものをクリーニングせずにアプリケーションをより早く終了させるアプリケーションの2つの方法を定義できますat_quick_exitで登録された機能)。

3

次のようにquick_exitのためのLinuxのマニュアルページが要約される。

quick_exit - quick_exit()関数は、任意のクリーンアップ 関数を呼び出す、すぐにプログラムを終了し、最小限のクリーンアップに

を実行し、すぐにプログラムを終了at_quick_exit(3)で登録されましたが、atexit(3)では登録されませんでした。

そしてexit用:

終了 - 通常のプロセス終了に

を引き起こすの出口()関数は、通常のプロセスの終了を引き起こし、状況& 0377の値が親に返される(待つ見ます(2)参照)。

したがって、主な違いは、終了時にquick_exitが多くのクリーンアップ操作を実行しないことです。

3

関数_Exit、abort、signal、およびquick_exitのみがsignal.hのヘッダーからシグナルハンドラで呼び出されます。

exitのような他の関数を呼び出すと、未定義の動作が発生します。

+1

もう1つのdifrenceを指摘してくれてありがとう! – coder

関連する問題