Provided by:
manpages-pl-dev_20060617-3_all 
NAZWA
execve - uruchomienie programu
SK/LADNIA
#include <unistd.h>
int execve(const char *filename, char *const argv [], char *const
envp[]);
OPIS
execve() uruchamia program wskazany przez filename. filename musi by
albo wykonywalnym programem binarnym, albo skryptem powloki,
rozpoczynajcym si od linii postaci "#! interpreter [arg]". W tym
drugim przypadku, interpreter musi by prawidlow ciek do programu, a nie
skryptem, ktory bylby uruchomiany jako interpreter [arg] filename.
argv jest tablic lacuchow przekazywanych jako argumenty nowego
programu. envp jest tablic lacuchow postaci klucz=warto, ktora jest
przekazywana jako rodowisko do nowego programu. Zarowno argv, jak i
envp musz by zakoczone wskanikiem pustym (NULL). Tablica argumentow
oraz rodowisko s dostpne w funkcji main wywolywanego programu, jeeli
jest ona zdefiniowana jako int main(int argc, char *argv[], char
*envp[]).
execve() nie powraca po pomylnym wywolaniu, a segmenty text, data, bss
oraz segment stosu procesu wywolujcego zostaj nadpisane przez
odpowiedniki ladowanego programu. Wywolywany program dziedziczy PID
procesu wywolujcego i wszelkie deskryptory otwartych plikow, ktore nie
s ustawione jako "close on exec". Sygnaly oczekujce na proces wywolujcy
zostaj wyczyszczone. Sygnalom, ktore byly przechwytywane przez proces
wywolujcy, zostaje przypisana ich domylna obsluga. Sygnal SIHCHLD
(jeeli jest ustawiony na SIG_IGN) moe, ale nie musi by przestawiony na
SIG_DFL.
Jeli obecny program jest ptrace'owany, wysyla si mu SIGTRAP po pomylnym
execve().
Jeeli plik programu wskazywany przez filename ma ustawiony bit set-uid,
to efektywny identyfikator uytkownika procesu wywolujcego jest
ustawiany na wlaciciela pliku programu. Podobnie, jeeli dla pliku
programu ustawiony jest bit set-gid, to efektywnemu identyfikatorowi
grupy procesu wywolujcego jest przypisywana grupa pliku programu.
Jeli program wykonywalny jest skonsolidowany dynamicznie w formacie
a.out z bibliotekami dzielonymi, na pocztku uruchamieina wywolywany
jest konsolidator dynamiczny ld.so(8), ktory laduje wszystkie
biblioteki do rdzenia i konsoliduje z nimi program wykonywalny.
Jeeli program jest skonsolidowany dynamicznie jako ELF, to do
zaladowania potrzebnych bibliotek wspoldzielonych uywany jest
interpreter okrelony w segmencie PT_INTERP. Tym interpreterem jest
zazwyczaj /lib/ld-linux.so.1, w wypadku programow skonsolidowanych z
bibliotek libc w wersji 5, albo /lib/ld-linux.so.2 - dla programow
skonsolidowanych z bibliotek GNU libc w wersji 2.
WARTO ZWRACANA
Po pomylnym zakoczeniu execve() nie wraca, w wypadku bldu zwracane jest
-1 i odpowiednio ustawiane errno .
B/LDY
EACCES Plik lub interpreter skryptu nie jest zwyklym plikiem.
EACCES Brak praw wykonywania dla pliku, skryptu lub intepretera ELF.
EACCES System plikow jest zamontowany jako noexec.
EPERM System plikow jest zamontowany jako nosuid, uytkownik nie jest
superuytkownikiem, a plik ma ustawiony bit SUID lub SGID.
EPERM Proces jest ledzony (trace), uytkownik nie jest
superuytkownikiem, a plik ma ustawiony bit SUID lub SGID.
E2BIG Lista argumentow jest zbyt dluga.
ENOEXEC
Nie rozpoznano formatu pliku binarnego, plik ten jest
skompilowany dla innej architektury albo wystpil jaki inny bld w
formacie, ktory powoduje, e program nie moe by uruchomiony.
EFAULT filename wskazuje poza dostpn dla uytkownika przestrze adresow.
ENAMETOOLONG
filename jest zbyt dlugie.
ENOENT Plik filename, skrypt, lub intepreter ELF nie istnieje albo nie
mona znale biblioteki wspoldzielonej potrzebnej do uruchomienia
pliku lub interpretera.
ENOMEM Brak dostpnej pamici jdra.
ENOTDIR
Skladnik cieki filename, cieki skryptu lub cieki interpretera
ELF nie jest katalogiem.
EACCES Brak praw do przeszukiwania dla skladnika cieki filename lub
cieki interpretera skryptu.
ELOOP Podczas rozwizywania filename, nazwy skryptu lub interpretera
ELF napotkano zbyt wiele dowiza symbolicznych.
ETXTBSY
Plik wykonywalny byl otwarty do zapisu przez jeden lub wicej
procesow.
EIO Wystpil bld wejcia-wyjcia.
ENFILE Zostal osignite ograniczenie liczby otwartych plikow w systemie.
EMFILE Proces osignl ju maksymaln liczb otwartych plikow.
EINVAL Plik wykonywalny w formacie ELF ma wicej ni jeden segment
PT_INTERP (tzn. ma wicej ni jeden interpreter).
EISDIR Intepreter ELF jest katalogiem.
ELIBBAD
Nie zostal 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 bldy EAGAIN, EINTR,
ELIBACC, ENOLINK, EMULTIHOP; POSIX nie dokumentuje bldow ETXTBSY,
EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR i ELIBBAD.
UWAGI
Procesy ustawiajce SUID lub SGID nie mog by traktowane ptrace().
Linux ignoruje bity SUID i SGID dla skryptow.
Efect zamontowania systemu plikow nosuid jest rony dla ronych wersji
jdra Linuksa: niektore odmowi uruchomienia programow SUID/SGID, gdy
spowodowaloby to udostpnienie uytkownikowi moliwoci, ktorymi w danym
momencie nie dysponuje (i zwroc EPERM), inne po prostu zignoruj bity
SUID/SGID i wykonaj exec pomylnie.
Maksymalna dlugo pierwszej linii skryptu powloki, zawierajcej #! wynosi
127 znakow.
ZOBACZ TAKE
chmod(2), fork(2), execl(3), environ(5), ld.so(8)
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.