Ваше Имя:
Пароль:

+ Регистрация



fopen()
Категория: C, Функции, Ввода/Вывода | Добавил: root, 27 апреля 2006 | Просмотров: 31833
#include <stdio.h>
FILE *fopen(const char *fname, const char *mode);

Функиия fopenf() открывает файл, имя которого задается параметром fname, и возвращает указатель на поток, связанный с этим файлом. Типы операций, которые разрешено выполнять с файлом, определяются параметром mode. Возможные значения параметра mode. Строка символов, которая будет играть роль имени реального файла, должна определять его имя, допустимое в данной операционной системе. Эта строка может включать спецификацию пути, если среда поддерживает такую возможность.

В версии С99 к параметрам fname и mode применен квалификатор restrict.

Если функция fopen() успешно открыла заданный файл, она возвращает указатель FILE. Если файл открыть не удается, возвращается нулевой указатель.

Допустимые значения параметра mode функции fopen():

"r" Открывает текстовый файл для чтения
"w" Создает текстовый файл для записи
"a" Дописывает в текстовый файл
"rb" Открывает двоичный файл для чтения
"wb" Создает двоичный файл для записи
"ab" Дописывает в двоичный файл
"r+" Открывает текстовый файл для чтения и записи
"w+" Создает текстовый файл для чтения и записи
"a+" Открывает текстовый файл для чтения и записи
"rb+" или "r+b" Открывает двоичный файл для чтения и записи
"wb+" или "w+b" Создает двоичный файл для чтения и записи
"ab+" или "a+b" Открывает двоичный файл для чтения и записи

Файл можно открывать либо в текстовом, либо в двоичном режиме. В текстовом режиме выполняются преобразования некоторых символов. Например, символы новой строки преобразуются в комбинацию кодов возврата каретки (ASCII 13) и конца строки (ASCII 10). В двоичном режиме подобные преобразования не выполняются.

В следующем фрагменте программы иллюстрируется корректный способ открытия файла.
FILE *fp;

if((fp=fopen("test", "w")) == NULL)
{
printf("He удается открыть файл.\n");
exit(1);
}

Благодаря такому методу перед записью в файл выявляется любая ошибка, возникающая при его открытии, например, использование защищенного от записи или заполненного диска.

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

Осуществляя доступ к файлу, который открыт для чтения и записи, не следует сразу за операцией ввода выполнять операцию вывода, не прибегнув прежде к промежуточному вызову одной из следующих функций: fflush(), fseek(), fsetpos() или rewind(). Нельзя также сразу за операцией вывода выполнять операцию ввода, не прибегнув прежде к промежуточному вызову одной из перечисленных выше функций. Исключением является момент достижения конца файла во время операции ввода, т.е. в конце файла вывод может непосредственно следовать за вводом.

Максимальное количество файлов, которые могут быть открыты одновременно, ограничивается значением FOPEN_MAX, определенным в заголовке <stdio.h>.


Пример

Следующий фрагмент открывает файл с названием TEST для чтения-записи в двоичном режиме.
FILE *fp;

if((fp=fopen("test", "rb+")) == NULL)
{
printf("He удается открыть файл.\n");
exit(1);
}



Зависимые функции

fclose(), fread(), fwrite(), putc() и getc()



Версия для печати

Комментариев: 0 +
Уважаемый посетитель, вы вошли на сайт как незарегистрированный пользователь. Вы можите зарегистрироваться, либо войти на сайт под своим именем, чтобы добавлять комментарии.

Другие статьи в этой категории
#include <stdlib.h>
int wctomb(char *out, wchar_t in);
Функция wctomb() преобразует двухбайтовый символ, содержащийся в параметре in, в его многобайтовый эквивалент и помещает результат в массив, адресуемый параметром out. Массив, адресуемый параметром out, должен иметь длину не меньше MB_CUR_MAX символов.

При успешном выполнении функция wctomb() возвращает количество байтов, содержащихся в многобайтовом символе. При возникновении ошибки возвращается значение -1.

Если параметр out равен нулю, функция wctomb() возвращает ненулевое значение в случае, когда многобайтовый символ имеет кодировку, зависящую от территориально-языковых особенностей. В противном случае возвращается нуль.
#include <stdlib.h>
size_t wcstombs(char *out, const wchar_t *in, size_t size);

Функция wcstombs() преобразует массив двухбайтовых символов, адресуемый параметром-указателем in, в его многобайтовый эквивалент и помещает результат в массив, адресуемый параметром out. Преобразованию подлежат только первые size символов. Процесс преобразования прекращается раньше, если будет обнаружен символ конца строки ('0').

