学习系统调用的IO接口:
open write read lseek close;
1)int open(const char* pathname, int flags, int mode_t mode);
pathname:要打开的文件路径名
flags:选项参数
必选其一:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
可选项
O_CREAT 文件存在则打开,不存在则创建
O_TRUNC 将文件长度截断为0(清空原有内容)
O_APPEND 追加方式打开
W+就是:O_RDWR|O_CREAT_O_TRUNC
mode :权限 0664 (创建文件的时候给定权限)权限自己给定一个,再与上一个umask,得到最终的权限
(mode & ~umask)
Umask():设置文件的创建权限掩码,决定了文件的的默认权限,如果创建新文件,一定要给定权限。
返回值:文件描述符(正整数,系统调用接口的操作句柄) 失败-1
对于电视来说,遥控器就是句柄,对于文件来说,文件描述符就是句柄
2)ssize_t write(int fd,const void *buf,size_t count);
fd:open返回的文件描述符
buf:要写入文件的数据缓冲区首地址
count:要写入的数据长度
返回值:实际写入的数据长度,不一定会等于count(字节) 失败-1 返回0表示读到文件末尾
3)ssize_t read(int fd, void *buf,size_t count);
fd:open返回的文件描述符
buf:要读入的数据
count:要读入的数据长度
返回值:实际读入的数据长度(字节) 失败-1
4)off_t lseek(int fd,off_t offset, int whence);``
fd: open返回的文件描述符
offset:偏移量
whence:偏移起始位置
size_t无符号长整形
ssize_t 就是int
pid_t 也是int
mode_t umask():设置当前调用进程的文件创建权限掩码
man 2 read 查看接口
5)int close(int fd):关闭文件