Låt oss dela upp skillnaderna mellan `execl` och` System 'i Unix:
`execl` (och dess varianter)
* Syfte: `Execl` ersätter den aktuella processen med en ny. Det laddas direkt och kör det angivna programmet, vilket effektivt avslutar det ursprungliga programmet.
* Hur det fungerar:
* ersättare: Samtalsprocessen ersätts av den nya processen. Detta innebär att det inte finns någon återgång till det ursprungliga programmet.
* Argument: `Execl` tar det körbara filnamnet och en lista med argument som parametrar. Det har inte förmågan att hantera standardinmatning/utgångsomdirigering.
* Exempel:
`` `c
#include
#include
int main () {
execl ("/bin/ls", "ls", "-l", null); // Byt ut den aktuella processen med 'LS -L'
// Denna rad kommer inte att nås
returnera 0;
}
`` `
`System`
* Syfte: `System 'kör ett kommando som en separat process. Det låter dig köra skalkommandon från ditt C -program.
* Hur det fungerar:
* gaffel och exec: `System 'använder' gaffel 'för att skapa en barnprocess. Denna barnprocess kör sedan kommandot med `execl`.
* separata processer: Den ursprungliga processen och det nyligen utförda kommandot körs i separata processer. Detta innebär att den ursprungliga processen kan fortsätta efter att kommandot är klart.
* Input/Output: Funktionen "System" ger ett sätt att hantera standardinmatning, utgång och felomdirigering genom skalet.
* Exempel:
`` `c
#include
int main () {
system ("ls -l"); // Utför 'ls -l' som en separat process
return 0;
}
`` `
nyckelskillnader
* Processersättning: `Execl` ersätter den aktuella processen, medan" System "skapar en ny process.
* Return: "Execl" återvänder inte till samtalsprogrammet, medan "System" återvänder efter att det körda kommandot är klart.
* skalintegration: `System 'ger åtkomst till skalets kapacitet för omdirigering av kommando och rör, medan" execl "direkt kör ett program.
När ska man använda varje funktion
* `execl`: Använd `execl` när du vill ersätta den aktuella processen helt med ett annat program. Det är lämpligt för fall där samtalsprogrammet inte behöver fortsätta efter det nya programmet har startat.
* `System`: Använd `System 'när du vill köra ett kommando som en separat process och behålla kontrollen över det ursprungliga programmet. Det är lämpligt för scenarier där du behöver köra skalkommandon eller omdirigera ingång/utgång.
Ytterligare anteckningar
* Det finns andra varianter av `execl`:` execv`, `execlp`,` execvp`, etc. som skiljer sig åt i hur de hanterar argument och sökvägar.
* Både "execl" och "system" har säkerhetskonsekvenser. Om du skickar användarutnyttjad ingång till dessa funktioner, se till att du sanerar den för att förhindra potentiella attacker för kodinjektion.