«Библиотека поддержки языка C Cygnus.» часть 2

       2. Макросы и функции определения типов символов (ctype.h)

       В этой главе описаны макросы (которые также доступны как
процедуры) для классификации знаков в различные категории (алфавитные,
числовые, yпpавляющие, пpобелы и так далее) или для выполнения простых
операций с ними.

       Макросы определяются в файле ctype.h.

       2.1 isalnum - пpедикат буквы или цифpы

     #include
     int isalnum(int c);

       isalnum по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом буквы или цифры, и ноль - в противном
случае. Этот предикат определен для всех значений типа int.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isalnum.

       isalnum возвращает ненулевое значение, если c - буква (a-z или
a-z) или цифра (0-9).

       Стандарт ANSI требует наличия функции isalnum.

       Никаких процедур ОС не требуется.

       2.2 isalpha - пpедикат буквы

     #include
     int isalpha(int c);

       isalpha по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом буквы, и ноль - в противном случае.
Этот предикат определен только если isacii(c) равно true или с
является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isalpha.

       isalpha возвращает ненулевое значение, если c - буква (A-Z или
a-z).

       Стандарт ANSI требует наличия функции isalpha.

       Никаких процедур ОС не требуется.

       2.3 isascii - пpедикат знака ASCII

     #include
     int isascii(int c);

       isascii выдает 0, если c - знак ASCII, и ноль - в противном
случае. Этот предикат определен для всех значений типа int.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isascii.

       isascii возвращает ненулевое значение, если младший байт c
лежит между 0 и 127 (0x00-0x7f)

       Стандарт ANSI требует наличия функции isascii.

       Никаких процедур ОС не требуется.

       2.4 iscntrl - пpедикат управляющего символа

     #include
     int iscntrl(int c);

       iscntrl по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом управляющего знака, и ноль - в
противном случае. Этот предикат определен только если isacii(c) равно
true или с является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
iscntrl.

       iscntrl возвращает ненулевое значение, если c -знак удаления
или простой управляющий знак (0x7f или 0x00-0x1f).

       Стандарт ANSI требует наличия функции iscntrl.

       Никаких процедур ОС не требуется.

       2.5 isdigit - пpедикат десятичной цифpы

     #include
     int isdigit(int c);

       isdigit по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом десятичной цифры, и ноль - в
противном случае. Этот предикат определен только если isacii(c) равно
true или с является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isdigit.

       isdigit возвращает ненулевое значение, если c - десятичная
цифра (0-9).

       Стандарт ANSI требует наличия функции isdigit.

       Никаких процедур ОС не требуется.

       2.6 islower - пpедикат строчной буквы

     #include
     int islower(int c);

       islower по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом строчной буквы, и ноль - в противном
случае. Этот предикат определен только если isacii(c) равно true или с
является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
islower.

       islower возвращает ненулевое значение, если c - строчная буква
(a-z).

       Стандарт ANSI требует наличия функции islower.

       Никаких процедур ОС не требуется.

       2.7 isprint, isgraph - предикат видимого знака

     #include
     int isprint(int c);
     int isgraph(int c);

       isprint по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом видимого символа, и ноль - в
противном случае. Этот предикат определен только если isacii(c) равно
true или с является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isprint.

       isprint возвращает ненулевое значение, если c - видимый знак
(0x20-0x7e), isgraph работает точно также, за исключением обработки
пробела (0x20).

       Стандарт ANSI требует наличия функций isprint и isgraph.

       Никаких процедур ОС не требуется.

       2.8 ispunct - пpедикат знака препинания

     #include
     int ispunct(int c);

       ispunct по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом видимого знака препинания, и ноль - в
противном случае. Этот предикат определен только если isacii(c) равно
true или с является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
ispunct.

       ispunct возвращает ненулевое значение, если c - видимый знак
препинания (isgraph(c) && !isalnum(c)).

       Стандарт ANSI требует наличия функции ispunct.

       Никаких процедур ОС не требуется.

       2.9 isspace - пpедикат знака пропуска

     #include
     int isspace(int c);

       isspace по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом знака пропуска, и ноль - в противном
