Программирование для Windows NT (том 2)



         

Приложение Fmap/Server - часть 3


      GetLastError());

    getch();

    return 0;

  }

  // Выполняем отображение файла на память.

  // В переменную lpFileMap будет записан указатель на

  // отображаемую область памяти

  lpFileMap = MapViewOfFile(hFileMapping,

    FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

  // Если выполнить отображение не удалось,

  // выводим код ошибки

  if(lpFileMap == 0)

  {

    fprintf(stdout,"MapViewOfFile: Error %ld\n",

      GetLastError());

    getch();

    return 0;

  }

 

  // Готовим массив идентификаторов событий

  // для функции WaitForMultipleObjects

  hEvents[0] = hEventTermination;

  hEvents[1] = hEventChar;

 

  // Цикл отображения. Этот цикл завершает свою работу

  // при завершении процесса ввода

  while(TRUE)

  {

    // Выполняем ожидание одного из двух событий:

    //   - завершение клиентского процесса;

    //   - завершение ввода символа

    dwRetCode = WaitForMultipleObjects(2,

      hEvents, FALSE, INFINITE);

    // Если ожидание любого из двух событий было отменено,

    // если произошло первое событие (завершение клиентского

    // процесса) или если произошла ошибка, прерываем цикл

    if(dwRetCode == WAIT_ABANDONED_0    

       dwRetCode == WAIT_ABANDONED_0 + 1

       dwRetCode == WAIT_OBJECT_0       

       dwRetCode == WAIT_FAILED)

      break;

    // Читаем символ из первого байта отображенной

    // области памяти, записанный туда клиентским

    // процессом, и отображаем его в консольном окне

    putch(*((LPSTR)lpFileMap));

  }

 

  // Закрываем идентификаторы объектов-событий 

  CloseHandle(hEventChar);

  CloseHandle(hEventTermination);

  // Отменяем отображение файла

  UnmapViewOfFile(lpFileMap);

  // Освобождаем идентификатор созданного

  // объекта-отображения

  CloseHandle(hFileMapping);

  return 0;

}

В глобальных переменных hEventChar и hEventTermination хранятся идентификаторы объектов-событий, предназначенных, соответственно, для работы с клавиатурой и для фиксации момента завершения работы приложения Fmap/Client. Эти же идентификаторы записываются в глобальный массив hEvents, который используется функцией WaitForMultipleObjects.




Содержание  Назад  Вперед