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? - Переполнение стека