我需要在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”时,那里没有任何内容,
关于如何做到这一点的任何线索,或为什么它不起作用?
提前致谢。
答案 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);
}
// ...
}