NAZWA¶
execl, execlp, execle, execv, execvp - uruchomienie pliku
SKŁADNIA¶
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg,
...);
int execlp(const char *file, const char *arg,
...);
int execle(const char *path, const char *arg ,
..., char * const envp[]);
int execv(const char *path, char *const
argv[]);
int execvp(const char *file, char *const
argv[]);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Rodzina funkcji
exec zastępuje w pamięci obraz aktualnego
procesu obrazem nowego procesu. Funkcje opisane na tej stronie man są
tylko nakładkami dla funkcji
execve(2). (Dodatkowych informacji na
temat nadpisywania aktualnego procesu szukaj na stronie man tej funkcji.)
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ępnoianych 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.
Funkcje
execv oraz
execvp udostępniają tablicę
wskaźników do zakończonych znakami NUL
łańcuchów, które reprezentują 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.
Funkcja
execle dodatkowo określa środowisko wykonywanego
procesu poprzez dodanie po wskaźniku
NULL, kończącym
listę argumentów w liście parametrów lub po tablicy argv
dodatkowego argumentu. Tym dodatkowym argumentem jest tablica
wskaźników do zakończonych znakami NUL
łańcuchów, która to tablica
musi być
zakończona wskaźnikiem
NULL. Pozostałe funkcje
pobierają środowisko dla nowego procesu z zewnętrznej zmiennej
environ aktualnego procesu.
Niektóre z tych funkcji mają specyficzną semantykę.
Funkcje
execlp oraz
execvp wykonują zadania powłoki
szukając pliku wykonywalnego, jeśli nazwa pliku nie zawiera znaku
ukośnika (/). Ścieżka przeszukiwania to ścieżka
podana w zmiennej środowiskowej
PATH. Jeśli zmienna ta nie
istnieje, przyjmowana jest domyślna ścieżka ``:/bin:/usr/bin''.
Dodatkowo pewne błędy traktowane są odmiennie.
Jeśli dostęp do pliku został zabroniony (wywołanie
execve zwróciło
EACCES), funkcje te będą
przeszukiwać resztę ścieżki. Jeśli jednak nie
odnajdą innego pliku, powrócą i zmienią wartość
zmiennej globalnej
errno na
EACCES.
Jeśli nagłówek nie zostanie rozpoznany (wywołanie
execve zwróci
ENOEXEC), funkcje te spróbują
uruchomić powłokę ze ścieżką do pliku jako
pierwszym argumentem. (Jeśli i ta próba się nie powiedzie,
przeszukiwanie jest zakończone.)
WARTOŚĆ ZWRACANA¶
Jeśli dowolna z funkcji
exec powróci, oznacza to że
nastąpił błąd. Zwracana jest wartość -1 i
ustawiana jest zmienna globalna
errno aby wskazać błąd.
PLIKI¶
/bin/sh
BŁĘDY¶
Każda z tych funkcji może zakończyć się niepowodzeniem
i ustawić jako wartość
errno dowolny błąd
określony dla funkcji bibliotecznej
execve(2).
ZOBACZ TAKŻE¶
sh(1),
execve(2),
fork(2),
environ(5),
ptrace(2)
KOMPATYBILNOŚĆ¶
W niektórych systemach domyślna ścieżka (używana, gdy
środowisko nie zawiera zmiennej
PATH) zawiera aktualny 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 aktualnym katalogiem 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,
ENOMEM i
E2BIG, po których powracały. Obecnie powracają
jeśli wystąpi dowolny błąd inny od opisanych powyżej.
ZGODNE Z¶
Funkcje
execl,
execv,
execle,
execlp oraz
execvp są zgodne ze standardem IEEE Std1003.1-88 (`POSIX.1'').
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 3 exec
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.