ファイル構造体とポインタの復習

Menu

     #include <stdio.h>
     int
     fputc(int c, FILE *stream);

で使われる FILE について調べよう。


FILE はどこで定義されている?

clang -E を使って、その構造体の定義を探しだそう。

file descriptor はどこに格納されているか。

file buffer はどこにあるか。


ポインタの復習

(4) 大域変数に配列で定義する

(5) 局所変数に配列で定義する

(6) malloc を使って FILE の配列を確保する

これらのpointerと、(1)-(3) を比較せよ。


ポインタの演算

(4)-(5) に対して、引き算と足し算を行うプログラムを書き、結果を考察せよ。

意味のない演算を行わないように注意する

lldb/gdb で、演算している部分の命令を示せ。(演算が省略される場合もある)


putchar/getchar による FILE の変化

putchar/getchar により、1文字読んだ後、10,000文字読んだ後のFILE構造体の中身の変化を調べよ。


fopen で開けられる FILE は、どこにあるか?

FILE を以下の場所で定義して、gdb/lldb で、その address を調べよ。

(1) 大域変数に定義する

(2) 局所変数に定義する

(3) malloc を使って FILE を確保する

それをぞれを gdb/lldb を使ってアドレスを表示してみよ。

fopen で返ってきた値のアドレスを見て、(1)-(3) のどれに相当するかを考察せよ。

この課題は、OS X と Linux の両方で行う。

cf. lldb on OS X

 p *((FILE*)__stdoutp)    

Shinji KONO / Tue Nov 12 13:54:01 2013