getline

Autres langues

Langue: pl

Autres versions - même langue

Version: 2001-10-07 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

NAZWA

getline, getdelim - wprowadzanie ³añcuchów rozgraniczonych

SK£ADNIA


#define _GNU_SOURCE

#include <stdio.h>



ssize_t getline(char **lineptr, size_t *n, FILE *stream);

ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);

 

OPIS

getline() odczytuje ca³± liniê, przechowuj±c adres bufora zawieraj±cego tekst w *lineptr. Bufor jest zakoñczony znakiem NUL i zawiera znak nowej linii, je¶li go napotkano.

Gdy *lineptr jest równe NULL, funkcja getline() przydziela bufor dla umieszczenia w nim zawarto¶ci linii, który to bufor musi zostaæ zwolniony przez program u¿ytkownika. Alternatywnie, przed wywo³aniem getline(), *lineptr mo¿e zawieraæ wska¼nik do bufora przydzielonego za pomoc± malloc() o rozmiarze *n bajtów. Gdy rozmiar bufora nie jest wystarczaj±cy do umieszczenia w nim odczytanej linii, getline() rozszerzy bufor do odpowiedniego rozmiaru za pomoc± realloc(), modyfikuj±c *lineptr i *n, je¶li bêdzie to potrzebne. W ka¿dym razie, po pomy¶lnym wywo³aniu *lineptr i *n bêd± zaktualizowane tak, aby odzwierciedliæ, odpowiednio, adres i rozmiar bufora.

getdelim() dzia³a jak getline(), z tym wyj±tkiem, ¿e jako argument delimiter mo¿na podaæ ogranicznik linii inny ni¿ znak nowej linii. Podobnie jak dla getline(), znak ogranicznika nie jest dodawany, gdy nie wystêpowa³ w danych wej¶ciowych przed osi±gniêciem koñca pliku.

WARTO¦Æ ZWRACANA

Po pomy¶lnym zakoñczeniu, getline() i getdelim() zwracaj± liczbê odczytanych znaków, ³±cznie ze znakiem ogranicznika, ale nie w³±czaj±c koñcz±cego znaku NUL. Warto¶æ ta mo¿e s³u¿yæ to wychwycenia znaków NUL zawartych w odczytanaj linii.

Obie funkcje zwracaj± -1, gdy nie uda siê odczytaæ linii (w³±czaj±c w to próbê czytania na koñcu pliku).

B£ÊDY

EINVAL
B³êdne warto¶ci parametrów (n lub lineptr równe NULL, lub nieprawid³owy stream ).

PRZYK£AD


#define _GNU_SOURCE

#include <stdio.h>

#include <stdlib.h>



int main(void)

{

        FILE * fp;

        char * line = NULL;

        size_t len = 0;

        ssize_t read;

        fp = fopen("/etc/motd", "r");

        if (fp == NULL)

                exit(EXIT_FAILURE);

        while ((read = getline(&line, &len, fp)) != -1) {

                printf("Odczytano liniê o d³ugo¶ci %zu :\n", read);

                printf("%s", line);

        }

        if (line)

                free(line);

        return EXIT_SUCCESS;

}

ZGODNE Z

Zarówno getline(), jak i getdelim() s± rozszerzeniami GNU. S± one dostêpne od libc 4.6.27.

ZOBACZ TAK¯E

read(2), fopen(3), fread(3), gets(3), fgets(3), scanf(3)