Witajcie, w języku C jestem laikiem, więc w kodzie mogą pojawić się dziwne rzeczy.
Mam pytanie dla was, starych wyjadaczy C :p
Pobieram za pomocą fgets input od użytkownika zawierający komendę Basha i zapisuję go do tablicy o nazwie string. Wewnątrz podanej przez użtykownika komendy mogą być spacje przed flagami, np "ls -la", więc w pętli for wypisuje kolejne flagi polecenia do tablicy dwuwymiarowej. Polecenie i każda kolejna flaga do kolejnych wierszy tablicy.
W kolejnej pętli for zapisuje strigi z tablicy dwuwymiarowej vector do tablicy jednowymiarowej pass, którą przekażę do execvp jak drugi argument.
Problem w tym, że funkcja execvp nie działa i nie wykonuje komend, mimo że tablica pass zawiera jako kolejne elementy tablicy stringi zawierające polecenie i flagi.
Gdzie leży problem? Powinienem wywołać jakośc execvp w innym procesie za pomocą forka, bo inaczej nie zadziała? Źle przekazuję argumenty?
Z góry dzięki za całą waszą pomoc, poniżej zamieszczam kod.
BTW. kod jest częścią więszego programu. Muszę użyc execvp a nie np execlp. Sensowną alokacją pamięci dla tablic też chcę zając się później, na razie najlepiej żeby to wogóle zadziałało :)
#include <stdio.h>
#include <string.h>
int iloscFlag=0,i,len,j=0,k=0;
char string[30], vector[32][32];
char* pass[32];
int main(int argc, char* argv[]) {
printf("\n>>");
fgets(string,30,stdin);
len = strlen(string);
//Wyciaganie komendy z inputa do vectora
for ( i=0; i<len; i++) {
if ( string[i] != ' ' ) {
vector[j][k] = string[i];
k++;
} else {
vector[j][k] = '\0';
j++;
iloscFlag++;
k=0;
}
}
//Tworzenie tablicy wskaznikow na kolejne tablice stringow.
for ( i=0; i<=iloscFlag; i++ ) {
pass[i] = vector[i];
}
execvp(argv[0],pass);
return 0;
}