启动过程" executable1 | executable2 | ..."在C中,使用EXECV

时间:2016-11-22 10:17:40

标签: c++ c fork exec

我的老师告诉我制作一个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这样的流程。

0 个答案:

没有答案