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.

GNU                                                2016-03-15                                            EXEC(3)