2011-07-01 :-(
_ 午後
1300 テスト
_ 世界が望んだ忘れもの
ZONE が歌ってたアレは当時は「友人たちとの夏の思い出は最高なのよとても素敵な思い出になるのよ感動なのよ大人になってから思い出すときっと泣けるよひととして良い思い出になるのよ」という歌詞と曲の感動の押しつけが鼻について隣人部の私にそのようなドラマチックな( ドラマ風な! )展開があるわけねーだろ常識的に考えてようするに非常に欝陶しいし嫌いだったんだが、あの花を見てから印象がまったく変わった。この歌は素敵だ。あの花のためにある歌だ。歌を聴いているだけでまた泣けてくる。( 相変わらず自分の経験に基づいた感動ではないあたりが隣人部クオリティ! )
ところで編曲は @btc_toku だったのか今更気付いてごめんなさい。
_ [NetBSD]FILE
#include "ourhdr.h" void pr_stdio( const char*, FILE* ); int main( int argc, char* argv[] ) { FILE* fp; fputs( "enter any charcter\n", stdout ); if( getchar() == EOF ) err_sys( "getchar error" ); fputs( "one line to standard error\n", stderr ); pr_stdio( "stdin", stdin ); pr_stdio( "stdout", stdout); pr_stdio( "stderr", stderr); if( ( fp = fopen( "/etc/motd", "r" ) ) == NULL ) err_sys( "fopen error" ); if( getc( fp ) == EOF ) err_sys( "getc error" ); pr_stdio( "/etc/motd", fp ); exit( 0 ); } void pr_stdio( const char* name, FILE* fp ) { printf( "stream = %s, ", name ); if( fp->_flag & _IONBF) printf( "unbuffered" ); else if( fp->_flag & _IONBF) printf( "line buffered" ); else printf( "fully buffered" ); printf( ", buffer size = %d\n", fp->_bufsiz ); }
cc
05/buffer0.c: In function 'pr_stdio': 05/buffer0.c:33: error: 'FILE' has no member named '_flag' 05/buffer0.c:34: error: 'FILE' has no member named '_flag' 05/buffer0.c:36: error: 'FILE' has no member named '_bufsiz'
ほむ?
/usr/include/stdio.h
typedef struct __sFILE { unsigned char *_p; /* current position in (some) buffer */ int _r; /* read space left for getc() */ int _w; /* write space left for putc() */ unsigned 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 */ /* operations */ void *_cookie; /* cookie passed to io functions */ int (*_close)(void *); int (*_read) (void *, char *, int); fpos_t (*_seek) (void *, fpos_t, int); int (*_write)(void *, const char *, int); /* file extension */ struct __sbuf _ext; /* separate buffer for long sequences of ungetc() */ 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 fgetln() when line crosses buffer boundary */ struct __sbuf _lb; /* buffer for fgetln() */ /* Unix stdio files get aligned to block boundaries on fseek() */ int _blksize; /* stat.st_blksize (may be != _bf._size) */ fpos_t _offset; /* current lseek offset */ } FILE;
ほむほむ?
% diff -u 05/buffer0.c 05/buffer1.c --- 05/buffer0.c 2011-06-22 22:31:26.000000000 +0900 +++ 05/buffer1.c 2011-06-22 22:40:27.000000000 +0900 @@ -30,10 +30,10 @@ void pr_stdio( const char* name, FILE* fp ) { printf( "stream = %s, ", name ); - if( fp->_flag & _IONBF) printf( "unbuffered" ); - else if( fp->_flag & _IONBF) printf( "line buffered" ); + if( fp->_flags & _IONBF) printf( "unbuffered" ); + else if( fp->_flags & _IONBF) printf( "line buffered" ); else printf( "fully buffered" ); - printf( ", buffer size = %d\n", fp->_bufsiz ); + printf( ", buffer size = %d\n", fp->_bf._size ); }
cc && execute
% ./a.out enter any charcter one line to standard error stream = stdin, fully buffered, buffer size = 4096 stream = stdout, fully buffered, buffer size = 4096 stream = stderr, unbuffered, buffer size = 1 stream = /etc/motd, fully buffered, buffer size = 8192
[ツッコミを入れる]