采用标准的I/O可以增强程序的可移植性,可以提高程序的性能.
fdopen(3)可以为套接口打开stdio(3)调用.

#include
FILE fdopen(int files,const char mode);
files为文件描述符,mode为打开的模式.与函数fopen中的模式一样.
如果调用成功返回一个FILE结构指针,否则返回一个空指针,错误信息在errno中.
下面是一个示例:
?
View Code
C
1
2
3
4
5
6
7
8
9
int
s
;
FILE

io
;
s
=
socket
(

)
;
io
=
fdopen
(
s
,
“w+”
)
;
if
(

io

NULL
)
{
fprintf
(
stderr
,
“%s:fdopen
\n

,
strerror
(
errno
)
)
;
exit
(
1
)
;
}
一般情况下为了让程序更加安全个高效,常常采用分开使用读写流的方式.
下面是一个示例:
?
View Code
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int
s
;
FILE

rx
;
//读流
FILE

wx
;
//写流
s
=
socket
(

)
;
rx
=
fdopen
(
s
,
“r”
)
;
if
(

rx

NULL
)
{
……..
}
wx
=
fdopen
(
dup
(
s
)
,
“r”
)
;
if
(

wx

NULL
)
{
……..
}
建立两个流后,用户就可以安全的在rx流上使用fgetc()和fgets()等输入函数,在wx流上使用fputc()和fpuuts()等输出函数.
当不再使用时就调用fclose()关闭这些流.