Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodychka-lab_OS.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.35 Mб
Скачать

Додаток 2

Текст програми, котра відкриває семафор, зчитує дані з файлу та знищує семафор.

;----------------------------------

; Sem_Read.asm ;

.386

.model flat, stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

;wsprintfA PROTO C :DWORD, :VARARG

;wsprintf equ <wsprintfA>

.data

MsgCaption db "Повiдомлення!",0

ErrorOpenSem db "Помилка вiдкриття семафору",0

ErrorCreateFile db "Помилка створення файлу",0

ErrorReadFile db "Помилка зчитування з файл",0

ErrorReleaseSem db "Помилка знищення семафору",0

;buffer db 256 dup (?)

;parameter db "%u"

check DWORD 0

Readed DWORD 0

fBuffer db 25 dup (0)

sName db "MySemaphore",0

fName db "C:\Temp\MYFILE.TXT",0

.data?

hSemaphore HANDLE ?

hFile HANDLE ?

.code

start:

invoke OpenSemaphore, SEMAPHORE_ALL_ACCESS, TRUE, addr sName

.if eax==0

invoke MessageBox, NULL,addr ErrorOpenSem, addr MsgCaption, MB_OK

jmp exit

.endif

mov hSemaphore, eax

invoke CreateFile, addr fName, GENERIC_READ or GENERIC_WRITE,\

FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL

.if eax==INVALID_HANDLE_VALUE

invoke MessageBox, NULL,addr ErrorCreateFile, addr MsgCaption, MB_OK

invoke ReleaseSemaphore, hSemaphore, 1, NULL

jmp exit

.endif

mov hFile, eax

invoke ReadFile, hFile, addr fBuffer, 25,addr Readed, NULL

.if eax==0

invoke MessageBox, NULL,addr ErrorReadFile, addr MsgCaption, MB_OK

invoke ReleaseSemaphore, hSemaphore, 1, NULL

jmp exit

.endif

invoke MessageBox, NULL,addr fBuffer, addr MsgCaption, MB_OK

invoke CloseHandle, hFile

invoke ReleaseSemaphore, hSemaphore, 1, NULL

.if eax==0

invoke MessageBox, NULL,addr ErrorReleaseSem, addr MsgCaption, MB_OK

jmp exit

.endif

exit:

invoke ExitProcess,NULL

end start

Додаток 3

Текст програми створення глобального атома.

;----------------------------------

; AddAtom.asm

;----------------------------------

.386

.model flat, stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

.data

MsgCaption db "Повiдомлення!",0

MyAtom DWORD 0

AtomName db "Привіт атом",0

ErrorAddAtom db "Неможливо створити атом",0

Success db "Атом успiшно створено",0

.code

start:

invoke GlobalAddAtom, addr AtomName

.if eax==0

invoke MessageBox, NULL,addr ErrorAddAtom,\

addr MsgCaption, MB_OK

jmp exit

.endif

mov MyAtom, eax

invoke MessageBox, NULL,addr Success,\

addr MsgCaption, MB_OK

exit:

invoke ExitProcess,NULL

e nd start

Результат виконання програми:

Опис програми:

Дана програма створює за допомогою функції GlobalAddAtom глобальний атом, тобто атом, котрий можуть “бачити” інші програми.

Для того, щоб звернутися до глобально атома (дізнатись його ім’я), потрібно використовувати функцію GlobalGetAtomName, якій потрібно передати дескриптор, котрий був отриманий після створення атома. Цей дескриптор може наслідуватись для використання іншими програмами. Для того, щоб дізнатись значення атома (ідентифікатор імені атома в таблиці атомів) потрібно використовувати функцію GlobalGetAtom, котрій передається параметром ім’я атома.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]