Libchecker:checker read buf ex

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/Функции/Чтение файла как текста/checker_read_buf_ex

Функция checker_read_buf_ex — чтение одного элемента ввода из текстового файла.

char *
checker_read_buf_ex(
        FILE *f,
        checker_error_func_t error_func,
        const char *name,
        int eof_error_flag,
        char *sbuf,
        size_t ssz,
        char **pdbuf,
        size_t *pdsz);

Функция считывает один элемент ввода из текстового файла f в память. Пробельные символы, возможно находящиеся во входном файле перед элементом ввода, игнорируются.

Параметр name — это дополнительный пояснительный текст, который будет выводиться в случае ошибки. В частности, этот текст может задавать название считываемого из файла параметра (например, "имя узла графа"). Параметр eof_error_flag определяет, должна ли диагностироваться ошибка в случае, если выполняется попытка чтения элемента ввода после конца файла. Если параметр eof_error_flag равен 0, то при попытке чтения после конца файла функция просто вернет значение NULL. Если же этот параметр имеет ненулевое значение, то при достижении конца файла будет вызвана функция вывода сообщения об ошибке, переданная в параметре error_func.

Если параметр pdbuf равен NULL или параметр pdsz равен NULL, то функция выполняет чтение элемента ввода в буфер ограниченного размера. Параметр sbuf задает адрес буфера, а ssz — его размер. Если элемент ввода имеет длину, большую, чем ssz - 1, то есть не умещается в буфер, вызывается функция error_func для выдачи сообщения об ошибке и завершения работы. В конец считанного элемента ввода добавляется нулевой байт. Функция возвращает адрес начала буфера (то есть значение параметра sbuf), либо NULL при попытке чтения после конца файла при значении параметра eof_error_flag равном 0.

Если параметр sbuf равен NULL или параметр ssz не превосходит 0, то функция выполняет чтение элемента ввода в динамическую память. В результате работы функции переменная, на которую указывает параметр pdbuf, будет содержать адрес считанного элемента ввода, а переменная, на которую указывает параметр pdsz, длину считанного элемента ввода (без учета завершающего нулевого байта). В конец считанного элемента ввода добавляется нулевой байт. Память для содержимого строки выделяется на куче с помощью функций xmalloc и xrealloc. Функция возвращает адрес начала считанной строки, либо NULL при попытке чтения после конца файла при значении параметра eof_error_flag равном 0.

Если параметр sbuf не равен NULL, параметр ssz больше 0, параметры pdbuf и pdsz не равны NULL, функция работает как комбинация двух вышеописанных режимов работы. Если длина элемента ввода такова, что он помещается в буфер sbuf размера ssz, то динамическая память не используется, и возвращается значение sbuf. Если же элемент ввода длиннее буфера, то он будет размещен в динамической памяти, и будет возвращен адрес начала считанной строки.

Функция не предназначена для работы с бинарными файлами. Если при чтении из файла был считан символ, который не можен находиться в текстовом файле, вызывается функция error_func для вывода сообщения об ошибке и завершения работы.

Если при чтении произошла ошибка ввода, программа завершается, и диагностируется внутренняя ошибка проверки. Для этого используется функция fatal_CF.