我已经搜索了很多,但我仍然没有找到答案。我有一个程序可以通过询问用户所需的命令来创建其他进程,然后我使用 execlp 打开这个新进程。我想知道是否有一种简单的方法可以让父进程查明命令是否已执行,或者接收到的命令是否不存在。
我有以下代码:
if (executarComando(comando) != OK)
fprintf(stderr,"Nao foi possivel executar esse comando. ");
executarComando 在哪里:
int executarComando(char* cmd) {
if ( execlp("xterm", "xterm", "-hold", "-e", cmd, NULL) == ERROR) // error
return ERROR;
return OK;
}
最佳答案
你的问题是你的execlp
总是成功;它正在运行 xterm
,而不是您传递给 shell xterm
的命令运行。您将需要在您的程序和此 shell 之间添加某种通信 channel ,以便您可以返回成功或失败的信息。我会做一些事情,比如用
( command ) 99>&- ; echo $? >&99
然后,在fork之前打开一个pipe调用execlp
,在child中使用dup2
创建pipe写端对应的99号文件描述符.现在,您可以通过管道读回命令的退出状态。
只希望 xterm
不会关闭您的所有文件描述符;否则你就不走运了,你必须在文件系统的某处创建一个临时的 fifo(通过 mkfifo
)来获得相同的结果。
请注意,数字 99 是任意的; 0、1 或 2 以外的任何值都应该有效。
关于c - 如何知道给 execlp() 的命令是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166409/