oracular (3) execl.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       execl, execlp, execle, execv, execvp, execvpe - uruchamia plik

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       extern char **environ;

       int execl(const char *pathname, const char *arg, ...
       /*, (char *) NULL */);
       int execlp(const char *file, const char *arg, ...
       /*, (char *) NULL */);
       int execle(const char *pathname, const char *arg, ...
                       /*, (char *) NULL, char *const envp[] */);
       int execv(const char *pathname, 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.

       Funkcje mogą być pogrupowane na podstawie liter, które następują po przedrostku „exec”.

   l - execl(), execlp(), execle()
       Kolejne  wyrażenia  const  char *arg 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.

       W odróżnienie od funkcji zawierających w nazwie „l”, poniższe funkcje z „v” określają  argumenty  wiersza
       poleceń wykonywanego programu, jako wektor.

   v - execv(), execvp(), execvpe()
       Argument    char *const   argv[]   jest   tablicą   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.

   e - execle(), execvpe()
       Środowisko nowego obrazu procesu podaje  się  za  pomocą  argumentu  envp.  Argument  envp  jest  tablicą
       wskaźników do zakończonych znakiem NUL łańcuchów znaków i musi być zakończony wskaźnikiem null.

       Wszystkie  pozostałe  funkcje  exec()  (które  nie  zawierają w przyrostku „e”), pobierają środowisko dla
       obrazu nowego procesu z zewnętrznej zmiennej environ procesu wywołującego.

   p - execlp(), execvp(), execvpe()
       Funkcje te 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,  lista  ścieżek  korzysta  z  listy
       domyślnej,   która   zawiera   katalogi   zwracane   przez   confstr(_CS_PATH)   (zwykle  zwraca  wartość
       „/bin:/usr/bin”) i być może również bieżący katalog roboczy; więcej szczegółów w UWAGACH.

       execvpe() szuka programu za pomocą wartości zmiennej PATH ze środowiska wywołującego, a nie  z  argumentu
       envp.

       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).

       Wszelkie inne funkcje exec() (które nie  zawierają  „p”  w  przyrostku)   przyjmują  jako  swój  pierwszy
       argument ścieżkę (względną lub absolutną), która identyfikuje program do wykonania.

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).

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-bezpieczne     │
       ├───────────────────────────────────────────────────────────┼────────────────────────┼───────────────────┤
       │execlp(), execvp(), execvpe()                              │ Bezpieczeństwo wątkowe │ MT-bezpieczne env │
       └───────────────────────────────────────────────────────────┴────────────────────────┴───────────────────┘

WERSJE

       Domyślna  ścieżka przeszukiwana (używana, gdy środowisko nie zawiera zmiennej PATH) ukazuje pewne różnice
       między systemami. Zwykle zawiera /bin i /usr/bin (w tej kolejności), może też  zawierać  bieżący  katalog
       roboczy.  W  niektórych  innych  systemach,  bieżący  katalog roboczy występuje po /bin i /usr/bin, co ma
       utrudnić ataki trojanów. Implementacja glibc przez długi czas działała zgodnie z tradycyjnymi wartościami
       domyślnymi,  gdy  bieżący  katalog  roboczy  jest  umieszczony na początku ścieżki przeszukiwania. Jednak
       pewien refaktoring kodu, jaki miał miejsce podczas  rozwoju  glibc  2.24  spowodował  zupełne  porzucenie
       bieżącego  katalogu  roboczego  z domyślnej ścieżki przeszukiwania. Ta przypadkowa zmiana zachowania jest
       uważana za dość pozytywną i nie zostanie odwrócona.

       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.

STANDARDY

       environ
       execl()
       execlp()
       execle()
       execv()
       execvp()
              POSIX.1-2008.

       execvpe()
              GNU.

HISTORIA

       environ
       execl()
       execlp()
       execle()
       execv()
       execvp()
              POSIX.1-2001.

       execvpe()
              glibc 2.11.

USTERKI

       Przed   glibc   2.24,   execl()   i  execle()  korzystały  wewnętrznie  z  realloc(3)  dlatego  nie  były
       async-signal-safe, co stanowiło naruszenie wymagań POSIX.1. Poprawiono to w glibc 2.24.

   Szczegóły typowe dla architektury
       Na architekturach sparc i sparc64, execv() jest udostępnione jako  wywołanie  systemowe  przez  jądro  (z
       prototypem  ukazanym  powyżej)  ze  względu na kompatybilność z SunOS. Ta funkcja nie jest wykorzystywana
       przez przez funkcję opakowującą execv() na tych architekturach.

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Adam  Byrtek  <alpha@irc.pl>,  Andrzej
       Krzysztofowicz   <ankry@green.mf.pg.gda.pl>,   Robert   Luberda   <robert@debian.org>   i  Michał  Kułach
       <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje  o  warunkach  licencji  można  uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej  ⟨manpages-pl-
       list@lists.sourceforge.net⟩.