случае. Этот предикат определен только если isacii(c) равно true или с
является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isspace.

       isspace возвращает ненулевое значение, если c - пробел, tab,
возврат каретки, новая строка, вертикальный tab или formfeed
(0x00-0x0d,0x20).

       Стандарт ANSI требует наличия функции isspace.

       Никаких процедур ОС не требуется.

       2.10 isupper - пpедикат прописной буквы

     #include
     int isupper(int c);

       isupper по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом прописной буквы, и ноль - в противном
случае. Этот предикат определен только если isacii(c) равно true или с
является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isupper.

       isupper возвращает ненулевое значение, если c - прописная буква
(a-z).

       Стандарт ANSI требует наличия функции isupper.

       Никаких процедур ОС не требуется.

       2.11 isxdigit - пpедикат шеснадцатиричной цифpы

     #include
     int isxdigit(int c);

       isxdigit по таблице ASCII выдает по заданному коду ненулевое
значение, если он является кодом шеснадцатиричной цифры, и ноль - в
противном случае. Этот предикат определен только если isacii(c) равно
true или с является EOF.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
isxdigit.

       isxdigit возвращает ненулевое значение, если c -
шеснадцатиричная цифра (0-9, a-f или a-f).

       Стандарт ANSI требует наличия функции isxdigit.

       Никаких процедур ОС не требуется.

       2.12 toascii - преобразовывает целые числа в коды ASCII

     #include
     int toascii(int c);

       toascii - это макро, которое преобразовывает целые в числа из
диапозона от 0 до 127, обнуляя все старшие байты.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
toascii.

       toascii возвращает целое от 0 до 127.

       Стандарт ANSI не требует наличия функции toascii.

       Никаких процедур ОС не требуется.

       2.13 tolower - преобразовывает целые числа в коды ASCII

     #include
     int tolower(int c);
     _int tolower(int c);

       tolower - это макро, которое преобразовывает прописные буквы в
строчные, оставляя остальные знаки без изменений. Это макро определено
только для c из промежутка от EOF до 255.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
tolower.

       _tolower выполняет то же самое преобразование, но может
использоваться только с прописными буквами A-Z.

       tolower возвращает строчный эквивалент c, если это знак от A до
Z, и c в противном случае.

       _tolower возвращает строчный эквивалент c, если это знак от A
до Z, в противном случае поведение этого макро не определено.

       Стандарт ANSI требует наличия функции tolower. _tolower не
рекомендуется использовать в переносимых системах.

       Никаких процедур ОС не требуется.

       2.14 toupper - преобразовывает целые числа в коды ASCII

     #include
     int toupper(int c);
     _int toupper(int c);

       toupper - это макро, которое преобразовывает строчные буквы в
прописные, оставляя остальные знаки без изменений. Это макро
определено только для c из промежутка от EOF до 255.

       Вы можете использовать откомпилированную процедуру вместо
определения макро, отменяя определение макро при помощи #undef
toupper.

       _toupper выполняет то же самое преобразование, но может
использоваться только со строчными буквами a-z.

       toupper возвращает прописной эквивалент c, если это знак от a
до z, и c в противном случае.

       _toupper возвращает прописной эквивалент c, если это знак от a
до z, в противном случае поведение этого макро не определено.

       Стандарт ANSI требует наличия функции toupper. _toupper не
рекомендуется использовать в переносимых системах.

       Никаких процедур ОС не требуется.

       3. Ввод и Вывод (stdio.h)

       Эта глава описывает функции, которые осуществляют управление
файлами и другими потоками ввода-вывода. Среди этих функций есть
процедуры, которые генерируют и считывают строки в соответствии с
форматом string.

       Дополнительные возможности ввода-вывода зависят от операционной
системы, но эти функции обеспечивают единый интерфейс.

       Соответствующие описания содержатся в stdio.h.

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

     _stdin_r(reent)
     _stdout_r(reent)
     _stderr_r(reent)

       вместо глобальных stdin, stdout и stderr. Аргумент <[reent]>
