2013-08-16 32 views
11

printfがLinux内でどのように動作するのか不思議です。私はそれがSTDOUTにデータを書き込む方法を理解していません。printfは内部でどのように動作しますか?

は、内部の検索のビットの後、私はglibcをダウンロードし、ソースコードを見ていた:

__printf (const char *format, ...) 
{ 
    va_list arg; 
    int done; 

    va_start (arg, format); 
    done = vfprintf (stdout, format, arg); 
    va_end (arg); 

    return done; 
} 

これを見つけた後、私はvfprintf機能に深く入った - しかし、ファイルは約2500でありますよく知られていないCコードの行。私は10,000フィートの説明から、printfがコンピュータのメモリとどのように動作し、画面に文字を表示するかを探しています。

私がアセンブリコードであった場合、同じタスクを達成するためには何が必要でしょうか?それはオペレーティングシステムに依存していますか?

+0

これはすべて、デバイスに書き込むことから始まります(ほぼファイルのように)。デバイスドライバが引き継いでASCII値を解釈し、その値を表示する方法を指示します。ディスク、マウスなどと同じです。 – Jiminion

+0

いいえ、彼はあまりにも基本的な書き込みだけでなく、vfprintfを理解したいと思います。しかし、もう一方のスレッドには残りの部分が含まれています。 –

答えて

7

私はあなたが間違った層を見ていると思います。 vfprintfのロジックは、引数を書式設定し、基礎となるstdio関数(通常は対象とするFILEオブジェクト内のバッファに書き込む)の責任を負います。この出力をファイルディスクリプタ(または他の非POSIXライクなシステム、基底のデバイス/ファイル表現)にするための実際のロジックは、おそらくfwrite,fputc、および/または__の固定の内部関数(おそらく__overflow)です。

+2

ありがとう - この回答とhttp://stackoverflow.com/questions/2442966/c-c-function-definitions-without-assemblyの間に私は何が起こっているのかをよりよく理解しています。 – sdasdadas

関連する問題