我想创建一个从main参数执行程序的程序。
假设我运行了progr1.c
和progr2.c
程序。现在我使用其他两个程序作为参数编译程序progr3.c
。这应该是结果:
./ progr3 progr1 progr2
progr1的结果
progr2的结果
这是我到目前为止所做的:
void main (int args , char **s) {
int i , x , status;
if (args >= 2) {
x = fork ();
for ( i = 1 ; i < args ; i++) {
if (x == 0) {
execv (s[1],s);
}
else
{
wait (&status);
_exit(i);
}
x= fork();
}
}
_exit(0);
}
此代码仅执行第一个参数程序的输出。所以我猜fork()
和execv()
并没有像我希望的那样一起工作。我怎样才能改变程序以做我想做的事?
答案 0 :(得分:0)
execv
使用指定的命令替换当前进程。
相反,请使用system
创建新流程。无需分叉:
int system(const char *command)
答案 1 :(得分:0)
运行时
execv (s[1],s); // That should have been s[i]
prog3
已被prog1
取代。因此,prog3
的逻辑丢失了。
如果您想保留fork
的逻辑,则需要在子流程上使用execv
然后prog3
。
如果您只对prog1
和prog2
的输出感兴趣,可以使用system(s[i])
<强>更新强>
使用fork
的工作示例。
#include <unistd.h>
int main()
{
char* programs[] = {"/usr/bin/ls", "/usr/bin/date"};
char* args[] = {NULL, NULL};
for (int i = 0; i < 2; ++i )
{
int pid = fork();
if ( pid )
{
// Child
args[0] = programs[i];
execv(programs[i], args);
}
}
}