Linux编程基础——文件同步、文件权限、文件属性

文件同步

在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率。但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提供了一个函数可以让缓冲区中的数据立即写入到磁盘。

void sync(void);
功能:把缓冲区中的数据同步到磁盘
注意:并不等到数据同步完成后才返回,而是把缓冲区的数据加入到写入队列。

int fsync(int fd);
功能:把指定文件的内容从缓冲区同步到磁盘
注意:会等到完全定稿磁盘才返回

int fdatasync(int fd);
功能:把指定文件的内容从缓冲区同步到磁盘,只同步文件的内容不同步属性。

文件权限

int stat(const char *path, struct stat *buf);
功能:根据文件的路径获取文件的属性
buf:存储文件属性的结构体指针,是个输出型参数。

int fstat(int fd, struct stat *buf);
功能:根据文件描述符获取文件的属性

int lstat(const char *path, struct stat *buf);
功能:获取软链接文件的文件属性。

结构体:

struct stat {
dev_t     st_dev;   // 设备ID
ino_t     st_ino;   // i节点号
mode_t    st_mode;  // 文件的类型和权限
nlink_t   st_nlink; // 硬链接数
uid_t     st_uid;   // 用户ID
gid_t     st_gid;   // 组ID
dev_t     st_rdev;  // 特殊设备ID号
off_t     st_size;  // 总字节数
blksize_t st_blksize; // IO块字节数
blkcnt_t  st_blocks;  // 占用512字节块数
time_t    st_atime;   // 最后访问时间
time_t    st_mtime;   // 最后内容修改时间
time_t    st_ctime;   // 最后状态修改时间

st_mode  
    S_ISREG(m)  普通文件
    S_ISDIR(m)  目录文件
    S_ISCHR(m)  字符设备文件
    S_ISBLK(m)  块设备文件
    S_ISFIFO(m) 管道文件
    S_ISLNK(m)  软链接文件
    S_ISSOCK(m) socket文件

S_IFMT     0170000   获取文件类型的掩码
S_IFSOCK   0140000   socket文件
S_IFLNK    0120000   软链接文件
S_IFREG    0100000   普通文件
S_IFBLK    0060000   块设备文件
S_IFDIR    0040000   目录文件
S_IFCHR    0020000   字符设备文件
S_IFIFO    0010000   管道文件
S_ISUID    0004000   设置用户ID
S_ISGID    0002000   设置组ID
S_ISVTX    0001000   sticky bit (see below)
S_IRWXU    00700     用户权限掩码
S_IRUSR    00400     
S_IWUSR    00200     
S_IXUSR    00100     
S_IRWXG    00070     组权限掩码
S_IRGRP    00040     
S_IWGRP    00020     
S_IXGRP    00010     
S_IRWXO    00007     其他用户权限掩码
S_IROTH    00004     
S_IWOTH    00002     
S_IXOTH    00001  

文件的权限

int access(const char *pathname, int mode);
功能:测试当前用户对文件的权限
pathname:文件的路径
mode:想测试的权限
返回值:存在返回0,不存在返回-1。
    F_OK 文件是否存在
    W_OK 写权限
    R_OK 读权限
    X_OK 执行权限

int chmod(const char *path, mode_t mode);
功能:根据文件的路径修改文件权限
path:文件的路径
mode:由三个8进行组成的权限码 
    0644 普通文件
    0755 可执行文件

int fchmod(int fd, mode_t mode);
功能:根据文件描述符修改文件的权限
fd:文件描述符

mode_t umask(mode_t mask);
功能:设置当前进程的权限屏蔽码
mask:想要设置的权限屏蔽码
返回值:旧的权限屏蔽码

注意:权限屏蔽码默认是当前终端的,该函数的设置只对当前进程有效,进行结束后就失效了。

权限屏蔽码:

如果我们不让新创建的文件具有某些权限,可以设置权限过滤,
记录在权限屏蔽码中。权限屏蔽码对于chmod命令和函数是无效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值