Понятие функции. Реализация функции. Объявление функции. Вызов функции. Рекурсивный вызов. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятие функции. Реализация функции. Объявление функции. Вызов функции. Рекурсивный вызов.



Функция – это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Имя функции должно быть уникальным в рамках программы. В языке С не допускается объявление функции с таким же именем! В языке С++ допускается с одинаковым именем несколько функций, но с разными параметрами.

· Объявление

· Реализация

· Вызов

Согласно стандарту ANSI у функции список параметров может отсутствовать. В этом случае считается, что функция объявлена в старом стиле и список параметров будет определен внутри функции. Для функции в старом стиле компилятор не проверяет соответствие нормальных и фактических параметров. Если функция не принимает никаких параметров, то правильно использовать void.

Объявление функции – это определение имени функции, типа возвращаемого значения, количества и типа параметра функции.

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

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

При вызове функции значение фактических параметров присваивается соответственно формальным параметрам. Количество формальных и фактических параметров должно совпадать.

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

Рекурсивный вызов – это такой вызов функции, при котором функция вызывает сама себя.

Указатель на функцию.

Указатель, полученный взятием адреса функции можно использовать для вызова данной функции.

Адрес функции – адрес начала функции (т.е. первой ассемблерной инструкции).

У указателей на функцию типы параметров описываются так же как и в самих функциях. При присвоении указателя должно соблюдаться точное соответствие полного типа функции. В языке Си разрешено объявление типа – указатель на функцию.

Указатели на функцию: пример способа применения указателя – полиморфные функции.

 

19. Файлы. Файловая система. Свойства файла (имя, расширение, атрибуты, время, владелец и группа, права доступа).

Файлы*

Файловая система(фс)*

Все файлы обладают свойствами, но в зависимости от фс эти свойства различны

Свойства файла для всех:

· Имя файла (короткое имя) в большинстве фс имя используется для указания к какому файлу производится обращение. В различных фс на имя файла накладывается ограничение.

FAT 12, FAT 16 (длина имени – 8 символов+3 на расширение),VFAT (255 байт), FAT 32, HPFS (255 символов), HTFS (256 юникод символов), ext2, ext3 (255 байт)

Есть еще ограничение по набору допустимых символов

MS – DOS можно: только заглав. буквы и цифры

Нельзя: пробел? * > < | \: “ ”

Windows нельзя: |? * > < / \: “ ”

Unix/Linux нельзя: /:

Большинство ОС недопускают наличие в 1 каталоге файлов с одинаковым именем.

· Расширение имени файла как самостоятельный атрибут существует только в FAT 12/FAT 16, во всех остальных расширение это условность (часть имени, отделенная самой правой точкой)

· Атрибуты – это набор значений типа «да/нет» выполняет исключительно информативную роль, на доступ к файлам не влияет

READ ONLY – только для чтения

SYSTEM – системный

HIDDEN – скрытый

ARCHIVE – архивный (требующий архивации)

· Время

У каждого файла есть:

üВремя создание

üВремя последней идентификации

üВремя последнего доступа

· Владелец и группы

Когда создается файл указывается владелец и группа к которой он принадлежит

· Правила доступа

В некоторой фс предусмотрена возможность ограничения доступа пользователем содержимому к файлам

 

Файлы. Операции с файлами. Типы файлов.

Типы файлов

üОбыкновенный (позволяющий выполнять чтение и запись)

üДиректория (каталог) (файл содержащий записи от др. файлов в том числе и под каталог)

üЖесткая ссылка (hard link) (в общем случае одна и та же область памяти может иметь неск. имен, которые указывают на одни и те же данные. В общем случае после создания ссылки нельзя сказать, кто исходный файл, они равноправны. Данные существуют пока сущ. Хотя бы одно из имен. Ссылку можно создать только на одном физическом носителе)

ü Символьная ссылка (soft link) (файл, содержащий в себе ссылку на другой файл или директорию. Файл может ссылаться на любой элемент файловой системе, в том числе на другом носителе)

(Windows: ….enk)

Операции с файлами

· Связанные с открытием

Открытие (указ-ся имя, режим доступа, режим общего доступа) результат – дескриптор этого файла

Закрытие файла (указ-ся дескриптор)

Чтение, запись (дескриптор, буфер)

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

Получение текущего значение файлового указателя (дескриптор)

Сброс файловых буферов (flush) (дескриптор)

модификация

· Не связанные

* операции управляют размером, именем, положением в дереве каталогов (не получают доступ к содержимому файла)

Удаление Переименование

Перемещение Копирование

Создание ссылки Получение /изменение атрибутов

21.Файлы. Функции для работы с файлами. Операции, связанные с открытием файла. Дескриптор файла типа int (Unix), дескриптор файла типа FILE (FILE*) (любая), дескриптор файла типа HANDLE(Windows).

FILE*

