C,MD5中的Getxattr和setxattr系统调用

时间:2018-08-05 20:45:29

标签: c md5

我正在计算文件的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之间没有做任何其他事情。

0 个答案:

没有答案