C Передача одного аргумента и двух параметров в execvp

Я работаю над простой оболочкой для своего школьного проекта, и я пытаюсь передать два входных параметра, которые будут использоваться с командой (например: ls /home/ -l), поскольку я могу передать только 1 атм. Значение того, что идет после "/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 ответ

execvp(3): выполнить файл - справочная страница по Linux

Функции execv(), execvp() и execvpe() предоставляют массив указателей на строки с нулевым символом в конце, которые представляют список аргументов, доступных для новой программы. Первый аргумент, по соглашению, должен указывать на имя файла, связанное с исполняемым файлом. Массив указателей должен заканчиваться указателем 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) ;
    }
}

Они говорят, что вы не должны разыгрывать результат malloc() в С.
c - Я разыгрываю результат malloc? - Переполнение стека

Другие вопросы по тегам