我正在计算文件的MD5,然后尝试将其写入文件的扩展属性中。在我调用setxattr syscall之前,我正在控制台中使用此代码打印它的值,并且可以正常工作:
void print_value(unsigned char * md){
int i;
for(i=0; i <MD5_DIGEST_LENGTH; i++) {
printf("%02x",md[i]);
}
printf("\n");
}
然后我要在扩展属性中编写它。这是我正在做的代码:
unsigned char md[MD5_DIGEST_LENGTH]; //I have stored MD5's value here.
//... some code to calculate md5's value
print_value(md); //it prints 7224c3e087d36ab8e99f21e670ea361a
setxattr(full_path, "user.hash", md, MD5_DIGEST_LENGTH, 0);
int length = 0;
unsigned char buf[MD5_DIGEST_LENGTH];
getxattr(full_path, "user.hash", buf, length);
print_value(buf) //it prints 00000000000000000000000000000000
但是当我尝试在getxattr之后打印它的值时,它打印所有零。在搜索时,我正确地传递了参数。我不知道为什么它会打印不同的结果,我在setxattr和getxattr之间没有做任何其他事情。