Читаем Системное программирование в среде Windows полностью

int _tmain(int argc, LPTSTR argv[]) {

 HANDLE hFile;

 LARGE_INTEGER CurPtr;

 DWORD FPos, OpenOption, nXfer, RecNo;

 RECORD Record;

 TCHAR String[STRING_SIZE], Command, Extra;

 OVERLAPPED ov = {0, 0, 0, 0, NULL}, ovZero = {0, 0, 0, 0, NULL};

 HEADER Header = {0, 0};

 SYSTEMTIME CurrentTime;

 BOOLEAN HeaderChange, RecordChange;

 OpenOption = (argc == 2) ? OPEN_EXISTING : CREATE_ALWAYS;

 hFile = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, OpenOption, FILE_ATTRIBUTE_NORMAL, NULL);

 if (argc >= 3) { /* Записать заголовок и заранее установить размер нового файла */

  Header.NumRecords = atoi(argv[2]);

  WriteFile(hFile, &Header, sizeof(Header), &nXfer, &ovZero);

  CurPtr.QuadPart = sizeof(RECORD)*atoi(argv[2])+sizeof(HEADER);

  FPos = SetFilePointer(hFile, CurPtr.LowPart, &CurPtr.HighPart, FILE_BEGIN);

  if (FPos == 0xFFFFFFFF && GetLastError != NO_ERROR) ReportError(_T("Ошибка указателя."), 4, TRUE);

  SetEndOfFile(hFile);

 }

 /* Считать заголовок файла: определить количество записей и количество непустых записей. */

 ReadFile(hFile, &Header, sizeof(HEADER), &nXfer, &ovZero);

 /* Предложить пользователю считать или записать запись с определенным номером. */

 while(TRUE) {

  HeaderChange = FALSE;

  RecordChange = FALSE;

  _tprintf(_Т("Введите r(ead)/w(rite)/d(elete)/q Запись#\n"));

  _tscanf(_T("%c" "%d" "%c"), &Command, &RecNo, &Extra );

  if (Command == 'q') break;

  CurPtr.QuadPart = RecNo * sizeof(RECORD) + sizeof(HEADER);

  ov.Offset = CurPtr.LowPart;

  ov.OffsetHigh = CurPtr.HighPart;

  ReadFile(hFile, &Record, sizeof(RECORD), &nXfer, &ov);

  GetSystemTime(&CurrentTime); /* Обновить поля даты и времени в записи. */

  Record.RecordLastRefernceTime = CurrentTime;

  if (Command == 'r' || Command == 'd') { /*Вывести содержимое записи.*/

   if (Record.ReferenceCount == 0) {

    _tprintf(_T("Запись номер %d – пустая.\n"), RecNo);

    continue;

   } else {

    _tprintf(_Т("Запись номер %d. Значение счетчика: %d \n"), RecNo, Record.ReferenceCount);

    _tprintf(_Т("Данные: %s\n"), Record.DataString);

    /* Упражнение: вывести метки времени. См. следующий пример. */

    RecordChange = TRUE;

   }

   if (Command == 'd') { /* Удалить запись. */

    Record.ReferenceCount = 0;

    Header.NumNonEmptyRecords--;

    HeaderChange = TRUE;

    RecordChange = TRUE;

   }

  } else if (Command == 'w') { /* Записать данные. Впервые? */

   _tprintf(_Т("Введите новую строку для записи.\n"));

   _getts(String);

   if (Record.ReferenceCount == 0) {

    Record.RecordCreationTime = CurrentTime;

    Header.NumNonEmptyRecords++;

    HeaderChange = TRUE;

   }

   Record.RecordUpdateTime = CurrentTime;

   Record.ReferenceCount++;

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT