c shell system programming tutorial with examples
Questo tutorial fornisce un resoconto dettagliato della chiamata C ++ Shell o system () utilizzata per richiamare il comando del sistema operativo da un programma C ++.
Nel mondo della programmazione software, la maggior parte delle API del sistema operativo sono destinate a C. Il linguaggio C ++ fornisce supporto diretto per chiamare funzioni C dal codice C ++.
Quindi, in questo caso, C ++ diventa anche un linguaggio di programmazione di sistema. C ++ fornisce un comando 'system ()' per richiamare i comandi del sistema operativo dal programma C / C ++.
In altre parole, possiamo dire che il comando system () esegue un comando della shell C ++. In questo tutorial, discuteremo in dettaglio l'esecuzione del comando di shell o system ().
=> Esplora la serie di formazione C ++ semplice qui.
Cosa imparerai:
- Chiamate di sistema C ++
- Pausa di sistema C ++
- Funzioni di sistema vs libreria
- Conclusione
- Lettura consigliata
Chiamate di sistema C ++
Ora parliamo della chiamata di sistema e dei suoi dettagli con esempi.
Prototipo di funzione: int sistema (comando const char *);
Parametri:
comando => Una stringa C contenente il comando da eseguire.
Se viene passato un puntatore nullo, viene eseguito solo un controllo per il processore dei comandi.
Valore di ritorno: Restituisce un valore int. Il valore restituito dipende dal fatto che la stringa in stile C sia specificata come argomento o se viene specificato un puntatore null.
- Puntatore nullo => Se viene specificato il puntatore nullo, restituisce un valore diverso da zero se il processore dei comandi è disponibile e zero in caso contrario.
- Il comando specificato => Quando il comando viene specificato, il codice di stato viene solitamente restituito ma il valore restituito dipende dal sistema e dall'implementazione della libreria.
Descrizione: Il comando di sistema esegue un comando fornito come argomento. Il valore restituito dall'esecuzione del comando dipende generalmente dall'implementazione del sistema e della libreria. Se viene passato un puntatore nullo invece di un comando, questa chiamata controlla semplicemente se il processore dei comandi è disponibile o meno.
La chiamata restituisce un valore diverso da zero se il processore dei comandi è disponibile e zero in caso contrario.
Usando system (), possiamo eseguire quasi tutti i comandi a condizione che il sistema operativo lo consenta. Per esempio, possiamo eseguire il sistema ('dir') o il sistema ('ls') con la stessa facilità. In effetti, possiamo persino richiamare il compilatore GCC dal nostro programma.
Di seguito sono elencati alcuni esempi di comandi di sistema utilizzati in C ++ per eseguire i comandi della shell C ++.
tipi di test nel test del software
Esempio 1:
Questo esempio mostra la dimostrazione del comando di sistema con un puntatore nullo come argomento.
#include #include using namespace std; int main () { int i; cout<< 'Check if command processor is available...'< Produzione:
Nel programma precedente, controlliamo prima se il processore dei comandi è disponibile passando null alla chiamata di sistema. Se il processore dei comandi è disponibile, eseguiamo il comando dir. Se il processore dei comandi non è disponibile, usciamo dal programma con un errore.
Esempio 2:
L'esempio seguente mostra l'esecuzione del comando ls in cui l'output viene reindirizzato a un file di testo 'output.txt'. Dopo che la chiamata system () è stata eseguita, stampiamo il contenuto del file output.txt.
differenza tra albero b e albero b
#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(); }
Produzione:
L'output del programma sopra è il contenuto del file 'output.txt' che non è altro che l'output del comando ls.
Esempio 3:
Il programma C ++ di seguito è la continuazione dell'esempio precedente. Qui eseguiamo il comando ls che viene reindirizzato a output.txt utilizzando una chiamata di sistema. Quindi eseguiamo un'altra chiamata di sistema con il comando 'rm' (remove) per rimuovere il file output.txt.
Dopodiché, eseguiamo di nuovo il comando ls e questa volta reindirizziamo l'output su un altro file, ad esempio text.txt. Infine, stampiamo il contenuto del file 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(); }
Produzione:
Pausa di sistema C ++
Il comando di sistema ('pause') interrompe temporaneamente le operazioni quando vengono eseguite. La chiamata di sistema ('pausa') dipende dal sistema operativo ed esegue i seguenti passaggi:
- Questa chiamata sospende temporaneamente il programma e segnala anche al sistema operativo di aprire la shell del sistema operativo.
- Il sistema operativo alloca la memoria per l'esecuzione del comando.
- Quindi rilascia la memoria, esce dal sistema operativo e riprende il programma sospeso.
Il seguente programma mostra un esempio di chiamata di sistema ('pausa').
#include #include using namespace std; int main () { cout << 'Hello World!' << endl; system('pause'); return 0; }
Produzione:
Come già accennato, la chiamata di sistema ('pausa') è molto lenta e dipende dal sistema operativo. I passaggi sopra menzionati sono pesanti da eseguire.
Inoltre, le chiamate di sistema possono anche comportare alcuni rischi per la sicurezza. Quindi di solito non facciamo affidamento sulle chiamate di sistema ('pausa') nei nostri programmi.
Invece, possiamo usare cin.get per ottenere la stessa funzionalità di un sistema ('pausa') come mostrato nel programma seguente.
#include #include using namespace std; int main () { cout << 'This is SoftwareTestingHelp.com' << endl; cin.get(); // same as getchar() return 0; }
Produzione:
Come mostrato sopra, possiamo usare cin.get per mettere in pausa l'output finché non premiamo un tasto. A differenza del sistema ('pausa') non dipende dal sistema operativo. Inoltre, non segue i passaggi eseguiti durante l'esecuzione del sistema ('pausa').
Funzioni di sistema vs libreria
Le chiamate di sistema dipendono dal sistema operativo. Sono anche molto lenti e pesanti sulle risorse. Le funzioni della libreria non dipendono dal sistema operativo. Sono più veloci e non consumano troppe risorse o memoria.
Gli usi più comuni delle chiamate di sistema sono per i comandi di sistema ('pausa') e di sistema ('cls'). Le funzioni di libreria sono funzioni integrate che contengono funzioni relative a matematica, I / O di file, ecc.
Conclusione
In questo tutorial sulla shell C ++, abbiamo discusso di varie funzioni di sistema. Abbiamo visto esempi di passaggio di un puntatore nullo al comando di sistema che controlla se il processore dei comandi è disponibile o meno. Abbiamo anche discusso in dettaglio il comando di sistema ('pausa') e le sue alternative.
=> Controlla TUTTI i tutorial C ++ qui.
Lettura consigliata
- Ordinamento della shell in C ++ con esempi
- Tutorial sullo scripting della shell di Unix con esempi
- Tipi di cicli di shell Unix: Do While Loop, For Loop, Until Loop in Unix
- Esempi di operatori aritmetici e booleani di script di shell Unix
- Funzioni di script di shell Unix con parametri e ritorno
- Scripting shell Unix avanzato: array, operatori di test di file e stringhe, variabili speciali
- Esercitazione su espressioni regolari C ++: espressioni regolari in C ++ con esempi