Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadachi_OOP_SPIOS_Assembler.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
314.37 Кб
Скачать

1 Розробити консольну програму, яка відкриває файл порціями по 4Кб та відображае його зміст в вікні. Для роботи з файлами викорастати Win32 Api

#include <windows.h>

#include <tchar.h>

#ifndef UNICODE

#include <stdio.h>

#endif

#define BUFFERSIZE 0x1000

int_tmain(int argc, TCHAR * argv[])

{

TCHAR szFile[_MAX_PATH];

HANDLE hReadFile;

_tprintf(_T(“Имя файла”));

_getts(szFile);

hReadFile = CreateFile(szFile, GENERIC_READ,0,(LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATRIBUTE_NORMAL, (HANDLE) NULL);

if(hReadFile==INVALID_HANDLE_VALUE) {

_tprintf(_T(“Ошибка открытия файла”));

return;}

else

{

//считать порциями по 4 Кб и отобразить на экран

BYTE buffer[BUFFERSIZE];

DWORD dwRead;

do

{BOOL fRead = ReadFile(hReadFile, buffe, BUFFERSIZE, &dwRead, NULL);

If(fRead ==FALSE)

{

_tprintf(_T(“Ошибка чтения”));

break;}

else if(dwRead == 0)

{_tprintf(_T(“\r EOF обнаружен\n”));

break;}

else{

//отобразить данные

DWORD ndx;

For(ndx=0; ndx<dwRead;ndx++)

{_tprintf(_T(“%c [%#2.2hx]\t”),buffer[ndx], (USHORT) buffer[ndx]);}}}

while(dwRead == BUFFERSIZE);

CloseHandle(hReadFile);

Return 1;}

2 Написать 2 варианта запуска Notepad.exe для обработки файла

#include "iostream.h"

#include "string.h"

#include "windows.h"

void main()

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

char FileName[100],CmdLine[100];

strcpy(CmdLine,"Notepad.exe");

cout<<"Text file name: ";

cin>>FileName; // ввод названия текстового файла

ShellExecute(NULL,NULL,CmdLine,FileName,NULL,SW_SHOW); // вариант №1

strcat(CmdLine," ");// формируем содержимое командной строки

strcat(CmdLine,FileName);

WinExec(CmdLine,SW_SHOW); // вариант №2

ZeroMemory(&si,sizeof(si)); // устанавливаем нужные параметры в структуре STARTUPINFO

si.cb=sizeof(si);

si.wShowWindow=SW_SHOW;

si.dwFlags=STARTF_USESHOWWINDOW;

CreateProcess(NULL,CmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); // вариант №3}

3 Написать 2 конс. Программы Master и Slave. Master запускает Slave и передает ей через ком. строку дескриптор своего процесса. Slave ожидает окончания работы Master и выдает сообщение.

// Master.exe

#include "iostream.h"

#include "string.h"

#include "windows.h"

#include "stdio.h"

void main(int argc,char * argv[])

{

char cmd[100];

if(argc!=1) strcpy(cmd,argv[1]);

else strcpy(cmd,"slave.exe");

int pid=GetCurrentProcessId();

sprintf(cmd+strlen(cmd)," %d",pid);

cout<<"Master:Starting, PID="<<pid<<"\n";

cout.flush();

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory(&si,sizeof(si));

si.cb=sizeof(si);

si.wShowWindow=SW_HIDE;

si.dwFlags=STARTF_USESHOWWINDOW;

if( !CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL,&si,&pi) )

{cout<<"Master:Slave not loaded\n";

cout.flush();}

cout<<"Master:Sleeping\n"; cout.flush();

Sleep(5000);

cout<<"Master:Exiting\n"; cout.flush();

}

//--------------------------

//Slave.exe

#include "iostream.h"

#include "windows.h"

#include "stdio.h"

void main(int argc,char * argv[])

{cout<<"Slave:Started\n"; cout.flush();

if(argc!=2)

{cout<<"Slave:Load Master.exe first\n";

cout<<"Slave:Finishing\n";

exit(1);}

int pid=atoi(argv[1]);

HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|SYNCHRONIZE,FALSE,pid);

if(!hProcess)

{cout<<"Slave:Open process error\n"; cout.flush();

}

else

{cout<<"Slave:Waiting for master finishing\n";

cout.flush();

if(WaitForSingleObject(hProcess,INFINITE)==STATUS_WAIT_0)

{cout<<"Slave:Master finished\n";

cout.flush();}

else

{cout<<"Slave:Unknown error\n";

cout.flush();}}

cout<<"Slave:Finishing\n";}

4 Программа, выводящая информ . о загрузке операт . памяти компьютера

#include "iostream.h"

#include "string.h"

#include "windows.h"

#include "stdio.h"

#include "conio.h"

void main()

{

MEMORYSTATUS ms;

char str[100];

char kb[100];

ms.dwLength=sizeof(MEMORYSTATUS);

GlobalMemoryStatus(&ms);

CharToOem(" КБ\n",kb);

CharToOem("Всего физической памяти: ",str);

cout<<str<<ms.dwTotalPhys/1024<<kb;

CharToOem("Свободно физической памяти: ",str);

cout<<str<<ms.dwAvailPhys/1024<<kb;

CharToOem("Всего виртуальной памяти: ",str);

cout<<str<<ms.dwTotalPageFile/1024<<kb;

CharToOem("Свободно виртуальной памяти: ",str);

cout<<str<<ms.dwAvailPageFile/1024<<kb;

CharToOem("Процент загрузки физической памяти: ",str);

cout<<str<<ms.dwMemoryLoad<<endl;

cout.flush();

getch();}

5 Написать 2 программы, демонстрир. синхрониз. процессов с пом. событий.

// 1. События с автосбросом

#include "windows.h"

#include "process.h"

#include "stdio.h"

HANDLE hEvent1,hEvent2;

int a[5];

void WorkThread(void * pParam)

{int i,num;

num=0;

while(true)

{WaitForSingleObject(hEvent2,INFINITE);

for(i=0;i<5;i++)

a[i]=num;

SetEvent(hEvent1);

num++;}}

void main()

{

hEvent1=CreateEvent(NULL,FALSE,TRUE,NULL);

hEvent2=CreateEvent(NULL,FALSE,FALSE,NULL);

_beginthread(WorkThread,0,NULL);

while(true)

{WaitForSingleObject(hEvent1,INFINITE);

printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5]);

SetEvent(hEvent2);}}

//------------------------------------------------------------------------------------------------------------------------------------------

// 2. События со сбросом вручную

#include "windows.h"

#include "process.h"

#include "stdio.h"

HANDLE hEvent1,hEvent2;

int a[5];

void WorkThread(void * pParam)

{int i,num;

num=0;

while(true)

{WaitForSingleObject(hEvent2,INFINITE);

ResetEvent(hEvent2);

for(i=0;i<5;i++)

a[i]=num;

SetEvent(hEvent1);

num++;}}

void main()

{

hEvent1=CreateEvent(NULL,TRUE,TRUE,NULL);

hEvent2=CreateEvent(NULL,TRUE,FALSE,NULL);

_beginthread(WorkThread,0,NULL);

while(true)

{ WaitForSingleObject(hEvent1,INFINITE);

ResetEvent(hEvent1);

printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5]);

SetEvent(hEvent2);

}

}

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