#include <stdio.h>
#include <stdlib.h>
#define INFILE "abc.txt"
int main(void) {
FILE *fp;
int c;
if ((fp = fopen(INFILE, "r")) == NULL) {
perror("fopen");
exit(1);
}
while ((c = getc(fp)) != EOF) {
putchar(c);
}
if ((fclose(fp)) == EOF) {
perror("fclose");
exit(1);
}
return 0;
}
$ cat abc.txt
abc
$ od -tx1 abc.txt
0000000 61 62 63 0a
0000004
GDBによるデバッグ
10 if ((fp = fopen(INFILE, "r")) == NULL) {
(gdb) n
15 while ((c = getc(fp)) != EOF) {
(gdb) p *fp
$44 = {_flags = -72539000, _IO_read_ptr = 0x0, _IO_read_end = 0x0, _IO_read_base = 0x0,
_IO_write_base = 0x0, _IO_write_ptr = 0x0, _IO_write_end = 0x0, _IO_buf_base = 0x0,
_IO_buf_end = 0x0, _IO_save_base = 0x0, _IO_backup_base = 0x0, _IO_save_end = 0x0,
_markers = 0x0, _chain = 0x7ffff7f9c680 <_IO_2_1_stderr_>, _fileno = 3, _flags2 = 0,
_old_offset = 0, _cur_column = 0, _vtable_offset = 0 '\000', _shortbuf = "",
_lock = 0x555555559340, _offset = -1, _codecvt = 0x0, _wide_data = 0x555555559350,
_freeres_list = 0x0, _freeres_buf = 0x0, __pad5 = 0, _mode = 0,
_unused2 = '\000' <repeats 19 times>}
(gdb) n
16 putchar(c);
(gdb) p/c c
$45 = 97 'a'
(gdb) p fp->_IO_read_ptr
$46 = 0x555555559491 "bc\n"
(gdb) p fp->_IO_read_end
$47 = 0x555555559494 ""
(gdb) p fp->_IO_read_base
$48 = 0x555555559490 "abc\n"
(gdb) n
15 while ((c = getc(fp)) != EOF) {
(gdb)
16 putchar(c);
(gdb) p/c c
$49 = 98 'b'
(gdb) p fp->_IO_read_ptr
$50 = 0x555555559492 "c\n"
(gdb) n
15 while ((c = getc(fp)) != EOF) {
(gdb)
16 putchar(c);
(gdb) p/c c
$51 = 99 'c'
(gdb) p fp->_IO_read_ptr
$52 = 0x555555559493 "\n"
(gdb) n
15 while ((c = getc(fp)) != EOF) {
(gdb)
16 putchar(c);
(gdb) p/c c
$53 = 10 '\n'
(gdb) p fp->_IO_read_ptr
$54 = 0x555555559494 ""
(gdb) n
abc
15 while ((c = getc(fp)) != EOF) {
(gdb)
19 if ((fclose(fp)) == EOF) {
(gdb) p/c c
$55 = -1 '\377'
(gdb) p fp->_IO_read_ptr
$56 = 0x555555559490 "abc\n"