ライブラリ関数_exitとの出linuxC違い

1つのソース

高レベルのI / O機能のセットと呼ばれるLinuxの標準ライブラリ関数では、と私たちはprintfのを知って、fopenを、関数fread、fwriteのそのリストには、彼らはまた、バッファI / Oのとして知られています 開いているファイルに対応することを特徴とする、バッファがメモリ内に存在するバッファを有し、各ファイルは、レコードの数を読み取るために読み出されるので、次のファイルは、メモリキャッシュから直接読み取ることができます引き出さ、バッファの内容は、ファイルを書き込むたびには、特定の条件を満たしているのを待って、バッファメモリに書き込まれている(例えば、改行などの特定の文字または顔、特定の数まで、およびEOF端ファイルの)、及びファイルへの1回の書き込み、特定の条件が満たされていないため、データの一部が、私たちは、実際には、ファイルが書き込まれたことを信じていた場合、大幅にファイルの読み込みと書き込みの速度を向上させるが、それはまた、私たちのプログラムのためのトラブルの少しをもたらします彼らはただ、我々は_exit機能を持つプログラムが閉じを指示する、バッファに保存され、バッファ内のデータを使用して、データの整合性を確保したい場合、あなたは終了関数を使用する必要があり、逆に、失われます。

図2に示すように、主な違い

出口は()関数は、_exit()関数との最大の違いであるファイルをチェックするには、exitシステムコールを呼び出す前に、出口()関数が開かれていることである、ファイルは「Iクリーンアップの姿ファイルバッファ書き込みの内容です/ O「バッファ。

3、ヘッダファイル

_exit()はunistd.hで定義されたのに対し、出口()関数は、stdlib.hで定義されています。

4、原則

出口()と_exit()は、正常な機能を終了するために使用されます。しかし、_exit()システムコールは、直接sys_exitで、終了()関数は、多くの場合、共通の関数ライブラリです。これは、最初のそのようなすべての標準的なIO、呼sys_exitを閉じるような様々な機能を実行するために処理する着信のようないくつかのクリーンアップ操作を、実行します。

例えば図5に示すように、

INTメイン(int型ARGC、CHAR * ARGV [])
{

printf(「こんにちは\ N」)
  のprintf(「世界」);
  出口(0);
}
メインINT(INTのARGC、CHAR * ARGV [])
{

printf(「こんにちは\ N」)
  のprintf(「世界」);
  _exit(0)。
}

これら二つのプログラム、プログラムの出力は、2つの単語です。

こんにちは

世界

プログラム2の出力文:

こんにちは

そのような改行とファイルの終わりのように最後の単語、上の特別なと文字が無いので理由は、ある、ファイルは、ファイルがオープンに格納され、この場合には、バッファ表示バッファ装置に格納される。この時点ため、出力理由関数を記述するために、我々はまず、書き込みデータがファイルに書き込まれていないバッファをチェックすることですシステムコール、システムは、表示装置のバッファ、および終了の役割を開きます。この時間が終了し、クリーンアップをしなければなりません_exitは、ファイルバッファの内容が消え、すぐ近くのファイルであり、この時間は、それが表示装置へ再輸出することは不可能です。

公開された56元の記事 ウォンの賞賛6 ビュー6845

おすすめ

転載: blog.csdn.net/qq_23929673/article/details/99670478