2012-02-29 27 views
0

Cストリームシステムはどのように機能しますか?例えばCストリームシステムはどのように機能しますか?

、コード:

FILE *f; 
// opens f... 
fputc(f, "x"); 

が 'F' に開いていた方法に応じて、異なるものを行います。 'f'がファイルとしてオープンされている場合、そのファイルに文字が書き込まれます。 'f'がメモリストリームとしてオープンされている場合、charがメモリに書き込まれ、おそらくより多くのメモリが割り当てられます。

私の質問は:どのようにfputc関数が 'f'が何を意味し、それをどうするのか知っていますか?

追加の質問:これはオペレーティングシステムに完全に依存しているのですか、またはこのような抽象的なインターフェイスを純粋なC言語で実装することは可能ですか?

+0

すべてのプラットフォームで、低レベルのシステムコールを使用して、純粋なC言語で実装された 'f *'関数_are_を見てきました。カーネル内の –

+0

は、通常、さまざまな呼び出しのための関数ポインタを格納することで実装されます。 –

+0

'FILE *'インターフェースを使ってメモリストリームを見つけましたか? – unwind

答えて

1

オープン関数は、FILE構造内の情報をfが指すように格納します。これは純粋なCですが、ファイルへの書き込みを行う低レベルのコードはプラットフォームに依存します。

+0

どのような情報ですか? 'fgetc'関数はファイルやメモリにデータを格納する必要がある場合、どうすれば"何をすべきか "を知っていますか?この情報は 'fgetc'本体の中か他のどこかにありますか? –

+1

'fgetc'関数は、さまざまな' open'関数がそこに置く情報で 'f'が指し示す' FILE'構造体を調べるため、何をすべきかを知っています。 'fgetc'自体ではなく、より低レベルの関数' fgets'呼び出しである可能性があります。 –

関連する問題