一. 标准IO和文件IO的区别:
1.标准IO是库函数,是对系统调用的封装
2.文件IO是系统调用,是Linux内核中的函数接口
3.标准IO是有缓存的
4.文件IO是没有缓存的
IO:
b
c
d
- 标准IO
l
s
p
二. 文件IO:
1.操作步骤:
打开 -> 读/写 -> 关闭
2.打开文件:
open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
打开文件并且获得文件描述符
参数:
pathname:要打开的文件名
flags:标志位
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_APPEND 追加
O_ASYNC 异步IO
O_CREAT 文件不存在创建
O_TRUNC 文件存在截断(清0)
返回值:
成功返回文件描述符(很小的非负整数)
失败返回-1
注意:
1.新生成的文件描述符总是为尚未被使用的最小的非负整数
0: stdin
1: stdout
2: stderr0,1,2在程序运行一开始就被这三个流占用,新生成的文件描述符最小为3,除非手动关闭这三个流。
2.出现 O_CREAT 就要加 0664
O_CREAT 标志着:文件不存在将被创建。创建文件就要明确其权限,权限我们来给(不手动给权限,文件权限将是随机的)(想要文件是什么权限,就给什么,不一定非得是0664)
0664 代表文件权限为 rw-rw-r-- ,0664是三组 rwx 通过按位与1得来的
rwx rwx rwx
111 111 111
7 7 7
rwx rwx rwx
110 110 100
6 6 4
3.关闭文件:
close
int close(int fd);
功能:
将fd对应的文件描述符关闭
4.读写:
read/write
1.write
ssize_t write(int fd, const void *buf, size_t count);//注意在接这个函数返回值时变量要定义成 ssize_t 类型
功能:
向fd对应的文件中写入buf指向的count个字节
参数:
fd:文件描述符
buf:写入数据空间首地址
count:写入的字节数
返回值:
成功返回实际写入字节数
失败返回-1
2.read
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中
参数:
fd:文件描述符
buf:存放数据空间的首地址
count:想要读取数据字节数
返回值:
成功返回实际读到的字节数
失败返回-1
读到文件末尾返回0
注意:
对于字符串文件用strlen( ),对于二进制文件用sizeof( )