c++ - 如何获取md5sum命令并获取代码中的字符串输出

标签 c++ linux unix

我正在用 C++ 编写代码,我希望获得某个字符串的 md5 校验和。 我知道我可以运行 system("echo "myStirng"| md5sum > some_file.txt") 然后读取该文件。 我正在为嵌入式系统编写代码,由于性能问题,我不想使用文件操作。另外,我无法在代码中使用任何 openSSL 函数。 我进行了搜索,找到的所有答案要么包含一些文件操作,要么使用了 openSSL 函数。 有没有一种方法可以在不使用文件操作且不使用openSSL的情况下获取md5校验和?也许将 linux 命令 md5sum 作为与 C 函数 system 一样的代码不同的进程运行,但返回校验和十六进制字符串而不是返回代码。

谢谢你。

最佳答案

这是我不久前写的概念证明。与 @slugonmission 评论中的链接中的第二个答案非常相似,但我认为更好一点(使用 fread)。实际上最后我更喜欢使用库的方法,因为速度更快一点。因此,我建议您是否可以接受对 openssl 的依赖,并且性能对于选择该库很重要。

FILE* pipe = popen("md5sum /home/bla.txt", "r");                                                                                       
if (pipe != NULL)                                                                                                                                                    
{                                                                                                                                                     
  static const unsigned md5size = 32;                                                                                                                 
  unsigned char md5res[md5size + 1];                                                                                                                  
  int readSize = fread((void*) md5res, sizeof(char), md5size, pipe);                                                                                  
  if (readSize != md5size)                                                                                                                            
  {                                                                                                                                                    
      std::cout << "Error reading md5" << std::endl;                                                                                                     
      return 1;                                                                                                                                          
  }                                                                                                                                                    
  pclose(pipe);                                                                                                                        
  md5res[md5size] = 0;    
 }                                                                                                                            

关于c++ - 如何获取md5sum命令并获取代码中的字符串输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398851/

相关文章:

c++ - 如何关闭程序中用于打印调试数据的功能

unix - 迎接2038年我们应该做什么准备?

macos - 如何将剪贴板上的文本行作为 bash 命令执行

linux - 如何使这个 sed 脚本更快?

按字符串名称的 C++ 通用对象工厂

C++ char* x = fgets() 不工作

linux - 仅当并行后台脚本成功完成时才运行 shell 脚本

javascript - 如何在 Ubuntu 上安装 JSLint?

c++ - 不命名类型错误 C++

linux - fork 的 ptraced 进程挂起