Опубликован: 15.11.2010 | Доступ: свободный | Студентов: 643 / 18 | Оценка: 4.00 / 5.00 | Длительность: 17:30:00
Специальности: Программист
Лекция 8:

Буферизированный (потоковый) ввод-вывод. Часть III

8.4. Приложение № 1. Описание функций потокового вывода в файл языка Си

ФУНКЦИЯ fopen
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
FILE *fopen( filename, type );
char *filename;
char *type;
НАЗНАЧЕНИЕ: Функция открывает поток;
ОПИСАНИЕ: Функция fopen открывает файл, именованный параметром filename, и связывает его с соответствующим потоком stream. Функция fopen возвращает в качестве результата адресный указатель, который будет идентифицировать поток stream в последующих операциях;

Строка type, используемая в функции fopen, может принимать следующие значения:

  • r - открытие файла только для чтения;
  • w - создание файла для записи;
  • a - присоединение; открытие для записи в конец файла или создание записи, если файл не существует;
  • r+ - открытие существующего файла для обновления (чтения и записи);
  • w+ - создание нового файла для изменения;
  • a+ - открытие для присоединения; открытие (или создание, если файла не существует) для обновления в конец файла;
  • t - файл открывается или создаётся в текстовом режиме;
  • b - файл открывается или создаётся в бинарном режиме;
ПРИМЕЧАНИЕ:
  1. Комбинации "b" и "t" могут комбинироваться с другими символами, например: "rt" - открытие текстового файла для чтения, "w+b" - создание нового двоичного файла для изменения и т.п.;
  2. При открытии файла в режиме обновления ( UPDATE ) над результирующим потоком stream могут быть выполнены и операции ввода, и операции вывода. Тем не менее, вывод не может следовать непосредственно за вводом без вмешательства функций fseek и rewind, а также ввод, без применения функций fseek и rewind, не может быть непосредственно следовать за выводом или вводом, который встречает конец файла EOF;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Указатель на открытый поток stream - в случае успешного завершения. NULL - в случае ошибки;
ПРИМЕЧАНИЕ: "Хорошие манеры программирования" предполагают проверку на неравенство нулю возвращаемого указателя на поток функцией fopen, с целью избежание других ошибок ввода-вывода и аварийного завершения программы;
ПЕРЕНОСИМОСТЬ: Функция поддерживается операционными системами на основе UNIX, в операционных системах Microsoft, содержится в стандарте ANSI C и описана в стандарте Кернигана и Ритчи.

ФУНКЦИЯ tmpfile
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС: FILE *tmpfile();
НАЗНАЧЕНИЕ: Функция открывает временный файл в двоичном режиме;
ОПИСАНИЕ: Функция tmpfile создаёт временный двоичный файл и открывает его для модификации (w+b). Файл автоматически уничтожается при его закрытии или завершении программы;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает указатель на поток временно созданного файла. Если файл не может быть создан, tmpfile возвращает значение NULL ;
ПРИМЕЧАНИЕ: "Хорошие манеры программирования" предполагают проверку на неравенство нулю возвращаемого указателя на поток функцией tmpfile, с целью избегания других ошибок ввода-вывода и аварийного завершения программы;
ПЕРЕНОСИМОСТЬ: Функция tmpfile поддерживается в операционных системах на основе UNIX, в операционных системах Microsoft и содержится в стандарте ANSI C.

ФУНКЦИЯ fclose
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
int fclose( stream );
FILE *stream;
НАЗНАЧЕНИЕ: Функция закрывает поток, связанный с файлом;
ОПИСАНИЕ: Функция fclose закрывает указанный поток stream ; все буферы, связанные с потоком stream, перед закрытием сбрасываются. Буферы, размещённые системой, освобождаются в процессе закрытия;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция fclose при успешном завершении возвращает 0. Если были обнаружены во время закрытия какие-либо ошибки, функция fclose возвращает значение EOF;
ПЕРЕНОСИМОСТЬ: Данная функция поддерживается системой UNIX, в операционных системах Microsoft и стандартом ANSI C.

ФУНКЦИЯ fcloseall
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС: int fcloseall();
НАЗНАЧЕНИЕ: Функция закрывает все открытые программой потоки;
ОПИСАНИЕ: Функция fcloseall закрывает все открытые потоки, исключая stdin, stdout, stdprn, stdaux и stderr ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает число закрытых потоков. При возникновении ошибки возвращает EOF;
ПЕРЕНОСИМОСТЬ: Функция поддерживается операционными системами на основе UNIX, в операционных системах Microsoft, но не поддерживается стандартом ANSI C.

