Provided by:
manpages-nl_20051127-1_all 
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@nl.linux.org>.
$Id: execve.2,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $