Systemanropet `execlp()` i Linux används för att köra ett program, och ersätter den nuvarande pågående processen med det nya programmet. "lp" i `execlp()` står för "lista över pekare", vilket hänvisar till argumenten som skickas till det nya programmet. Här är en detaljerad förklaring av hur `execlp()` fungerar:
Prototyp:
```c
int execlp(const char *fil, const char *arg0, ..., const char *argn, (char *) NULL);
```
Argument:
- `fil`:Detta är sökvägen till den körbara filen eller programmet som du vill köra.
- `arg0`, `...,` `argn`:Dessa är pekare till noll-terminerade strängar som representerar kommandoradsargumenten som ska skickas till det nya programmet. `arg0` ska alltid vara namnet på själva programmet.
- `(char *) NULL`:Detta är en obligatorisk nollpekare i slutet av listan med argument. Den fungerar som en avgränsare för att indikera slutet av argumentlistan.
Beskrivning:
- `execlp()` är en variant av `execl()`-systemanropet som använder ett förenklat, men ändå flexibelt sätt att skicka argument till det nya programmet. Den söker automatiskt efter den körbara filen i katalogerna som specificeras av miljövariabeln "PATH".
- När `execlp()` anropas ersätts den nuvarande pågående processen av det nya programmet specificerat av `file`. Argumenten `arg0`, `...,` `argn` skickas som kommandoradsargument till det nya programmet.
- `execlp()` återgår inte till anropsprocessen. Istället överför den kontrollen till det nya programmet, som börjar köras. Om det finns några fel under körningen av `execlp()`, såsom att den körbara filen inte hittas eller otillräckliga behörigheter, kommer `execlp()`-anropet att misslyckas och returnera -1, vilket lämnar den aktuella processen opåverkad.
Exempel:
```c
#include
#include
int main() {
// Kör kommandot "ls -l".
execlp("ls", "ls", "-l", (char *) NULL);
// Den här raden kommer bara att köras om execlp() misslyckas
perror("execlp() misslyckades");
returnera 0;
}
```
I det här exemplet kör systemanropet `execlp()` kommandot "ls -l", som listar filerna i den aktuella katalogen med detaljerad information. Om `execlp()` lyckas kommer kommandot "ls -l" att köras och kontrollen kommer att överföras till `ls`-programmet. Om `execlp()` stöter på ett fel, kommer `perror()`-funktionen att skriva ut ett felmeddelande till standardfelströmmen ("stderr").
Viktigt:
- `execlp()` är en av flera `exec()`-familjefunktioner i Linux som utför samma uppgift att köra nya program men med olika argumenthanteringsmekanismer. Andra vanliga `exec()`-funktioner inkluderar `execl()`, `execv()`, `execvp()` och `execve()`.
- `execlp()` söker bara efter den körbara filen i de kataloger som specificeras av miljövariabeln `PATH`, så det är viktigt att se till att den körbara filen finns i en av dessa kataloger.
- Argumenten `arg0`, `...,` `argn` måste vara nollterminerade strängar. Att skicka icke-null-terminerade strängar eller försöka skicka fler argument än funktionen kan hantera kan leda till odefinierat beteende.
- Systemanropet `execlp()` används i många Unix-liknande operativsystem, inte bara Linux.