getline(3) Library Functions Manual getline(3) NAZWA getline, getdelim - wprowadza lancuchy rozgraniczone BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include ssize_t getline(char **restrict lineptr, size_t *restrict n, FILE *restrict stream); ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delim, FILE *restrict stream); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): getline(), getdelim(): Od glibc 2.10: _POSIX_C_SOURCE >= 200809L Przed glibc 2.10: _GNU_SOURCE OPIS getline() odczytuje caly wiersz ze strumienia stream, przechowujac adres bufora zawierajacego tekst w *lineptr. Bufor jest zakonczony znakiem NULL i zawiera znak nowego wiersza, jesli go napotkano. Gdy *lineptr jest ustawione na NULL przed wywolaniem, to funkcja getline() przydziela bufor dla umieszczenia w nim zawartosci wiersza. Bufor ten powinien zostac zwolniony przez program uzytkownika nawet wowczas, gdy getline() zawiedzie. Alternatywnie, przed wywolaniem getline() *lineptr moze zawierac wskaznik do bufora przydzielonego za pomoca malloc() o rozmiarze *n bajtow. Gdy rozmiar bufora nie jest wystarczajacy do umieszczenia w nim odczytanego wiersza, getline() rozszerzy go do odpowiedniego rozmiaru za pomoca realloc(), modyfikujac *lineptr i *n, jesli bedzie to potrzebne. W kazdym razie, po pomyslnym wywolaniu *lineptr i *n beda zaktualizowane tak, aby odzwierciedlic, odpowiednio, adres i rozmiar bufora. getdelim() dziala jak getline() z tym wyjatkiem, ze jako argument delimiter mozna podac ogranicznik wiersza inny niz znak nowej wiersza. Podobnie jak dla getline(), znak ogranicznika nie jest dodawany, gdy nie wystepowal w danych wejsciowych przed osiagnieciem konca pliku. WARTOSC ZWRACANA Po pomyslnym zakonczeniu, getline() i getdelim() zwracaja liczbe odczytanych znakow, lacznie ze znakiem ogranicznika, ale nie wlaczajac konczacego bajtu null ('\0'). Wartosc ta moze sluzyc to wychwycenia znakow null zawartych w odczytanym wierszu. Obie funkcje zwracaja -1, gdy nie uda sie odczytac wiersza (wlaczajac w to probe czytania na koncu pliku). W razie niepowodzenia ustawiane jest errno, aby wskazac blad. Gdy *lineptr bylo ustawione na NULL przed wywolaniem, to bufor powinien zostac zwolniony przez program uzytkownika nawet w przypadku niepowodzenia. BLEDY EINVAL Bledne wartosci parametrow (n lub lineptr rowne NULL lub nieprawidlowy stream). ENOMEM Nie powiodl sie przydzial pamieci dla bufora wiersza. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |getline(), getdelim() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ STANDARDY POSIX.1-2008. HISTORIA GNU, POSIX.1-2008. PRZYKLADY #define _GNU_SOURCE #include #include int main(int argc, char *argv[]) { FILE *stream; char *line = NULL; size_t len = 0; ssize_t nread; if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } stream = fopen(argv[1], "r"); if (stream == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, stream)) != -1) { printf("Retrieved line of length %zd:\n", nread); fwrite(line, nread, 1, stdout); } free(line); fclose(stream); exit(EXIT_SUCCESS); } ZOBACZ TAKZE read(2), fgets(3), fopen(3), fread(3), scanf(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.9.1 15 czerwca 2024 r. getline(3)