ファイル構造体とポインタの復習
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構造体の中身の変化を調べよ。