繁体   English   中英

如何在 C 中运行多个 execlp()?

[英]How to run multiple execlp() in C?

我正在尝试使用 execlp() 以线性顺序运行多行 openssl:

execlp("openssl","genrsa","-out","rsaprivatekey.pem","2048",(char*) 0);
printf("RSA private success");
execlp("openssl","rsa","-in","rsaprivatekey.pem","-pubout","-out","rsapublickey.pem",(char*) 0);
printf("RSA public success");
execlp("openssl","dgst","-sha1","-sign","rsaprivatekey.pem","-out","1.cipher","1",(char*) 0);
printf("SHA1 sign success");
execlp("openssl","dgst","-sha1","-verify","rsapublickey.pem","-signature","1.cipher","1",(char*) 0);
printf("SHA1 verify success");

在这种情况下,只有第一行被执行。 我尝试将所有内容组合在一个 execlp() 中并使用 && 分隔命令,但仍然没有结果。 有人可以帮我解决这个问题吗?

原因是“execlp()”将您当前的程序替换为您希望“exec()”的程序。

建议:如果您希望当前程序持续存在(至少足够长以调用“openssl”的多个实例,那么请使用“system()”之类的东西而不是“execlp”。

否则,请考虑使用 shell 脚本或 .bat 文件来调用多个命令,然后“执行”您的脚本(使用适当的“bash”或“cmd.exe”)。

如前所述,只执行第一个命令的原因是exec()系列函数的任何成员在成功时都不会返回 - 只有在失败时才会返回。

如果您希望按顺序完成操作,那么使用system() (如前所述)是最简单的机制。 如果您想要并行性,或者如果您需要对 I/O 重定向进行更多控制,那么您需要建立在fork()机制上。

每次成功调用fork()时,它都会返回两次——一次在父进程中,一次在子进程中。 这些在其他方面非常接近相同; 主要区别在于 PID 和 PPID(进程 ID 和父 PID)。 在孩子中, fork()返回零; 因此,您可以检测到您的进程应该运行相关命令。 在父进程中, fork()返回新子进程的 PID,可以将其保存以供以后与wait()waitpid()一起使用,并指示父进程应继续其工作(例如,为其他步骤)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM