我的老师告诉我制作一个C / C ++程序,该程序将在Linux操作系统上进行测试(因此该程序无需在Windows上运行)。该程序应从argv
获取一些字符串(s1,s2 ... sk)并启动进程:s1 | s2 | ... | sk
(s1,s2 ... sk是可执行文件)。
我尝试按如下方式创建此程序,该程序在每个可执行文件名之后将argv
的数据与|
进行汇总,然后使用system
函数启动该过程:
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int i = 0, lenght = 0;
for(i=1; i<argc; i++) {
lenght += strlen(argv[i]);
}
lenght += 3*(argc-2);
char final_comm[lenght];
strcpy(final_comm, "");
for(i=1; i<argc; i++) {
strcat(final_comm, argv[i]);
if(i != argc-1)
strcat(final_comm, " | ");
}
printf("%s", final_comm);
system(final_comm);
return 0;
}
但老师说我应该使用execv
功能代替system
,但我不知道如何使用s1 | s2 | ... | sn
启动execv
。我尝试使用execv
,但我现在只知道如何启动一个进程,只有一个可执行文件:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, char *argv[]) {
char *args[1];
args[0] = NULL;
switch(fork()) {
case -1:
perror("fork()");
break;
case 0:
execv("executable", args);
break;
}
return 0;
}
但我真的不知道,我也没有找到如何启动像exec1 | exec2 | exec3
这样的流程。