gpt4 book ai didi

c - 调用 stat 后权限覆盖

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:16 24 4
gpt4 key购买 nike

您好,我正在用 FUSE 编写“net raid fs”。

所以当系统调用 getattr 被调用时,我将它发送到服务器,服务器正在调用 stat(path, stbuf) 系统调用并设置 stbuf 它应该做的。之后,我将此 stbuf 返回给客户端(使用套接字连接),客户端处理它,一切正常。

但这就是问题所在:我希望 stbuf->st_mode(又名权限)始终为 0777,所以我正在执行 stbuf->st_mode = 0777;然后将这个 struct 发送给客户端(就像我上面做的那样)。并且程序有点卡住(服务器 [或客户端] 停止正确接收系统调用)。

要做什么?

最佳答案

st_mode 成员不仅包括权限,还包括文件类型(目录、fifo、设备特殊文件等)。如果您只是将 0777 分配给它,您将删除类型信息。您应该只覆盖权限位。

stbuf->mode |= 0777;

来自文档:

 The status information word st_mode has the following bits:

#define S_IFMT 0170000 /* type of file */
#define S_IFIFO 0010000 /* named pipe (fifo) */
#define S_IFCHR 0020000 /* character special */
#define S_IFDIR 0040000 /* directory */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0100000 /* regular */
#define S_IFLNK 0120000 /* symbolic link */
#define S_IFSOCK 0140000 /* socket */
#define S_IFWHT 0160000 /* whiteout */
#define S_ISUID 0004000 /* set user id on execution */
#define S_ISGID 0002000 /* set group id on execution */
#define S_ISVTX 0001000 /* save swapped text even after use */
#define S_IRUSR 0000400 /* read permission, owner */
#define S_IWUSR 0000200 /* write permission, owner */
#define S_IXUSR 0000100 /* execute/search permission, owner */

关于c - 调用 stat 后权限覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com