所以我是C的新手,这是我遇到的一个问题,无法理解。首先,execlp()仅使用参数通过名称(通过搜索它)执行程序。这里我想用“-u”作为参数执行“who”,但它不会从execlp返回任何内容。为什么?这是正常的吗?
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
main()
{
int j = 0;
if(fork() == 0)
{
j++;
if(execlp("who", "who", "-u", (char*)0) == -1)
{
j++;
}
else
{
printf("\nStoinostta na j = %d", j);
return;
}
}
else
{
--j;
printf("\nStoinostta na j=%d", j);
}
printf("\nStoinostta na j ravno na %d", ++j);
}
答案 0 :(得分:6)
成功时,execlp
使用您指定的命令替换当前进程。它只会在失败时返回。该联机帮助页应该清楚说明。
答案 1 :(得分:3)
如@Charles Bailey所述,execlp()
取代了当前的流程。所以它在运行程序后永远不会返回。
如果您想运行某些内容,可以采用system()
的简单方法:http://linux.die.net/man/3/system
如果你想运行某些东西并控制输入和输出,可能从命令中收集输出,一个好方法是popen()
:http://linux.die.net/man/3/popen
答案 2 :(得分:2)
也许你想要system
功能。它将运行另一个程序然后返回。
调用exec
后,另一个选项是fork
。
fork() || execlp(...);