ФУНКЦИЯ freopen
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
FILE *freopen( filename, mode, stream);
char *filename;
char *mode;
FILE *stream;
НАЗНАЧЕНИЕ: Функция связывает с потоком новый файл;
ОПИСАНИЕ: Функция freopen замещает указанным файлом открытый поток stream. Функция freopen закрывает файл, связанный с потоком stream, независимо от открываемого файла. Её можно использовать для изменения потоков, связанных с stdin, stdout или stderr. Строка mode, используемая функцией freopen, может принимать значения, описанные в функции fopen ;
ПРИМЕЧАНИЕ: См. также все примечания к программе fopen ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: При успешном завершении freopen возвращает указатель на открытый поток stream. В случае ошибки функция возвращает NULL ("пустой", нулевой указатель);
ПЕРЕНОСИМОСТЬ: Функция поддерживается в операционных системах, основанных на UNIX, в операционных системах Microsoft, и совместима со стандартом ANSI C.

ФУНКЦИЯ feof
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
int feof( stream );
FILE *stream;
НАЗНАЧЕНИЕ: Функция обнаруживает конец файла в потоке;
ОПИСАНИЕ: Функция feof является макрокомандой, которая производит проверку данного потока stream на признак конца файла (EOF). Если этот признак получил значение хотя бы один раз, то операции чтения файла сохраняют это значение до тех пор, пока не будет вызвана функция rewind или файл не будет закрыт. Признак конца файла сбрасывается при каждой операции вывода;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция feof возвращает ненулевое значение, если при последней операции ввода потока stream был обнаружен конец файла, и 0 в противном случае;
ПЕРЕНОСИМОСТЬ: Функция feof доступна в операционных системах, основанных на UNIX, в операционных системах Microsoft и поддерживается стандартом ANSI C.

ФУНКЦИЯ ferror
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
int ferror( stream );
FILE *stream;
НАЗНАЧЕНИЕ: Функция обнаруживает ошибки в потоке;
ОПИСАНИЕ: Функция ferror является макрокомандой, которая проверяет данный поток stream на ошибочную операцию чтения или записи. Если установлен признак ошибки потока stream, он сохраняет его до вызова функций clearerr или rewind, или до момента закрытия потока;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция ferror возвращает ненулевое значение, если в потоке stream была обнаружена ошибка;
ПЕРЕНОСИМОСТЬ: Данная функция поддерживается на системах UNIX, операционных системах корпорации Microsoft и совместима со стандартом ANSI C.

ФУНКЦИЯ fseek
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
int fseek( stream, offset, fromwhere );
FILE *stream;
long offset;
int fromwhere;
НАЗНАЧЕНИЕ: Функция устанавливает указатель файла в потоке;
ОПИСАНИЕ: Функция fseek устанавливает адресный указатель, соответствующий потоку stream, в новую позицию, которая расположена по смещению offset относительно места в файле, определяемого параметром fromwhere.

Параметр fromwhere может иметь одно из трёх значений, 0, 1 и 2, которые представлены тремя символическими константами, определённые в файле stdio.h, следующим образом:

fromwhere значение Размещение в файле;
SEEK_SET 0 начало файла;
SEEK_CUR 1 позиция текущего указателя файла;
SEEK_END 2 конец файла (EOF);

Функция fseek используется с операциями ввода-вывода в поток. После этой операции можно производить как ввод, так и вывод в поток;

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция fseek возвращает значение 0, если указатель файла успешно перемещён, и ненулевое значение в случае неудачного завершения;
ПРИМЕЧАНИЕ: Функция fseek может вернуть нулевое значение даже в том случае, если этого не произошло. Это происходит в результате того, что операционная система DOS, которая и перемещает указатель, не проверяет его установку. Функция возвращает индикатор ошибки только в том случае, когда устройство или файл не открыты;
ПЕРЕНОСИМОСТЬ: Данная функция поддерживается операционными системами на основе UNIX, операционными системами Microsoft и стандартом ANSI C.

Таблица 8.1. Начало отсчёта смещения функцией seek
Константа на языке Си Её значение Размещение в файле
SEEK_SET 0 начало файла;
SEEK_CUR 1 позиция текущего указателя файла;
SEEK_END 2 конец файла (EOF);

