- bullseye-backports 4.18.1-1~bpo11+1
GETLINE(3) | Руководство программиста Linux | GETLINE(3) |
ИМЯ¶
getline, getdelim - разделяет входные данные на строки
СИНТАКСИС¶
#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);
getline(), getdelim():
- Начиная с glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- До glibc 2.10:
- _GNU_SOURCE
ОПИСАНИЕ¶
Функция getline() считывает целую строку из stream, сохраняет адрес буфера с текстом в *lineptr. Буфер завершается null и включает символ новой строки, если был найден разделитель для новой строки.
Если *lineptr равно NULL и *n равно 0 перед вызовом, то getline() выделит буфер для хранения строки. Этот буфер должен быть высвобожден программой пользователя, даже если getline() завершилась с ошибкой.
Как альтернатива, перед вызовом getline(), *lineptr может содержать указатель на буфер, выделенный с помощью malloc(3) размером *n байтов. Если буфер недостаточно велик для размещения строки, то getline() изменяет размер буфера с помощью realloc(3), обновляя *lineptr и *n при необходимости.
В любом случае при успешном выполнении вызова *lineptr и *n будут содержать правильный адрес буфера и его размер, соответственно.
Функция getdelim() работает аналогично getline(), за исключением того, что в аргументе delimiter можно задать разделитель строки, отличный от символа новой строки. Как и с getline(), символ-разделитель не добавляется, если его было в входных данных до конца файла.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении getline() и getdelim() возвращают количество считанных символов, включая символ разделителя, но не включая завершающий байт null ('\0'). Это значение может использоваться для обработки встроенных байтов null при чтении строки.
Обе функции возвращают -1 при ошибках чтения строки (включая условие достижения конца файла). При возникновении ошибки в errno сохраняется её значение.
ОШИБКИ¶
АТРИБУТЫ¶
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
getline(), getdelim() | Безвредность в нитях | MT-Safe |
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Изначально, функции getline() и getdelim() были расширениями GNU. Позднее они были стандартизированы в POSIX.1-2008.
ПРИМЕРЫ¶
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) {
FILE *stream;
char *line = NULL;
size_t len = 0;
ssize_t nread;
if (argc != 2) {
fprintf(stderr, "Использование: %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); }
СМ. ТАКЖЕ¶
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
1 ноября 2020 г. | GNU |