使用 execvp 将 md5sum 重定向到文件?

Redirect md5sum to a file using execvp?

我需要在 C 项目中使用 md5sum 获取文件的校验和。

我无法使用 openssl 库,因为它没有安装,我也无法安装它,因为它是我正在使用的大学服务器。

我还有一些要求,我不能使用system(),这很简单,只需:system("md5sum fileName > testFile");

他们也不允许我使用 popen();

我正在尝试使用 execvp 让它工作,但它实际上并没有工作,我不知道我是否真的可以工作。

我实际使用的测试文件是这样的:

  int main(){

      char *const args[] = {"md5sum","file"," > ","test", NULL};                                                                                                                                             

      execvp(args[0],args);  

      return 0;
  }

当我打开文件时 "test" 那里没有任何内容,

关于如何操作或为什么不起作用的任何线索?

提前致谢。

> 由 shell 处理,它不是您 运行 和 execvp.

的程序参数

在调用 execvp 之前重定向进程的 stdout

int main(){
    char *const args[] = {"md5sum", "file", NULL};  

    int fd = open("test", O_WRONLY, 0777);
    dup2(fd, STDOUT_FILENO);
    close(fd);
    execvp(args[0], args);

    return 0;
}

您正在将 > 作为参数传递给命令。通常编写 command > file 是有效的,因为您正在使用的 shell 将 > 解析为重定向符号并将程序的标准输出重定向到文件( > 永远不会传递给命令本身)。

你想做的是

int main()
{
    const char* args[]={"md5sum","file",0};
    int fd=open("test",O_CREAT|O_WRONLY,S_IRWXU);
    pid_t pid=fork();

    if(!pid)
    {
         dup2(fd,STDOUT_FILENO);
         close(fd);
         execvp(agrs[0],args);
    }
 // ...

 }