Читайте также:
|
|
Некоторые функции ввода-вывода на верхнем уровне
Fopen
FILE *fopen(char *pathname, char *type);
//pathname - path-имя файла.
//type - разрешенный тип доступа.
Функция fopen открывает файл, определяемый path-именем и возвращает указатель на открытый файл, который в дальнейшем передается другим функциям. Значение указателя NULL свидетельствует об ошибке. Символы в строке type определяют тип доступа, требуемый для файла, следующим образом.
РЕЖИМ ОПИСАНИЕ
"r" открыть файл для чтения.(Этот файл должен
существовать).
"w" открыть пустой файл для записи; если этот
файл ранее существовал, его содержимое
уничтожается.
"a" открыть файл для записи (добавления) в
конец. Если данного файла нет, то вначале
он создается.
"r+" открыть файл одновременно для чтения и
записи. Файл должен существовать.
"w+" открыть пустой файл для чтения и записи.
Если этот файл ранее существовал, его содержимое уничтожается.
"a+" открыть файл для чтения и добавления.
Если файла нет, вначале он создается.
Замечание! Нужно внимательно применять режимы "w", "w+", так как они могут уничтожить существующие файлы.
Если файл открыт при помощи типа "a" или "a+", все операции записи выполняются в конец файла. При использовании функций fseek или rewind возможно перепозиционирование указателя на файл; несмотря на это, указатель на файл перед выполнением любых операций записи всегда возвращается в конец файла. Таким образом, существующие данные не будут перезаписаны. При использовании типов "r+', "w+", "a+" допускается одновременно чтение и запись. (Говорится, что файл открывается для обновления). Поэтому, при переключении чтения на запись и наоборот нужно использовать функции fseek или rewind. Для функции fseek (при необходимости) может быть точно определена текущая позиция.
Дополнительно к значениям, описанным выше, может быть добавлен в строке type один из следующих символов, чтобы специфицировать способ преобразования символа новой строки.
Символ | Значение |
t | открыть в текстовом режиме; |
b | открыть в двоичном режиме; |
осуществляются.
Если t или b в строке type не задается, режим преобразования определяется переменной _fmode (константы O_TEXT и O_BINARY), определенную в fcntl.h и режимом, устанавливаемым по умолчанию (текстовый).
Пример:
FILE *f1, *f2;
f1=fopen(“c:\\inp.dat”,”r+b”);// открывается двоичный поток для чтения и записи
f2=fopen(“c:\\out.dat”,”w+”);// открывается текстовый поток для записи и чтения
2) Функция fputc() и putc() записывает символ в файл и имеет следующий прототип:
int fputc(int с, FILE *fp);Здесь fp - указатель на файл, возвращенный функцией fopen(), с - символ для записи (переменная с имеет тип int, но используется только младший байт). При успешном завершении putc() возвращает записанный символ, в противном случае возвращается константа EOF. Она определена в файле stdio.h и имеет значение -1. Putc() оформлена в виде макроса.
3) Функция fgetc() и getc() читает символ из файла и имеет следующий прототип:
int fgetc(FILE *fp);Здесь fp - указатель на файл, возвращенный функцией fopen(). Эта функция возвращает прочитанный символ. Соответствующее значение имеет int, но старший байт равен нулю. Если достигнут конец файла, то getc возвращает значение ЕОF. Getc() оформлена в виде макроса.
4) Функция feof() определяет конец файла при чтении двоичных данных и имеет следующий прототип:
int feof(FILE *fp);Здесь fp - указатель на файл, возвращенный функцией fopen(). При достижении конца файла возвращается ненулевое значение, в противном случае возвращается 0.
5) Функция fputs() записывает строку символов в файл.
int fputs (char *s, FILE *fp);
При возникновении ошибки возвращается значение EOF, в противном случае ненулевое значение.
6) Функция fgets() читает строку символов из файла.
char *fgets(char *s, int n, FILE *fp);
В качестве второго параметра должно быть записано максимальное число вводимых символов плюс единица, а в качестве третьего - указатель на переменную файлового типа. Строка считывается целиком, если ее длина не превышает указанного числа символов, в противном случае функция возвращает только заданное число символов. Функция возвращает указатель на строку s при успешном завершении и константу NULL в случае ошибки либо достижения конца файла.
7) Функция puts() записывает строку символов в stdout и дополняет ее символом ‘\n’.
int puts (char *s);
8) Функция gets() читает строку символов из stdin. Если входной поток прерывается символом ‘\n’, то он отбрасывается и не попадает в строку. Вводимая строка может содержать пробелы.
char *gets(char *s);
9) Функция fprintf() выполняет те же действия, что и функция printf(), но работает с файлом. Ее отличием является то, что в качестве первого параметра задается указатель на переменную файлового типа.
10) Функция fscanf() выполняет те же действия, что и функция scanf(), но работает с файлом. Ее отличием является то, что в качестве первого параметра задается указатель на переменную файлового типа.
11) Функция fseek() позволяет выполнять перемещение указателя файла в заданную позицию и имеет следующий прототип:
int fseek(FILE *fp, long count, int access);Здесь fp - указатель на файл, возвращенный функцией fopen(), count - номер байта относительно заданной начальной позиции, начиная с которого будет выполняться операция, access - способ задания начальной позиции.
Переменная access может принимать следующие значения:
0 - начальная позиция задана в начале файла (SEEK_SET);
1 - начальная позиция считается текущей (SEEK_CUR);
2 - начальная позиция задана в конце файла (SEEK_END).
При успешном завершении возвращается нуль, при ошибке - ненулевое значение.
Пример:
fseek(fp, 0L, SEEK_END);// последняя позиция файла
fseek(fp, -2, 1);//на два байта перед текущей позицией
12) Функция ferror() позволяет проверить правильность выполнения последней операции при работе с файлами. Имеет следующий прототип:
int ferror(FILE *fp);В случае ошибки возвращается ненулевое значение, в противном случае возвращается нуль.
13) Функция rewind() устанавливает указатель текущей позиции в начало файла и имеет следующий прототип:
void rewind(FILE *fp);
14) Функция fread() предназначена для чтения блоков данных из потока. Имеет прототип:
unsigned fread(void *ptr, unsigned size, unsigned n, FILE *fp);Она читает n элементов данных, длиной size байт каждый, из заданного входного потока fp в блок, на который указывает указатель ptr. Общее число прочитанных байтов равно произведению n*size. При успешном завершении функция fread() возвращает число прочитанных элементов данных, при ошибке - 0.
Пример:
int i;
fread(&i, sizeof(i), 1,fp);
15) Функция fwrite() предназначена для записи в файл блоков данных. Имеет прототип:
unsigned fwrite(void *ptr, unsigned size, unsigned n, FILE *fp);Она добавляет n элементов данных, длиной size байт каждый, в заданный выходной файл fp. Данные записываются с позиции, на которую указывает указатель ptr. При успешном завершении операции функция fwrite() возвращает число записанных элементов данных, при ошибке - неверное число элементов данных.
Пример:
int i=5;
fwrite(&i, sizeof(i), 1,fp);
16) Функция fflush() сбрасывает содержимое буфера в файл.
int fflush (FILE *fp);
Если произошла ошибка возвращает EOF, в противном случае 0.
17) Функция fclose() сбрасывает буфер и закрывает указанный поток.
int fclose (FILE *fp);
Если произошла ошибка возвращает EOF, в противном случае 0.
18) Функция freopen() позволяет закрыть существующий поток и связать его с другим файлом.
FILE *freopen(char *pathname, char *type, FILE *fp);
Пример:
freopen(“c:\\out.txt”, ”w”, stdout);
………………
fclose(stdout);
19) Функция putchar() записывает символ в stdout.
int putchar(char ch);
20) Функция getchar() считывает символ из stdin.
int getchar();
Некоторые функции ввода-вывода для консольного терминала.
1) Функция getch() производит чтение символа с консоли (клавиатуры):
int getch();
2) Функция getche() производит чтение символа с консоли с эхо-выводом:
int getche();
3) Функция clrscr() производит очистку экрана:
void clrscr(void);
4) Функция kbhit() определяет была ли нажата клавиша:
int kbhit(void);
Функция возвращает ненулевое значение, если была нажата какая-либо клавиша и нуль в противном случае.
Дата добавления: 2015-07-12; просмотров: 49 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Именование файлов | | | Вступление – этикетки или не этикетки? |