На 95 балів потрібно розробити програму згідно варіанту

Консольні програми розробляються в MASM32.

1. Розробити програму, котра перенаправляє вивід поточного дня тижня (Понеділок, …) з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

2. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточну директорію розміщення системних файлів ОС Windows. Результат вивести у вікно повідомлення.

3. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточні координати курсору, інша має зчитати цей запис і вивести його у вікні повідомлення.

4. Розробити програму, котра перенаправляє вивід поточного часу (00:00:00) з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

5. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточний день тижня (Понеділок,…), інша має зчитати цей запис і вивести його у вікні повідомлення.

6. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточне ім’я користувача, інша має зчитати цей запис і вивести його у вікні повідомлення.

7. Розробити програму, котра перенаправляє вивід поточного імені комп’ютера з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

8. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточний час (00:00:00). Результат вивести у вікно повідомлення.

9. Розробити програму, котра перенаправляє вивід поточного місяця (Січень,…) з консольної програми у вікно повідомлення за допомогою анонімного пайпу

10. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточні координати курсору. Результат вивести у вікно повідомлення.

11. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточний місяць (Січень,…) інша має зчитати цей запис і вивести його у вікні повідомлення.

12. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточний місяць (Січень,..). Результат вивести у вікно повідомлення.

13. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточне ім’я комп’ютера, інша має зчитати цей запис і вивести його у вікні повідомлення.

14. Розробити програму, котра перенаправляє вивід поточної директорії розміщення ОС Windows з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

15. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточне ім’я комп’ютера. Результат вивести у вікно повідомлення.

16. Розробити програму, котра перенаправляє вивід поточних координат курсору з консольної програми у вікно повідомлення за допомогою анонімного пайпу

17. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточний час (00:00:00), інша має зчитати цей запис і вивести його у вікні повідомлення.

18. Розробити програму, котра перенаправляє вивід поточної директорії розміщення системних файлів ОС Windows з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

19. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточний місяць (Січень,..). Результат вивести у вікно повідомлення.

20. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточну дату (00.00.00), інша має зчитати цей запис і вивести його у вікні повідомлення.

21. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточну дату (00.00.00). Результат вивести у вікно повідомлення.

22. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточну директорію розміщення ОС Windows, інша має зчитати цей запис і вивести його у вікні повідомлення.

23. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточний день тижня (Понеділок,…). Результат вивести у вікно повідомлення.

24. Використовуючи синхронізацію процесів розробити програми, котрі взаємодіють через файл. Одна програма має записувати у файл поточну директорію розміщення системних файлів ОС Windows, інша має зчитати цей запис і вивести його у вікні повідомлення.

25. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточне ім’я користувача. Результат вивести у вікно повідомлення.

26. Розробити програму, котра перенаправляє вивід поточної дати (00.00.00) з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

27. Розробити програми, котрі за допомогою іменованих каналів передають між собою поточну директорію розміщення ОС Windows. Результат вивести у вікно повідомлення.

28. Розробити програму, котра перенаправляє вивід поточного імені користувача з консольної програми у вікно повідомлення за допомогою анонімного пайпу.

 

Контрольні запитання

1. Назвати основні механізми міжпроцесової взаємодії.

2. Назвати основні механізми синхронізації процесів та потоків.

3. Які об’єкти використовують для синхронізації процесів та потоків?.

4. Назвати основні типи очікуючих функцій.

5. Що таке атом?

6. Як компонувати та транслювати консольні програми в MASM32?

 

Список використаної літератури

1. Help по функціях API - www.nan32asm.cjb.net

2. Microsoft Windows Help - Win32 Programmers Reference

3. Технічна документація Microsoft - MSDN



Додаток 1

Текст програми синхронізації спільного доступу до файлу.

Дана програма створює семафор та файл і чекає на під’єднання іншої програми.

----------------------------------

; Sem_File.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

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

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

ErrorWriteFile db "Помилка запису у файл",0

Message     db "Повiдомлення для файлу",0        

Success     db "Успiшне завершення програми",0

TimeOut     db "Завершився час очiкування",0

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

buffer  db 256 dup (?)

parameter db "%u"

check  DWORD 0

written DWORD 0

sName  db "MySemaphore",0

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

 

.data?

hSemaphore HANDLE?

hFile  HANDLE?

 

.code

start:

     

invoke CreateSemaphore, NULL, 0, 1, addr sName

.if eax==0

       invoke MessageBox, NULL,addr ErrorCreateSem,\

 addr MsgCaption, MB_OK

       jmp exit

.endif

mov hSemaphore, eax

 

invoke CreateFile, addr fName,\

 GENERIC_READ or GENERIC_WRITE,\

FILE_SHARE_READ, NULL, CREATE_ALWAYS,\ FILE_ATTRIBUTE_NORMAL,NULL

.if eax==INVALID_HANDLE_VALUE

       invoke GetLastError

       invoke wsprintf,addr buffer,addr parameter,eax

       invoke MessageBox, NULL,addr ErrorCreateFile, \

addr buffer, MB_OK

       invoke ReleaseSemaphore, hSemaphore, 1, NULL

       jmp exit

.endif

mov hFile, eax

     

invoke WriteFile, hFile, addr Message, 23,\

addr written, NULL

  .if eax==0

       invoke GetLastError

       invoke wsprintf,addr buffer,addr parameter,eax

       invoke MessageBox, NULL,addr ErrorWriteFile,\

 addr buffer, MB_OK

       invoke ReleaseSemaphore, hSemaphore, 1, NULL

       jmp exit

.endif

     

invoke CloseHandle, hFile

invoke WaitForSingleObject, hSemaphore, 10000

.if eax==WAIT_OBJECT_0

invoke MessageBox, NULL,addr Success,\

 addr MsgCaption, MB_OK

       invoke ReleaseSemaphore, hSemaphore, 1, NULL

       jmp exit

.endif

     

.if eax==WAIT_TIMEOUT

   invoke MessageBox, NULL, addr TimeOut, \

addr MsgCaption, MB_OK

       invoke ReleaseSemaphore, hSemaphore, 1, NULL

          .if eax==0

        invoke GetLastError

             invoke wsprintf,addr buffer,\

addr parameter,eax

invoke MessageBox, NULL, addr ErrorRelease,\

addr buffer, MB_OK

             jmp exit

      .endif

       jmp exit

.endif

      

exit:

invoke ExitProcess,NULL

 

end start

 

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

 

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

У випадку успішного створення семафору і файлу, та зчитування з файлу, результат має виглядати так:



Додаток 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

 

end start

 

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

 

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

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

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




Додаток 4

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

.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

MyAtom   DWORD 0

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

MyAtomName  db "Iм’я атома",0

ErrorFindAtom db "Атома з таким iм'ям не iснує",0

ErrorDA  db "Помилка знищення атома",0

Success  db "Атом успiшно знайдено",0

SuccessDA db "Aтом успiшно знищено",0

AtomCaption db "Значення атома в таблицi атомiв",0     

buffer   db 256 dup (?)

parameter db "%u"

 

.code

start:

      

  invoke GlobalFindAtom,addr AtomName

 .if eax==0

        invoke MessageBox, NULL,addr ErrorFindAtom, addr MsgCaption, MB_OK

        jmp exit

 .endif

  mov MyAtom, eax

  invoke MessageBox, NULL,addr Success, addr MsgCaption, MB_OK

  invoke wsprintf,addr buffer,addr parameter,MyAtom

  invoke MessageBox, NULL, addr buffer, addr AtomCaption, MB_OK

  invoke GlobalGetAtomName, MyAtom,addr buffer,256

  invoke MessageBox, NULL,addr buffer, addr MyAtomName, MB_OK

 

  invoke GlobalDeleteAtom, MyAtom

 .if eax==0

        invoke MessageBox, NULL,addr SuccessDA,\

 addr MsgCaption, MB_OK

        jmp exit

 .endif

   invoke MessageBox, NULL,addr ErrorDA, addr MsgCaption, MB_OK

exit: 

  invoke ExitProcess,NULL

 

end start

 

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



Додаток 5


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: