linux内核使用stat函数报错,linux下fuse中stat函数st_mode 的小疑问

关于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位的宏,标识是目录还是普通文件,| 是或运算,

基础知识齐了就不难理解了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值