首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中运行多个execlp()?

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

Stack Overflow用户
提问于 2011-07-22 12:49:51
回答 2查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
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()中,并使用&&来分隔命令,但仍然没有结果。有人能帮我解决这个问题吗?

EN

Stack Overflow用户

发布于 2011-07-22 13:25:42

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

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

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

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6785775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档