c - 如何知道给 execlp() 的命令是否存在?

标签 c unix exec fork parent-child

我已经搜索了很多,但我仍然没有找到答案。我有一个程序可以通过询问用户所需的命令来创建其他进程,然后我使用 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/

相关文章:

php - 设置 PHP(或 I_USER [我不确定这里...])连接到 iisweb.vbs 的权限

c - C 中的数据结构

C: printf(带 fork())

c - do-while 循环中的 scanf() 会导致无限循环,即使测试输入也是如此

c - 如何为 `system()` 调用的命令提供参数?

linux - 设置变量时用括号括起来

linux - 在顶部保留一个进度条。 Linux

linux - 如何连接与模式匹配的行?

sql - 存储过程中 exec 内的临时表的作用域规则是什么?

java - 在 Android 中执行 shell 命令时避免 "su"toast?