Provided by: manpages-pl-dev_0.7-2_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, ...
       /* (char *) NULL */);
       int execlp(const char *file, const char *arg, ...
       /* (char *) NULL */);
       int execle(const char *path, const char *arg, ...
        /*, (char *) NULL, 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.

ATRYBUTY

       Informacje   o   pojęciach   używanych   w  tym  rozdziale  można  znaleźć  w  podręczniku
       attributes(7).

       ┌──────────────────────────────┬────────────────────────┬─────────────┐
       │InterfejsAtrybutWartość     │
       ├──────────────────────────────┼────────────────────────┼─────────────┤
       │execl(), execle(), execv()    │ Bezpieczeństwo wątkowe │ MT-Safe     │
       ├──────────────────────────────┼────────────────────────┼─────────────┤
       │execlp(), execvp(), execvpe() │ Bezpieczeństwo wątkowe │ MT-Safe env │
       └──────────────────────────────┴────────────────────────┴─────────────┘

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), execveat(2), fork(2), ptrace(2), fexecve(3), system(3), environ(7)

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  4.07  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://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ą   4.07
       oryginału.