является указателям на данные для повторного вхождения.

       3.1 clearerr - очищает индикатор ошибки файла или потока

     #include
     void clearerr(FILE *fp);

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

       Используйте clearerr для сброса этих индикаторов.

       Используйте ferror и feof для проверки этих индикаторов.

       clearerr не возвращает никакого результата.

       Стандарт ANSI требует наличия функции clearerr.

       Никаких процедур ОС не требуется.

       3.2 fclose - закрытие файла

     #include
     int fclose(FILE *fp);

       Если определенный fp файл или поток открыт, то fclose закрывает
его, предварительно записав все обрабатываемые данные (вызвав
fflush(fp)).

       fclose возвращает 0, если он был выполнен успешно (включая
случай, когда fp - NULL или не открытый файл); иначе возвращается EOF.

       Стандарт ANSI требует наличия функции fclose.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.3 feof - проверка конца файла

     #include
     int feof(FILE *fp);

       feof проверяет, был ли достигнут конец файла, на который
указывает fp.

       feof возвращает 0, если конец файла еще не был достигнут, и
ненулевое значение в противном случае.

       Стандарт ANSI требует наличия функции feof.

       Никаких процедур ОС не требуется.

       3.4 ferror - проверка на возникновение ошибки ввода-вывода

     #include
     int ferror(FILE *fp);

       Функции stdio заводят индикатор ошибок для каждого файла, на
который указывает указатель fp, для записи туда информации об ошибках
ввода-вывода, связанных с данным файлом или потоком. Используйте
ferror для выяснения значения этого индикатора.

       Используйте clearerr для сброса индикатора ошибки.

       ferror возвращает 0 в случае отсутствия ошибок; в случае
отсутствия ошибок возвращается ненулевое значение.

       Стандарт ANSI требует наличия функции ferror.

       Никаких процедур ОС не требуется.

       3.5 fflush - очищает буфер вывода в файл

     #include
     int fflush(FILE *fp);

       Функции вывода stdio могут буферизировать вывод, для
минимизации количества лишних системных вызовов.

       Используйте fflush для завершения вывода из файла или потока,
определяемого fp.

       Если fp равен NULL, fflush заканчивает вывод изо всех открытых
файлов.

       fflush возвращает 0 во всех случаях, кроме тех, когда
происходят ошибки записи; в этих случаях возвращается EOF.

       Стандарт ANSI требует наличия функции fflush.

       Никаких процедур ОС не требуется.

       3.6 fgetc - считывание знака из файла или потока

     #include
     int fgetc(FILE *fp);

       Используйте fgetc для считывания следующего знака из файла или
потока, определяемого fp. При этом fgetc сдвигает индикатор текущей
позиции файла.

       Для использования макро-версии этой функции смотрите getc.

       Возвращается следующий знак (читается как unsigned char и
преобразовывается в int), если только не заканчиваются данные или
операционная система возвращает ошибку чтения; в обоих этих случаях
fgetc возвращается EOF.

       Вы можете различить две ситуации возврата EOF при помощи
функций ferror и feof.

       Стандарт ANSI требует наличия функции fgetc.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.7 fgetpos - записывает позицию в потоке или файле

     #include
     int fgetpos(FILE *fp, fpos_t *pos);

       Объект типа FILE может иметь "позицию", которая показывает,
какая часть файла уже была прочитана программой. Многие функции stdio
зависят от этой позиции и многие изменяют ее.

       Вы можете использовать fgetpos для получения текущей позиции
файла, на который указывает fp; fgetpos запишет значение,
представляющие эту позицию, в *pos. Позже можно использовать это
значение, возвращаясь при помощи fsetpos на эту позицию в файле.

       В этой реализации fgetpos использует счетчик знаков для
представления позиции в файле, это то же самое число, что возвращается
ftell.

       fgetpos возвращает 0 в случае успешного выполнения. Если
fgetpos не выполняется, то в результате выдается 1. Ошибка происходит,
если поток не поддерживает позиционирования; глобальный errno имеет в
этой ситуации значение espipe.

       Стандарт ANSI требует наличия функции fgetpos, но значения
