システムプログラム(第6週): fdopen_sock()

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2011/2011-06-01/fdopen_sock.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2011/
http://www.coins.tsukuba.ac.jp/~yas/

fdopen_sock()

fdopen_sock() は、TCP/IP による通信を、fprintf(), fgets(), fread() 等で 行えるようにする関数である。
 130:	int
 131:	fdopen_sock( int sock, FILE **inp, FILE **outp )
 132:	{
 133:	    int sock2 ;
 134:	        if( (sock2=dup(sock)) < 0 )
 135:	        {
 136:	            return( -1 );
 137:	        }
 138:	        if( (*inp = fdopen( sock2, "r" )) == NULL )
 139:	        {
 140:	            close( sock2 );
 141:	            return( -1 );
 142:	        }
 143:	        if( (*outp = fdopen( sock, "w" )) == NULL )
 144:	        {
 145:	            fclose( *inp );
 146:	            *inp = 0 ;
 147:	            return( -1 );
 148:	        }
 149:	        setvbuf(*outp, (char *)NULL, _IONBF, 0);
 150:	        return( 0 );
 151:	}
fdopen_sock() は、dup() してファイル記述子を増やし、fdopen() を呼んで いる。fdopen() は、既に open() や pipe() 等で得られたファイル記述子から 高水準入出力ライブラリ が使えるようにするためのものである。 setvbuf() では、バッファリングを行わせないようにしている。これにより、 たとえば fprintf() を行うと、即座にネットワークに送り出される。
Last updated: 2011/06/15 12:15:03
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>