Нейл Мэтью - Основы программирования в Linux стр 41.

Шрифт
Фон

fflush

Библиотечная функция fflush вызывает немедленную запись всех данных файлового потока, ждущих выполнения операции записи. Вы можете применять ее, например, чтобы убедиться, что интерактивное приглашение отправлено на терминал до того, как делается попытка считать ответ. Эта функция также полезна, если вы хотите, прежде чем продолжить выполнение, убедиться в том, что важные данные помещены на диск. Ее можно применять в некоторых случаях при отладке программы, чтобы быть уверенным в том, что программа действительно записывает данные, а не зависла. При вызове функции fclose выполняется неявная операция fflush, поэтому перед fclose не нужно вызывать функцию fflush.

Далее приведена синтаксическая запись функции:

#include <stdio.h>

int fflush(FILE *stream);

fseek

Функция fseek - это эквивалент для файлового потока системного вызова lseek. Она задает в stream позицию для следующей операции чтения этого потока или записи в него. Значения и смысл параметров offset и whence такие же, как у ранее описанных одноименных параметров вызова lseek. Но там, где lseek возвращает off_t, функция fseek возвращает целое число: 0, если выполнилась успешно, и -1 при аварийном завершении с ошибкой, указанной в переменной errno. Какое поле деятельности для стандартизации!

Далее приведена синтаксическая запись функции:

#include <stdio.h>

int fseek(FILE *stream, long int offset, int whence);

fgetc, getc и getchar

Функция fgetc возвращает из файлового потока следующий байт как символ. Когда она достигает конца файла или возникает ошибка, функция возвращает EOF. Для того чтобы различить эти два случая, следует применять функции ferror или feof.

Далее приведена синтаксическая запись функций:

#include <stdio.h>

int fgetc(FILE *stream);

int getc(FILE *stream);

int getchar();

Функция getc эквивалентна fgetc за исключением того, что может быть реализована как макрос. В этом случае аргумент stream может определяться несколько раз, поэтому он лишен побочных эффектов (например, не затронет переменные). К тому же вы не можете гарантировать возможности применения адреса getc как указателя функции.

Функция getchar эквивалентна вызову функции getc(stdin) и читает следующий символ из стандартного ввода.

fputc, putc и putchar

Функция fputc записывает символ в файловый поток вывода. Она возвращает записанное значение или EOF в случае аварийного завершения.

#include <stdio.h>

int fputc(int с, FILE *stream); int putc(int c, FILE *stream); int putchar(int c);

Как и в случае функций fgetc/getc, функция putc - эквивалент fputc, но может быть реализована как макрос.

Функция putchar - то же самое, что вызов putc(с, stdout), записывающий один символ в стандартный вывод. Имейте в виду, что функция putchar принимает, а функция getchar возвращает символы как данные типа int, а не char. Это позволяет индикатору конца файла (EOF) принимать значение -1, лежащее вне диапазона кодов символов.

fgets и gets

Функция fgets читает строку из файла ввода stream.

#include <stdio.h>

char *fgets(char *s, int n, FILE *stream);

char *gets(char *s);

Функция fgets пишет символы в строку, заданную указателем s, до тех пор, пока не встретится новая строка, либо не будет передано n-1 символов, либо не будет достигнут конец файла. Любая встретившаяся новая строка передается в строку, принимающую символы, и добавляется завершающий нулевой байт \0. Любой вызов передает максимум n-1 символов, т.к. должен быть вставлен нулевой байт, обозначающий конец строки и увеличивающий общее количество до n байтов.

При успешном завершении функция fgets возвращает указатель на строку s. Если поток указывает на конец файла, она устанавливает индикатор EOF для потока и возвращает пустой указатель. Если возникает ошибка чтения, fgets возвращает пустой указатель и устанавливает значение переменной errno, соответствующее типу ошибки.

Функция gets аналогична fgets за исключением того, что она читает из стандартного ввода и отбрасывает любые обнаруженные обозначения новой строки. Функция добавляет завершающий нулевой байт в принимающую строку.

Примечание

Учтите, что функция gets не ограничивает количество символов, которые могут передаваться, поэтому она может переполнить свой пересылочный буфер. По этой причине вам следует избегать применения этой функции и заменять ее функцией fgets. Многие проблемы безопасности порождены функциями в программах, сделанных для переполнения буфера тем или иным способом. Это одна из таких функций, поэтому будьте осторожны!

Форматированные ввод и вывод

Для создания вывода управляемого вида существует ряд библиотечных функций, с которыми вы, возможно, знакомы, если программируете на языке С. К ним относятся функция printf и родственные функции для вывода значений в файловый поток, а также scanf и другие функции для чтения значений из файлового потока.

printf, fprintf и sprintf

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

#include <stdio.h>

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

int sprintf(char *s, const char *format, ...);

int fprintf(FILE * stream, const char *format, ...);

Функция printf выводит результат в стандартный вывод. Функция fprintf выводит результат в заданный файловый поток stream. Функция sprintf записывает результат и завершающий нулевой символ в строку s, передаваемую как параметр. Эта строка должна быть достаточно длинной, чтобы вместить весь вывод функции.

У семейства printf есть и другие члены, обрабатывающие свои аргументы различными способами. См. подробную информацию на страницах интерактивного руководства.

Обычные символы передаются в вывод без изменений. Спецификаторы преобразований заставляют функцию printf выбирать и форматировать дополнительные аргументы, передаваемые как параметры. Спецификаторы всегда начинаются с символа %. Далее приведен простой пример:

printf("Some numbers: %d, %d, and &d\n", 1, 2, 3);

Он порождает в стандартном выводе следующую строку.

Some numbers: 1, 2, and 3

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

Далее перечислены наиболее часто применяемые спецификаторы преобразований:

%d, %i - выводить целое как десятичное число;

, %x - выводить целое как восьмеричное, шестнадцатеричное число;

- выводить символ;

%s - выводить строку;

%f - выводить число с плавающей точкой (одинарной точности);

%e - выводить число с двойной точностью в формате фиксированной длины;

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Похожие книги