feat request: 实现`SYS_GETXATTR`/`SYS_FGETXATTR`/`SYS_LGETXATTR`系统调用
您的功能请求是否与问题/故障有关?请描述一下。
sed -i命令需要SYS_FGETXATTR。
描述您想要的解决方案 实现这上面的三个系统调用,并且添加测试用例,因为他们是一组的,底层逻辑是一样的。
Doing!
@claude 这些功能在master分支是不是已经实现了?
Claude finished @fslongjin's task in 6m 35s —— View job
分析完成
@fslongjin 根据对DragonOS代码库的全面检查,SYS_GETXATTR、SYS_FGETXATTR和SYS_LGETXATTR系统调用在master分支已经完整实现。
实现证据
1. 系统调用定义
- x86_64架构 (
kernel/src/arch/x86_64/syscall/nr.rs:200-202):SYS_GETXATTR: 191SYS_LGETXATTR: 192SYS_FGETXATTR: 193
- RISC-V64/LoongArch64架构也有相应定义(系统调用号不同)
2. 完整实现文件
所有三个系统调用都有独立实现:
kernel/src/filesystem/vfs/syscall/sys_getxattr.rs-SYS_GETXATTR处理程序kernel/src/filesystem/vfs/syscall/sys_fgetxattr.rs-SYS_FGETXATTR处理程序kernel/src/filesystem/vfs/syscall/sys_lgetxattr.rs-SYS_LGETXATTR处理程序
3. 核心工具函数
kernel/src/filesystem/vfs/syscall/xattr_utils.rs 提供通用实现:
path_getxattr(): 路径方式获取扩展属性(用于getxattr和lgetxattr)fd_getxattr(): 文件描述符方式获取扩展属性(用于fgetxattr)do_getxattr(): 底层实际执行函数
4. 文件系统支持
- ext4文件系统 (
kernel/src/filesystem/ext4/inode.rs) 已实现getxattr()和setxattr()方法 - 通过
another_ext4库调用底层ext4文件系统的xattr功能 - 支持缓冲区大小探测(size=0时返回所需长度)
5. 完整测试套件
user/apps/c_unitest/test_set_get_xattr.c 包含完整的xattr测试:
- 路径型setxattr/getxattr测试
- 符号链接lsetxattr/lgetxattr测试(不跟随链接)
- 文件描述符fsetxattr/fgetxattr测试
- 错误分支测试:
XATTR_CREATE/XATTR_REPLACE标志、读取不存在属性返回ENODATA
6. 系统集成
这些模块已在kernel/src/filesystem/vfs/syscall/mod.rs:115-121中导入,完全集成到系统调用表中。
功能特性
- 符号链接处理:
lgetxattr不跟随符号链接(lookup_flags=0),而getxattr会跟随符号链接 - 错误处理: 支持标准错误码:
ENODATA、EEXIST、ERANGE、ENOSYS等 - 标志支持: 支持
XATTR_CREATE(0x1) 和XATTR_REPLACE(0x2) 标志 - 架构兼容: 支持x86_64、RISC-V64、LoongArch64架构(系统调用号不同)
结论
issue #1242中请求的三个系统调用(SYS_GETXATTR/SYS_FGETXATTR/SYS_LGETXATTR)已经完整实现并集成到DragonOS中,支持ext4文件系统的扩展属性操作。因此,sed -i命令所需的SYS_FGETXATTR功能已可用。
建议: 由于功能已实现,本issue可以关闭。