高级编程之文件I/O(一)
2016-01-22 13:54
330 查看
Linux操作系统当中IO都是对文件的操作
1.标准IO
一般都是对普通文件操作
是一种有缓存的IO
2.文件IO
一般都是对设备文件操作
是一种没有缓存的IO
标准IO:
stdio.h
Dennis Ritchie
printf scanf getchar putchar gets puts
getc putc fgets fputs fread fwrite ftell
rewind fseek
缓存的分类:
1.全缓存:缓存区满刷新缓存区 4096
对普通文件进行标准IO操作,建立
的缓存一般为全缓存
刷新条件:
1.缓存区满刷新
2.程序结束刷新
3.fflush来刷新
2.行缓存:缓存区满或者遇到\n刷新 1024
行缓存多是关于终端的一些操作
1.遇到\n刷新
2.缓存区满刷新
3.程序结束刷新
4.fflush刷新
3.不缓存:不对数据缓存直接刷新
界面交互 出错处理
流:
数据从文件当中流入和流出所体现出来的字节
流叫做流
流的分类:
二进制流: 2001
二进制数据的流
文本流:
ASCII码数据的流
函数原型:
1.FILE *fopen(const char *path, const char *mode);
功能:打开文件获得一个文件流指针
参数:
path:要打开文件的路径
mode:
r 只读
文件存在则只读打开 不存在则报错
r+ 读写
文件存在则读写打开 不存在则报错
w 只写
文件不存在则创建 存在则清0
w+ 写读
文件不存在则创建 存在则清0
a 追加
文件不存在则创建 存在则追加打开
a+ 追加可写
文件不存在则创建 存在则追加打开
返回值:成功返回文件流指针
失败返回NULL
2.fputc(int c, FILE *stream);
功能:向流中写入一个字符
参数:
c:要写入的字符
stream:文件流指针
返回值:
成功返回输入字符的ASCII码
失败返回EOF
3.int fgetc(FILE *stream);
功能:
从流中读取一个字符
参数:
stream:文件流指针
返回值:
成功读到字符的ASCII码
失败或者读到文件的结尾返回EOF
4.char *fgets(char *s, int size, FILE *stream);
功能:从流中读到一行数据
参数:
s:存储数据空间的首地址
size:从流中读取数据的大小
stream:文件流指针
返回值:
成功返回数据空间的首地址
出错或者读到文件结尾返回NULL
gets和fgets的区别:
1.gets是危险的,因为没有规范读
到数据的上限
2.gets会去掉从终端读入的\n字符
3.fgets会读到n个数据,如果n个
数据中存在\n字符则立即停止当
前的读取操作
4.fgets不会去掉从流中读到的\n字
符
5.fgets(buff, 32, stdin);
gets(buff);
5.int fputs(const char *s, FILE *stream);
功能:
将s指向的字符串输入到流中
参数:
s:字符串的首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF
6.size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
向流中写入nmemb个对象,每个对象
都是由ptr指向的size个大小的数据
参数:
ptr:操作数据对象的首地址
size:数据对象的大小
nmemb:数据对象的个数
strem:文件流指针
返回值:
成功返回实际写入对象的个数
失败返回很小的数0
7. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从流中读取n个对象,每个对象size个大小
存放在ptr指向的空间中
参数:
ptr:要存放数据空间的首地址
size:数据的大小
nmemeb:数据的个数
stream:文件流指针
返回值:
成功返回实际读到的对象个数
失败返回0
8.int fseek(FILE *stream, long offset, int whence);
功能:
定位文件光标的位置
参数:
stream:文件流指针
offset:偏移量
whence:
SEEK_SET
SEEK_CUR
SEKK_END
返回值:
成功返回0
失败返回-1
1.标准IO
一般都是对普通文件操作
是一种有缓存的IO
2.文件IO
一般都是对设备文件操作
是一种没有缓存的IO
标准IO:
stdio.h
Dennis Ritchie
printf scanf getchar putchar gets puts
getc putc fgets fputs fread fwrite ftell
rewind fseek
缓存的分类:
1.全缓存:缓存区满刷新缓存区 4096
对普通文件进行标准IO操作,建立
的缓存一般为全缓存
刷新条件:
1.缓存区满刷新
2.程序结束刷新
3.fflush来刷新
2.行缓存:缓存区满或者遇到\n刷新 1024
行缓存多是关于终端的一些操作
1.遇到\n刷新
2.缓存区满刷新
3.程序结束刷新
4.fflush刷新
3.不缓存:不对数据缓存直接刷新
界面交互 出错处理
流:
数据从文件当中流入和流出所体现出来的字节
流叫做流
流的分类:
二进制流: 2001
二进制数据的流
文本流:
ASCII码数据的流
函数原型:
1.FILE *fopen(const char *path, const char *mode);
功能:打开文件获得一个文件流指针
参数:
path:要打开文件的路径
mode:
r 只读
文件存在则只读打开 不存在则报错
r+ 读写
文件存在则读写打开 不存在则报错
w 只写
文件不存在则创建 存在则清0
w+ 写读
文件不存在则创建 存在则清0
a 追加
文件不存在则创建 存在则追加打开
a+ 追加可写
文件不存在则创建 存在则追加打开
返回值:成功返回文件流指针
失败返回NULL
2.fputc(int c, FILE *stream);
功能:向流中写入一个字符
参数:
c:要写入的字符
stream:文件流指针
返回值:
成功返回输入字符的ASCII码
失败返回EOF
3.int fgetc(FILE *stream);
功能:
从流中读取一个字符
参数:
stream:文件流指针
返回值:
成功读到字符的ASCII码
失败或者读到文件的结尾返回EOF
4.char *fgets(char *s, int size, FILE *stream);
功能:从流中读到一行数据
参数:
s:存储数据空间的首地址
size:从流中读取数据的大小
stream:文件流指针
返回值:
成功返回数据空间的首地址
出错或者读到文件结尾返回NULL
gets和fgets的区别:
1.gets是危险的,因为没有规范读
到数据的上限
2.gets会去掉从终端读入的\n字符
3.fgets会读到n个数据,如果n个
数据中存在\n字符则立即停止当
前的读取操作
4.fgets不会去掉从流中读到的\n字
符
5.fgets(buff, 32, stdin);
gets(buff);
5.int fputs(const char *s, FILE *stream);
功能:
将s指向的字符串输入到流中
参数:
s:字符串的首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF
6.size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
向流中写入nmemb个对象,每个对象
都是由ptr指向的size个大小的数据
参数:
ptr:操作数据对象的首地址
size:数据对象的大小
nmemb:数据对象的个数
strem:文件流指针
返回值:
成功返回实际写入对象的个数
失败返回很小的数0
7. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从流中读取n个对象,每个对象size个大小
存放在ptr指向的空间中
参数:
ptr:要存放数据空间的首地址
size:数据的大小
nmemeb:数据的个数
stream:文件流指针
返回值:
成功返回实际读到的对象个数
失败返回0
8.int fseek(FILE *stream, long offset, int whence);
功能:
定位文件光标的位置
参数:
stream:文件流指针
offset:偏移量
whence:
SEEK_SET
SEEK_CUR
SEKK_END
返回值:
成功返回0
失败返回-1
相关文章推荐
- static关键字--java
- 学习Faster-RCNN (一)跑Faster-RCNN的python版demo
- php 中的 0 和 null
- Vector and ArrayList in Java
- Java 方法
- C语言实现strlen
- 手动编译JAVA类
- JavaSE001_String类总结之构造器和常用方法
- vbs-获取公网IP调用邮件控件实现邮件的自动发送到指定邮箱-可直接使用复制使用
- android studio 导入eclipse遇到的相关问题
- PageAdapter,FragmentPagerAdapter与FragmentStatePagerAdapter
- java ftp相关的异常汇总
- 【PHP进阶篇】3.类与面向对象--慕课网【学习总结】
- Spring+MVC项目发布停止
- FtpClient对ftp服务器进行上传及下载
- java前台传参json,后台用map或者实体对象接收
- java.lang.RuntimeException: JPedal Trial has now expired
- C# 常用小技巧
- java 实现多线程的三种基本方式
- C语言学习之指针高级