`execlp()`-systemkallet i Linux brukes til å kjøre et program, og erstatter den nåværende kjørende prosessen med det nye programmet. "lp" i `execlp()` står for "liste over pekere," som refererer til argumentene som sendes til det nye programmet. Her er en detaljert forklaring på hvordan `execlp()` fungerer:
Prototype:
```c
int execlp(const char *fil, const char *arg0, ..., const char *argn, (char *) NULL);
```
Argumenter:
- `fil`:Dette er banen til den kjørbare filen eller programmet du vil kjøre.
- `arg0`, `...,` `argn`:Dette er pekere til null-terminerte strenger som representerer kommandolinjeargumentene som skal sendes til det nye programmet. `arg0` skal alltid være navnet på selve programmet.
- `(char *) NULL`:Dette er en nødvendig null-peker på slutten av listen over argumenter. Den fungerer som en skilletegn for å indikere slutten av argumentlisten.
Beskrivelse:
- `execlp()` er en variant av `execl()`-systemkallet som bruker en forenklet, men likevel fleksibel måte å sende argumenter til det nye programmet. Den søker automatisk etter den kjørbare filen i katalogene spesifisert av miljøvariabelen 'PATH'.
- Når `execlp()` kalles, erstattes gjeldende kjørende prosess av det nye programmet spesifisert av `file`. Argumentene `arg0`, `...,` `argn` sendes som kommandolinjeargumenter til det nye programmet.
- `execlp()` går ikke tilbake til anropsprosessen. I stedet overfører den kontrollen til det nye programmet, som begynner kjøringen. Hvis det er noen feil under kjøringen av `execlp()`, slik som at den kjørbare filen ikke ble funnet eller utilstrekkelige tillatelser, vil `execlp()`-kallet mislykkes og returnere -1, og den nåværende prosessen blir upåvirket.
Eksempel:
```c
#include
#include
int main() {
// Kjør kommandoen "ls -l".
execlp("ls", "ls", "-l", (char *) NULL);
// Denne linjen vil bare kjøre hvis execlp() mislykkes
perror("execlp() mislyktes");
returner 0;
}
```
I dette eksemplet kjører `execlp()`-systemanropet "ls -l"-kommandoen, som viser filene i gjeldende katalog med detaljert informasjon. Hvis `execlp()` er vellykket, vil "ls -l"-kommandoen bli utført, og kontrollen vil bli overført til `ls`-programmet. Hvis `execlp()` støter på en feil, vil `perror()`-funksjonen skrive ut en feilmelding til standard feilstrøm ("stderr").
Viktige poeng:
- `execlp()` er en av flere `exec()`-familiefunksjoner i Linux som utfører den samme oppgaven med å kjøre nye programmer, men med forskjellige argumenthåndteringsmekanismer. Andre vanlige `exec()`-funksjoner inkluderer `execl()`, `execv()`, `execvp()` og `execve()`.
- `execlp()` søker bare etter den kjørbare filen i katalogene spesifisert av miljøvariabelen `PATH`, så det er viktig å sikre at den kjørbare filen er til stede i en av disse katalogene.
- Argumentene `arg0`, `...,` `argn` må være nullterminerte strenger. Sending av strenger som ikke er nullterminerte eller forsøk på å sende flere argumenter enn funksjonen kan håndtere, kan føre til udefinert oppførsel.
- Systemkallet `execlp()` brukes i mange Unix-lignende operativsystemer, ikke bare Linux.