De systeemaanroep `execlp()` in Linux wordt gebruikt om een programma uit te voeren, waarbij het huidige lopende proces wordt vervangen door het nieuwe programma. De "lp" in `execlp()` staat voor "list of pointers", wat verwijst naar de argumenten die aan het nieuwe programma worden doorgegeven. Hier is een gedetailleerde uitleg van hoe `execlp()` werkt:
Prototype:
```c
int execlp(const char *bestand, const char *arg0, ..., const char *argn, (char *) NULL);
```
Argumenten:
- `file`:Dit is het pad naar het uitvoerbare bestand of programma dat u wilt uitvoeren.
- `arg0`, `...,` `argn`:Dit zijn verwijzingen naar op nul eindigende tekenreeksen die de opdrachtregelargumenten vertegenwoordigen die aan het nieuwe programma moeten worden doorgegeven. `arg0` moet altijd de naam van het programma zelf zijn.
- `(char *) NULL`:Dit is een vereiste null-aanwijzer aan het einde van de lijst met argumenten. Het dient als scheidingsteken om het einde van de argumentenlijst aan te geven.
Beschrijving:
- `execlp()` is een variatie op de `execl()` systeemaanroep die een vereenvoudigde, maar toch flexibele manier gebruikt om argumenten door te geven aan het nieuwe programma. Het zoekt automatisch naar het uitvoerbare bestand in de mappen die zijn opgegeven door de omgevingsvariabele `PATH`.
- Wanneer `execlp()` wordt aangeroepen, wordt het huidige lopende proces vervangen door het nieuwe programma gespecificeerd door `file`. De argumenten `arg0`, `...,` `argn` worden als opdrachtregelargumenten aan het nieuwe programma doorgegeven.
- `execlp()` keert niet terug naar het aanroepproces. In plaats daarvan draagt het de controle over aan het nieuwe programma, dat begint met uitvoeren. Als er fouten optreden tijdens de uitvoering van `execlp()`, zoals dat het uitvoerbare bestand niet wordt gevonden of onvoldoende rechten heeft, zal de `execlp()`-aanroep mislukken en -1 retourneren, waardoor het huidige proces onaangetast blijft.
Voorbeeld:
```c
#include
#include
int hoofd() {
// Voer de opdracht "ls -l" uit
execlp("ls", "ls", "-l", (char *) NULL);
// Deze regel wordt alleen uitgevoerd als execlp() mislukt
perror("execlp() mislukt");
retour 0;
}
```
In dit voorbeeld voert de systeemaanroep `execlp()` het commando "ls -l" uit, dat de bestanden in de huidige map met gedetailleerde informatie weergeeft. Als `execlp()` succesvol is, wordt het commando "ls -l" uitgevoerd en wordt de besturing overgedragen naar het programma `ls`. Als `execlp()` een fout tegenkomt, zal de `perror()` functie een foutmelding afdrukken naar de standaard foutenstroom ("stderr").
Belangrijke punten:
- `execlp()` is een van de vele `exec()`-familiefuncties in Linux die dezelfde taak uitvoeren:het uitvoeren van nieuwe programma's, maar met verschillende mechanismen voor het afhandelen van argumenten. Andere veel voorkomende `exec()`-functies zijn `execl()`, `execv()`, `execvp()` en `execve()`.
- `execlp()` zoekt alleen naar het uitvoerbare bestand in de mappen die zijn opgegeven door de omgevingsvariabele `PATH`, dus het is essentieel om ervoor te zorgen dat het uitvoerbare bestand aanwezig is in een van die mappen.
- De argumenten `arg0`, `...,` `argn` moeten op nul eindigende tekenreeksen zijn. Het doorgeven van tekenreeksen die niet op nul eindigen of proberen meer argumenten door te geven dan de functie aankan, kan tot ongedefinieerd gedrag leiden.
- De systeemaanroep `execlp()` wordt in veel Unix-achtige besturingssystemen gebruikt, niet alleen in Linux. |