execlp

EXEC(3)                  Podręcznik programisty Linuksa                  EXEC(3)



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

       ┌──────────────────────────────┬────────────────────────┬─────────────┐
       │Interfejs                     Atrybut                Wartość     │
       ├──────────────────────────────┼────────────────────────┼─────────────┤
       │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)