Wywołania systemowe Uniksa: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
M (co tu się)
Linia 4: Linia 4:


'''Wywołania systemowe Uniksa''' – zbiorowisko luźno powiązanych ze sobą funkcji ukrytych gdzieś w trzewiach biblioteki libc. Wywołana funkcja ''może'' się wykonać i (jeśli ma na to ochotę) zwrócić nic nie mówiące errno. Standardowe wywołania opisuje dokumentacja POSIX, którą można streścić następująco:
'''Wywołania systemowe Uniksa''' – zbiorowisko luźno powiązanych ze sobą funkcji ukrytych gdzieś w trzewiach biblioteki libc. Wywołana funkcja ''może'' się wykonać i (jeśli ma na to ochotę) zwrócić nic nie mówiące errno. Standardowe wywołania opisuje dokumentacja POSIX, którą można streścić następująco:
{{Cytat2|Zachowanie jest niezdefiniowane.}}
{{Cytat2|''Zachowanie jest niezdefiniowane.''}}
Początkującym programistom zalecamy wyrycie sobie tej złotej sentencji na ścianie nad [[monitor]]em i spoglądanie na nią w razie jakichkolwiek wątpliwości.
Początkującym programistom zalecamy wyrycie sobie tej złotej sentencji na ścianie nad [[monitor]]em i spoglądanie na nią w razie jakichkolwiek wątpliwości.

Zanim przejdziemy do części właściwej [[artykuł]]u, warto się zastanowić kogo właściwie obchodzi coś nazwane tak cudacznie jak ''wywołania systemowe Uniksa''? W normalnych warunkach powinno to być kilku [[Informatyk|piwniczaków]], którzy piszą niskopoziomowe programy na [[Linux]]ie. Jednak z jakiegoś powodu wykładowcy kierunków informatycznych katują [[student]]ów bezużytecznymi syscallami, rozszerzając grupę wtajemniczonych piwniczaków kilkukrotnie.


== Zarządzanie procesami ==
== Zarządzanie procesami ==
Linia 13: Linia 15:
=== <code>exec</code>, czyli jak nie przeładowywać funkcji ===
=== <code>exec</code>, czyli jak nie przeładowywać funkcji ===
Funkcja zazwyczaj wykonywana po <code>fork</code> żeby nieco złagodzić ból po bo bolesnej interakcji z jądrem. Pozwala procesowi przeszczepić sobie wszystkie organy innego programu, zostawiając jedynie PID i parę ''niezdefiniowanych'' interakcji. Jak łatwo się domyślić, funkcja <code>exec</code> wcale nie istnieje, a programista powinien skorzystać z <code>execl</code>, <code>execle</code>, <code>execlp</code>, <code>execv</code>, <code>execve</code> lub <code>execvp</code>. Zrozumienie co robią poszczególne wersje zostawiam jako ćwiczenie dla studentów.
Funkcja zazwyczaj wykonywana po <code>fork</code> żeby nieco złagodzić ból po bo bolesnej interakcji z jądrem. Pozwala procesowi przeszczepić sobie wszystkie organy innego programu, zostawiając jedynie PID i parę ''niezdefiniowanych'' interakcji. Jak łatwo się domyślić, funkcja <code>exec</code> wcale nie istnieje, a programista powinien skorzystać z <code>execl</code>, <code>execle</code>, <code>execlp</code>, <code>execv</code>, <code>execve</code> lub <code>execvp</code>. Zrozumienie co robią poszczególne wersje zostawiam jako ćwiczenie dla studentów.

=== <code>exit</code>, czyli najlepsze wyjście ===
Kiedy proces ma już dość życia na ziemskim padole łez, decyduje się na krok ostateczny i wykonuje funkcję <code>exit</code>. Za argument można podać 0 (czyli jest dobrze), albo jeden z pierdyliarda kodów błędu, które są kompletnie niezdefiniowane i nie mają żadnego znaczenia. W momencie popełnienia seppuku proces wysyła jeszcze rodzicowi liścik pożegnalny w postaci <code>SIGCHLD</code>. Jest to jeden z nielicznych sygnałów, który nie zabije trafionego procesu, ale za to musi zostać obsłużony ''bo tak musi być''.

