7 WEJŚCIE I WYJŚCIE
W punkcie 8.7 pokażemy taką realizację dystrybutora pamięci podobnego do malloc, w którym przydzielane bloki mogą być zwalniane w dowolnej kolejności.
W standardowym nagłówku <math.h> zadeklarowano ponad dwadzieścia funkcji matematycznych. Tutaj wymieniamy tylko te najczęściej używane. Każda z nich oczekuje jednego lub dwóch argumentów typu double i zwraca wartość typu double.
sin(x) |
sinus jc; wartość x w radianach |
cos(;t) |
cosinus jc; wartość x w radianach |
atan2(y^c) |
arcus tangens y/x\ wartość w radianach |
exp(;t) |
funkcja wykładnicza ex |
iog(*) |
logarytm naturalny x (przy podstawie e)\ x > 0 |
logi 0(x) |
logarytm x (przy podstawie 10); x > 0 |
pow(x,y) |
funkcja potęgowa xy |
sqrt(x) |
pierwiastek kwadratowy z x\ x > 0 |
fabs(x) |
wartość bezwzględna x |
Funkcja rand() oblicza ciąg pseudolosowych liczb całkowitych z przedziału od zera do RAND_MAX; ta górna wartość jest zdefiniowana w nagłówku <stdlib.h>. Jednym ze sposobów obliczenia losowych liczb zmiennopozycyjnych większych lub równych zero, lecz mniejszych niż jeden, jest zdefiniowanie makra
#define frand() ((double) rand() / (RAND__MAX+1.0))
(Jeśli w Twojej bibliotece występuje funkcja obliczająca losowe liczby zmiennopozycyjne, to należy się spodziewać, że statystyczne właściwości tej funkcji są lepsze niż właściwości tak zdefiniowanego makra.)
Funkcja srand(unsigned) określa zarodek (ang. seed) dla funkcji rand. Zalecaną przez standard przenośną implementację funkcji rand i srand opisano w p. 2.7.
Ćwiczenie 7.9. Funkcje podobne do isupper można zrealizować tak, aby oszczędzały pamięć albo oszczędzały czas. Zbadaj obie możliwości.
System operacyjny Unix oferuje swoje usługi poprzez zestaw odwołań systemowych. W rzeczywistości są to funkcje rezydujące wewnątrz systemu operacyjnego, które mogą być wywoływane w programach użytkowników. Tutaj wyjaśniamy, jak w programach w języku C skorzystać z kilku najważniejszych odwołań systemowych. Jeśli pracujesz z systemem Unix, te informacje mogą Ci się bezpośrednio przydać. Czasem trzeba bowiem odwołać się do systemu, by osiągnąć maksymalną sprawność programu lub zastosować taką usługę systemu, dla której nie ma funkcji w bibliotece standardowej. A jeżeli nawet korzystasz z języka C w innym systemie operacyjnym, to po przestudiowaniu przykładów będziesz mieć lepsze wyobrażenie o programowaniu w języku C; szczegóły mogą ulec zmianie, ale podobny kod można znaleźć w każdym systemie. Biblioteka standardowa ANSI C w wielu przypadkach jest wzorowana na możliwościach systemu Unix, zatem nasze przykłady mogą Ci się przydać także do , lepszego zrozumienia samej biblioteki.
Materiał tego rozdziału podzielono na trzy zasadnicze części: wejście-wyjście, system plików oraz zarządzanie pamięcią. W dwóch pierwszych zakłada się umiarkowaną znajomość zewnętrznych właściwości systemu Unix.
W rozdziale 7 zajmowaliśmy się obsługą wejścia i wyjścia, ujednoliconą dla różnych systemów operacyjnych. W każdym konkretnym systemie podprogramy z biblioteki standardowej muszą korzystać z mechanizmów obowiązujących w tym właśnie systemie. W kilku następnych punktach opiszemy te odwołania systemowe obowiązujące w systemie Unix, które realizują wejście i wyjście, a następnie pokażemy, jak posługując się nimi można zaprogramować niektóre elementy biblioteki standardowej.
ty systemie Unix wszelkie operacje wejścia i wyjścia wyraża się za pomocą czytania * plików lub pisania do plików. Wszystkie bowiem urządzenia zewnętrzne - nawet klawiatura i ekran - są plikami wchodzącymi w skład systemu plików. Oznacza to, że
Język ANSI C 225