C在execvp中传递一个参数和两个参数

时间:2015-11-22 23:38:41

标签: c string char execvp

我正在为我的学校项目工作一个简单的shell我正在尝试传递两个输入参数用于命令(例如:ls / home / -l),因为我只能传递1个atm 。意思是" / home /"没有被执行。我试过这个解决它,但它没有,我不知道该怎么做。

编辑:抱歉 这一行只是为了可视化这些变量:pid = fork(),char * = arg [30],char = input。

if(pid != 0) {
        waitpid(-1, &stat, 0) ;
    }
    else {
        if(arg[2]!=0) {
            char* doubleArgument = (char *) malloc(1 + strlen(arg[1])+ strlen(arg[2]) ) + 1;
            strcpy(doubleArgument, arg[1]) ;
            strcpy(doubleArgument, " ") ;
            strcpy(doubleArgument, arg[2]) ;
            execvp(input, doubleArgument) ;
        }
        else {
            execvp(input, arg) ;
            printf("Error detected at: %s\n", strerror(errno)) ;
            exit(-1) ;
        }

我该怎么办?对于任何建议 - 谢谢你:)

1 个答案:

答案 0 :(得分:1)

execvp(3): execute file - Linux man page

  

execv(),execvp()和execvpe()函数提供了一个指向以null结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应指向与正在执行的文件关联的文件名。指针数组必须由NULL指针终止。

未经测试,试试这个:

char* arg[30] ;
char *input ;

/* set arg and input properly */

pid = fork() ;
if(pid != 0) {
    waitpid(-1, &stat, 0) ;
}
else {
    if(arg[2]!=0) {
        char** doubleArgument = malloc(sizeof(char*) * 4) ;
        doubleArgument[0] = input ; /* the file name to execute */
        doubleArgument[1] = arg[1] ;
        doubleArgument[2] = arg[2] ;
        doubleArgument[3] = NULL ;
        execvp(input, doubleArgument) ;
    }
    else {
        execvp(input, arg) ;
        printf("Error detected at: %s\n", strerror(errno)) ;
        exit(-1) ;
    }
}

他们说你不应该在C.中投出malloc()的结果 c - Do I cast the result of malloc? - Stack Overflow