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;/* 最后状态改变时间 */ }; |