当前位置: 技术问答>linux和unix
linux下fuse中stat函数st_mode 的小疑问
来源: 互联网 发布时间:2016-09-21
本文导语: 关于st_mode 的疑问 static const char *hello_str = "Hello World!n"; static const char *hello_path = "/hello"; static int hello_getattr(const char *path, struct stat *stbuf) { int res = 0; memset(stbuf, 0, sizeof(struct stat)); if...
关于st_mode 的疑问
请大家指教,谢谢~~
static const char *hello_str = "Hello World!n";
static const char *hello_path = "/hello";
static int hello_getattr(const char *path, struct stat *stbuf)
{
int res = 0;
memset(stbuf, 0, sizeof(struct stat));
if (strcmp(path, "/") == 0) {
stbuf->st_mode = S_IFDIR | 0755; //*****S_IFDIR是指目录文件,那后面的 | 0755;是什么意思呢?
stbuf->st_nlink = 2;
} else if (strcmp(path, hello_path) == 0) {
stbuf->st_mode = S_IFREG | 0444; //这个也是 | 0444不知拿来干什么的?
stbuf->st_nlink = 1;
stbuf->st_size = strlen(hello_str);
} else
res = -ENOENT;
return res;
}
请大家指教,谢谢~~
|
把对应的模式位给提取出来
|
代码倒是不难懂,就是行为实在太怪异了
这个貌似是一种自己实现的文件系统,还是学生练习级别的
fuse是什么?lz给解释解释
一般人都是使用stat来填充struct stat,获取的是实际文件信息。
这里居然自己手动填充了,那就是说要自己从头构建这个文件系统了
首先看看struct stat
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
mode_t st_mode; //文件对应的模式,文件,目录等
mode_t 原型应该是一个int ,4byte,能够保存很多信息
0755 0444 都是8进制的文件权限掩码,Linux的3组3种权限,很基础的知识了,lz应该能理解了吧
标识文件权限只用了st_mode的低9位,还剩下23位,可以标识文件类型等信息
S_IFDIR 和 S_IFREG ,无非是1左移n位的宏,标识是目录还是普通文件,| 是或运算,
基础知识齐了就不难理解了
这个貌似是一种自己实现的文件系统,还是学生练习级别的
fuse是什么?lz给解释解释
一般人都是使用stat来填充struct stat,获取的是实际文件信息。
这里居然自己手动填充了,那就是说要自己从头构建这个文件系统了
首先看看struct stat
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
mode_t st_mode; //文件对应的模式,文件,目录等
mode_t 原型应该是一个int ,4byte,能够保存很多信息
0755 0444 都是8进制的文件权限掩码,Linux的3组3种权限,很基础的知识了,lz应该能理解了吧
标识文件权限只用了st_mode的低9位,还剩下23位,可以标识文件类型等信息
S_IFDIR 和 S_IFREG ,无非是1左移n位的宏,标识是目录还是普通文件,| 是或运算,
基础知识齐了就不难理解了