ФУНКЦИЯ ftell
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
long int ftell( stream );
FILE *stream;
НАЗНАЧЕНИЕ: Функция возвращает положение указателя текущей позиции файла;
ОПИСАНИЕ: Функция ftell возвращает положение указателя текущей позиции, связанного с потоком stream. Значение выдаётся в виде смещения в байтах относительно начала фала. Значение, возвращаемое функцией ftell, можно в дельнейшем использовать при вызове функции fseek ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает положение текущей позиции при успешном завершении. При ошибке она возвращает число -1L, и присваивает переменной errno положительное значение;
ПЕРЕНОСИМОСТЬ: Функция ftell доступна на системах, основанных на UNIX, на операционных системах корпорации Microsoft и поддерживается стандартом ANSI C.

ФУНКЦИЯ flushall
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС: int flushall();
НАЗНАЧЕНИЕ: Функция сбрасывает буферы всех потоков;
ОПИСАНИЕ: Функция flushall сбрасывает все буферы, связанные с открытыми входными потоками, и записывает в соответствующие файлы все буферы, относящиеся к открытым выходным потокам. Любые операции чтения, следующие за функцией flushall, будут читать новые данные для входных файлов в буфера. Все потоки остаются открытыми;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает число открытых входных и выходных потоков;
ПЕРЕНОСИМОСТЬ: Функция поддерживается в операционных системах на основе UNIX и в операционных системах Microsoft, inc.

ФУНКЦИЯ rewind
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
void rewind( stream );
FILE *stream;
НАЗНАЧЕНИЕ: Функция устанавливает указатель в начало потока;
ОПИСАНИЕ: Функция rewind( stream ) эквивалентна вызову функции fseek( stream, 0L, SEEK_SET), за исключением того, что rewind обнуляет признаки конца файла и ошибки, в то время как fseek обнуляет только признак конца файла;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
ПЕРЕНОСИМОСТЬ: Функция rewind доступна на всех операционных системах корпорации Microsoft, реализована на всех созданных на основе UNIX операционных системах, и описана в стандарте ANSI C.

ФУНКЦИЯ fscanf
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
int fscanf( stream, format[,arguments…]);
FILE *stream;
char *format;
НАЗНАЧЕНИЕ: Функция выполняет форматированный ввод из потока;
ОПИСАНИЕ: Функция fscanf сканирует посимвольно набор вводимых полей, считывая их из потока. Затем каждое поле из потока форматируется в соответствии со спецификацией формата, которая передаётся fscanf в виде указателя на строку format. Полученное в результате этого поле fscanf запоминает в аргументах, передаваемых функции fscanf после параметра format. Количество аргументов должно совпадать с количеством спецификаций формата. Описание спецификаций формата приведено в описании функции scanf. Функция fscanf завершает сканирование отдельного поля при появлении пробела, являющегося разделителем, или при вводе поля, для которого указана ширина. Эти случаи обсуждаются в описании функции scanf ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция fscanf возвращает количество успешно прочитанных, преобразованных и запомненных входных полей. Возвращаемое значение не содержит в себе полей, успешно прочитанных, но не присвоенных. Если fscanf делает попытку чтения в конце файла, то возвращается значение EOF. Если не было записано ни одного поля, возвращается значение 0;
ПЕРЕНОСИМОСТЬ: Функция работает во всех операционных системах Microsoft, операционных системах, основанных на UNIX, и поддерживается стандартами ANSI C и Кернигана и Ритчи.

ФУНКЦИЯ fgets
ОПРЕДЕЛЕНА В: stdio.h
СИНТАКСИС:
char *fgets( s, n, stream );
char *s;
int n;
FILE *stream;
НАЗНАЧЕНИЕ: Функция получает строку символов из потока;
ОПИСАНИЕ: Функция fgets считывает из потока stream строку символов и помещает её в символьную строку s. Ввод завершается после ввода n-1 символа, или при вводе символа перехода на следующую строку, в зависимости оттого, что произошло раньше. Нулевой символ ( '\0' ) добавляется в конец строки для индикации её конца;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: При успешном завершении функция возвращает указатель на символьную строку s. При ошибке либо конце файла функция возвращает значение NULL ("пустой" указатель);
ПЕРЕНОСИМОСТЬ: Функция совместима с операционными системами корпорации Microsoft, с операционными системами на основе UNIX, и поддерживается стандартом ANSI C. Она также определена в стандарте Кернигана и Ритчи.

ФУНКЦИЯ fgetc
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС: int fgetc( stream );

FILE *stream - указатель на входной поток данных, открытый функцией fopen ;

