Unix的I/O函数包括read, write以及它们的变体recv, send等,这些函数围绕描述字工作。
执行I/O的另一种方法是标准I/O函数库,这个函数库由ANSI C标准规范,这些函数通常围绕流工作。
1,流和描述字的转换
1)流转换为描述字 int fileno(FILE*);
2)描述字转换为输出流和输入流。 FILE* fdopen(sockfd, 'w'); FILE* fdopen(sockfd, 'r');
2,使用标准IO可以对描述字进行操作,方法是先把描述字转换为IO流,然后对IO流进行操作。
3,存在问题
标准IO流是有缓冲的,所以使用标准IO流来操作描述字可能不会立即对数据进行写入和读出。标准IO流有以下三类缓冲:
1)完全缓冲 只有在下列情况才发生IO:缓冲区满,调用fflush,调用exit终止进程。缓冲区的通常大小为8192字节。
2)行缓冲 只有在下列情况才发生IO:碰到换行符,调用fflush,调用exit终止进程。
3)不缓冲 意味着每次调用标准IO输出函数都发生IO
标准IO在Unix上的实现使用如下规则:
1,标准错误输出不缓冲
2,标准输入输出完全缓冲,除非指代终端设备,这种情况为行缓冲。
3,其他IO流都是完全缓冲的,除非指代终端设备,这种情况为行缓冲。
执行I/O的另一种方法是标准I/O函数库,这个函数库由ANSI C标准规范,这些函数通常围绕流工作。
1,流和描述字的转换
1)流转换为描述字 int fileno(FILE*);
2)描述字转换为输出流和输入流。 FILE* fdopen(sockfd, 'w'); FILE* fdopen(sockfd, 'r');
2,使用标准IO可以对描述字进行操作,方法是先把描述字转换为IO流,然后对IO流进行操作。
3,存在问题
标准IO流是有缓冲的,所以使用标准IO流来操作描述字可能不会立即对数据进行写入和读出。标准IO流有以下三类缓冲:
1)完全缓冲 只有在下列情况才发生IO:缓冲区满,调用fflush,调用exit终止进程。缓冲区的通常大小为8192字节。
2)行缓冲 只有在下列情况才发生IO:碰到换行符,调用fflush,调用exit终止进程。
3)不缓冲 意味着每次调用标准IO输出函数都发生IO
标准IO在Unix上的实现使用如下规则:
1,标准错误输出不缓冲
2,标准输入输出完全缓冲,除非指代终端设备,这种情况为行缓冲。
3,其他IO流都是完全缓冲的,除非指代终端设备,这种情况为行缓冲。