[328] Re:端末ドライバのバッファやstdinバッファの中身を覗くには?
投稿者:chikato
2007/02/20 02:13:25
ご回答有難うございます。
遅くなりまして申し訳有りません。
> その mingw\stdio.h は使われていないからです。
> cygwin の gcc のデフォルトは -mcygwin であり mingw ではありません。
> とりあえず gcc -mno-cygwin test5.c とすればコンパイル通るような気もします。
これで出来ました。
実行結果も同じになりました。
「-mno-cygwin」オプションはMinGWランタイムライブラリを使用せよリンクの為のオプションなのですね。
ランタイム…関連するヘッダファイルと対応するライブラリの総称
> ちょっと調べれば判る程度の問題だと思うのですが、聞く前に調べましたか?
文法エラーとばかり思い込んでいました。
> ただ、\cygwin\usr\include\mingw\stdio.hを見つけることができたなら、
> \cygwin\usr\include\stdio.hを先に見つけてそうですし、ふたつあるなら
> どっちか片方が使われているはずで、デフォルトで使われるのは、
> パスの短い方(\cygwin\usr\include\stdio.h)と推論するのが普通じゃないかなあ、
> とは思います。
そういわれてみればそうですよね。
スイマセン。二つあるのもそんなものなのかなと思って疑問視してませんでした。
> \cygwin\usr\include\stdio.hそのものにFILEの定義はないかもしれないですが、
> そこから#includeしているファイルの中にあるはずです。
\cygwin\usr\include\stdio.h内に
typedef __FILE FILE;
を見つけ
↓
\cygwin\usr\include\sys\reent.h内に
typedef struct __sFILE __FILE;
を見つけ
↓
\cygwin\usr\include\sys\reent.h内に
struct __sFILE {
unsigned char *_p; /* current position in (some) buffer */
int _r; /* read space left for getc() */
int _w; /* write space left for putc() */
short _flags; /* flags, below; this FILE is free if 0 */
short _file; /* fileno, if Unix descriptor, else -1 */
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
int _lbfsize; /* 0 or -_bf._size, for inline putc */
#ifdef _REENT_SMALL
struct _reent *_data;
#endif
/* operations */
_PTR _cookie; /* cookie passed to io functions */
_READ_WRITE_RETURN_TYPE _EXFUN((*_read),(_PTR _cookie, char *_buf, int _n));
_READ_WRITE_RETURN_TYPE _EXFUN((*_write),(_PTR _cookie, const char *_buf,
int _n));
_fpos_t _EXFUN((*_seek),(_PTR _cookie, _fpos_t _offset, int _whence));
int _EXFUN((*_close),(_PTR _cookie));
/* separate buffer for long sequences of ungetc() */
struct __sbuf _ub; /* ungetc buffer */
unsigned char *_up; /* saved _p when _p is doing ungetc data */
int _ur; /* saved _r when _r is counting ungetc data */
/* tricks to meet minimum requirements even when malloc() fails */
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
unsigned char _nbuf[1]; /* guarantee a getc() buffer */
/* separate buffer for fgetline() when line crosses buffer boundary */
struct __sbuf _lb; /* buffer for fgetline() */
/* Unix stdio files get aligned to block boundaries on fseek() */
int _blksize; /* stat.st_blksize (may be != _bf._size) */
int _offset; /* current lseek offset */
#ifndef _REENT_SMALL
struct _reent *_data; /* Here for binary compatibility? Remove? */
#endif
#ifndef __SINGLE_THREAD__
_flock_t _lock; /* for thread-safety locking */
#endif
};
を見つけました。