В версии С99 к параметрам out и in применен квалификатор restrict.

При успешном выполнении функция wcstombs() возвращает количество байтов, помещенных в массив out. При возникновении ошибки возвращается значение -1.
#include <stdarg.h>
type va_arg(va_list argptr, type);
void va_copy(va_list target, va_list source);
void va_end(va_list argptr);
void va_start(va_list argptr, last_parm);
Макрос va_copy() добавлен в версии С99.

Для передачи функции переменного числа аргументов совместно используются макросы va_arg, va_start и va_end. Самым распространенным примером функции, которая принимает переменное число аргументов, является функция printf(). Тип va_list определен в заголовке .

Общая процедура создания функции, которая может принимать переменное количество аргументов, такова:

Функция должна иметь по крайней мере один известный параметр (может и больше), указываемый до переменного списка параметров. (Такие параметры называются также обязательными, а параметры, следующие за ними — необязательными.) Крайний правый известный параметр называется last_parm. (Он предшествует первому необязательному параметру.) Его имя используется в качестве второго параметра в обращении к макросу va_start(). Чтобы получить доступ к любому дополнительному параметру, сначала необходимо инициализировать указатель-аргумент argptr, обратившись к макросу va_start(). (Иными словами, необходимо выполнить вызов va_start(argptr, <имя last_parm>).) После этого значения параметров возвращаются в результате вызова макроса va_arg(). В качестве второго аргумента этого макроса (соответствующего параметру type), нужно указать тип следующего параметра. Наконец, после прочтения всех параметров до возвращения из функции необходимо вызвать макрос va_end(), чтобы гарантировать корректное восстановление стека. Если макрос va_end() вызван не будет, высока вероятность аварийного отказа программы.

Макрос va_copy() копирует список аргументов, обозначенный параметром target, в объект, обозначенный параметром source.
#include <stdlib.h>
int system(const char *str);
Функция system() передает строку, адресуемую параметром str, в качестве команды для командного процессора операционной системы.

Если функция system() вызывается с нулевым указателем, она возвращает ненулевое значение при условии доступности командного процессора и нуль в противном случае. (Программы, выполняемые в специальных средах, могут не иметь доступа к командному процессору.) Значение, возвращаемое функцией system(), определяется конкретной реализацией. Но обычно возвращается нуль при успешном выполнении команды, а ненулевое значение кода возврата означает наличие ошибки.
#include <stdlib.h>
unsigned long long int strtoull(const char *restrict start,
char **restrict end, int radix);
Функция strtoull() добавлена в версии С99.

Функция strtoull() аналогична функции strtoul() за исключением того, что она возвращает значение типа unsigned long long int. Если результат не может быть представлен как значение типа unsigned long long int, возвращается значение ULLONG_MAX, а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
#include <stdlib.h>
unsigned long int strtoul(const char *start, char **end, int radix);
Функция strtoul() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром start, в значение типа unsigned long и возвращает полученный результат. Основание системы счисления, в которой представлено число, определяется параметром radix. Если значение radix равно нулю, то основание определяется так же, как и основание системы счисления при записи констант. Если значение radix не равно нулю, то оно должно быть целым числом от 2 до 36.

В версии С99 к параметрам start и end применен квалификатор restrict.

Функция strtoul() работает следующим образом:

Сначала в строке, адресуемой параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считывается число. Считывание заканчивается как только будет обнаружен символ, который не может быть частью длинного целого числа без знака. К таким символам относятся пробелы, символы табуляции и пустой строки, знаки препинания и другие символы. Наконец, параметр end устанавливается так, чтобы указывать на "неиспользованный" остаток исходной строки, если такой существует. Например, если функция strtoul() вызывается с аргументом

"100 клещей"
то она возвратит значение

100L
а параметр end будет указывать на пробел, предшествующий слову

"клещей"
Если результат не может быть представлен как длинное целое без знака, функция strtoul() возвращает значение ULONG_MAX, а глобальная переменная errno устанавливается равной значению ERANGE, что свидетельствует об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
#include <stdlib.h>
long long int strtoll(const char * restrict start, char ** restrict end, int radix);
Функция strtoll() добавлена в версии С99.

Функция strtoll() аналогична функции strtol() за исключением того, что она возвращает значение типа long long int. Если результат не может быть представлен как значение типа long long int, возвращается либо значение LLONG_MAX, либо значение LLONG_MIN, а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода результата за пределы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.