.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992 .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" Modified by Michael Haardt .\" Modified Wed Jul 21 22:47:01 1993 by Rik Faith .\" Modified 21 Aug 1994 by Michael Chastain : .\" Fixed typoes. .\" Modified Fri Jan 31 16:24:28 1997 by Eric S. Raymond .\" Modified Fri Nov 12 22:57:27 1999 by Urs Thuermann .\" .\" Translation (c) 1998 Przemek Borys .\" Last update: A. Krzysztofowicz , Jan 2002, .\" manpages 1.47 .\" .TH EXECVE 2 1997-09-03 "Linux 2.0.30" "Podręcznik programisty Linuksa" .SH NAZWA execve \- uruchomienie programu .SH SKŁADNIA .B #include .sp .BI "int execve(const char *" filename ", char *const " argv .BI "[], char *const " envp []); .SH OPIS \fI Uwaga! To tłumaczenie może być nieaktualne!\fP .PP \fBexecve()\fP uruchamia program wskazany przez \fIfilename\fP. \fIfilename\fP musi być albo wykonywalnym programem binarnym, albo skryptem powłoki, rozpoczynającym się od linii postaci "\fB#! \fIinterpreter \fR[arg]". W tym drugim przypadku, interpreter musi być prawidłową ścieżką do programu, a nie skryptem, który byłby uruchomiany jako \fBinterpreter\fR [arg] \fIfilename\fR. \fIargv\fP jest tablicą łańcuchów przekazywanych jako argumenty nowego programu. \fIenvp\fP jest tablicą łańcuchów postaci \fBklucz=wartość\fR, która jest przekazywana jako środowisko do nowego programu. Zarówno \fIargv\fP, jak i \fIenvp\fP 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 \fBint main(int argc, char *argv[], char *envp[])\fR. \fBexecve()\fP 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 \fBSIGTRAP\fP po pomyślnym \fBexecve()\fP. Jeżeli plik programu wskazywany przez \fIfilename\fP 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 .BR 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 \fI/lib/ld-linux.so.1\fR, w wypadku programów skonsolidowanych z biblioteką libc w wersji 5, albo \fI/lib/ld-linux.so.2\fR - dla programów skonsolidowanych z biblioteką GNU libc w wersji 2. .SH "WARTOŚĆ ZWRACANA" Po pomyślnym zakończeniu \fBexecve()\fP nie wraca, w wypadku błędu zwracane jest \-1 i odpowiednio ustawiane .I errno . .SH BŁĘDY .TP .B EACCES Plik lub interpreter skryptu nie jest zwykłym plikiem. .TP .B EACCES Brak praw wykonywania dla pliku, skryptu lub intepretera ELF. .TP .B EACCES System plików jest zamontowany jako .IR noexec . .TP .B EPERM System plików jest zamontowany jako .IR nosuid , użytkownik nie jest superużytkownikiem, a plik ma ustawiony bit SUID lub SGID. .TP .B EPERM Proces jest śledzony (trace), użytkownik nie jest superużytkownikiem, a plik ma ustawiony bit SUID lub SGID. .TP .B E2BIG Lista argumentów jest zbyt długa. .TP .B 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. .TP .B EFAULT .I filename wskazuje poza dostępną dla użytkownika przestrzeń adresową. .TP .B ENAMETOOLONG .I filename jest zbyt długie. .TP .B ENOENT Plik .IR filename , skrypt, lub intepreter ELF nie istnieje albo nie można znaleźć biblioteki współdzielonej potrzebnej do uruchomienia pliku lub interpretera. .TP .B ENOMEM Brak dostępnej pamięci jądra. .TP .B ENOTDIR Składnik ścieżki .IR filename , ścieżki skryptu lub ścieżki interpretera ELF nie jest katalogiem. .TP .B EACCES Brak praw do przeszukiwania dla składnika ścieżki .I filename lub ścieżki interpretera skryptu. .TP .B ELOOP Podczas rozwiązywania .IR filename , nazwy skryptu lub interpretera ELF napotkano zbyt wiele dowiązań symbolicznych. .TP .B ETXTBSY Plik wykonywalny był otwarty do zapisu przez jeden lub więcej procesów. .TP .B EIO Wystąpił błąd wejścia-wyjścia. .TP .B ENFILE Został osiągnięte ograniczenie liczby otwartych plików w systemie. .TP .B EMFILE Proces osiągnął już maksymalną liczbę otwartych plików. .TP .B EINVAL Plik wykonywalny w formacie ELF ma więcej niż jeden segment PT_INTERP (tzn. ma więcej niż jeden interpreter). .TP .B EISDIR Intepreter ELF jest katalogiem. .TP .B ELIBBAD Nie został rozpoznany format intepretera ELF. .SH "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. .SH UWAGI Procesy ustawiające SUID lub SGID nie mogą być traktowane \fBptrace()\fP. Linux ignoruje bity SUID i SGID dla skryptów. Efect zamontowania systemu plików .I 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. .\" .SH BUGS .\" Some Linux versions have failed to check permissions on ELF .\" interpreters. This is a security hole, because it allows users to .\" open any file, such as a rewinding tape device, for reading. Some .\" Linux versions have also had other security holes in \fBexecve()\fP, .\" that could be exploited for denial of service by a suitably crafted .\" ELF binary. There are no known problems with 2.0.34 or 2.2.15. .SH "ZOBACZ TAKŻE" .BR chmod (2), .BR fork (2), .BR execl (3), .BR environ (5), .BR ld.so (8) .SH "INFORMACJE O TŁUMACZENIU" Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i \fImoże nie być aktualne\fR. 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: .IP man \-\-locale=C 2 execve .PP Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages\-pl/.