blackcom Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 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
kjetil7 Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 (endret) 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 6. desember 2003 av kjetil7 Lenke til kommentar
MailMan13 Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 (endret) 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 6. desember 2003 av MailMan13 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå