В отличие от MS-DOS, системы UNIX и Linux не делают различий между текстовыми и бинарными файлами. UNIX и Linux обрабатывают их одинаково с эффективностью обработки бинарных файлов. Важно также учесть, что параметр mode
В случае успешного завершения функция fopen
FILE*. В случае сбоя она вернет значение NULL, определенное в файле stdio.h.Количество доступных потоков ограничено, как и число дескрипторов файлов. Реальное предельное значение содержится в определенной в файле stdio.h константе FOPEN_MAX
Библиотечная функция fread
stream в буфер данных, заданный в параметре ptr. Функции fread и fwrite имеют дело с записями данных. Записи описываются размером size и количеством передаваемых записей nitems. Функция возвращает количество записей (а не байтов), успешно считанных в буфер данных. При достижении конца файла может быть возвращено меньше записей, чем nitems, вплоть до нуля.Далее приведена синтаксическая запись функции:
#include
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
Как и в других функциях стандартного ввода/вывода, записывающих данные в буфер, выделять место для данных и проверять ошибки должен программист. См. также функции ferror
feof далее в этой главе.Интерфейс библиотечной функции fwrite
fread. Она принимает записи данных из заданного буфера данных и записывает их в поток вывода. Функция возвращает количество успешно записанных записей.Далее приведена синтаксическая запись функции:
#include
size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
Имейте в виду, что функции fread
fwrite не рекомендуется применять со структурированными данными. Частично проблема заключается в том, что файлы, записанные функцией fwrite, могут быть непереносимыми между машинами с разной архитектурой.Библиотечная функция fclose
fclose, поскольку библиотека stdio будет использовать буфер для данных. Если программе нужна уверенность в том, что все данные записаны, следует вызвать fclose. Имейте в виду, что функция fclose вызывается автоматически для всех файловых потоков, которые все еще открыты к моменту нормального завершения программы, но при этом у вас, конечно же, не будет возможности проверить ошибки, о которых сообщает fclose.Далее приведена синтаксическая запись функции:
#include
int fclose(FILE* stream);
Библиотечная функция fflush
fclose выполняется неявная операция fflush, поэтому перед fclose не нужно вызывать функцию fflush. Далее приведена синтаксическая запись функции:
#include
int fflush(FILE *stream);
Функция fseek
lseek. Она задает в stream позицию для следующей операции чтения этого потока или записи в него. Значения и смысл параметров offset и whence такие же, как у ранее описанных одноименных параметров вызова lseek. Но там, где lseek возвращает off_t, функция fseek возвращает целое число: 0, если выполнилась успешно, и -1 при аварийном завершении с ошибкой, указанной в переменной errno. Какое поле деятельности для стандартизации!Далее приведена синтаксическая запись функции:
#include