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

Menu

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

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


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

clang -E や、stdio.h を探して、FILE と、その構造体の定義を探しだそう。

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

file buffer はどこにあるか。


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

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

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

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

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

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

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

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


ポインタの復習

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

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

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

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


ポインタの演算

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

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

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


putchar/getchar による FILE の変化

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

    

Shinji KONO / Tue Nov 6 12:52:48 2012