Откр.fopen (char* filename, char* mode(тип доступа))

Типы доступа:

“r” – чтение “w” – запись

“a” – запись в конец (добавление) “r+” – чтение и запись

“w+” – открытие нового файла на чтение и запись

“a+” – открытие на чтение и добавление

“rb” “wt” “w+t”* (“b” – бинарный файл “t” – текстовый используются только вместе с осн.)

В случае ошибки – NULL

Закр. fclose (FILE* f)

Чтение

size_t fread (void buf, size_t size, size*. count, FILE* f)

Запись fwrite(…)

Форм. печать

fprintf (FILE* f, char* frm,…)

Форм. скан. fscanf (FILE* f, char* frm,…)

· Fseek – устанавливает текущее значение файлового указателя

(от нач, от кон, от тек. позиции)

Fteel – показывает текущее значение файлового указателя

HANDLE

Откр. Create file (char* file name, DWORD dw Access DWORD dw ShareMode DWORD dw CrDisp DWORD dw Flags SECURITY_ATTRIBUTES lp SecAttr HANDLE hTemplate)

Типы доступа:

 

Create file – созд/откр файл, директорию физ. диск, раздел, буфер консоли, pipe, и другие коммуникационные ресурсы.

CREATE_ALWAYS – созд. нового файла, если есть, то очищается

CREATE_NEW – созд. нового файла, если есть, то ошибка

OPEN_ ALWAYS – откр. существующего, если нет, то созд.

OPEN_EXISTING – откр. существующего, если нет, то ошибка

TRUNCATE_EXISTING – откр. сущ. файла и очищение, если нет, то созд.

 

FILE_ATRIBUTE_NORMAL

FILE_ATRIBUTE_READONLY

FILE_ATRIBUTE_SYSTEM

FILE_FLAG_NO_BUFFERING – без кош/кеш(???)

FILE_FLAG_OVERLAPPED – при работе в асинхронном режиме

В случае ошибки HANDLE возвращает

INVALID_ HANDLE_VALUE

Boolclose Handle (HANDLE hobj) – возвращает бул. значение

BoolReadFile (HANDLE hfile,…)

BoolWriteFile (HANDLE hfile,…)

 

Int

int open (char* file name, int oflag, int pmode)

pmode (тип доступа): _S_IWRITE

_S_IREAD

Oflag: O_RDONLY

O_WRONLY

O_RDWR

O_APPEND – добыв

O_CREAT – созд. нового файла

O_TRUNC – откр. с обрез.

O_TEXT

O_BINARY

(Ctrl +F1)

int close (int fd)

int read (int fd, void buf, size_t count)

int write (int fd)

 

22.Файлы. Функции для работы с файлами. Операции, не связанные с открытием файла (удаление, копирование, перенос/переименование). Функции для работы с каталогами (создание, удаление, получение списка файлов).

Удаление

Win: BoolDeleteFile (char* file name)

Unix: int unlink (char* name) – только файлы

int remove (char* name) – только файлы + каталог пустой

Копирование

Win: BoolCopyFile (char*. name, char* newfile, BOOLbFailIfExists)

Unix: —

Перемещение

Win: MoveFile (char*. name, char* newfile)

Unix: int rename (char* old path, char* new path)

Создание каталога

Win: CreateDirectory (char* Path name(полный путь), SECURITY_ATTRIBUTES* pAttr) (TRUE)

Unix: mkdir (char* pathname(полный путь), int pmode) (0)

Удаление каталога

Win: BoolRemoveDirectory (char* lpPathName) (TRUE)

Unix: rmdir (char* pathname, int pmode) (0)

Показ списка каталогов

Win: HANDLE FindFirstFife (char* pFile name(строго пути до файла или каталога с символами маски), WIN32_FIND_DATA* pDATA (указатель на структуру, в которой сохраняется информация о первом найденном bvtyb))

* функция открывает идентификатор поиска и заполняет параметр pDATA первым найденным именем, если не верно, то INVALID_ HANDLE_VALUE

Символы маски: *(любое кол-во произвольных символов в том числе и 0)

?(1 произвольный символ)

 

Bool FindNextFife (HANDLE hfind(идентификатор поиска из первой функции), WIN32_FIND_DATA* pDATA)

* функция продолжает поиск и заполняет структуру pDATA следующим найденным именем или каталогом (TRUE, FALSE)

 

FindClose (HANDLE hfind) (TRUE)

Unix: DIR* opendir (char* name(путь до каталога)) функция возвращает указатель на открытый файл или NULL

Необходимо подключить <sys/types.h> <dirent.h>

Dirent* readdir (DIR* dir) – чтение след. записи каталога

функция возвращает указатель на Dirent* или NULL

int closedir (DIR* dir(указатель на структуру описания директории)) (0, -1)

 



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 996; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.147.124 (0.024 с.)