从主要参数执行程序
Executing programs from main argument
我想制作一个从 main 参数执行程序的程序。
假设我有程序 progr1.c
和 progr2.c
运行 。现在我使用其他两个程序作为参数编译程序 progr3.c
。这应该是结果:
./progr3 progr1 progr2
Result of progr1
Result of 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()
没有像我希望的那样一起工作。我怎样才能改变程序来做我想做的事?
execv
用指定的命令替换当前进程。
而是使用 system
创建一个新进程。也不需要分叉:
int system(const char *command)
当你运行
execv (s[1],s); // That should have been s[i]
prog3
替换为 prog1
。因此,prog3
的逻辑丢失了。
如果你想保留prog3
的逻辑,你需要在子进程上使用fork
然后execv
。
如果您只对 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);
}
}
}
我想制作一个从 main 参数执行程序的程序。
假设我有程序 progr1.c
和 progr2.c
运行 。现在我使用其他两个程序作为参数编译程序 progr3.c
。这应该是结果:
./progr3 progr1 progr2
Result of progr1
Result of 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()
没有像我希望的那样一起工作。我怎样才能改变程序来做我想做的事?
execv
用指定的命令替换当前进程。
而是使用 system
创建一个新进程。也不需要分叉:
int system(const char *command)
当你运行
execv (s[1],s); // That should have been s[i]
prog3
替换为 prog1
。因此,prog3
的逻辑丢失了。
如果你想保留prog3
的逻辑,你需要在子进程上使用fork
然后execv
。
如果您只对 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);
}
}
}