=== <code>wait</code>, czyli antidotum na zombie ===

== Sygnały ==

== Obsługa plików i katalogów ==

Wersja z 00:40, 23 lis 2017

Zanim przejdziemy do części właściwej artykułu, warto się zastanowić po co w ogóle został napisany. Kogo właściwie obchodzi coś nazwane tak cudacznie jak wywołania systemowe Uniksa? W normalnych warunkach powinno to być kilku piwniczaków, którzy piszą niskopoziomowe programy na Linuxie. Jednak z jakiegoś powodu wykładowcy kierunków informatycznych katują studentów bezużytecznymi syscallami, rozszerzając grupę wtajemniczonych piwniczaków kilkukrotnie.

Nie zniechęciło cię to jeszcze?

Wywołania systemowe Uniksa – zbiorowisko luźno powiązanych ze sobą funkcji ukrytych gdzieś w trzewiach biblioteki libc. Wywołana funkcja może się wykonać i (jeśli ma na to ochotę) zwrócić nic nie mówiące errno. Standardowe wywołania opisuje dokumentacja POSIX, którą można streścić następująco:



Cquote2.svg

Zachowanie jest niezdefiniowane.
Cquote2.svg

Początkującym programistom zalecamy wyrycie sobie tej złotej sentencji na ścianie nad monitorem i spoglądanie na nią w razie jakichkolwiek wątpliwości.

Zanim przejdziemy do części właściwej artykułu, warto się zastanowić kogo właściwie obchodzi coś nazwane tak cudacznie jak wywołania systemowe Uniksa? W normalnych warunkach powinno to być kilku piwniczaków, którzy piszą niskopoziomowe programy na Linuxie. Jednak z jakiegoś powodu wykładowcy kierunków informatycznych katują studentów bezużytecznymi syscallami, rozszerzając grupę wtajemniczonych piwniczaków kilkukrotnie.

Zarządzanie procesami

fork, czyli robienie dzieci widelcem

Zaczynamy z grubej rury, czyli od funkcji, która potrafi stworzyć coś z niczego, zwrócić dwie różne wartości i na dodatek debilnie się nazywać. Jak sama nazwa wskazuje, fork dziabie kernel widelcem gdzieś pomiędzy planistą, a zarządzaniem pamięcią. Wkurzony nie na żarty kernel dla świętego spokoju robi procesowi dziecko i na odchodne wsadza mu widelec w wiadome miejsce.

exec, czyli jak nie przeładowywać funkcji

Funkcja zazwyczaj wykonywana po fork żeby nieco złagodzić ból po bo bolesnej interakcji z jądrem. Pozwala procesowi przeszczepić sobie wszystkie organy innego programu, zostawiając jedynie PID i parę niezdefiniowanych interakcji. Jak łatwo się domyślić, funkcja exec wcale nie istnieje, a programista powinien skorzystać z execl, execle, execlp, execv, execve lub execvp. Zrozumienie co robią poszczególne wersje zostawiam jako ćwiczenie dla studentów.

exit, czyli najlepsze wyjście

Kiedy proces ma już dość życia na ziemskim padole łez, decyduje się na krok ostateczny i wykonuje funkcję exit. Za argument można podać 0 (czyli jest dobrze), albo jeden z pierdyliarda kodów błędu, które są kompletnie niezdefiniowane i nie mają żadnego znaczenia. W momencie popełnienia seppuku proces wysyła jeszcze rodzicowi liścik pożegnalny w postaci SIGCHLD. Jest to jeden z nielicznych sygnałów, który nie zabije trafionego procesu, ale za to musi zostać obsłużony bo tak musi być.

wait, czyli antidotum na zombie

Sygnały

Obsługa plików i katalogów