UNIX常用的文件操作函数

函数 sync、fsync 和 fdatasync

传统的 UNIX 系统实现在内核中设有缓冲区高速缓存或页高速缓存,大多数磁盘 I/O 都通过缓冲区进行。当我们想文件写入数据时,内核通常先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为延迟写。

#include <unixtd.h>
int fsync(int fd);
int fdatasync(int fd);
//返回值:若成功,返回0,若出错,返回-1

void sync(void);

sync 只是将所有修改过的块缓冲区排入写队列,然会就返回,它并不等待实际写操作结束。通常,称为 updata 的系统守护进程周期性地调用(一般每隔 30 秒)sync函数。这就保证了定期冲洗(flush)内核的块缓冲区。命令 sync(1) 页调用 sync 函数。

fsync 函数只对由文件描述符 fd 指定的一个文件起作用,并且等待写磁盘操作结束才返回。

fdayasync 函数类似于 fsync,但它只影响文件的数据部分。而出数据外,fsync 还会同步更新文件的属性。

函数 stat、fstat、fstatat 和 lstat

#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);
int fstatat(int fd, const char *restrict pathname, struct stat *restrict buf, int flag);

这四个函数的返回值:若成功:返回0;若出错,返回-1.

一旦给出 pathname,stat 函数将返回与此命名文件有关的信息结构。

fstat 函数获得已在描述符 fd 上打开文件的有关信息。

lstat 函数类似于 stat,但是当命名的文件是一个符号链接时,lstat 返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息。

fstatat 函数为一个相对于当前打开目录(由 fd 参数指向)的路径名返回文件统计信息,flag 参数控制着是否跟随这一个符号链接。当 AT_SYMLINK_NOFOLLOW 标志被设置时,fstatat 不会跟随符号链接,而是返回符号链接本身的信息。否则,再默认情况下,返回的是符号链接所指向的实际文件的信息。

buf 是一个指针,它指向一个我们必须提供的结构。函数来填充由 buf 指向的结构。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值