Wykonanie komendy systemu

Wykonanie komendy systemu – konstrukcja programistyczna zdefiniowana w określonym języku programowania umożliwiająca w kodzie źródłowym definiowanego algorytmu, wywołanie komendy systemu operacyjnego lub innego, wcześniej skompilowanego programu.

Stosowane rozwiązania

edytuj

Wywołanie komendy systemu operacyjnego lub innego programu dostępnego w systemie komputerowym, w kodzie źródłowym może być realizowane w różnych językach programowania lub ich implementacjach, za pomocą różnych, dostępnych w danym języku konstrukcji, takich jak:

Instrukcja

edytuj

Instrukcja realizująca wywołanie w kodzie źródłowym komendy systemu lub innego programu, jest definiowana w językach programowania jako instrukcja prosta. Przykładem jest instrukcja rozkazu RUN w języku Clipper, która ma postać

 <RUN | !*> <polecenie | wyrażenie_znakowe>

przy czym:

  • polecenie obejmuje zarówno komendy systemu operacyjnego wraz z ewentualnymi argumentami ich wywołania jak i wywołanie programu, z podaniem ewentualnie ścieżki dostępu do programu i argumentów wywołania
  • wyrażenie_znakowe jest wyrażeniem typu łańcuchowego, zawierającego zapis jak wyżej wywołania komendy lub programu.

Podprogram

edytuj

Podprogramy realizujące rozpatrywaną operację są najczęściej udostępniane w systemach programowania jako podprogramy standardowe: biblioteczne lub wbudowane. Wywołanie takiego podprogramu jest identyczne z wywołaniem innych podprogramów, a argumenty takiego wywołania specyfikują, w postaci wyrażenia łańcuchowego, komendę systemu lub program do wykonania.

Przykładowo w systemie programowania Turbo Pascal konstrukcja taka zaimplementowana została jako procedura podstawowego modułu System, dostępnego w każdym programie, bez deklaracji (w tym pakiecie programistycznym). Wywołanie procedury ma postać:

 Exec(ścieżka, argumenty);

przy czym:

  • ścieżka to nazwa komendy lub podprogramu z ewentualnie wyspecyfikowaną ścieżką dostępu do pliku programu
  • argumenty to argumenty wywołania komendy lub programu (jeżeli występują).

Oba ww. parametrytypu łańcuchowego. Wraz z powyższą procedurą zdefiniowano w tym module także funkcję udostępniającą kod zakończenia uruchomionego programu o nazwie DosExitCode.

W systemie Turbo Prolog, do tego samego celu służy specjalny predykat wbudowany o postaci:

system(PolecenieDos)
w którym Polecenie Dos ma postać literału łańcuchowego z komendą lub programem do wykonania
system("")
łańcuch pusty w wywołaniu oznacza przejście do systemu, do powłoki tekstowej DOS, powrót do programu następuje poleceniem exit.

W języku VBA zdefiniowana jest funkcja wbudowana Shell. Nagłówek tej funkcji ma postać:

Function Shell(P As String, I As Integer) As Double

gdzie:

  • P – nazwa wywoływanej aplikacji
  • I – sposób wyświetlania aplikacji
  • rezultat (typu Double) – identyfikator zadania (może być użyty w dalszej części kodu, np. do aktywacji uruchomionego zadania, i inne).

Sam system Windows oferuje w ramach biblioteki Windows API, funkcję ShellExecute, która może być użyta do uruchomienia z kodu źródłowego innego zadania, praktycznie w każdym systemie programowania przeznaczonym dla Windows.

Ograniczenia

edytuj

Do najważniejszych ograniczeń w stosowaniu powyższej konstrukcji, szczególnie w starszych systemach komputerowych, należy niewątpliwie ograniczenie w ilości dostępnej pamięci, w której musi być dość zasobów dla programy wywołującego, monitora systemu i programu wywoływanego. Mogą też powstawać problemy co do ilości otwartych plików, w przypadku istotnych ograniczeń zawartych również w starszych systemach.

Komunikacja pomiędzy programem wywoływanym a wywołującym, również jest w starszych systemach ograniczona do kodu zakończenia i/lub plików pośredniczących w wymianie danych. W nowych systemach wielozadaniowych, okienkowych, działają już zupełnie inne mechanizmy.

Bibliografia

edytuj

Zobacz też

edytuj