записываемых им величин не специфицированы, за исключением того, что
они могут быть переданы в качестве аргументов для fsetpos. В
конкретной реализации C ftell может выдавать результаты, отличные от
записываемых fgetpos в *pos.

       Никаких процедур ОС не требуется.

       3.8 fgets - считывает строку знаков из файла или потока

     #include
     char *fgets(char *buf, int n, FILE *fp);

       Считывает не более n-1 знак из fp до знака новой строки. Эти
знаки, включая знак новой строки, сохраняются в buf. В конце буфера
записывается 0.

       fgets возвращает переданный ей буфер, заполненный данными. Если
конец файла встретился, когда какие-то данные уже были собраны, то
данные возвращаются без какого-либо обозначения этого. Если никакие
данные не были прочитаны, то возвращается NULL.

       fgets должен заменить все вхождения gets. Отметим, что fgets
возвращает все данные, в то время как gets убирает знаки новых строк,
не показывая этого.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.9 fiprintf - форматирует вывод в файл (только для целых
чисел)

     #include

     int fiprintf(FILE *fd, const char *format, ...);

       fiprintf - ограниченная версия fprintf: она имеет те же
аргументы и выполняет те же операции, но не может осуществлять
операции с числами с плавающей точкой - спецификации типов `f', `g',
`g', `e' и `f' не распознаются.

       fiprintf возвращает число байт в выведенной строке, не считая
завершающего NULL. fiprintf заканчивает работу, если встречает конец
форматируемой строки. Если встречается ошибка, то fiprintf возвращает
EOF.

       Стандарт ANSI не требует наличия функции fiprintf.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.10 fopen - открывает файл

     #include
     FILE *fopen(const char *file, const char *mode);

     FILE *_fopen_r(void *reent,
         const char *file, const char *mode);

       fopen инициализирует структуры данных, необходимых для чтения
или записи файла. Имя файла определяется строкой в file, а тип доступа
к файлу - строкой в mode.

       Другая функция _fopen_r является повторно-входимым аналогом.
Дополнительный аргумент reent - указатель на структуру, содержащую
информацию для обеспечения повторной входимости.

       Возможны три основных типа доступа: чтение, запись и
добавление. *mode должен начинаться с одного из трех знаков ``r'',
``w'' или ``a'', которые означают следующие:

`r'
     Открыть файл для чтения; эта операция заканчивается неудачей,
     если файл не существует или операционная система не разрешает
     прочитать его.

`w'
     Откpыть файл для записи с начала, фактически создается новый
     файл. Если файл с этим именем yже сyществyет, то его содеpжимое
     пpопадает.

`a'
     Откpывает файл для добавления данных, то есть дописывания текста
     в конец файла. Когда Вы откpываете файл таким способом, все
     данные записываются в текyщий конец файла, использование fseek не
     может повлиять на это.

       Некотоpые опеpационные системы pазличают двоичные и текстовые
файлы. Такие системы могyт пpеобpазовывать записываемые или
считываемые данные из файлов, откpытых как текстовые. Если Ваша
система относится к таким, то можно опpеделить файл как двоичный,
дописав к pежимy бyквy ``b'' (по умолчанию файл считается текстовым).

       ``rb'', таким образом, означает "чтение двоичного файла";
``wb''- "запись двоичного файла"; ``ab'' - "дописать двоичный файл".

       Для большей переносимости программ на c ``b'' допускается на
всех системах, в не зависимости от того, имеет ли это значение.

       Наконец, может понадобиться возможность как чтения, так и
записи файла. Для этого можно добавить ``+'' к какому-либо из трех
режимов. (Если добавляются и ``b'' и ``+'', то это можно делать в
любом порядке: например: "rb+" эквивалентно "r+b" при использовании в
качестве строки задания режима.)

       Использование "r+" (или "rb+") позволяет читать и записывать в
любом месте существующего файла, не уничтожая данных; "w+" (или "wb+")
создает новый файл (или стиpает все данные из стаpого), что позволяет
читать и записывать в любом месте этого файла; "a+" (или "ab+")
позволяет считывать любое место файла, но записывать - только в конец.

       fopen возвращает указатель на файл, который Вы можете
использовать в других операциях с файлом, если только запрашиваемый
файл может быть открыт, в этом случае выдается NULL. Если причиной
ошибки была неправильная строка mode, то errno устанавливается в
EINVAL.

       Стандарт ANSI требует наличия функции fopen.

       Требуются процедуры ОС: close, fstat, isatty, lseek, open,
read, sbrk, write.

       3.11 fdopen - преобразовывает открытый файл в поток

     #include
     FILE *fdopen(int fd, const char *mode);
     FILE *_fdopen_r(void *reent,
         int fd, const char *mode);

       fdopen получает дескриптор файла типа file * из дескриптора уже
открытого файла (получаемого, например, системной процедурой `open'
или, реже, при помощи fopen). Аргумент mode имеет тоже значение, что и
в fopen.

       Возвращается указатель на файл или NULL, как и для fopen.

       Стандарт ANSI требует наличия функции fdopen.

       3.12 fputc - записывает знак в файл или поток

     #include
     int fputc(int ch, FILE *fp);

       fputc преобразовывает аргумент ch из int в unsigned char, а
