Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры прога 2.docx
Скачиваний:
2
Добавлен:
18.09.2019
Размер:
83.31 Кб
Скачать

41.2,Объединения

Инициализировать объединение можно только значением, имеющим тип его первого элемента.

union u {

int i;

char c;

long int l;

} a,b;

a.i=100;

Часто объединения применяются в случаях, когда надо выделить часть целого и переменной или загрузить объединение в структуру, описанную с полями битов.

42.Ввод, вывод потока.

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

Так как потоки не зависят от физических устройств, одна и та же функция может выводить информацию на екран и на диск одновременно. Существует 2 типа потока:

1)текстовый поток – последовательность строк, каждая строка имеет 0 или n литер и заканчивается \0 , но операционная среда может потребовать коррекцию текстового потока. Например, пара символов: возврат каретки и перевод строки трактуются как один символ перевода строки при вводе.

2)бинарный поток – последовательность непреобразуемых байтов, которые взаимнооднозначно соответствуют тому, что находится на внешнем устройстве.

Чтобы связать поток с файлом или устройством, его необходимо открыть. Эта связь разрывается посредством закрытия потока.Открытие файла возвращает указатель на обьект типа FILE.

С началом работы автоматически открываются 5 потоков:

stdin – стандартный ввод;

stdout – стандартный вывод;

stderr – стандартный вывод сообщения об ошибках;

stdaux – стандартный дополнительный поток;

stdprn – стандартная печать.

По умолчанию 1-3 относятся к консоли и открываются в текстовом режиме, 4-5 открываются в двоичном режиме.Режим доступа к файлу устанавливается во время его открытия как параметр функции открытия или с помощью спец. переменной _fmode, которая находится в <fctl.h> или <stdlib.h>. fmode может принимать 2 значения: O_BINARY – открывается в двоичном режиме, O_TEXT – в текстовом режиме. По умолчанию устанавливается текстовый режим.

Связующим звеном между файлом и потоком является указатель на файл. Указатель на файл – это указатель на структуру типа FILE, ее шаблон определен в stdio.h. Этот указатель используется для последующей ссылки на поток.

43.Доступ к файлам через поток ввода/вывода.Открытие потока.Закрытие потока.

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

Указатель на файл - это указатель на структуру типа FILE, шаблон которой содержится в < stdio.h>. Этот указатель используется для последующих ссылок на потоки

FILE* fp-объявление.

Открытие потока.

Функция fopen открывает поток и связывает с ним файл с заданым именем , она возвращает указатель связанный с этим файлом или NULL если попытка открытия неудачна.

Прототип этой функции FILE*fopen(char *filename,char *mode);

char *filename-указатель на строку-имя файла.

char *mode-задает режим открытия файла.

char *mode может принимать следующие значения :

«r»-открыть только для чтения

«w»-создать для записи .

«a»-открыть файл для добавления в конец файла.

«r+»-открыть для исправления (для чтения и записи)

«w+»-создать для исправления (старое содержимое теряется)

«a+»-открыть файл для исправления уже существующей информации и добавления ее в конец.

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

ПР: открытие файла “good”

FILE *fp;

If ((fp = fopen(“good”,”r”))==NULL)

printf(“Can not open file\n”); exit(1);}

При открытии файла для чтения требуется, чтобы он существовал. В случае открытия для чтения и записи, существующий файл не уничтожается, если он есть, создается если его нет.

Функция freopen переназначает указатель потока на другой поток. Прототип этой функции: FILE *freopen (char *filename, char *mode, FILE *stream);

Функция открывает файл в режиме mode и свзывает его с потоком stream. Обычно используют для замены файлов, связанных с <stdin>, <stout>…

Закрытие потока.

Функция fclose закрывает отдельный поток, а fcloseall закрывает все открытые потоки, за исключением стандартных.

int fclose (FILE*fp),

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

Функция remove уничтожает заданный файл int remove (char *filename)

возвращает NULL при успешной операции.