Provided by: manpages-pl-dev_0.5-1_all 

NAZWA
execve - uruchomienie programu
SKŁADNIA
#include <unistd.h>
int execve(const char *filename, char *const argv [], char *const envp[]);
OPIS
Uwaga! To tłumaczenie może być nieaktualne!
execve() uruchamia program wskazany przez filename. filename musi być albo wykonywalnym programem
binarnym, albo skryptem powłoki, rozpoczynającym się od linii postaci "#! interpreter [arg]". W tym
drugim przypadku, interpreter musi być prawidłową ścieżką do programu, a nie skryptem, który byłby
uruchomiany jako interpreter [arg] filename.
argv jest tablicą łańcuchów przekazywanych jako argumenty nowego programu. envp jest tablicą łańcuchów
postaci klucz=wartość, która jest przekazywana jako środowisko do nowego programu. Zarówno argv, jak i
envp muszą być zakończone wskaźnikiem pustym (NULL). Tablica argumentów oraz środowisko są dostępne w
funkcji main wywoływanego programu, jeżeli jest ona zdefiniowana jako int main(int argc, char *argv[],
char *envp[]).
execve() nie powraca po pomyślnym wywołaniu, a segmenty text, data, bss oraz segment stosu procesu
wywołującego zostają nadpisane przez odpowiedniki ładowanego programu. Wywoływany program dziedziczy PID
procesu wywołującego i wszelkie deskryptory otwartych plików, które nie są ustawione jako "close on
exec". Sygnały oczekujące na proces wywołujący zostają wyczyszczone. Sygnałom, które były przechwytywane
przez proces wywołujący, zostaje przypisana ich domyślna obsługa. Sygnał SIHCHLD (jeżeli jest ustawiony
na SIG_IGN) może, ale nie musi być przestawiony na SIG_DFL.
Jeśli obecny program jest ptrace'owany, wysyła się mu SIGTRAP po pomyślnym execve().
Jeżeli plik programu wskazywany przez filename ma ustawiony bit set-uid, to efektywny identyfikator
użytkownika procesu wywołującego jest ustawiany na właściciela pliku programu. Podobnie, jeżeli dla pliku
programu ustawiony jest bit set-gid, to efektywnemu identyfikatorowi grupy procesu wywołującego jest
przypisywana grupa pliku programu.
Jeśli program wykonywalny jest skonsolidowany dynamicznie w formacie a.out z bibliotekami dzielonymi, na
początku uruchamieina wywoływany jest konsolidator dynamiczny ld.so(8), który ładuje wszystkie biblioteki
do rdzenia i konsoliduje z nimi program wykonywalny.
Jeżeli program jest skonsolidowany dynamicznie jako ELF, to do załadowania potrzebnych bibliotek
współdzielonych używany jest interpreter określony w segmencie PT_INTERP. Tym interpreterem jest
zazwyczaj /lib/ld-linux.so.1, w wypadku programów skonsolidowanych z biblioteką libc w wersji 5, albo
/lib/ld-linux.so.2 - dla programów skonsolidowanych z biblioteką GNU libc w wersji 2.
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu execve() nie wraca, w wypadku błędu zwracane jest -1 i odpowiednio ustawiane
errno .
BŁĘDY
EACCES Plik lub interpreter skryptu nie jest zwykłym plikiem.
EACCES Brak praw wykonywania dla pliku, skryptu lub intepretera ELF.
EACCES System plików jest zamontowany jako noexec.
EPERM System plików jest zamontowany jako nosuid, użytkownik nie jest superużytkownikiem, a plik ma
ustawiony bit SUID lub SGID.
EPERM Proces jest śledzony (trace), użytkownik nie jest superużytkownikiem, a plik ma ustawiony bit SUID
lub SGID.
E2BIG Lista argumentów jest zbyt długa.
ENOEXEC
Nie rozpoznano formatu pliku binarnego, plik ten jest skompilowany dla innej architektury albo
wystąpił jakiś inny błąd w formacie, który powoduje, że program nie może być uruchomiony.
EFAULT filename wskazuje poza dostępną dla użytkownika przestrzeń adresową.
ENAMETOOLONG
filename jest zbyt długie.
ENOENT Plik filename, skrypt, lub intepreter ELF nie istnieje albo nie można znaleźć biblioteki
współdzielonej potrzebnej do uruchomienia pliku lub interpretera.
ENOMEM Brak dostępnej pamięci jądra.
ENOTDIR
Składnik ścieżki filename, ścieżki skryptu lub ścieżki interpretera ELF nie jest katalogiem.
EACCES Brak praw do przeszukiwania dla składnika ścieżki filename lub ścieżki interpretera skryptu.
ELOOP Podczas rozwiązywania filename, nazwy skryptu lub interpretera ELF napotkano zbyt wiele dowiązań
symbolicznych.
ETXTBSY
Plik wykonywalny był otwarty do zapisu przez jeden lub więcej procesów.
EIO Wystąpił błąd wejścia-wyjścia.
ENFILE Został osiągnięte ograniczenie liczby otwartych plików w systemie.
EMFILE Proces osiągnął już maksymalną liczbę otwartych plików.
EINVAL Plik wykonywalny w formacie ELF ma więcej niż jeden segment PT_INTERP (tzn. ma więcej niż jeden
interpreter).
EISDIR Intepreter ELF jest katalogiem.
ELIBBAD
Nie został rozpoznany format intepretera ELF.
ZGODNE Z
SVr4, SVID, X/OPEN, BSD 4.3. POSIX nie dokumentuje zachowania #!, lecz poza tym jest zgodny. SVr4
dokumentuje dodatkowe błędy EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP; POSIX nie dokumentuje błędów
ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR i ELIBBAD.
UWAGI
Procesy ustawiające SUID lub SGID nie mogą być traktowane ptrace().
Linux ignoruje bity SUID i SGID dla skryptów.
Efect zamontowania systemu plików nosuid jest różny dla różnych wersji jądra Linuksa: niektóre odmówią
uruchomienia programów SUID/SGID, gdy spowodowałoby to udostępnienie użytkownikowi możliwości, którymi w
danym momencie nie dysponuje (i zwrócą EPERM), inne po prostu zignorują bity SUID/SGID i wykonają exec
pomyślnie.
Maksymalna długość pierwszej linii skryptu powłoki, zawierającej #! wynosi 127 znaków.
ZOBACZ TAKŻE
chmod(2), fork(2), execl(3), environ(5), ld.so(8)
INFORMACJE O TŁUMACZENIU
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 2 execve
Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.
Linux 2.0.30 1997-09-03 EXECVE(2)