Cтраница 2
Вызовы функций Win32 API для управления файлами и каталогами в первом приближении подобны соответствующим им двойникам в UNIX, но у функций Win32 API больше параметров и другая модель безопасности. Процедура открытия файла возвращает дескриптор файла, который затем может использоваться для чтения этого файла или записи в файл. Для графических приложений заранее не определены указатели в файлах. Стандартные потоки ввода, вывода и сообщений об ошибках при необходимости должны открываться явно. Однако в консольном режиме они открываются заранее. [16]
![]() |
Вид файла из п байт с точки зрения С. [17] |
Каждый файл оканчивается или маркером конца файла, или особым байтом, определенным в работающей с файлами программе. Когда файл открывается, ему ставится в соответствие поток. В начале исполнения программы автоматически открываются три файла и связанные с ними потоки - стандартный ввод, стандартный вывод и стандартная ошибка. Потоки обеспечивают каналы передачи данных между файлами и программами. Например, стандартный поток ввода позволяет программе считывать данные с клавиатуры, а стандартный поток вывода позволяет выводить данные на экран. Открытый файл возвращает указатель на структуру FILE ( определенную в stdio. Эта структура включает дескриптор файла, то есть индекс в массиве операционной системы, называемом таблицей открытых файлов. Каждый элемент массива содержит блок управления файлом ( FCB), который используется операционной системой для доступа к конкретному файлу. Для обращения к стандартному вводу, стандартному выводу и стандартному потоку ошибок следует воспользоваться указателями файлов stdin, stdout и stderr соответственно. [18]
![]() |
Язык C рассматривает файл как набор из п байтов. [19] |
Каждый файл завершается или маркером конца файла ( EOF - end-of - file marker) или указанным числом байтов, записанным в служебную структуру данных поддерживающей системой. Когда файл открывается, то создается объект и с этим объектом связывается поток. В главе 11 показано, что автоматически создаются четыре объекта - cin, cout, cerr и clog. Потоки, связанные с этими объектами, обеспечивают каналы связи между программой и отдельными файлами или устройствами. Например, объект cin ( объект стандартного потока ввода) дает возможность программе вводить данные с клавиатуры, объект cout ( объект стандартного потока вывода) позволяет программе выводить данные на экран, объекты cerr и clog ( объекты стандартного потока ошибок) позволяют программе выводить на экран сообщения об ошибках. [20]