1、标准 I/O函数和系统函数
系统读写函数:read()、write()
标准I/O函数:fgets()、fputs()
系统读写函数不带缓冲区,而标准I/O函数自带缓冲区。
在读写比较大的文件的时候,标准I/O函数更快。
【辨】
系统函数 读写的输入是:文件描述符;
标准I/O函数 读写的输入是:FILE 结构体指针。
2、使用标准 I/O 函数
函数 fgets();
#include <stdio.h>
int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
函数 fputs();
#include <stdio.h>
int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
若 stream 写 stdout, 则直接输出到终端。
函数 fdopen()
#include <stdio.h>
FILE *fdopen( int fildes, const char *mode );
功能:
将创建套接字时返回的文件描述符转换为标准I/O函数中使用的 FILE结构体指针。
参数:
fildes:需要转换的文件描述符
mode:将要创建的 FILE结构体指针的模式(mode)信息;
“r” :读模式
“w” :写模式。
返回值:
成功,返回转换的FILE结构体指针;失败,返回NULL。
函数 fileno()
#include <stdio.h>
int fileno( FILE *stream );
功能:
(与 fdopen() 相反)FILE结构体指针转换为套接字。
参数:
stream:FILE结构体指针
返回值:
成功,返回转换后的文件描述符;失败,返回-1。
3、习题
1)请说明标准I/O函数的2个优点。它为何拥有这2个优点?
答:
基于ANSIX标准具有良好的一致性;
可以利用缓冲提高性能。
2)标准IO中,“调用fputs函数传输数据时,调用后应立即开始发送!”,为何这种想法是错误的?为了达到这种效果应添加哪些处理过程?
答:
通过标准输出函数的传输的数据不直接通过套接字的输出缓冲区发送,而是保存在标准输出函数的缓冲中,然后再用fflush函数进行输出。因此,即使调用“fputs"函数,也不能立即发送数据。如果想保障数据传输的时效性,必须经过fflush函数的调用过程。