c shell system programming tutorial with examples
Ten samouczek zawiera szczegółowy opis wywołania powłoki C ++ lub system (), które jest używane do wywoływania polecenia systemu operacyjnego z programu w języku C ++.
W świecie programowania większość interfejsów API systemu operacyjnego jest ukierunkowana na język C. C ++ zapewnia bezpośrednią obsługę wywoływania funkcji C z kodu C ++.
Dlatego w tym przypadku C ++ staje się również językiem programowania systemu. C ++ udostępnia polecenie „system ()”, które wywołuje polecenia systemu operacyjnego z programu C / C ++.
Innymi słowy, możemy powiedzieć, że polecenie system () wykonuje polecenie powłoki C ++. W tym samouczku szczegółowo omówimy wykonanie polecenia powłoki lub system ().
c # pytania do wywiadu dla doświadczonych
=> Poznaj serię prostych szkoleń C ++ tutaj.
Czego się nauczysz:
- Wywołania systemowe C ++
- Wstrzymanie systemu C ++
- Funkcje biblioteki System Vs
- Wniosek
- rekomendowane lektury
Wywołania systemowe C ++
Omówmy teraz wywołanie systemowe i jego szczegóły z przykładami.
Prototyp funkcji: int system (polecenie const char *);
Parametry:
command => C-string zawierający polecenie do wykonania.
Jeśli zostanie przekazany pusty wskaźnik, wykonywane jest tylko sprawdzenie procesora poleceń.
Wartość zwracana: Zwraca wartość int. Zwracana wartość zależy od tego, czy ciąg w stylu C jest określony jako argument, czy też określono wskaźnik zerowy.
- Wskaźnik zerowy => Jeśli określono wskaźnik zerowy, zwraca on wartość różną od zera, jeśli procesor poleceń jest dostępny, a zero w przeciwnym razie.
- Określone polecenie => Po określeniu polecenia zwykle zwracany jest kod stanu, ale zwracana wartość zależy od systemu i implementacji biblioteki.
Opis: Polecenie systemowe wykonuje polecenie podane jako argument. Wartość zwracana przez wykonanie polecenia jest zwykle zależna od systemu i implementacji biblioteki. Jeśli zamiast polecenia przekazywany jest pusty wskaźnik, to wywołanie to po prostu sprawdza, czy procesor poleceń jest dostępny, czy nie.
Wywołanie zwraca wartość niezerową, jeśli procesor poleceń jest dostępny, a zero w przeciwnym razie.
Używając system (), możemy uruchomić prawie każdą komendę, o ile pozwala na to system operacyjny. Na przykład, z równą łatwością możemy uruchomić system („dir”) lub system („ls”). W rzeczywistości możemy nawet wywołać kompilator GCC z naszego programu.
Poniżej wymieniono kilka przykładów poleceń systemowych, które są używane w C ++ do wykonywania poleceń powłoki C ++.
Przykład 1:
Ten przykład przedstawia demonstrację polecenia systemowego ze wskaźnikiem zerowym jako argumentem.
#include #include using namespace std; int main () { int i; cout<< 'Check if command processor is available...'< Wynik:

W powyższym programie najpierw sprawdzamy, czy procesor poleceń jest dostępny, przekazując null do wywołania systemowego. Jeśli dostępny jest procesor poleceń, wykonujemy polecenie dir. Jeśli procesor poleceń nie jest dostępny, kończymy program z błędem.
Przykład 2:
Poniższy przykład przedstawia wykonanie polecenia ls, w którym dane wyjściowe są przesyłane potokiem do pliku tekstowego „output.txt”. Po wykonaniu wywołania system () wypisujemy zawartość pliku 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(); }
Wynik:

