Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Доступ к файлам




РАБОТА С ФАЙЛАМИ

Void main(void)

{

clrscr();

y(a);

getche();

}

 

 

Система ввода/вывода языка Си поддерживает интерфейс, не зависящий от того, какое в действительности используется устройство ввода/вывода, т.е. абстрактный уровень между программистом и физическим устройством. Эта абстракция называется потоком, а способ хранения информации на физическом устройстве – файлом.

В языке Си существует два типа потоков: текстовый (text) и двоичный (binary).

Текстовый поток – это последовательность символов. Однако может не быть взаимооднозначного соответствия между символами, которые передаются в потоке и выводятся на экран (например, символы возврата каретки или табуляции). Двоичный поток – это последовательность байтов, которые взаимооднозначно соответствуют тому, что находится на внешнем устройстве.

Файл в языке Си – это понятие, которое может быть приложено ко всему, от файла на диске до терминала. Поток может быть связан с файлом с помощью функции открытия файла fopen.

fp = fopen (name, mode);

Первым аргументом функции fopen является имя файла, которое задается в виде символьной строки. Второй аргумент mode (режим) также является символьной строкой, которая указывает, как этот файл будет использоваться. Допустимыми режимами являются: чтение ("r"), запись ("w") и добавление ("a").

Связующим звеном между файлом и потоком в системе ввода/вывода языка Си является указатель на файл (fp в примере). Указатель файла определяет имя файла на диске и его использование в потоке, ассоциированном с ним. Указатель файла – это указатель на структуру типа FILE, которая определена в файле stdio.h.

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

Другой необходимой вещью является способ чтения или записи, если файл уже открыт. Здесь имеется несколько возможностей, из которых getc и putc являются простейшими. Функция getc возвращает следующий символ из файла; ей необходим указатель файла, чтобы знать, из какого файла читать. Таким образом,

c = getc(fp)

помещает в переменную "с" следующий символ из файла, указанного посредством fp, или EOF, если достигнут конец файла.

Функция putc,

putc(c, fp)

являющаяся обратной к функции getc, помещает символ из переменной "с" в файл fp. Если операция была успешной, то возвращается записанный символ, иначе – EOF.

При запуске программы автоматически открываются три файла, которые снабжены определенными указателями файлов. Этими файлами являются стандартный ввод, стандартный вывод и стандартный вывод ошибок; соответствующие указатели файлов называются stdin, stdout и stderr. В обычной ситуации они связаны с консолью, однако могут быть перенаправлены на другой поток. Указатели файлов stdin, stdout и stderr могут располагаться в любом месте, где можно использовать объект типа FILE*. Использование потоков stdin и stdout будет показано в следующем примере.

Рассмотрим программу для конкатенации файлов. Используемая здесь основная схема оказывается удобной во многих программах: если имеются аргументы в командной строке, то они обрабатываются последовательно. Если такие аргументы отсутствуют, то обрабатывается стандартный ввод. Это позволяет использовать программу как самостоятельно, так и как часть большей задачи.

#include <stdio.h> filecopy(fp)// copy file fp to standard output FILE *fp; { int c; while ((c=getc(fp))!=EOF) putc(c, stdout); } main(argc, argv) // cat: concatenate files int argc; char *argv[ ]; { FILE *fp; if(argc==1) // no args; copy standard input filecopy(stdin); else while (--argc > 0)if ((fp = fopen(*++argv, "r")) == NULL) { printf("cat: can't open %s", *argv); break; } else { filecopy(fp); fclose(fp); } }

Функция fclose является обратной по отношению к fopen; она разрывает связь между указателем файла и внешним именем, установленную функцией fopen. После этого указателю может быть назначен другой файл.

 




Поделиться с друзьями:


Дата добавления: 2015-06-04; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.