затем записывает это в файл или поток, определяемый fp.

       Если файл был откpыт в pежиме добавления (или поток не
поддеpживает позициониpования), то новый знак записывается в конец
файла или потока. В дpyгих слyчаях новый знак записывается в
соответствии с индикатоpом текyщей позиции в файле, котоpый
yвеличивается на один.

       Для использования макро-версии этой функции смотрите putc.

       В случае успешного выполнения fputc возвращает аргумент ch. В
случае ошибки выдается EOF. Выяснить тип ошибки можно при помощи
ferror(fp).

       Стандарт ANSI требует наличия функции fputc.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.13 fputs - записывает строку знаков в файл или поток

     #include
     int fputs(const char *s, FILE *fp);

       fputs записывает строку s (без завершающего NULL) в файл или
поток, определенный fp.

       В случае успешного выполнения выдается 0; в противном случае
выдается EOF.

       Стандарт ANSI требует наличия функции fputs, но не требует
выдачи 0 в случае успешного выполнения, допустимо любое
неотрицательное значение.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.14 fread - чтение элементов массива из файла

     #include
     size_t fread(void *buf, size_t size, size_t count,
         FILE *fp);

       fread пытается скопировать из файла или потока, определенного
fp, count элементов (каждый размера size) в память, начиная с buf.
fread может скопировать меньше count элементов в случае ошибки или
конца файла.

       fread также увеличивает индикатор позиции в файле на число
реально считанных знаков.

       В результате fread выдает количество успешно прочитанных
элементов.

       Стандарт ANSI требует наличия функции fread.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.15 freopen - открытие файла с использованием существующего
дескриптора

     #include
     FILE *freopen(const char *file, const char *mode,
         FILE *fp);

       Этот вариант fopen позволяет определять для файла особенные
дескрипторы fp (например stdin, stdout или stderr).

       Если fp был связан с другим файлом или потоком, freopen
закрывает это файл или поток (но игнорирует при этом все ошибки).

       file и mode имеют то же значение, что и для fopen.

       В случае успешного выполнения выдается аргумент fp. Если
указанный файл не может быть открыт, то выдается NULL.

       Стандарт ANSI требует наличия функции freopen.

       Требуются процедуры ОС: close, fstat, isatty, lseek, open,
read, sbrk, write.

       3.16 fseek - переходит на позицию в файле

     #include
     int fseek(FILE *fp, long offset, int whence)

       Объект типа FILE может иметь "позицию", которая показывает,
какая часть файла уже была прочитана программой. Многие функции stdio
зависят от этой позиции и многие изменяют ее.

       Вы можете использовать fseek для перехода на позицию в файле
fp. Значение offset определяет новую позицию, одним из трех способов
определяемую значением whence (определяется как макрос в stdio.h):

seek_set - offset указывает на абсолютное место в файле (смещение
           относительно начала файла). offset должен быть
           положительным.

seek_cur - offset указывает смещение относительно текущей позиции.
           offset может принимать как положительные, так и
           отрицательные значения.

seek_end - offset указывает смещение относительно конца файла. offset
           может быть как положительным (что увеличивает размер
           файла), так и отрицательным.

       Смотрите ftell для определения текущей позиции.

       fseek возвращает 0 в случае успешного выполнения. В противном
случае возвращается EOF. Причина ошибки обозначается в errno
значениями espipe (поток, на который указывает fp не поддерживает
перемену позиции) и einval (неправильная позиция в файле).

       Стандарт ANSI требует наличия функции fseek.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.17 fsetpos - возвращается на позицию в потоке ил файле

     #include
     int fsetpos(FILE *fp, const fpos_t *pos);

       Объект типа FILE может иметь "позицию", которая показывает,
какая часть файла уже была прочитана программой. Многие функции stdio
зависят от этой позиции и многие изменяют ее.

       fsetpos преобразовывает текущую позицию в файле, указанном fp,
на предыдущую позицию *pos (которая была получена при помощи fgetpos).

       Процедура fseek делает примерно тоже.

       fgetpos возвращает 0 в случае успешного выполнения. В противном
случае fgetpos возвращает 1. Причина ошибки обозначается в errno
значениями espipe (поток, на который указывает fp не поддерживает
перемену позиции) и einval (неправильная позиция в файле).

       Стандарт ANSI требует наличия функции fsetpos, но не определяет
структуру *pos кроме ее соответствия выдаваемым fgetpos результатам.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.18 ftell - возвращает позицию в потоке или файле

     #include
     long ftell(FILE *fp);

       Объект типа FILE может иметь "позицию", которая показывает,
какая часть файла уже была прочитана программой. Многие функции stdio
зависят от этой позиции и многие изменяют ее.

       В результате ftell выдает текущую позицию в файле, указанном
fp. Сохраненный результат может потом использоваться с fseek для
возвращения на эту позицию.

       В данной реализации ftell просто использует счетчик знаков для
представления позиции в файле; это то же число, что будет выдано
fgetpos.

       ftell возвращает позицию в файле, если это возможно. В
противном случае возвращается -1l. Ошибка происходит, если поток не
поддерживает позиционирование; глобальный errno обозначает эту
ситуацию при помощи значения espipe.

       Стандарт ANSI требует наличия функции ftell, но значение ее
результата (в случае успешного выполнения) не специфицировано, кроме
требования соответствия формату аргумента fseek. В некоторых
реализациях c ftell может возвращать результат, отличный от
записываемого fgetpos.

       Никаких процедур ОС не требуется.

       3.19 fwrite - запись элементов массива

     #include
     size_t fwrite(const void *buf, size_t size,
         size_t count, FILE *fp);

       fwrite пытается скопировать, начиная с buf, count элементов
(каждый pазмеpа size) в файл или поток, указанный fp. fwrite может
скопировать меньше count элементов в случае ошибки.

       fwrite также сдвигает вперед индикатор позиции в файле (если он
есть) на число реально записанных знаков.

       Если fwrite выполняется успешно, то выдается аргумент count. В
других случаях выдается число элементов, полностью скопированных в
файл.

       Стандарт ANSI требует наличия функции fwrite.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.20 getc - считывание знака (макро)

     #include
     int getc(FILE *fp);

       getc - это макро, определенное в stdio.h. getc считывает
следующий знак из файла или потока, определенного fp. getc сдвигает
индикатор текущей позиции.

       Для использования подпрограммы вместо макро смотрите fgetc.

       Выдается следующий знак (читается как unsigned char и
преобразовывается в int), если только не заканчиваются данные или
операционная система сообщает об ошибке чтения; в обоих случаях getc
возвращает EOF.

       Эти ситуации можно различить используя функции ferror и feof.

       Стандарт ANSI требует наличия функции getc; он предполагает, но
не требует, чтобы функция getc была введена как макро. Реализация getc
как макро может использовать один и тот же аргумент несколько раз;
однако в переносимых программах лучше не использовать выражения,
вызывающие побочные эффекты, как аргументы getc.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.21 getchar - чтение знака (макро)

     #include
     int getchar(void);

     int _getchar_r(void *reent);

       getchar - это макро, определенное в stdio.h. getchar считывает
следующий знак из стандартного входного потока, определенного fp.
getchar сдвигает индикатор текущей позиции.

       Другая функция _getchar_r является повторно-входимым аналогом.
Дополнительный аргумент reent - указатель на структуру, содержащую
информацию для обеспечения повторной входимости.

       Выдается следующий знак (читается как unsigned char и
преобразовывается в int), если только не кончились данные или
операционная система сообщает об ошибке чтения; в обоих случаях
getchar возвращает EOF.

       Эти ситуации можно различить при помощи ferror(stdin) и
feof(stdin).

       Стандарт ANSI требует наличия функции getchar; он предполагает,
но не требует, чтобы функция getchar была введена как макро.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.22 gets - считывает строку знаков

(устаревшее, взамен используйте fgets)

     #include

     char *gets(char *buf);

     char *_gets_r(void *reent, char *buf);

       Считывает знаки из стандартного ввода до знака новой строки.
Знаки до новой строки сохраняются в buf. Знак новой строки опускается,
а буфер заканчивается 0.

       Это опасная функция, так как нет способа проверить наличие
места в buf. Один из способов атаки internet worm в 1988 использовал
это для переполнения буфера в стеке finger-демона и перезаписывал
адрес возврата, вызывая выполнение демоном полученного после
соединения кода.

       Другая функция _gets_r является повторно-входимым аналогом.
Дополнительный аргумент reent - указатель на структуру, содержащую
информацию для обеспечения повторной входимости.

       gets возвращает переданный буфер, заполненный данными. Если
конец файла встречается в момент, когда некоторые данные уже записаны,
то данные возвращаются без каких-либо признаков этого. Если конец
файла встретился пи пустом буфере, то возвращается NULL.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.23 iprintf - записывает форматированный вывод (только для
целых чисел)

     #include

     int iprintf(const char *format, ...);

       iprintf - ограниченная версия printf: она имеет те же аргументы
и выполняет те же операции, но не может осуществлять операции с
числами с плавающей точкой - спецификации типов `f', `g', `g', `e' и
`f' не распознаются.

       iprintf возвращает число байт в выведенной строке, не считая
завершающего NULL. iprintf заканчивает работу, если встречает конец
форматируемой строки. Если встречается ошибка, то iprintf возвращает
EOF.

       Стандарт ANSI не требует наличия функции iprintf.

       Требуются процедуры ОС: close, fstat, isatty, lseek, read,
sbrk, write.

       3.24 mktemp, mkstemp - генерирует не используемое имя файла

     #include
     char *mktemp(char *path);
     int mkstemp(char *path);

     char *_mktemp_r(void *reent, char *path);
     int *_mkstemp_r(void *reent, char *path);

       mktemp и mkstemp пытаются создать имя, не используемое для
существующего файла. mkstemp создает файл и открывает его для чтения и
для записи; mktemp просто выдает имя файла.

       Строка path задает начало имени файла. Она должна быть
пpавильным именем файла (возможно включающим пyть), заканчивающимся на
несколько знаков ``x''. Созданное имя бyдет начинаться на этy стpокy,
а оставшиеся ``x'' бyдyт заменены какой-либо комбинацией цифp и бyкв.

       Другие функции _mktemp_r и _mkstemp_r являются
повторно-входимыми аналогами. Дополнительный аргумент reent является
указателем на структуру, содержащую информацию для обеспечения
повторной входимости.

       mktemp возвращает указатель path на модифицированную строку,
представляющую не используемое имя файла, если оно было сгенерировано,
в противном случае возвращается NULL.

       mkstemp возвращает дескриптор нового созданного файла, если
возможно сгенерировать имя несуществующего файла, в противном случае
возвращается -1.

       Стандарт ANSI C не требует ни mktemp, ни mkstemp; System V
Interface Definition (определение интерфейса System V) издание 2
требует наличие mktemp.

       Требуются процедуры ОС: getpid, open, stat.