如何添加类似于命令行功能的扩展属性setfattr -n user.custom_attrib -v 99 ex1.txt,但是如何在内核中通过自定义系统调用来实现。我看了一下linux/xattrib.h,尝试从内核空间进行任何设置都没有运气。每当我使用vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);它时,它都会重新引导整个VM。最后,我尝试将新的整数类型作为扩展属性添加到文件,并且我还将需要检索该扩展属性。我需要使用内核空间中允许的功能。
setfattr -n user.custom_attrib -v 99 ex1.txt
linux/xattrib.h
vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);
我能得到工作的扩展属性:vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); 主要的问题是const void *需要一个char *传递。该代码看起来像这样:
const void *
char *
char * buf = "test\0"; int size = 5; //number of bytes needed for attribute int flag = 0; //0 allows for replacement or creation of attribute int err; //gets error code negative error and positive success err = vfs_setxattr(path_struct.dentry, "user.custom_attrib", buf, size, flag);
我也能够开始vfs_getxattr(struct dentry *, const char *, const void *, size_t);工作。缓冲区,void *又是我卡住的地方。我必须分配一个缓冲区来保存正在传递的扩展属性。所以我的代码看起来像这样:
vfs_getxattr(struct dentry *, const char *, const void *, size_t);
void *
char buf[1024]; int size_buf = 1024; int err; err = vfs_getxattr(path_struct.dentry, "user.custom_attrib",buf, size_buf);
因此,buf将保留来自dentry的指定文件中的值。错误代码对于找出正在发生的事情非常有帮助。使用命令行工具也是如此。
要安装命令行工具:
sudo apt-get install attr
要从命令行手动设置属性:
setfattr -n user.custom_attrib -v "test_if working" test.txt
要从命令行手动获取属性:
getfattr -n user.custom_attrib test.txt
我无法弄清楚您是否可以将诸如int的不同类型传递给扩展的atrributes,而我的尝试使我不胜枚举内核构建的次数。希望这对某些人有所帮助,或者如果有人有任何更正,请告诉我。