md5sum of file in Linux C

前端 未结 5 1992
时光取名叫无心
时光取名叫无心 2020-12-08 15:01

I want to find md5sum of a file in Linux C, Is there any API where I can send file name to get md5sum of that file.

5条回答
  •  旧巷少年郎
    2020-12-08 15:18

    You can use popen to run md5sum and read the output:

    #include 
    #include 
    
    #define STR_VALUE(val) #val
    #define STR(name) STR_VALUE(name)
    
    #define PATH_LEN 256
    #define MD5_LEN 32
    
    int CalcFileMD5(char *file_name, char *md5_sum)
    {
        #define MD5SUM_CMD_FMT "md5sum %." STR(PATH_LEN) "s 2>/dev/null"
        char cmd[PATH_LEN + sizeof (MD5SUM_CMD_FMT)];
        sprintf(cmd, MD5SUM_CMD_FMT, file_name);
        #undef MD5SUM_CMD_FMT
    
        FILE *p = popen(cmd, "r");
        if (p == NULL) return 0;
    
        int i, ch;
        for (i = 0; i < MD5_LEN && isxdigit(ch = fgetc(p)); i++) {
            *md5_sum++ = ch;
        }
    
        *md5_sum = '\0';
        pclose(p);
        return i == MD5_LEN;
    }
    
    int main(int argc, char *argv[])
    {
        char md5[MD5_LEN + 1];
    
        if (!CalcFileMD5("~/testfile", md5)) {
            puts("Error occured!");
        } else {
            printf("Success! MD5 sum is: %s\n", md5);
        }
    }
    

提交回复
热议问题