1.标准IO与文件IO的区别
标准 IO |
文件IO | |
概念 |
C库中定义的一组用于输入输出的函数 |
posix中定义的一组输入输出的函数 |
特点 |
有缓冲机制,减少系统调用,提高效率 |
无缓冲机制 |
围绕流进行操作,FILE *p |
围绕文件描述符操作,非负整数 | |
默认打开三个流:stdin/stdout/stderr |
默认打开三个文件描述符:0/1/2 | |
只能操作普通文件 |
可以操作除了目录以外的任意类型文件 | |
可移植性更强 |
可移植性弱 | |
函数 |
打开文件: fopen \freopen |
打开文件: open |
关闭文件 :fclose |
关闭文件:close | |
读文件:fgetc \ fgets \ fread |
读文件:read | |
写文件:fputc \ fputs \ fwrite |
写文件:write | |
定位操作:rewind \ fseek \ ftell |
定位操作:lseek |
2.标准IO函数接口
标准 IO | ||||
函数 |
功能 |
参数 |
返回值 |
备注 |
fopen |
打开文件 |
path:打开的文件路径 mode:打开的方式 |
成功:文件流 失败:NULL | |
fgetc |
从文件中读取一个字符 |
stream:文件流 |
成功:读到的字符 失败或读到文件末尾:EOF(-1) |
将当前文件指针位置向后移动一个字符 |
fputc |
向文件中写入一个字符 |
c:要写的字符 stream:文件流 |
成功:写的字符的ASCII 失败:EOF(-1) | |
fgets |
从文件中每次读取一行字符串 |
s:存放字符串的地址 size:期望一次读取的字符个数 stream:文件流 |
成功:s的地址 失败或读到文件末尾:NULL |
每次实际读取的字符个数为size-1个,会在末尾自动添加\0 每次读一行,遇到\n或者到达文件末尾后不再继续读下一行 并把它存储在s所指向的字符串内。 |
fputs |
向文件中写字符串 |
s:要写的内容 stream:文件流 |
返回值:成功:非负整数 失败:EOF | |
fread |
从文件流读取多个元素(将二进制数据从文件读出) |
ptr :是一个指针,是存放数据的存储空间的起始地址,用来存放读取元素 size :元素大小 sizeof(元素数据类型) nmemb :读取元素的个数 stream :要读取的文件流 |
成功:读取的元素的个数 读到文件尾或失败: 0 | |
fwrite |
将二进制数据写入文件 |
ptr :是一个指针,保存要输出数据的空间的地址。 size :要写入的字节数 sizeof(数据类型) nmemb : 要进行写入元素的个数 strem: 目标文件流指针 |
成功:写的元素个数 失败 :-1 | |
freopen |
将指定的文件流重定向到打开的文件中 |
path:文件路径 mode:打开文件的方式(同fopen) fp:文件流指针 |
成功:返回文件流指针 失败:NULL | |
fseek |
文件的定位操作 |
stream:文件流 offset:偏移量: whence:相对位置: |
成功:0 失败:-1 |
正数表示向后文件尾部偏移, 负数表示向文件开头偏移 SEEK_SET:相对于文件开头 SEEK_CUR:相对于文件当前位置 SEEK_END:相对于文件末尾 |
ftell |
获取当前的文件位置 |
要检测的文件流 |
成功:当前的文件位置, 出错:-1 |
3.文件IO函数接口
文件 IO | ||||
函数 |
参数 |
返回值 |
备注 | |
open |
打开文件 |
pathname:文件路径名 flags:打开文件的方式 |
成功:文件描述符 失败:-1 |
当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限 |
read |
从一个已打开的可读文件中读取数据 |
fd 文件描述符 buf 存放位置 count 期望的个数 |
成功:实际读到的个数(小于期望值说明实际没这么多) 返回0:表示读到文件结尾 返回-1:表示出错,并设置errno号 | |
write |
向指定文件描述符中写入数据。 |
fd 文件描述符 buf 要写的内容 count 期望写入字节数 |
成功:实际写入数据的个数 失败 : -1 | |
lseek |
设定文件的偏移位置 |
fd:文件描述符 offset: 偏移量 whence: 相对位置 |
成功:文件的当前位置 失败:-1 |
正数:向文件结尾位置移动 负数:向文件开始位置 SEEK_SET 开始位置 SEEK_CUR 当前位置 SEEK_END 结尾位置 |
4.文件io跟标准io打开方式对应关系
标准IO |
文件IO |
r |
O_RDONLY 只读 |
r+ |
O_RDWR 可读可写 |
w |
O_WRONLY|O_CREAT|O_TRUNC,0666 只写,不存在创建,存在清空 |
w+ |
O_RDWR|O_CREAT|O_TRUNC,0666 可读可写,不存在创建,存在清空 |
a |
O_WRONLY|O_CREAT|O_APPEND,0666 只写,不能存在创建,存在追加 |
a+ |
O_RDWR|O_CREAT|O_APPEND,0666 可读可写,不存在创建,存在追加 |
注意:有O_CREAT的时候需要加第三个参数代表权限
5.文件属性
文件属性 | ||
函数 |
参数 |
返回值 |
stat |
path:文件路径名 buf:保存文件属性信息的结构体 |
成功:0 失败:-1 |
struct stat{ ino_t st_ino;/* inode号 ls -il */ mode_t st_mode;/* 文件类型和权限 */ nlink_t st_nlink;/* 硬链接数 */ uid_t st_uid;/* 用户ID */ gid_t st_gid;/* 组ID */ off_t st_size;/* 大小 */ time_t st_atime;/* 最后访问时间 */ time_t st_mtime;/* 最后修改时间 */ time_t st_ctime;/* 最后状态改变时间 */ }; |