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

时间:2015-12-11 20:59:04

标签: c file md5sum

我需要在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”时,那里没有任何内容,

关于如何做到这一点的任何线索,或为什么它不起作用?

提前致谢。

2 个答案:

答案 0 :(得分:1)

>由shell处理,它不是您使用execvp运行的程序的参数。

在致电stdout之前,重定向您的流程execvp

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;
}

答案 1 :(得分:1)

您正在将>作为参数传递给命令。通常编写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);
    }
 // ...

 }