posix
(👆链接至另一博主,请放心跳转)可移植操作系统接口(Portable Operating System Interface of UNIX)
文件IO
概念
在 系统 中定义的一组用于 输入输出的函数。
特点
1、没有缓冲机制,每次调用都会引起系统调用
2、围绕 文件描述符 进行操作,非负整数 (>=0),依次分配
3、文件IO 默认打开了三个文件描述符,分别是 0(标准输入),1(标准输出),2(标准错误)
4、除了不能操作d,可以操作任意类型的文件(b、c、-、l、s、p)
函数
打开文件(open)
int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名
flags:打开文件的方式
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:创建
O_TRUNC:清空
O_APPEND:追加
返回值: 成功:文件描述符
失败:-1
/****************************************************************/
当第二个参数中有 O_CREAT 选项时,需要给 open 函数传递第三个参数,指定创建文件的权限
int open(const char *pathname, int flags, mode_t mode);
创建出来的文件权限 = 指定权限值mode & (~umask) //umask为文件权限掩码
e.g. 664 = 666 & (~002)
110 110 100 = 110 110 110 & 111 111 101
关闭文件(close)
int close(int fd);
功能:关闭文件
参数:fd:文件描述符
读写操作(read / write)
ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数:fd 文件描述符
buf 存放位置
count 期望的个数
返回值:成功:实际读到的个数
返回-1:表示出错,并设置errno号
返回0:表示读到文件结尾
ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd 文件描述符
buf 要写的内容
count 期望值
返回值:成功:实际写入数据的个数
失败 : -1
定位操作(lseek)
off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:fd:文件描述符
offset偏移量
正数:向文件结尾位置移动
负数:向文件开始位置
whence 相对位置
SEEK_SET 开始位置
SEEK_CUR 当前位置
SEEK_END 结尾位置
返回值:成功:文件的当前位置
失败:-1
练习:
向文件中第 10 位置处写一个字符,在文件此时的位置,后 20个位置处,写一行字符串"hello" 进去,求此时文件的长度。
实现 cp 功能
文件IO 与 标准IO 对比
Manual