读取/写入文件
读取文件到缓冲区
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从文件读取数据
参数:fd 文件描述符
buf 内存缓冲区,读取到的数据
count 期望读取字节数
返回值:实际读取字节数,失败返回-1写入到文件
#include <unistd.h>
ssize_t write(int fd, void const* buf, size_t count);
功能:从文件写入数据
参数:fd 文件描述符
buf 内存缓冲区,要写入的数据
count 期望写入字节数
返回值:实际写入字节数,失败返回-1文件读写位置
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
功能:调整文件读写位置
参数:
fd;文件描述符
offset:文件读写位置偏移字节数
whence:offset参数的偏移起点,以下参数
SEEK_SET 文件头开始
SEEK_CUR 当前位置
SEEK_END 文件尾
返回值:成功返回调整后的文件读写位置,失败-1lseek函数仅修改保存在文件表项中的文件读写位置,不引发i/o动作
超出文件尾位置写入数据时,形成文件空洞,位于文件中但未被写过的字节被设为0,空洞不占用磁盘空间,但被计算文件大小
复制文件描述符
#include <unistd.h>
int dup(int oldfd);
功能:复制文件描述符表的到最小可用项
参数:oldfd:源文件描述符
返回值:成功返回目标文件描述符,失败返回-1
int dup2(int oldfd,int newfd);
功能:复制文件描述符表到指定项。目标文件打开时,被关闭后复制
参数:oldfd: 源文件描述符
newfd: 目标文件描述符
返回值:成功返回目标文件描述符,失败返回-1访问测试
#include <unistd.h>
int access(char const* pathname, int mode);
功能:判断当前进程中某个文件的权限
参数:pathname 文件路径
mode 被测试权限
R_OK 是否可读
W_OK 是否可写
X_OK 是否可执行
F_OK 是否存在
返回值:成功返回0,失败返回-1修改文件大小
#include <unistd.h>
int truncate(char const* path, off_t length);
int ftruncate(int fd, off_t length);
功能:修改文件大小
参数:path 文件路径
length 文件大小
fd 文件描述符
返回值:成功0,失败-1文件锁
#include <fcntl.h>
int fcntl(int fd, F_SETLK/F_SETLKW, struct flock* lock);
功能:加解锁
参数:F_SETLK 非阻塞模式加锁,F_SETLKW阻塞模式加锁
lock 对文件要加的锁
返回值:成功返回0,失败-1
struct flock{
short l_type; 锁类型:F_RDLCK/F_WRLCK/F_UNLCK
short l_whence; 锁区偏移起点:SEEK_SET/SEEK_CUR/SEEK_END
off_t l_start; 锁区偏移字节数
off_t l_len; 锁区字节数
pid_t l_pid; 加锁进程的PID,-1表示自动设置
};