c shell system programming tutorial with examples
Dieses Tutorial enthält eine detaillierte Beschreibung der C ++ - Shell oder des system () -Aufrufs, mit dem der Betriebssystembefehl von einem C ++ - Programm aus aufgerufen wird.
In der Welt der Softwareprogrammierung sind die meisten Betriebssystem-APIs auf C ausgerichtet. Die Sprache C ++ bietet direkte Unterstützung für das Aufrufen von C-Funktionen aus dem C ++ - Code.
In diesem Fall wird C ++ daher auch zu einer Systemprogrammiersprache. C ++ bietet einen Befehl 'system ()' zum Aufrufen der Betriebssystembefehle aus dem C / C ++ - Programm.
Mit anderen Worten können wir sagen, dass der Befehl system () einen C ++ - Shell-Befehl ausführt. In diesem Tutorial werden wir die Ausführung des Shell-Befehls oder von system () ausführlich erläutern.
=> Entdecken Sie hier die einfache C ++ - Schulungsserie.
Was du lernen wirst:
- C ++ - Systemaufrufe
- C ++ System Pause
- System gegen Bibliotheksfunktionen
- Fazit
- Literatur-Empfehlungen
C ++ - Systemaufrufe
Lassen Sie uns nun den Systemaufruf und seine Details anhand von Beispielen diskutieren.
Funktionsprototyp: int system (Befehl const char *);
Parameter:
Befehl => Ein C-String, der den auszuführenden Befehl enthält.
Wenn ein Nullzeiger übergeben wird, wird nur eine Überprüfung für den Befehlsprozessor durchgeführt.
Rückgabewert: Gibt einen int-Wert zurück. Der zurückgegebene Wert hängt davon ab, ob die Zeichenfolge im C-Stil als Argument oder ein Nullzeiger angegeben wird.
- Nullzeiger => Wenn der Nullzeiger angegeben ist, gibt er einen Wert ungleich Null zurück, wenn der Befehlsprozessor verfügbar ist, andernfalls Null.
- Der angegebene Befehl => Wenn der Befehl angegeben wird, wird normalerweise der Statuscode zurückgegeben, der zurückgegebene Wert hängt jedoch von der System- und Bibliotheksimplementierung ab.
Beschreibung: Der Systembefehl führt einen als Argument angegebenen Befehl aus. Der durch Ausführen des Befehls zurückgegebene Wert ist normalerweise system- und bibliotheksimplementierungsabhängig. Wenn anstelle eines Befehls ein Nullzeiger übergeben wird, prüft dieser Aufruf einfach, ob der Befehlsprozessor verfügbar ist oder nicht.
Der Aufruf gibt einen Wert ungleich Null zurück, wenn der Befehlsprozessor verfügbar ist, andernfalls Null.
Mit system () können wir fast jeden Befehl ausführen, sofern das Betriebssystem dies zulässt. Beispielsweise, Wir können das System ('dir') oder das System ('ls') mit gleicher Leichtigkeit ausführen. Tatsächlich können wir sogar den GCC-Compiler aus unserem Programm aufrufen.
Im Folgenden sind einige Beispiele für Systembefehle aufgeführt, die in C ++ zum Ausführen der C ++ - Shell-Befehle verwendet werden.
Beispiel 1:
Dieses Beispiel zeigt die Demonstration des Systembefehls mit einem Nullzeiger als Argument.
#include #include using namespace std; int main () { int i; cout<< 'Check if command processor is available...'< Ausgabe:
Im obigen Programm prüfen wir zunächst, ob der Befehlsprozessor verfügbar ist, indem wir dem Systemaufruf null übergeben. Wenn der Befehlsprozessor verfügbar ist, führen wir den Befehl dir aus. Wenn der Befehlsprozessor nicht verfügbar ist, beenden wir das Programm mit einem Fehler.
So öffnen Sie eine Torrent-Datei auf dem PC
Beispiel 2:
Das folgende Beispiel zeigt die Ausführung des Befehls ls, bei dem die Ausgabe an eine Textdatei 'output.txt' weitergeleitet wird. Nachdem der system () -Aufruf ausgeführt wurde, drucken wir den Inhalt der output.txt.
#include #include #include int main() { std::system('ls -l >output.txt'); // execute the UNIX command 'ls -l >test.txt' std::cout << std::ifstream('output.txt').rdbuf(); }
Ausgabe:
Die Ausgabe des obigen Programms ist der Inhalt der Datei 'output.txt', die nichts anderes als die Ausgabe des Befehls ls ist.
Beispiel 3:
Das folgende C ++ - Programm ist die Fortsetzung des vorherigen Beispiels. Hier führen wir den Befehl ls aus, der mithilfe eines Systemaufrufs in output.txt umgeleitet wird. Dann führen wir einen weiteren Systemaufruf mit dem Befehl 'rm' (remove) aus, um die Datei output.txt zu entfernen.
Danach führen wir den Befehl ls erneut aus und leiten diesmal die Ausgabe in eine andere Datei um, d. H. Text.txt. Schließlich drucken wir den Inhalt der Datei text.txt.
#include #include #include using namespace std; int main() { // execute the UNIX command 'ls -l >output.txt' system('ls -l >output.txt'); cout << ifstream('output.txt').rdbuf(); // execute the UNIX command 'rm output.txt' system('rm output.txt'); cout<<'removed output.txt'<text.txt' cout<<'ls after removing output.txt & creating text.txt'<text.txt'); cout << ifstream('text.txt').rdbuf(); }
Ausgabe:
C ++ System Pause
Der Systembefehl ('Pause') hält die Operationen vorübergehend an, wenn sie ausgeführt werden. Der Systemaufruf ('Pause') ist betriebssystemabhängig und führt die folgenden Schritte aus:
- Dieser Aufruf unterbricht das Programm vorübergehend und signalisiert dem Betriebssystem, die Betriebssystem-Shell zu öffnen.
- Das Betriebssystem weist den Speicher für die Ausführung des Befehls zu.
- Anschließend wird der Speicher freigegeben, das Betriebssystem beendet und das angehaltene Programm fortgesetzt.
Das folgende Programm zeigt ein Beispiel für einen Systemaufruf („Pause“).
#include #include using namespace std; int main () { cout << 'Hello World!' << endl; system('pause'); return 0; }
Ausgabe:
Wie bereits erwähnt, ist der Systemaufruf („Pause“) sehr langsam und vom Betriebssystem abhängig. Die oben genannten Schritte sind schwer auszuführen.
Darüber hinaus können die Systemaufrufe auch einige Sicherheitsrisiken bergen. Daher verlassen wir uns normalerweise nicht auf die Systemaufrufe („Pause“) in unseren Programmen.
Stattdessen können wir cin.get verwenden, um die gleiche Funktionalität wie ein System zu erreichen („Pause“), wie im folgenden Programm gezeigt.
#include #include using namespace std; int main () { cout << 'This is SoftwareTestingHelp.com' << endl; cin.get(); // same as getchar() return 0; }
Ausgabe:
Wie oben gezeigt, können wir cin.get verwenden, um die Ausgabe anzuhalten, bis wir eine Taste drücken. Im Gegensatz zum System ('Pause') ist nicht betriebssystemabhängig. Es folgt auch nicht den Schritten, die beim Ausführen des Systems ausgeführt werden („Pause“).
System gegen Bibliotheksfunktionen
Die Systemaufrufe sind betriebssystemabhängig. Sie sind auch sehr langsam und ressourcenintensiv. Bibliotheksfunktionen sind nicht vom Betriebssystem abhängig. Sie sind schneller und verbrauchen nicht zu viele Ressourcen oder Speicher.
Systemaufrufe werden am häufigsten für Systembefehle („Pause“) und Systembefehle („cls“) verwendet. Bibliotheksfunktionen sind integrierte Funktionen, die Funktionen in Bezug auf Mathematik, Datei-E / A usw. enthalten.
Fazit
In diesem C ++ Shell-Tutorial haben wir verschiedene Systemfunktionen besprochen. Wir haben Beispiele für die Übergabe eines Nullzeigers an einen Systembefehl gesehen, der prüft, ob der Befehlsprozessor verfügbar ist oder nicht. Wir haben auch den Systembefehl („Pause“) und seine Alternativen ausführlich besprochen.
=> Überprüfen Sie ALLE C ++ - Tutorials hier.
Literatur-Empfehlungen
- Shell-Sortierung in C ++ mit Beispielen
- Unix Shell Scripting Tutorial mit Beispielen
- Unix-Shell-Schleifentypen: Do While-Schleife, For-Schleife, bis Schleife in Unix
- Beispiele für arithmetische und boolesche Unix-Shell-Skriptoperatoren
- Unix-Shell-Skriptfunktionen mit Parametern und Return
- Erweitertes Unix-Shell-Scripting: Arrays, Datei- und String-Testoperatoren, spezielle Variablen
- C ++ Regex Tutorial: Reguläre Ausdrücke in C ++ mit Beispielen