La oss bryte ned forskjellene mellom `execl` og` System` i Unix:
`execl` (og dens varianter)
* Formål: `Execl` erstatter den nåværende prosessen med en ny. Den laster direkte og kjører det spesifiserte programmet, og avslutter effektivt det originale programmet.
* hvordan det fungerer:
* Erstatning: Ringprosessen erstattes av den nye prosessen. Dette betyr at det ikke er noen retur til det originale programmet.
* Argumenter: `Execl` tar det kjørbare filnavnet og en liste over argumenter som parametere. Den har ikke muligheten til å håndtere standardinngangs-/output -omdirigering.
* eksempel:
`` c
#include
#include
int main () {
execl ("/bin/ls", "ls", "-l", null); // erstatte gjeldende prosess med 'ls -l'
// Denne linjen blir ikke nådd
retur 0;
}
`` `
`System`
* Formål: `System` utfører en kommando som en egen prosess. Det lar deg kjøre Shell -kommandoer fra C -programmet ditt.
* hvordan det fungerer:
* gaffel og exec: `System` bruker` gaffel` for å lage en barneprosess. Denne barneprosessen utfører deretter kommandoen ved å bruke `execl`.
* Separate prosesser: Den opprinnelige prosessen og den nyutførte kommandoen kjøres i separate prosesser. Dette betyr at den opprinnelige prosessen kan fortsette etter at kommandoen er ferdig.
* input/output: Systemets funksjon gir en måte å administrere standardinngangs-, utgangs- og feildirektør gjennom skallet.
* eksempel:
`` c
#include
int main () {
system ("ls -l"); // utføre 'ls -l' som en egen prosess
retur 0;
}
`` `
Nøkkelforskjeller
* Prosesserstatning: `Execl` erstatter den nåværende prosessen, mens` System` skaper en ny prosess.
* Retur: `Execl` kommer ikke tilbake til anropsprogrammet, mens` System` kommer tilbake etter at den utførte kommandoen er ferdig.
* skallintegrasjon: `System` gir tilgang til skallets muligheter for kommando -omdirigering og rør, mens` execl` direkte utfører et program.
Når du skal bruke hver funksjon
* `execl`: Bruk `execl` når du vil erstatte den nåværende prosessen fullstendig med et annet program. Det er egnet for tilfeller der anropsprogrammet ikke trenger å fortsette etter at det nye programmet har startet.
* `System`: Bruk `System` når du vil utføre en kommando som en egen prosess og beholde kontrollen over det originale programmet. Det er egnet for scenarier der du trenger å kjøre skallkommandoer eller omdirigere inngang/utgang.
Ytterligere merknader
* Det er andre varianter av `execl`:` execv`, `execlp`,` execvp`, etc., som er forskjellige i hvordan de håndterer argumenter og søkeveier.
* Både `execl` og` System 'har sikkerhetskonsekvenser. Hvis du passerer brukerstilfeller til disse funksjonene, må du sørge for at du desinfiserer den for å forhindre potensielle kodeinjeksjonsangrep.