Advertisement
Guest User

os43

a guest
Nov 15th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.57 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define MAX_LEN 255
  6.  
  7. HANDLE mapHandle = NULL;
  8. LPVOID mapAddr = NULL;
  9.  
  10. void openMappingFile() {
  11.     printf("Введите имя проекции, которую хотите открыть\n");
  12.     char mapName[MAX_LEN];
  13.     if (fgets(mapName, MAX_LEN, stdin)){
  14.         fflush(stdin);
  15.         mapName[strlen(mapName) - 1] = '\0';
  16.         if (mapHandle)
  17.             CloseHandle(mapHandle);
  18.         mapHandle = OpenFileMappingA(FILE_MAP_ALL_ACCESS, TRUE, mapName);
  19.         if (!mapHandle)
  20.             printf("Ошибка: код ошибки %ld\n", GetLastError());
  21.         else
  22.             printf("Файл открыт\n");
  23.     }
  24.    
  25.     else {
  26.         fflush(stdin);
  27.         printf("Ошибка при считывании ввода\n");
  28.     }
  29. }
  30.  
  31. void mapView() {
  32.     if (mapAddr)
  33.         UnmapViewOfFile(mapAddr);
  34.     mapAddr = MapViewOfFile(mapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  35.     if (!mapAddr)
  36.         printf("Ошибка: код ошибки %ld\n", GetLastError());
  37.     else
  38.         printf("Файл успешно спроецирован по адресу %p\n", mapAddr);
  39. }
  40.  
  41. void getData() {
  42.     if (mapAddr)
  43.         printf("Данные в текущем спроецированном файле:\n%s\n", (char *)mapAddr);
  44.     else
  45.         printf("Ошибка получения данных\n");
  46. }
  47.  
  48. int main()
  49. {
  50.     int flag = 1;
  51.     system("chcp 65001");
  52.     do {
  53.         printf("Добро пожаловать! Выберите действие:\n1 - Открытие проецируемого файла\n2 - Проецирование фрагмента файла в память\n"
  54.             "3 - Вывод данных из проецируемого файла\n4 - Выход\n");
  55.         char c = getchar();
  56.         fflush(stdin);
  57.         switch (c){
  58.             case '1':
  59.                 openMappingFile();
  60.                 break;
  61.             case '2':
  62.                 mapView();
  63.                 break;
  64.             case '3':
  65.                 getData();
  66.                 break;
  67.             case '4':
  68.                 printf("Выход из программы\n");
  69.                 if (mapHandle)
  70.                     CloseHandle(mapHandle);
  71.                 if (mapAddr)
  72.                     UnmapViewOfFile(mapAddr);
  73.                 flag = 0;
  74.                 break;
  75.             default:
  76.                 printf("Неправильный ввод, попробуйте еще раз\n");
  77.         }
  78.     } while (flag);
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement