Значения режимов в Турбо-Си

 

Режим Смысл
"r" "w" "а" "r+" "w+" ''а+" Открыть файл для чтения Создать файл для записи Добавлять в файл Открыть файл для чтения/записи Создать файл для чтения/записи Открыть или создать файл для чтения/записи

 

Например, для того чтобы открыть файл с именем test для записи, можно написать

 

fp = fopen("test", "w");

 

где fp -переменная типа FILE*. Переменная fp является указателем файла.

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

if((fp = fopen("tesf, "w"))==NULL)

{

рuts("Нельзя открыть файл!\n");

exit(l);

}

 

NULL - это макро, которое определяется в файле заголовка stdio.h.

Функция putc() в виде

 

рuts(<символ>, fp);

 

используется для записи символа в поток, который предварительно открыт для записи с помощью функции fopen(); fp - возвращаемый функцией fopen() указатель файла.

Функция getc() в виде

 

getc(fp)

 

используется для чтения символов, которые она возвращает из потока, открытого в режиме чтения функцией fopen(). fp является указателем файла типа FILE, который возвращается функцией fopen(). В тех случаях, когда достигается конец файла, функция getc() возвращает маркер его конца EOF. Например, для чтения текстового файла до маркера конца файла можно использовать следующие операторы:

ch = setc(fp);

while(ch!=EOF)

{

ch = getc(fp);

}

 

Функция feof() использует аргумент указателя-файла и возвращает 1, если достигнут конец файла, или 0, если не достигнут. Например, приведенная ниже программа читает двоичный файл до тех пор, пока ЭВМ не встречает маркер конца файла:

 

while(!feof(fp)) ch = getc(fp);

 

Функциюfdose() используют для закрытия потока, который был открыт с помощью функции foреn(). Все потоки необходимо закрыть перед завершением программы. Аргументом функции является указатель файла, который закрывается.

Функции foреn(), getc(), putc() и fdose() составляют минимальный набор функций ввода-вывода. Простым примером использования функций putc(), foреn() и fdose() является программа, которая приведена ниже. Эта программа просто читает символы с клавиатуры и записывает иx в дисковый файл до тех пор, пока не введен знак $. Имя выходного файла задается из командной строки. Например, если вы назовете программу ktod («клавиша - на диск»), то набор на клавиатуре ktod test будет позволять вам вводить строки текста в файл с именем test.

Программа 108

#include .h"

main(argc,argv) /*ktod - клавиша на диск */

int argc;

char *argv[];

(

FILE *fp;

char ch;

if(argc!=2)

{

printf("Bы забыли ввести имя файла\n);

exit(l);

)

if((fp=fopen(argv[l], "w"))== NULL)

(

printf("He может открыть файл\n);

exit(l);

}

do

(

ch = getchar();

putc(ch, fp);

)

while (ch!='s');

fclose (fp) ;

}

Еще одним примером является программа dtos, которая будет читать любой ASCII файл и выводить его содержимое на экран.

 

Программа 109

#include "studio.h"

main (argc, argv) /*dtos-wicK на экран*/

int argc;

char *argv[] ;

(

FILE *fp;

char ch;

if(argc!=2) {

printf("Вы забыли ввести имя файла\n"};

exit(l);

}

if((fp=fopen(argv[l], "r"))==NOLL)(

printfC'He может открыть файл\n"};

exit(l);

}

ch=getc(fp); /* читать один символ */

while(ch!=EOF)

{

putchar(ch); /* печать на экран */

ch=getc(fp);

}

fclose(fp) ;

}

 

Под управлением буферизованной системы ввода-вывода можно выполнять операции чтения и записи с произвольным доступом с помощью функции fseek(), которая устанавливает файловую позицию.

Например, для чтения 234-го байта в файле с именем test можно использовать следующую функцию:

funcl()

{

FILE *fp;

if((fp=fopen("test" ,"r"))==NULL)

{

printf("He могу открыть фаил\n");

exit(l);

}

fseek(fp,234L,0);

return getc(fp); /*читать один символ в 234-й позиции*/

}

 

В дополнение к рассмотренным до сих пор основным функциям ввода-вывода буферизованная система ввода-вывода включает функции fprintf() и fscanf(). Эти функции ведут себя точно так же, как функции printf() и scanf(), за исключением того, что они работают с дисковыми файлами. Обращения к функциям fprintf() и fscanf() имеют следующий вид:

 

fprintf(1р,<формат>,<список аргументов>);

fscanf(1р,<формат>,<список аргументов>);

 

где fp является файловым указателем, который возвращается вызовом функции fopen().