DODATEK B BIBLIOTEKA STANDARDOWA
DODATEK B BIBLIOTEKA STANDARDOWA
Funkcje wejścia i wyjścia, typy i makra zdefiniowane w <stdio.h> stanowią prawie jedną trzecią zawartości biblioteki.
Strumień jest źródłem lub celem danych i może być skojarzony z dyskiem lub innym urządzeniem zewnętrznym. Biblioteka obsługuje strumienie tekstowe i binarne, jakkolwiek w niektórych systemach operacyjnych, w szczególności w systemie Unix, są one identyczne. Strumień tekstowy jest ciągiem wierszy; każdy wiersz zawiera zero lub więcej znaków i kończy się znakiem *\n\ W pewnych środowiskach programów strumienie tekstowe mogą wymagać przekształcenia do jakiejś innej postaci (np. przez zastąpienie znaków ’\n’ znakami powrotu karetki i nowego wiersza). Strumień binarny jest ciągiem nie przetworzonych bajtów reprezentujących wewnętrzne dane programu, mającym tę właściwość, że zapisany i ponownie w tym samym systemie odczytany, pozostaje bez zmian.
Strumień wiąże się z plikiem lub urządzeniem za pomocą otwarcia; to połączenie przerywa się zamykając strumień. Otwarcie pliku udostępnia wskaźnik do obiektu typu FILE (plik), w którym gromadzi się wszelkie informacje niezbędne do obsługi strumienia. Tam, gdzie to nie będzie prowadzić do nieporozumień, będziemy wymiennie używali określeń „wskaźnik do pliku” i „strumień”.
Gdy program rozpoczyna działanie, trzy strumienie są już otwarte: stdin (standardowe wejście), stdout (standardowe wyjście) i stderr (standardowe wyjście błędów).
Następujące funkcje operują na plikach (typ size_t jest typem wartości całkowitej bez znaku, otrzymywanej za pomocą operatora sizeof):
FILE *fopen(const char *filename, const char *mode)
Funkcja fopen otwiera wskazany argumentem filename plik i zwraca strumień lub NULL, jeśli próba otwarcia się nie powiedzie. Argument modę określa rodzaj dostępu do pliku; poniższe zestawienie zawiera jego dopuszczalne wartości:
otwórz plik tekstowy do czytania;
"w"
”a”
”r+”
”włM
”a+”
otwórz plik tekstowy do pisania; skasuj poprzednią zawartość, jeśli istnieje; dopisuj; otwórz lub utwórz plik tekstowy do dopisywania na końcu pliku; otwórz plik tekstowy do aktualizacji (tj. czytania i pisania); utwórz plik tekstowy do aktualizacji; skasuj poprzednią zawartość, jeśli istnieje;
dopisuj; otwórz lub utwórz plik tekstowy do aktualizacji, dopisując na końcu pliku.
Aktualizacja oznacza możliwość jednoczesnego pisania do i czytania go pliku; między czytaniem i pisaniem (lub odwrotnie) należy wywołać funkcję fflush lub funkcje pozycjonujące plik. Jeśli w argumencie modę po początkowej literze występuje litera b, np. "rb” lub ”w+b’\ oznacza to plik binarny. Nazwy plików są ograniczone do FILENAME_MAX znaków. Jednocześnie można otworzyć co najwyżej FOPEN_MAX plików.
FILE *freopen(const char *filename, const char *mode, FILE *stream)
Funkcja freopen otwiera wskazany plik (filename) przy wskazanym rodzaju dostępu (modę) i wiąże z nim strumień. Funkcja zwraca wartość stream lub NULL w przypadku błędu. Funkcji freopen zwykle używa się do zmiany plików związanych ze strumieniami stdin, stdout i stderr.
int fflush(FILE *stream)
Dla strumieni wyjściowych funkcja fflush powoduje wypisanie wszelkich zbuforo-wanych, lecz jeszcze nie wypisanych, danych; dla strumieni wejściowych efekt nie jest zdefiniowany. Funkcja zwraca EOF w przypadku błędu pisania, a zero w pozostałych przypadkach. Wywołanie fflush(NULL) wypisuje dane ze wszystkich strumieni wyjściowych.
int fclose(FILE *stream)
Funkcja felose wypisuje wszystkie nie wypisane dane związane ze strumieniem stream, kasuje wszystkie nie przeczytane dane z buforów wejściowych, zwalnia automatycznie przydzielone bufory i na koniec zamyka plik. Funkcja zwraca EOF w przypadku jakiegoś błędu, a zero w pozostałych przypadkach.
int remove(const char *filename)
Funkcja remove usuwa wskazany plik tak, że późniejsza próba otworzenia go zakończy się niepowodzeniem. Funkcja zwraca wartość różną od zera. jeśli usunięcie pliku się nie powiedzie.
int rename(const char *oldname, const char *newname)
Funkcja rename zmienia nazwę pliku (z oldname na newname); zwraca wartość różną od zera, jeśli ta zmiana się nie powiedzie.
FILE *tmpfile(void)
Funkcja tmpfile tworzy plik tymczasowy z rodzajem dostępu ,!wb+”; plik ten zostanie automatycznie usunięty po zamknięciu lub po normalnym zakończeniu programu. Funkcja zwraca strumień lub NULL, gdy nie jest w stanie utworzyć pliku.
char *tmpnam(char s[l__tmpnamj)
Wywołanie tmpnam(NULL) tworzy nazwę (ciąg znaków), która nie jest nazwą żadnego z istniejących plików, i zwraca wskaźnik do tej nazwy w wewnętrznej, staty-
323