execve

EXECVE(2)               Linux Programmeurs Handleiding               EXECVE(2)



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 $



Linux 2.0.30                   3 September 1997                      EXECVE(2)