НАЗНАЧЕНИЕ: Функция возвращает следующий символ из указанного входного потока;
ОПИСАНИЕ: fgetc возвращает следующий символ из указанного входного потока stream ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: При успешном завершении возвращает символ, преобразованный к типу int без расширения знака. При обнаружении конца файла возвращает EOF;
ПЕРЕНОСИМОСТЬ: Поддерживается стандартом ANSI C и совместима с UNIX;

ФУНКЦИЯ fread
ОПРЕДЕЛЕНА В: stdio.h
СИНТАКСИС:
size_t fread( ptr, size, n, stream );
void *ptr;
size_t size;
size_t n;
FILE *stream;
НАЗНАЧЕНИЕ: Функция считывает данные, в том числе и двоичные, из потока;
ОПИСАНИЕ: Функция fread считывает n элементов данных, каждый длиной size байтов, из потока stream в блок с адресной ссылкой ptr. Общее число вводимых байтов равно n x size ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: При успешном завершении функция возвращает количество элементов данных (не байтов), реально прочитанных. В случае достижения конца файла или возникновении ошибки функция freed возвращает short count (возможно, 0);
ПЕРЕНОСИМОСТЬ: Данная функция поддерживается операционными системами корпорации Microsoft, операционными системами, основанными на UNIX и стандартом ANSI C.

ФУНКЦИЯ fprintf
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС:
int fprintf( stream, format[,arguments…]);
FILE *stream;
const char *format;
НАЗНАЧЕНИЕ: Функция посылает форматированный вывод в поток;
ОПИСАНИЕ: Функция fprintf получает набор аргументов, по одному для каждой спецификации формата, и выводит данные в поток. Количество аргументов должно совпадать с числом спецификаций. Описание спецификаций формата приведено в описании функции printf ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает число выведенных байтов. При появлении ошибки она возвращает EOF;
ПЕРЕНОСИМОСТЬ: Функция совместима с операционными системами Microsoft, основанными на UNIX операционными системами и поддерживается стандартом ANSI C. Её описание есть в стандарте Кернигана и Ритчи.

ФУНКЦИЯ fputs
ОПРЕДЕЛЕНА В: stdio.h
СИНТАКСИС:
int fputs( string, stream );
char *string;
FILE *stream;
НАЗНАЧЕНИЕ: Функция выводит строку символов в поток;
ОПИСАНИЕ: Функция fputs копирует строку, ограниченную нулевым символом, в поток stream. Она не добавляет в конец строки символа перехода на новую строку и не выводит нулевой символ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: При успешном завершении функция возвращает последний выведенный символ. В противном случае возвращает символ EOF;
ПЕРЕНОСИМОСТЬ: Данная функция поддерживается операционными системами корпорации Microsoft, операционными системами на основе UNIX и стандартом ANSI C. Кроме того, она определена в стандарте Кернигана и Ритчи.

ФУНКЦИЯ fputc
ОПРЕДЕЛЕНА В: <stdio.h>
СИНТАКСИС: int fputc( c, stream ), где
  • c - выводимый в поток символ;
  • FILE *stream - выходной поток данных, открытый функцией fopen ;
НАЗНАЧЕНИЕ: Функция выводит символ в поток;
ОПИСАНИЕ: Функция fputc выводит символ c в поток stream ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: В случае успеха возвращается символ c, а в случае ошибки возвращается символ EOF;
ПЕРЕНОСИМОСТЬ: Поддерживается стандартом ANSI C и операционной системой UNIX;

ФУНКЦИЯ fwrite
ОПРЕДЕЛЕНА В: stdio.h
СИНТАКСИС:
size_t fwrite( ptr, size, n, stream );
void *ptr;
size_t size;
size_t n;
FILE *stream;
НАЗНАЧЕНИЕ: Функция записывает данные в поток;
ОПИСАНИЕ: Функция fwrite добавляет n элементов данных, каждое размером size байт, в выходной поток stream. Данные записываются из ptr. Общее число выведенных байтов равно n x size. Переменная ptr должна быть объявлена как указатель на некоторый объект;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: При успешном завершении fwrite возвращает число выведенных элементов (не байт) n. При ошибке она возвращает меньшее число;
ПЕРЕНОСИМОСТЬ: Данная функция доступна в операционных системах корпорации Microsoft, основанных на UNIX операционных системах и поддерживается стандартом ANSI C.
Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Олег Корсак
Олег Корсак
Латвия, Рига