随笔小屋 Logo
首页
瞬间
反馈
随笔小屋 Logo
首页 瞬间 反馈
  1. 首页
  2. linux
  3. 文件读写

文件读写

  • linux
  • 发布于 2025-09-22
  • 80 次阅读
flor
flor

读取/写入文件

读取文件到缓冲区

#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  文件尾
返回值:成功返回调整后的文件读写位置,失败-1

lseek函数仅修改保存在文件表项中的文件读写位置,不引发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表示自动设置
};

湘ICP备2025147565号-1
gongan beian 湘公网安备43102602000213号
CPU --% | 内存 0.00G/0.00G (0%) | 网络 无活动网卡
服务器资源占用 更新时间 --:--:--