Provided by: manpages-pl-dev_0.5-1_all bug

NAZWA

       execl, execlp, execle, execv, execvp, execvpe - uruchomienie pliku

SKŁADNIA

       #include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...);
       int execlp(const char *file, const char *arg, ...);
       int execle(const char *path, const char *arg,
        ..., char * const envp[]);
       int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);
       int execvpe(const char *file, char *const argv[],
        char *const envp[]);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       execvpe(): _GNU_SOURCE

OPIS

       Rodzina funkcji exec() zastępuje w pamięci obraz bieżącego procesu obrazem nowego procesu.
       Funkcje opisane na tej stronie podręcznika są  tylko  nakładkami  dla  funkcji  execve(2).
       (Dodatkowe  informacje  na  temat  nadpisywania bieżącego procesu można znaleźć na stronie
       podręcznika execve(2)).

       Pierwszym argumentem tych funkcji jest ścieżka do pliku, który ma być uruchomiony.

       Kolejne wyrażenia const char *arg w funkcjach execl(), execlp() i execle() można traktować
       jako  arg0,  arg1,  ...,  argn.   Razem opisują one listę jednego lub więcej wskaźników do
       zakończonych znakiem  NUL  łańcuchów,  reprezentujących  listę  argumentów  udostępnianych
       wykonywanemu  programowi.  Pierwszy  argument,  zgodnie z konwencją, powinien wskazywać na
       nazwę pliku  powiązaną  z  wykonywanym  plikiem.  Lista  argumentów  musi  być  zakończona
       wskaźnikiem  NULL,  a  ponieważ  te  funkcje  są  funkcjami o zmiennej liczbie argumentów,
       wskaźnik ten musi być rzutowany na (char *) NULL.

       Funkcje execv(), execvp oraz execvpe() używają tablicy wskaźników do zakończonych  znakami
       NUL  łańcuchów  reprezentujących  listę  argumentów  dostępnych dla wykonywanego programu.
       Pierwszy argument, zgodnie z konwencją, powinien wskazywać  na  nazwę  pliku  powiązaną  z
       wykonywanym plikiem. Tablica wskaźników musi być zakończona wskaźnikiem NULL.

       Funkcje   execle()   i  execvpe()  pozwalają  na  podanie  w  parametrze  envp  środowiska
       wykonywanego procesu. Parametr envp jest tablicą wskaźników do  zakończonych  znakiem  NUL
       łańcuchów  znaków.  Tablica  ta  musi  być  zakończona wskaźnikiem NULL. Pozostałe funkcje
       pobierają  środowisko  dla  nowego  procesu  z  zewnętrznej   zmiennej   environ   procesu
       wywołującego te funkcje.

   Specjalna składnia execlp() i execvp()
       Funkcje  execlp(),  execvp()  oraz  execvpe()  wykonują  zadania  powłoki,  szukając pliku
       wykonywalnego, jeśli nazwa pliku nie zawiera znaku ukośnika (/). Plik jest  wyszukiwany  w
       rozdzielonej  dwukropkami  liście  ścieżek  do  katalogów podanej w zmiennej środowiskowej
       PATH. Jeśli ta zmienna nie jest zdefiniowana,  wartością  domyślną  jest  lista  katalogów
       składająca  się  z  katalogu  bieżącego  oraz  listy  katalogów  zwróconej  przez  Ścieżka
       confstr(_CS_PATH). (To wywołanie confstr(3)  zazwyczaj zwraca wartość "/bin:/usr/bin").

       Jeśli podana nazwa pliku zawiera znak ukośnika, to wartość zmiennej PATH jest ignorowana i
       wykonywany jest plik z podanej lokalizacji.

       Dodatkowo pewne błędy są traktowane w specjalny sposób.

       Jeśli  dostęp  do  pliku  został  zabroniony  (wywołanie  execve(2)  zakończyło się błędem
       EACCES), funkcje te będą przeszukiwać resztę ścieżki.  Jeśli  jednak  nie  odnajdą  innego
       pliku, powrócą i ustawią wartość zmiennej errno na EACCES.

       Jeśli  nagłówek nie zostanie rozpoznany (wywołanie execve(2) zakończy się błędem ENOEXEC),
       funkcje te spróbują uruchomić  powłokę  (/bin/sh)  ze  ścieżką  do  pliku  jako  pierwszym
       argumentem. (Jeśli i ta próba się nie powiedzie, przeszukiwanie zostanie zakończone).

WARTOŚĆ ZWRACANA

       Funkcje  exec()  powracają  tylko  wtedy,  gdy  wystąpi  błąd.  Zwracana jest wartość -1 i
       ustawiana jest zmienna errno, określająca rodzaj błędu.

BŁĘDY

       Każda z tych funkcji może zakończyć  się  niepowodzeniem  i  ustawić  jako  wartość  errno
       dowolny błąd określony dla execve(2).

WERSJE

       Funkcja execvpe() pojawiła się po raz pierwszy w wersji 2.11 biblioteki glibc.

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008.

       execvpe() jest rozszerzeniem GNU.

UWAGI

       W  niektórych  systemach  domyślna  ścieżka  (używana, gdy środowisko nie zawiera zmiennej
       PATH) zawiera bieżący katalog na samym końcu listy, po /bin oraz  /usr/bin,  aby  zapobiec
       koniom trojańskim. Linux korzysta tu z tradycyjnej domyślnej ścieżki z bieżącym katalogiem
       umieszczonym na początku.

       Zachowanie execlp() oraz execvp() w  przypadku  wystąpienia  błędów  podczas  uruchamiania
       pliku jest przyjęte jako tradycyjne, ale nie jest udokumentowane przez standard POSIX. BSD
       (a być może także inne systemy) po napotkaniu błędu ETXTBSY czeka przez chwilę  i  próbuje
       ponownie. Linux traktuje to jako błąd i powraca natychmiast.

       Tradycyjnie  funkcje  execlp()  oraz  execvp()  ignorowały wszystkie błędy oprócz podanych
       powyżej oraz ENOMEM i E2BIG, po których powracały.  Obecnie  powracają  także  wtedy,  gdy
       wystąpi dowolny błąd inny od opisanych powyżej.

ZOBACZ TAKŻE

       sh(1), execve(2), fork(2), ptrace(2), fexecve(3), environ(7)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  3.52  projektu Linux man-pages. Opis
       projektu  oraz  informacje  dotyczące  zgłaszania  błędów  można   znaleźć   pod   adresem
       http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony podręcznika man są: Adam Byrtek (PTM)
       <abyrtek@priv.onet.pl>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na
       stronie  http://sourceforge.net/projects/manpages-pl/.  Jest   zgodne   z   wersją    3.52
       oryginału.