【发布时间】:2022-01-02 04:29:56
【问题描述】:
最近我有一个任务,我必须编写一个程序,从命令行获取两个不同的命令,用“+”分隔,例如:
ps -lu myUsername + ls -la
该程序的目标是使用fork() 和exec() 同时运行任意两个订单,每个订单有任意数量的参数。这是我对这个问题的解决方案:
注意:最初的问题是在具有 Solaris 5.10 和 c89 或 c99 标准 (gcc 3.4.3) 的机器上运行的
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <strings.h>
int main (int argc, char* argv[]) {
char delimiter = '+';
char* auxp; //auxiliar pointer
int i = 1;
int position;
while(i < argc){
if (strcmp("+", argv[i]) == 0) {
argv[i] = NULL;
position = i;
}
i++;
}
if (fork() == 0) {
execvp(argv[1], &argv[1]);
exit(1);
}
if (fork() == 0) {
execvp(argv[position+1], &argv[position+1]);
exit(1);
}
wait(NULL);
wait(NULL);
exit(0);
}
这对于分配来说已经足够了,但我想让它使用 N 个参数 而不是只有 2 个。我无法找到系统的方法来查找所有地址。任何帮助表示赞赏,感谢您的建议。
【问题讨论】:
-
而
i<argc。创建一个临时char **myargv。每当遇到+时,将每个命令复制到 myargv。分叉并执行。
标签: c fork exec command-line-arguments argv