Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №5

.cpp
Скачиваний:
21
Добавлен:
01.05.2014
Размер:
3.03 Кб
Скачать
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>

void main(){

	int choice;

	do{
		system("cls");
		cout<<"1. Create File Mapping Object\n";
		cout<<"2. Map View Of File\n";
		cout<<"3. Unmap View Of File\n";
		cout<<"4. Close Handle\n";
		cout<<"5. Exit\n";
		cout<<"Enter your choice: ";
		cin>>choice;
		switch(choice){
			case 1: HANDLE fileMapping;
					LPSECURITY_ATTRIBUTES fileMappingAttributes;
					DWORD protect;
					DWORD maximumSizeHigh;
					DWORD maximumSizeLow;
					TCHAR name[255];
					//file
					DWORD desiredAccess;
					DWORD shareMode;
					LPSECURITY_ATTRIBUTES securityAttributes;
					DWORD creationDisposition;
					DWORD flagsAndAttributes;
					HANDLE templateFile;
					HANDLE file;
					TCHAR fileName[255];
					//

					desiredAccess=(GENERIC_READ|GENERIC_WRITE) ;
					shareMode=0;//exclusive access to the file
					securityAttributes=0;//default security descriptor
					flagsAndAttributes=0;
					templateFile=0;//no template file
					creationDisposition=OPEN_EXISTING;//open
		
					cout<<"Input file name: ";
					cin>>fileName;
					file = CreateFile(fileName,desiredAccess,shareMode,securityAttributes,creationDisposition,flagsAndAttributes,templateFile);
					if(file==INVALID_HANDLE_VALUE){
						cout<<"The specified file does not exists!\n"<<endl;
						getch();
					}
					else{
						fileMappingAttributes = 0;
						protect = PAGE_READWRITE;
						maximumSizeHigh = 0;
						maximumSizeLow = 0;

						cout<<"Input the name of the mapping object: ";
						cin>>name;

						fileMapping = CreateFileMapping(file, fileMappingAttributes, protect, maximumSizeHigh, maximumSizeLow, name);
					
						if(GetLastError() == ERROR_ALREADY_EXISTS){
							cout<<"Object already exists!";
							getch();
						}
						else if(fileMapping == NULL){
							cout<<"Error";
							getch();
						}
					}

				    break;
            case 2: LPVOID mapViewAddr;//starting address of the mapped view
					DWORD fileOffsetHigh;
					DWORD fileOffsetLow;
					DWORD numberOfBytesToMap;
				    char* view;
					desiredAccess = FILE_MAP_WRITE;
					numberOfBytesToMap = 0;//the entire file is mapped
					fileOffsetHigh = 0;// sysInfo.dwAllocationGranularity*10;
					fileOffsetLow = 0;

					mapViewAddr = MapViewOfFile( fileMapping, desiredAccess, fileOffsetHigh, fileOffsetLow, numberOfBytesToMap );
					if(!mapViewAddr){ cout<<"Error"<<endl;exit(1);}
					else printf("Starting address of the mapped view: %x", mapViewAddr);
					view=(char*)mapViewAddr;
					cout<<" "<<view<<endl;
					getch();
				    break;
            case 3: if(!UnmapViewOfFile(mapViewAddr)){
						cout<<"Error"<<endl;
						getch();
					}
				    break;
			case 4:   if(!CloseHandle(file)){
						cout<<"Error1";
						getch();
					}
				    if(!CloseHandle(fileMapping)){ 
						cout<<"Error2";
					    getch();
					}
		
		}
	}while(choice!=5);
}

Соседние файлы в предмете Операционные системы