focal (3) execl.3.gz

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.