我正在尝试实现一个FUSE文件系统,包括设置/获取扩展文件属性的功能。在这种情况下,我感兴趣的属性是创建一个布尔条件来将文件标记为加密的属性。假设我有一个名为test.txt的文件。在终端窗口,我可以轻松地执行以下操作:
setfattr -n user.encrypted -v 1 test.txt
getfattr -n user.encrypted test.txt
并获得输出:
#file:test.txt
user.encrypted = “1”
因此,我知道我的系统已正确设置为使用扩展属性。
但我仍然坚持设置并以编程方式从FUSE中获取这些属性。例如,我有以下功能:
/* File open operation */
int bb_open(const char *path, struct fuse_file_info *fi)
{
int retstat = 0;
int fd;
int isEncrypted;
char user[] = "user";
char encAttr[] = "encrypted";
fd = open(path, fi->flags);
if (fd < 0)
retstat = bb_error("bb_open open");
log_msg("\nAbout to get encryption attribute\n");
/* get the encryption attribute */
isEncrypted = fgetxattr(fd, user, encAttr, 1);
log_msg("\nisEncrypted: %d\n", isEncrypted);
return retstat;
}
当我运行它时,即使从命令行设置此属性后,fgetxattr也总是失败(即它返回值-1)。我的日志文件中的输出是:
isEncrypted = -1
显然我正在调用此函数,但我不知道如何纠正这个问题。有人可以帮忙吗?感谢。