КАТЕГОРИИ: Архитектура-(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 возвращает следующий символ из файла; ей необходим указатель файла, чтобы знать, из какого файла читать. Таким образом, помещает в переменную "с" следующий символ из файла, указанного посредством 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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |