微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在fusexmp中将12位换成d_type?

在fusexmp.c中http://www.gtoal.com/fusestuff/fuse-2.7.0/example/fusexmp.c.html

有一条线“12”

st.st_mode = de->d_type << 12;

请指导我为什么左移12位

d_type文件的types,即:DT_UNKNowN我没有在/usr/include/bits/dirent.hfind定义的位

如何使用保险丝在远程机器上安装目录?

如何在Linux中debuggingFUSE文件系统崩溃

保险丝 – 详细的文件

如果使用保险丝安装到非空安装点会发生什么情况?

使用SSHFS挂载远程文件系统

谢谢

任何人都可以指向我的一些Linux文件系统unit testing库吗?

如何使用FUSE创build用户空间文件系统而不使用libfuse?

callback文件系统:eldos.cbfs.ECBFSError:访问被拒绝

Python Fuse连续6次调用“readlink”

如何使用mount(8)和fstab注册FUSE文件系统types?

位移由dir-entry d_type位字段转换为所使用的值int struct stat.st_mode :

# define IFTODT(mode) (((mode) & 0170000) >> 12) # define DTTOIF(dirtype) ((dirtype) << 12)

该文档只能在man stat找到,因为该值正在分配给stat结构体的st_mode :

The following flags are defined for the st_mode field: S_IFMT 0170000 bit mask for the file type bit fields S_IFSOCK 0140000 socket S_IFLNK 0120000 symbolic link S_IFREG 0100000 regular file S_IFBLK 0060000 block device S_IFDIR 0040000 directory S_IFCHR 0020000 character device S_IFIFO 0010000 FIFO S_ISUID 0004000 set UID bit S_IsgiD 0002000 set-group-ID bit (see below) S_ISVTX 0001000 sticky bit (see below) S_IRWXU 00700 mask for file owner permissions S_IRUSR 00400 owner has read permission S_IWUSR 00200 owner has write permission S_IXUSR 00100 owner has execute permission S_IRWXG 00070 mask for group permissions S_IRGRP 00040 group has read permission S_IWGRP 00020 group has write permission S_IXGRP 00010 group has execute permission S_IRWXO 00007 mask for permissions for others (not in group) S_IROTH 00004 others have read permission S_IWOTH 00002 others have write permission S_IXOTH 00001 others have execute permission

显然,当左移12位时(对于info, 1<<12 == 0x1000 ), de->d_type相当于de->d_type的高位。 man readdir救援:

现在完整的转换和位掩码在sys / dirent.h中:

/* File types for `d_type'. */ enum { DT_UNKNowN = 0,// The file type is unkNown DT_FIFO = 1,// This is a named pipe (FIFO). DT_CHR = 2,// This is a character device. DT_DIR = 4,// This is directory. DT_BLK = 6,// This is a block device. DT_REG = 8,// This is a regular file. DT_LNK = 10,// This is a symbolic link. DT_SOCK = 12,// This is a Unix domain socket. DT_WHT = 14 // DT_CHR | DT_DIR | DT_REG }; /* Convert between stat structure types and directory types. */ # define IFTODT(mode) (((mode) & 0170000) >> 12) # define DTTOIF(dirtype) ((dirtype) << 12) #endif

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