Gå til innhold

Anbefalte innlegg

Hei!

Driver å leker meg med execve() i C.

Dersom execve mislykkes i å kjøre et program returnerer den en slags sprø feilmelding,

men dersom den lykkes returnerer den ingen ting.

 

Er det mulig med f.eks en IF setning eller noe å teste om en funskjon ikke returnerer noen ting i det heletatt. Jeg prøvde meg med noe slik som:

if(execve(ls,prm,env)==NULL), men denne gikk ikke i oppfylelse.

 

Det jeg trenger er altså en IF setningen som går i oppfylelse dersom execve() ikke

returnerer noen ting..

 

Noen som har et tips?

 

mvh

C-mannen

Lenke til kommentar
Videoannonse
Annonse

Dokumentasjonen min sier følgende:

On  success,  execve()  does  not  return,  on error -1 is returned, and errno is set appropriately.

 

Det betyr vel at du kan skrive:

if(-1 == execve(ls,prm,env) )
{
    printf("execve failed. error number: %d", errno);
}
else
{
    printf("success!"); /* kommer aldri hit... fordi execve ikke returnerer */
}

 

Når funksjonen returnerer -1 ved feil, så må den også returnere noe når den ikke feiler. Men returverdien er ikke spesifisert og kan være implementasjonsavhengig. Derfor sjekker du om den returnerer -1 eller ikke ikke -1, det er alt du trenger å gjøre :). Hvis du ønsker nærmere beskrivelse av eventuell feil må du sjekke errno konstanten.

Endret av kjetil7
Lenke til kommentar

Min forståelse av execve() har alltid vert at den ikke returnerer hvis alt går bra, dvs at execve ikke starteren ny prosess, men laster det nye programmet over prosessen som kaller slik at prorgammet som kaller execve overskrives og forsvinner. Hvis execve returnerer har den alltid verdien -1, man trenger altså ingen if for å sjekke det.

 

Det står bedre forklart i man siden til execve.

 

    execve(ls,prm,env);

   // hit kommer vi bare hvis execve() feiler
   printf("Noe gikk galt");

 

Edit: Leste visst ikke hele inlegget over godt nok...

Endret av MailMan13
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...