系统函数

一.sync/fsync/fdatasync

1、硬盘上一般会有一些缓冲区以此来提高数据的写入效率,操作系统写入数据其实是写入缓冲区,直到缓冲区满,才排队写入硬盘中。
2、这种操作降低了写入的次数,但是提高了数据写入的延时,导致缓冲区中的数据与磁盘中的内容不同步。
void sync(void);
功能:把所有缓冲区中的数据全部同步到磁盘
注意:只是发送将数据同步到磁盘的命令,并不等待执行完成才返回,而是命令发布后立即返回
int fsync(int fd);
功能:指定fd文件的缓冲区数据同步到磁盘,只针对一个文件,数据同步到磁盘后才返回
int fdatasync(int fd);
功能:指定fd文件的缓冲区数据同步到磁盘,但仅是文件的数据并不同步文件属性

二.fcntl

int fcntl(int fd, int cmd, … /* arg */ );
fd:文件描述符
cmd:操作指令,不同的指令决定后续参数的个数和类型
F_DUPFD 功能:复制文件描述符,与fd操作同一个文件
F_GETFD 获取文件操作指令
O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC不能获取到
F_SETFD 设置文件操作指令
只能设置 O_APPEND, O_ASYNC,O_DIRECT, O_NOATIME,O_NONBLOCK

int fcntl(int fd,int cmd,struct* flock);
功能:为文件加锁,能锁整个文件,或锁一部分内容。
一旦进程结束,自动解锁
cmd:
F_GETLK 获取锁的信息
F_SETLK 设置文件锁
F_SETLKW 测试锁
注意:加锁并不能让其他进程打不开文件或不能操作,而是使用者都要遵守锁的约定,确保文件不混乱(劝诫锁)
锁的结构体:
struct flock {

short l_type; /* Type of lock: F_RDLCK,
F_WRLCK, F_UNLCK /
short l_whence; /
How to interpret l_start:
SEEK_SET, SEEK_CUR, SEEK_END /
off_t l_start; /
Starting offset for lock /
off_t l_len; /
Number of bytes to lock 锁的长度,为0表示锁到文件尾*/
pid_t l_pid; /* PID of process blocking our lock
(F_GETLK only) */

};

三.stat/fstat/lstat

int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
stat/fstat会跟踪链接目标,而lstat不跟踪链接目标,其中stat和lstat需要文件路径,而fstat需要文件描述符。

四.access

int access(const char *pathname, int mode);
功能:测试当前用户堆文件的访问权限,或者文件是否存在
pathname:文件路径
mode:
F_OK:是否存在
R_OK:是否有读权限
W_OK:是否有写权限
X_OK:是否执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值