c shell system programming tutorial with examples
Aquest tutorial proporciona un compte detallat de la trucada Shell C ++ o system () que s’utilitza per invocar l’ordre del sistema operatiu des d’un programa C ++.
Al món de la programació de programari, la majoria de les API del sistema operatiu estan dirigides a C. El llenguatge C ++ proporciona suport directe per trucar a funcions C des del codi C ++.
Per tant, en aquest cas, C ++ també es converteix en un llenguatge de programació del sistema. C ++ proporciona una ordre “system ()” per invocar les ordres del sistema operatiu des del programa C / C ++.
En altres paraules, podem dir que l'ordre system () executa una ordre d'intèrpret d'ordres C ++. En aquest tutorial, parlarem detalladament de l'execució de l'ordre shell o del sistema ().
=> Exploreu aquí la sèrie de formació C ++ simple.
Què aprendreu:
- Trucades al sistema C ++
- Pausa del sistema C ++
- Funcions de biblioteca contra el sistema
- Conclusió
- Lectura recomanada
Trucades al sistema C ++
Ara analitzem la trucada del sistema i les seves dades amb exemples.
Prototip de funció: sistema int (ordre const char *);
Paràmetres:
command => Una cadena C que conté l'ordre que cal executar.
Si es passa un punter nul, només es fa una comprovació del processador d'ordres.
Valor de retorn: Retorna un valor int. El valor retornat depèn de si la cadena d'estil C s'especifica com a argument o si s'especifica un punter nul.
- Punter nul => Si s’especifica el punter nul, torna un valor diferent de zero si el processador d’ordres està disponible i zero en cas contrari.
- S'ha especificat l'ordre => Quan s’especifica l’ordre, normalment es torna el codi d’estat, però el valor retornat depèn de la implementació del sistema i de la biblioteca.
Descripció: L'ordre del sistema executa una ordre subministrada com a argument. El valor retornat mitjançant l'execució de l'ordre sol dependre de la implementació del sistema i de la biblioteca. Si es passa un punter nul en lloc d'una ordre, aquesta trucada simplement comprova si el processador d'ordres està disponible o no.
La trucada retorna un valor diferent de zero si el processador d'ordres està disponible i zero en cas contrari.
Utilitzant system (), podem executar gairebé qualsevol ordre sempre que el sistema operatiu ho permeti. Per exemple, podem executar el sistema ('dir') o el sistema ('ls') amb la mateixa facilitat. De fet, fins i tot podem invocar el compilador GCC des del nostre programa.
A continuació es detallen alguns exemples d'ordres del sistema que s'utilitzen a C ++ per executar les ordres de l'intèrpret d'ordres C ++.
Exemple 1:
Aquest exemple mostra la demostració d'ordres del sistema amb un punter nul com a argument.
#include #include using namespace std; int main () { int i; cout<< 'Check if command processor is available...'< Sortida:

Al programa anterior, primer comprovem si el processador d’ordres està disponible passant nul a la trucada del sistema. Si el processador d'ordres està disponible, executem l'ordre dir. Si el processador d'ordres no està disponible, sortim del programa amb un error.
Exemple 2:
L'exemple següent mostra l'execució de l'ordre ls en què la sortida es condueix a un fitxer de text 'output.txt'. Després d’executar la trucada system (), imprimim el contingut de l’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(); }
Sortida:

La sortida del programa anterior és el contingut del fitxer 'output.txt' que no és res més que la sortida de l'ordre ls.
Exemple 3:
El programa C ++ següent és la continuació de l’exemple anterior. Aquí executem l'ordre ls que es redirigeix a output.txt mitjançant una trucada del sistema. A continuació, executem una altra trucada del sistema amb l'ordre 'rm' (remove) per eliminar el fitxer output.txt.
Després d'això, tornem a executar l'ordre ls i, aquesta vegada, redirigim la sortida a un altre fitxer, és a dir, text.txt. Finalment, imprimim el contingut del fitxer 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(); }
Sortida:

diferència entre les proves de fum i seny
Pausa del sistema C ++
L'ordre sistema ('pausa') atura temporalment les operacions quan s'executa. La trucada del sistema ('pausa') depèn del sistema operatiu i realitza els passos següents:
- Aquesta trucada suspèn el programa temporalment i també indica al sistema operatiu que obri el shell del sistema operatiu.
- El sistema operatiu assigna la memòria per executar l'ordre.
- A continuació, reparteix la memòria, surt del sistema operatiu i reprèn el programa suspès.
El programa següent mostra un exemple de trucada al sistema ('pausa').
#include #include using namespace std; int main () { cout << 'Hello World!' << endl; system('pause'); return 0; }
Sortida:

Com ja s'ha esmentat, la trucada del sistema ('pausa') és molt lenta i depèn del sistema operatiu. Els passos esmentats anteriorment són difícils d'executar.
A més, les trucades del sistema també poden comportar alguns riscos de seguretat. Per tant, normalment no confiem en les trucades del sistema ('pausa') als nostres programes.
En lloc d'això, podem utilitzar cin.get per aconseguir la mateixa funcionalitat que un sistema ('pausa') com es mostra al programa següent.
#include #include using namespace std; int main () { cout << 'This is SoftwareTestingHelp.com' << endl; cin.get(); // same as getchar() return 0; }
Sortida:

Com es mostra més amunt, podem utilitzar cin.get per aturar la sortida fins que premem alguna tecla. A diferència del sistema ('pausa') no depèn del sistema operatiu. Tampoc no segueix els passos realitzats quan executem el sistema ('pausa').
Funcions de biblioteca contra el sistema
Les trucades del sistema depenen del sistema operatiu. També són molt lents i tenen molts recursos. Les funcions de biblioteca no depenen del SO. Són més ràpids i no consumeixen massa recursos ni memòria.
Els usos més comuns de les trucades al sistema són les ordres del sistema ('pausa') i del sistema ('cls'). Les funcions de biblioteca són funcions integrades que contenen funcions relacionades amb matemàtiques, E / S de fitxers, etc.
Conclusió
En aquest tutorial de C ++ Shell, hem comentat diverses funcions del sistema. Vam veure exemples de passar un punter nul a l’ordre del sistema que comprova si el processador d’ordres està disponible o no. També vam discutir detalladament l'ordre del sistema ('pausa') i les seves alternatives.
=> Consulteu TOTS els tutorials de C ++ aquí.
Lectura recomanada
- Ordenació de shell en C ++ amb exemples
- Tutorial de script Unix Shell amb exemples
- Tipus de bucles de Shell Unix: feu mentre que bucle, per bucle, fins que bucle a Unix
- Exemples d'operadors aritmètics i booleans d'escriptura Shell Unix
- Funcions de scripts Unell Shell amb paràmetres i retorn
- Scripts avançats de Shell Unix: matrius, operadors de proves de fitxers i cadenes, variables especials
- Tutorial de regex de C ++: expressions regulars en C ++ amb exemples