今天继续标准IO的学习
先对几种文件操作方法进行对比总结
进行文件的拷贝操作时:
fgetc/fputc:适用于文本文件和二进制文件
fgets/fputs:只适用于文本文件(不能读写二进制文件)
比较gets与fgets:
fgets:
1.从指定的已打开文件中读取最多一行数据(遇到\\n停止读取)
2.fgets保留\\n字符并在字符串末尾添加\\0
3.fgets最多读取size-1个字符,最后一个位置存放\\0
gets:
1.指定从终端设备读取数据
2.gets会将终端读到的\\n字符替换成\\0
3.gets是危险的,因为在读取时,没有大小的限制,可能造成内存越界
而对于fgetc与getchar,fputc与putchar来说:
int ret = fgetc(stdin); <=> int ret = getchar();
fputc('a', stdout); <=> putchar('a');
Linux操作系统默认已打开的三个文件:
FILE * –>stdin:标准输入流—->标准输入设备:键盘
FILE * –>stdout:标准输出流—->标准输出设备:显示屏
FILE * –>stderr:标准出错流—->标准出错设备:显示屏
fread/fwrite:读写固定大小的二进制数据(例:结构体)、文本文件
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:向文件中写入nmemb个大小是size的数据到文件中
参数:
ptr:要写入的数据的首地址
size:每个元素的字节数
nmemb:要写入的元素个数
stream:要写入的文件流指针
返回值:
成功:返回实际写入的元素个数
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取nmemb个大小是size的元素
参数:
ptr:存储读取到数据的首地址
size:每个元素的大小
nmemb:希望从文件中读取的元素个数
stream:要读的文件流指针
返回值:
成功:实际读到的元素个数
读到文件末尾:0
4)流定位相关接口:
①fseek:
int fseek(FILE *stream, long offset, int whence);
功能:实现文件流重新定位
参数:
stream:需要定位的文件流指针
offset:偏移量
whence:定位的相对位置
SEEK_SET:从头进行偏移
SEET_CUR:从当前位置开始偏移
SEET_END:从文件末尾偏移
返回值:
成功:返回当前的偏移量
失败:-1
②ftell:
long ftell(FILE *stream);
功能:获取流的当前位置到文开头的偏移量
参数:
stream:文件流
返回值:
偏移量:byte
③rewind:
void remind(FILE *stream);
功能:流复位函数(复位到开头)
rewind(fp) <==> fseek(fp, O, SEEK_SET);
评论前必须登录!
注册