[c] Jak dobrze użyć execl z zmiennym parametrem?


(Uzi123) #1

Chcę użyć funkcji systemowej execl, a jeden z parametrów tej funkcji ma być przekazywany jako parametr wywołania całego programu. Narazie napisałem następujący kod (okroiłem go z zbędnych rzeczy)

int main(int argc , char *argv[])

{

pid_t pid;

for (i=1; i
 {

 switch(pid=fork()) {

  case -1:

  printf ("error \n");

  break;

  case 0:

  execl ("/bin/prog";*argv[i]);

  /*tu jest jeszcze sporo kodu*/

  }

 }

}

Nie mogę sobie poradzić z przekazaniem parametru do funkcji exec. Wiem że exec potrzebuje parametru jako

const char * parametr

, ale nie wiem jak się do tego dobrać.

Kozystam z gcc 4.1.1 pod Red Hat 4.1.1-52


(Sawyer47) #2

Znasz C++? Tak to nie zadziała, jak już to musisz połączyć ciągi znaków - funkcja strcat i połączony przekazać do funkcji.


(Uzi123) #3

Dziękuje za odpowiedź, wyrzuciłem niepotrzebne rzeczy z kodu (aby bylo przejrzyscie) i zastosowałem Twoją rade, kompiluje się i dziala. Jakoś zbila mnie z tropu ta dokumentacja:

int main(int argc , char *argv[])

{

char ppp[30]="";

strcat(ppp,argv[1]);

execl ("/bin/cp","cp",ppp,"plik.tmp",0);

printf("nie wykonalem sie");

}

Może coś można lepiej zrobić?


(Sawyer47) #4

Nie musisz tego tak robić, wybacz ale szybko pisałem odp. i pisząc myślałem o funkcji system. Jeśli chodzi o execl to powinno wystarczyć execl("/bin/cp", argv[1]), w pierwszym kodzie nie wiadomo dlaczego oddzieliłeś argumenty średnikiem i niepotrzebnie zastosowałeś operator *.


(Uzi123) #5

Dzięki, dzisiaj rano jak spojrzałem na ten kod to wszystko było jasne - ten średnik to literówka, *-bo tak było w przykladzie z manuala, jakąś dziwną mam dokumentacje exec :frowning: (już ja zmieniłem, dzięki za pomoc)

oczywiście, że działa:

int main(int argc , char *argv[])

{

execl ("/bin/cp","cp",argv[1],"plik.tmp",0);

printf("nie wykonalem sie");

}