一切皆文件。每一个文件或者目录都有一个inode节点,通过stat结构体来管理。
stat函数
Unix提供了一组获取文件元数据的函数:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *path, struct stat *buf);
int fstat(iny fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
这些函数均返回文件的信息。path参数指明文件信息。fstat用文件描述符。lstat与stat类似,但是对于符号链接,lstat返回链接本身而非目标文件。
这些函数在结构stat中存储了获取的文件信息
#include <sys/stat.h>
struct stat
{
dev_t st_dev; // 文件位于什么设备节点上
ino_t st_ino; // inode号
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; //I/O文件的块大小
blkcnt_t st_blocks; //分配的块数
time_t st_atime; //上次访问的时间
time_t st_mtime; //上次修改的时间
time_t st_ctime; //状态最后改变的时间,文件元数据被修改的最后时间
};
错误返回-1设置错误码
权限
修改文件权限
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
改变文件权限的进程必须具有CAP_FOWNER的权利错误返回-1设置错误码
//ex
int ret;
ret = chmod("./map.png", S_IRUSR | S_IWUSR);
if(ret)
perror("chmod");
所有权
#include <sys/types.h>
#include <unistd.h>
int chown(const char *path, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gif_t group);
int fchown(int fd, uid_t owner, gid_t group);
设置路径指定文件的所有权。chown沿符号链接改变链接目标的所有权,而lchown只改变符号链接文件。
具有CAP_CHOWN能力的进程修改文件所有者和所有组。
失败返回-1设置错误码