B1.5. Функции прямого ввода-вывода
size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream);
freadчитает из потока stream в массив ptr не более nobj объектов размера size . Она возвращает количество прочитанных объектов, которое может быть меньше заявленного. Для индикации состояния после чтения следует использовать feof и ferror .
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream);
fwriteпишет из массива ptr в stream nobj объектов размера size ; возвращает число записанных объектов, которое в случае ошибки меньше nobj .
B1.6. Функции позиционирования файла
int fseek(FILE *stream, long offset, int origin);
fseekустанавливает позицию для stream ; последующее чтение или запись будет производиться с этой позиции. В случае бинарного файла позиция устанавливается со смещением offset - относительно начала, если origin равен SEEK_SET; относительно текущей позиции, если origin равен SEEK_CUR; и относительно конца файла, если origin равен SEEK_END. Для текстового файла offset должен быть нулем или значением, полученным с помощью вызова функции ftell . При работе с текстовым файлом origin всегда должен быть равен SEEK_SET.
long ftell(FILE *stream);
ftellвозвращает текущую позицию потока stream или -1L, в случае ошибки.
void rewind(FILE *stream);
rewind(fp) делает то же, что и fseek(fp, 0L, SEEK_SET); clearerr(fp).
int fgetpos(FILE *stream, fpos_t *ptr);
fgetposзаписывает текущую позицию потока stream в *ptr для последующего использования ее в fsetpos . Тип fpos_tпозволяет хранить такого рода значения, В случае ошибки fgetpos возвращает ненулевое значение.
int fsetpos(FILE *stream, const fpos_t *ptr);
fsetposустанавливает позицию в stream , читая ее из *ptr , куда она была записана ранее с помощью fgetpos . В случае ошибки fsetpos возвращает ненулевое значение.
B1.7. Функции обработки ошибок
Многие функции библиотеки в случае ошибки или конца файла устанавливают индикаторы состояния. Эти индикаторы можно проверять и изменять. Кроме того, целое выражение errno(объявленное в ) может содержать номер ошибки, который дает дополнительную информацию о последней из обнаруженных ошибок.
void clearerr(FILE *stream);
clearerrочищает индикаторы конца файла и ошибки потока stream .
int feof(FILE *stream);
feofвозвращает ненулевое значение, если для потока stream установлен индикатор конца файла.
int ferror(FILE *stream);
ferrorвозвращает ненулевое значение, если для потока stream установлен индикатор ошибки.
void perror(const char *s);
perror(s) печатает s и зависимое от реализации сообщение об ошибке, соответствующее целому значению в errno , т. е. делает то же, что и обращение к функции fprintf вида
fprintf(stderr, "%s: %s\n", s, "сообщение об ошибке")
См. strerror в параграфе B3.
B2. Проверки класса символа: ‹ctype.h›
Заголовочный файл объявляет функции, предназначенные для проверок символов. Аргумент каждой из них имеет тип int и должен либо представлять собой EOF, либо быть значением unsigned char , приведенным к int ; возвращаемое значение тоже имеет тип int . Функции возвращают ненулевое значение ("истина"), когда аргумент c удовлетворяет описанному условию или принадлежит указанному классу символов, и нуль в противном случае.
isalnum(c) |
isalpha(c) или isdigit(c) есть истина |
isalpha(c) |
isupper(c) или islower(c) есть истина |
iscntrl(c) |
управляющий символ |
isdigit(c) |
десятичная цифра |
isgraph(c) |
печатаемый символ кроме пробела |
islower(c) |
буква нижнего регистра |
isprint(c) |
печатаемый символ, включая пробел |
ispunct(c) |
печатаемый символ кроме пробела, буквы или цифры |
isspace(c) |
пробел, смена страницы, новая строка, возврат каретки, табуляция, вертикальная табуляция |
isupper(c) |
буква верхнего регистра |
isxdigit(c) |
шестнадцатеричная цифра |
В наборе семибитовых ASCII-символов печатаемые символы находятся в диапазоне от 0x20(' ') до 0x7E('~'); управляющие символы - от 0( NUL ) до 0x1F( US ) и 0x7F ( DEL ).
Помимо перечисленных есть две функции, приводящие буквы к одному из регистров:
Читать дальше