NAAM
execve − voer een programma uit
OVERZICHT
#include <unistd.h>
int execve (const char *bestandnaam, char *const argv [], char *const envp[]);
BESCHRIJVING
execve() voert het programma uit waar bestandnaam naar wijst. bestandnaam Moet een binair uitvoerbaar bestand zijn, of: een script dat start met een regel in de vorm: "#! interpreteerder [arg]" In het laatste geval moet de interpreteerder een geldige hele_bestandnaam zijn van een uitvoerbaar bestand dat niet zelf een script is, dat zal worden gestart als interpreteerder [arg] bestandnaam.
argv Is een tabel van argument ’string’-en {nl: karakter-snoeren} die aan het programma wordt gegeven. envp Is een tabel van ’string’-en, volgens conventie in de vorm: trefwoord=waarde, die aan het nieuwe programma wordt gegeven als omgeving. Beide argv en envp (tabellen) moeten afsluiten met een nul-pointer. De argument pointer en de omgeving kunnen bereikt worden door de "main" functie van het aangeroepen programma, wanneer die is bepaald als int main(int argc, char *argv[], char *envp[]).
execve() keert bij slagen niet terug en de ’text’, ’data’, ’bss’, en ’stapel’ {eng: stack}, van het aanroepende proces worden overschreven door die van het programma dat geladen wordt. Het gestarte programma neemt de PID en eventuele open bestandindicators die niet gezet zijn om bij exec te sluiten, over. Signalen die nog hangen voor het aanroepende proces worden gewist. Alle signalen die het aanroepende programma zou vangen worden naar hun standaard gedrag teruggezet.
Als het huidige programma ge-"ptrace"’t {ptrace: systeem aanroep} wordt, wordt er een SIGTRAP naar gezonden na een geslaagde execve.
Als het zet-uid-bit aan staat op het programma bestand waar bestandnaam naar wijst, dan wordt het geldige gebruikers ID van het aanroepende proces veranderd naar dat van de eigenaar van dat programma bestand. Hetzelfde laken een pak wanneer het zet-gid-bit aan status voor het programma bestand, dan wordt het geldige groep ID van het aanroepende proces gezet naar de groep van het programma bestand.
Als het uitvoerbare bestand van de vorm: a.out dynamisch-ge"link"’t uitvoerbaar met gedeelde-bibliotheek verwijzingen, {eng: a.out dynamically- linked binary executable containing shared-library stubs} is, dan wordt de dynamische linker ld.so(8) aangeroepen bij het begin van het uitvoeren, om de benodigde gedeelde bibliotheken in het werkgeheugen te brengen en om het uitvoerbare bestand ermee te verbinden.
Als het uitvoerbare bestand een dynamisch verbonden ELF uitvoerbaar bestand is dan wordt de interpreteerder die genoemd wordt in het PT_INTERP segment gebruikt om de benodigde gedeelde-bibliotheken te laden. Deze interpreteerder is gewoonlijk /lib/ld-linux.so.1 voor binaire bestanden die verbonden zijn met libc versie 5, en /lib/ld-linux.so.2 voor binaire bestanden die verbonden zijn met GNU libc versie 2.
EIND WAARDE
Bij success keert execve niet terug, bij falen wordt −1 teruggegeven, en wordt errno gezet zoals dat hoort.
FOUTEN
EACCES |
{toegang} Het bestand of de script interpreteerder is geen normaal bestand. | ||
EACCES |
{toegang} Uitvoer toestemming werd geweigerd voor het bestand of een script interpreteerder. | ||
EACCES |
{toegang} Het bestandsysteem is gemount met noexec. | ||
EPERM |
{toestemming} Het bestandsysteem was gemount met nosuid, en de gebruiker is niet de supergebruiker, en het bestand heeft het SUID of SGID bit aan staan. | ||
EPERM |
{toestemming} Het proces wordt gevolgd {eng: traced}, de gebruiker is niet de supergebruiker en het bestand heeft een SUID of SGID bit aan staan. | ||
E2BIG |
{te groot} De argumenten-lijst was te groot. |
ENOEXEC
{niet uitvoeren} Een uitvoerbaar bestand is niet in een bekende vorm: het is voor de verkeerde architectuur, of heeft een of andere vormfout waardoor het niet kan worden uitgevoerd.
EFAULT |
{fout} bestandnaam wijst buiten door u toegankelijke adres ruimte. |
ENAMETOOLONG
{naam te lang} bestandnaam is te lang.
ENOENT |
{geen ingang} Het bestand bestandnaam of het script of de ELF interpreteerder bestaat niet. | ||
ENOMEM |
{geen geheugen} Te weinig besturingssysteem geheugen voorhanden. |
ENOTDIR
{geen dir} Een deel van het pad-voorvoegsel van bestandnaam of van een script of ELF interpreteerder is geen directorie.
EACCES |
{toegang} Zoek toestemming is geweigerd voor een deel van het pad-voorvoegsel van bestandnaam of de naam van een script interpreteerder. | ||
ELOOP |
{cirkel} Teveel symbolische koppelingen werden tegengekomen bij het "oplossen" van bestandnaam of de naam van een script of ELF interpreteerder. |
ETXTBUSY
{text bezig} Uitvoerbaar bestand is open voor schrijven bij een of meer processen.
EIO |
{in uit} Een In/Uit fout trad op. | ||
ENFILE |
{aantal bestanden} De grens aan het aantal open bestanden van het systeem is bereikt. | ||
EMFILE |
{maximum bestanden} Het proces heeft het maximale aantal bestanden open. | ||
EINVAL |
{ongeldig} Een ELF uitvoerbaar bestand heeft meer dan 1 PT_INTERP segment (probeerde meer dan 1 interpreteerder te benoemen). | ||
EISDIR |
{is dir} Een ELF interpreteerder was een directorie. |
ELIBBAD
{bibliotheek fout} Een ELF interpreteerder had een onbekende vorm.
VOLDOET AAN
SVr4, SVID, X/OPEN, BSD 4.3. POSIX beschrijft het #! gedrag niet, maar is verder verenigbaar (eng: compatible) hiermee. SVr4 beschrijft de extra fouttoestanden EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP; POSIX beschrijft de ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR en ELIBBAD fouttoestanden niet.
OPMERKINGEN
SUID en SGID processen kunnen niet ge-ptrace()d worden SUID of SGID.
Een maximale regel lengte van 127 letters is toegestaan voor de eerste regel in een #! uitvoerbaar shell script.
Linux negeert de SUID en SGID bits op scripts.
ZIE
chmod(2) {verander toestand}, fork(2) {splits}, execl(3) {uitvoeren}, environ(5) {omgeving}, ld.so(8) {lader}
VERTALING
Dit is een handleiding uit manpages-dev 1.29. Alles wat tussen ’{’..’}’ staat is aanvullende vertaling, en hoort niet bij de originele handleiding. Email naar <manpages-nl [AT] nl.org>.
$Id: execve.2,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $