C Programmeren

Coderen met fork en exec door voorbeeld in c

Coderen met fork en exec door voorbeeld in c
De titel van ons artikel bevat twee verschillende functies van de C-taal die optreden tijdens het uitvoeren van een programma in ons systeem. Helaas is er geen mogelijkheid om meer dan één programma tegelijk in C . te laten plaatsvinden. Er kan slechts één enkele taak op een bepaald moment plaatsvinden, wat betekent dat gelijktijdige programma's niet kunnen worden uitgevoerd. Het zorgt ervoor dat u wacht op de voltooiing van het ene proces om het andere uit te voeren. Om dit probleem met het oplossen van problemen te voorkomen, moet u uw programma mogelijk op een goede manier ontwikkelen, omdat u een goede ontwikkelaar bent. Linux fork () wordt gebruikt om het wachten te overwinnen en gelijktijdigheid in uw systeem mogelijk te maken. Het helpt bij het dupliceren van een nieuw proces en maakt een nieuw proces door het gedupliceerde proces aan te roepen. Het nieuwe proces is het onderliggende proces en het vorige wordt het bovenliggende proces genoemd.

Terwijl de functie exec () wordt gebruikt om het huidige bestaande programma te wijzigen met het nieuwe. Deze vervanging gebeurt door wijzigingen aan te brengen in de inhoud van een programma of een bestand. Dus het verschil tussen fork en exec is dat fork een nieuw proces maakt van het bestaande proces, en exec wordt gebruikt om het bestaande programma te vervangen door een nieuwe te maken.

Vereisten

Om een ​​c-programma op je Linux-systeem uit te voeren, moeten we er enkele vereisten op installeren install. Ga naar de terminal met behulp van de sneltoetsmethode Ctrl+Alt+T. Schrijf nu de volgende opdrachten om de man-pagina's te installeren:.

$ sudo apt install manpages-dev

Het zal alle bijbehorende pagina's installeren install.

Vooruit, om een ​​programma op Linux uit te voeren, moet je een codecompiler installeren. Dat wordt gebruikt om de code te compileren en uit te voeren. Voor dit doel zullen we GCC-repository's in ons systeem installeren.

$ sudo apt install GCC

Coderen met exec in c

Omdat we de man-pagina's in Linux hebben geïnstalleerd, zullen we het volgende commando gebruiken om de beschrijving met betrekking tot exec te zien. De primaire voorbeeldsyntaxis is als volgt:

Syntaxis

Exec (padnaam/bestand, argv );

Hier hebben we de "unistd" gebruikt.h"-header omdat het alle informatie bevat van families van de exec-functie.

$ man uitvoerend

Nu kunt u in de hierboven geciteerde afbeelding de soorten exec. Dit zijn de familie van exec-functies. Elke functie is voor een andere functie volgens dezelfde basis, "exec".”

Voorbeeld: Nu we verder gaan, zullen we de functionaliteit van exec beschrijven met behulp van een voorbeeld. We zullen één functie van exec nemen om de werking ervan te demonstreren, namelijk "execv.” Eerst maken we twee bestanden met de extensie “.c."Na hun creatie zullen we respectieve codes erin schrijven en uitvoeren om het resultaat te zien.

Overweeg een bestandsnaam "sample4".c”. Open het en gebruik de volgende code:. In deze code hebben we execv op een bepaalde manier gebruikt die hieronder wordt vermeld:.

Execv (“./sample4copy” , argumenten);

Het eerste deel bevat het nieuwe directorypad en het tweede deel toont de array met argumenten als een parameter die we hebben doorgegeven.

Voorbeeld4.c

Allereerst hebben we de id van het huidige proces afgedrukt. Ten tweede hebben we een karakterarray gemaakt met NULL aan het einde voor de beëindiging. Ten derde hebben we de functie sample4copy aangeroepen.

Sample4copy.c

Wanneer we de exec-functie () aanroepen, wordt de procesafbeelding gewijzigd. Onderstaande geciteerde afbeelding toont de code van sample4copy.c.

Hier hebben we alleen afdrukinstructies gebruikt om de id van het huidige proces te krijgen.

De uitvoer van de respectieve codes kan worden verkregen door de volgende opdrachten te gebruiken:.

$ GCC-o monster4 monster4.c
$ GCC -o sample4copy sample4copy.c
$ ./sample4

Zoals we eerder hebben beschreven, wordt het woord "GCC" gebruikt om de code te compileren en na het compileren wordt de code met succes uitgevoerd.

Volgens de afbeelding, de PID van sample4.c-bestand wordt eerst weergegeven zoals het werd gedeclareerd vóór de exec-aanroep. Nadat de functie exec() is aangeroepen, worden zowel de afdrukinstructies van het bestand sample4copy.c wordt uitgevoerd waarbij getpid() wordt gebruikt om de id van het proces te verkrijgen.

Coderen met een vork in c

De functie fork() maakt het onderliggende proces aan vanuit het bovenliggende proces. Het bevat ook twee headers, inclusief de fork-informatie erin.

Syntaxis:

Pid_t-vork (ongeldig);

We kunnen de man-pagina gebruiken voor hulp bij het gebruik

$ man vork

Voorbeeld: Overweeg nu een voorbeeld door een bestand "sample3" te maken.c”. We zullen de code in het bestand invoeren. Volgens de code hebben we de vorkstatus ingesteld op forkrank.

Voorbeeld3.c

We hebben de "als-anders"-verklaring gebruikt om de voorwaarde toe te passen. Eenvoudige printopdrachten worden hier gedeclareerd om het concept fork() te helpen begrijpen. Forkrank wordt eerst gedeclareerd als 0 en dan -1. Met een fork() zijn er nu twee processen die gelijktijdig werken. Uitvoer kan worden verkregen door dezelfde code te gebruiken, zoals hierboven gebruikt in het exec-voorbeeld.

$ GCC -o voorbeeld3.c
$./sample3

De uitvoer laat zien dat het onderliggende proces eerder wordt uitgevoerd dan het bovenliggende proces toen het bovenliggende proces wachtte. De wachtfunctie houdt in dat deze ervoor zorgt dat de bovenliggende functie wacht tenzij een van alle onderliggende processen wordt beëindigd.

Fork en Exec systeemaanroepen collectief

Hier nemen we twee bestanden met de naam "sample1".c” en “voorbeeld2.c”. Open eerst het bestand sample1.c en schrijf de code die hieronder in de afbeelding is toegevoegd. We hebben hier de systeemaanroep fork() gebruikt; wanneer het onderliggende proces wordt gemaakt, wordt p toegewezen met 0. Tijdens het gebruik van exec system-call, de sample1.c wordt vervangen door sample2.c.

Voorbeeld1.c

Voorbeeld2.c

Net als bij de voorbeelden die hierboven zijn besproken, bevat het voorbeeld2-bestand de printf-instructies erin. In voorbeeld1.c, het eerste printcommando wordt eerst uitgevoerd, daarna wordt de fork-functie aangeroepen, wanneer p== 0, dan wordt het onderliggende gedeelte uitgevoerd en sample2.c-bestand wordt uitgevoerd. De uitvoer bevat GCC om beide bestanden te compileren. Hier ouder monster1.c id en voorbeeld2.c id is anders omdat ze ouder en kind zijn.

Conclusie

In dit artikel hebben we zowel fork als exec afzonderlijk en gezamenlijk gebruikt om het gebruik en het concept gemakkelijk te begrijpen. Ik hoop dat deze tutorial voldoende inhoud bevat die zal leiden tot toegang tot het vergroten van je kennis.

Linkermuisknop werkt niet op Windows 10
Als u een speciale muis gebruikt met uw laptop of desktopcomputer, maar de linkermuisknop werkt niet not op Windows 10/8/7 om wat voor reden dan ook, ...
Cursor springt of beweegt willekeurig tijdens het typen in Windows 10
Als u merkt dat uw muiscursor vanzelf springt of beweegt, automatisch, willekeurig tijdens het typen op een Windows-laptop of -computer, dan kunnen en...
De scrollrichting van de muis en touchpads omkeren in Windows 10
Muis en Touchpads maken computergebruik niet alleen eenvoudig, maar ook efficiënter en minder tijdrovend. We kunnen ons een leven zonder deze apparate...