Wynikiem powyższego programu jest zawartość pliku „output.txt”, który jest niczym innym jak wyjściem polecenia ls.
Przykład 3:
Poniższy program C ++ jest kontynuacją poprzedniego przykładu. Tutaj wykonujemy polecenie ls, które jest przekierowywane do output.txt przy użyciu wywołania systemowego. Następnie wykonujemy kolejne wywołanie systemowe za pomocą polecenia „rm” (remove), aby usunąć plik output.txt.
Następnie ponownie wykonujemy polecenie ls i tym razem przekierowujemy wyjście do innego pliku, czyli text.txt. Na koniec drukujemy zawartość pliku 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(); }
Wynik:

Wstrzymanie systemu C ++
Polecenie systemowe („pauza”) tymczasowo wstrzymuje wykonywanie operacji. Wywołanie systemowe („pauza”) jest zależne od systemu operacyjnego i wykonuje następujące kroki:
- To wywołanie tymczasowo zawiesza program, a także sygnalizuje systemowi operacyjnemu, aby otworzył powłokę systemu operacyjnego.
- System operacyjny przydziela pamięć na wykonanie polecenia.
- Następnie zwalnia pamięć, zamyka system operacyjny i wznawia zawieszony program.
Poniższy program przedstawia przykład wywołania systemowego („pauza”).
#include #include using namespace std; int main () { cout << 'Hello World!' << endl; system('pause'); return 0; }
Wynik:

Jak już wspomniano, wywołanie systemowe („pauza”) jest bardzo wolne i zależy od systemu operacyjnego. Kroki wymienione powyżej są trudne do wykonania.
Ponadto wywołania systemowe mogą również stwarzać pewne zagrożenia bezpieczeństwa. W związku z tym zwykle nie polegamy na wywołaniach systemowych („pauzach”) w naszych programach.
Zamiast tego możemy użyć cin.get, aby uzyskać taką samą funkcjonalność jak system („pauza”), jak pokazano w poniższym programie.
#include #include using namespace std; int main () { cout << 'This is SoftwareTestingHelp.com' << endl; cin.get(); // same as getchar() return 0; }
Wynik:

Jak pokazano powyżej, możemy użyć cin.get do wstrzymania wyjścia do momentu naciśnięcia dowolnego klawisza. W przeciwieństwie do systemu („pauza”) nie zależy od systemu operacyjnego. Nie podąża również za krokami wykonywanymi podczas uruchamiania systemu („pauza”).
Funkcje biblioteki System Vs
Wywołania systemowe są zależne od systemu operacyjnego. Są również bardzo powolne i wymagają dużej ilości zasobów. Funkcje biblioteki nie są zależne od systemu operacyjnego. Są szybsze i nie zużywają zbyt wielu zasobów ani pamięci.
Najczęstsze zastosowania wywołań systemowych to polecenia systemowe („pauza”) i systemowe („cls”). Funkcje biblioteczne to wbudowane funkcje, które zawierają funkcje związane z matematyką, we / wy pliku itp.
Wniosek
W tym samouczku powłoki C ++ omówiliśmy różne funkcje systemowe. Widzieliśmy przykłady przekazywania pustego wskaźnika do polecenia systemowego, który sprawdza, czy procesor poleceń jest dostępny, czy nie. Omówiliśmy również szczegółowo polecenie systemowe („pauza”) i jego alternatywy.
=> Sprawdź WSZYSTKIE samouczki C ++ tutaj.
rekomendowane lektury
- Sortowanie powłoki w C ++ z przykładami
- Samouczek dotyczący skryptów powłoki Unix z przykładami
- Typy pętli powłoki Unix: Do While Loop, For Loop, Until Loop w Uniksie
- Przykłady arytmetyki i operatorów logicznych w skrypcie powłoki Unix
- Funkcje skryptu powłoki systemu Unix z parametrami i zwrotem
- Zaawansowane skrypty powłoki Unix: tablice, operatory testów plików i łańcuchów, zmienne specjalne
- C ++ samouczek wyrażeń regularnych: Wyrażenia regularne w C ++ z przykładami