русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Лекция №10. Работа с файлами. Управление файловой системой. Консольный ввод в ассемблере.


Дата добавления: 2013-12-23; просмотров: 1246; Нарушение авторских прав


LpFileName — указатель на ASCIIZ-строку с именем (путем) открываемого или создаваемого файла;

HANDLE hTemplateFile); (7)

DWORD dwFlagsAndAttributes, (6)

DWORD dwCreationDistribution, (5)

LPSECURITY_ATTRIBUTES IpSecurityAttributes, (4)

DWORD dwShareMode, (3)

DWORD dwDesiredAccess, (2)

CLPCTSTR lpFileName, (1)

HANDLE CreateFile(

Функция WinAPI для создания файла

2) dwDesiredAccess — тип доступа к файлу:

* GENERIC_READ = 80000000h - доступ для чтения;

* GENERIC_WRITE = 40000000h - доступ для записи;

* GENERIC_READ+GENERIC_WRITE = 0C0000000h - доступ для чтения-записи;

3) DwShareMode — режим разделения файлов между разными процессами, данный параметр может принимать значения:

* 0 — монополизация доступа к файлу;

* FILE_SHARE_READ = 00000001h — другие процессы могут открыть файл, но только для чтения, запись в файл монополизирована процессом, открывшим файл;

* FILE_SHARE_WRITE = 00000002h — другие процессы могут открыть файл, но только для записи, чтение в файл монополизировано процессом, открывшим файл;

* FILE_SHARE_READ+FILE_SHARE_WRITE = 00000003h - другие процессы могут открывать файл для чтения-записи;

4) IpSecurityAttributes — указатель на структуру SecurityAttributes, определяющую защиту связанного с файлом объекта ядра, при отсутствии защиты заносится NULL;

5) dwCreationDistribution — определяет действия для случаев, когда файл существует или не существует.Данный параметр может принимать значения:

* CREATE_NEW= 1 — создать новый файл, если файл не существует; если файл существует, то функция завершается формированием ошибки;

* CREATE_ALWAYS=2 — создать новый файл, если файл не существует; если он существует, то заменить новым;



* ОPEN_EXISTING=3 — открыть файл, если он существует; если файл не существует, то формируется ошибка;

* ОPEN_ALWAYS=4 — открыть файл при его существовании и создать его если файла нет;

* TRUNCATE_EXISTING=5 — открыть файл с усечением его до нулевой длины; если файл не существует, то формируется ошибка;

6) DwFlagsAndAttributes — флаги и атрибуты; этот параметр используется для задания характеристик создаваемого файла:

* FILE_ATTRIBUTE_READ0NLY=0000000lh - файл только для чтения;

* FILE_ATTRIBUTE_HIDDEN=00000002h - скрытый файл;

* FILE_ATTRIBUTE_SYSTEM=00000004h - системный файл;

* FILE_ATrRIBUTE_DIRECTORY=000000l0h - каталог;

* FILE ATTRIBUTE ARCHIVE=00000020h - архивный файл;

* FILE_ATTRIBUTE_N0RMAL=00000080h - обычный файл для чтения-записи (этот атрибут нельзя комбинировать с другими);

* FILE_ATTRIBUTE_TEMPORARY=00000l00h - создается временный файл (преимущество этого файла в том, что система стремится не записывать этот файл на диск, а работать с ним в памяти; этот атрибут выгодно комбинировать с флагом FILE_FLAG_DELETE_ON_CLOSE, тогда после закрытия файла в программе он будет удален, не оставив следов на диске, иначе программе придется «подчищать» за собой содержимое диска);

* FILE_FLAG_WRITE_THRОUGH=80000000h - не использовать промежуточное кэширование при записи на диск, а все изменения записывать прямо на диск;

* FILE_FLAG_NO_BUFFERING=20000000h - не использовать средства буферизации операционной системы;

* FILE_FLAG_RANDOM_ACCESS=10000000h - прямой доступ к файлу (установка этого флага или флага FILE_FLAG_SEQUENTIAL_SCAN позволяет оптимизировать системе процесс кэширования);

* FILE_FLAG_SEQUENTIAL_SCAN=08000000h - последовательный доступ к файлу;

* FILE_FLAG_DELETE_0N_CL0SE=04000000h - удалить файл после его закрытия;

* FILE_FLAG_OVERLAPPED=40000000h - асинхронный доступ к файлу(синхронность означает то, что программа, вызвавшая функцию для доступа к файлу, приостанавливается до тех пор, пока не закончит работу функция ввода-вывода);

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

 

При удачном завершении функция возвращает в регистре ЕАХ дескриптор нового файла. В случае неудачи функция возвращает в регистре ЕАХ значение NULL.


Пример 1:

.code

mov eax,offset filename

mov fname,eax

push 00000000h ; Создаём новый файл с новыми параметрами

push 00000080h ; создаём обычный файл для чтения-записи

push 00000003h ; открываем файл, если он существует; если файл

; не существует, то формируется ошибка;

push 00000000h ; нет защиты при создании файла

push 00000001h ; другие процессы могут открыть файл, но только

; для чтения,

push 0C0000000h ; тип доступа к файлу - доступ для чтения-записи;

push fname ; путь к открываемому или создаваемому файлу;

call CreateFileA

cmp eax,FFFFFFFFh

je exit

.data

filename db 'data.txt',0

 

Пример 2:

.code

mov eax,offset filename

mov fname,eax

push 0h ; hTemplateFile = NULL

push 80h ; Attributes = NORMAL

push 3h ; Mode = OPEN_EXISTING

push 0h ; pSecurity = NULL

push 3h ; ShareMode = FILE_SHARE_RW

push 3h ; Access = READ

push fname ; 'data.txt'

call CreateFileA

push eax

.data

filename db 'data.txt',0

 

После выполнения функции в ЕАХ будет расположен хендл открытого файла. В случае ошибки ЕАХ будет равен FFFFFFFFh = -1. После вызова функции можно сохранить хендл файла в стек для дальнейшей работы.




<== предыдущая лекция | следующая лекция ==>
 | Пример программы для практики


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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