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

Int Read_Write ()

{

BOOL b;

DWORD counter = 0,

counter1 = 0;

ZeroMemory (szText,strlen (szText));

SetFilePointer (hfile_r, add, NULL, FILE_BEGIN);

SetLastError(0);

b=ReadFile (hfile_r, dataflow, size_r_w, &counter, NULL);

wsprintf (lpszP,"Число считанных байт: %d \n",counter);

MessageBox (NULL,lpszP,"Информация",MB_OK);

cod_er=GetLastError();

if (cod_er > 0)

{

wsprintf (lpszP,"Ошибка при чтении, номер ошибки: %d \n",cod_er);

MessageBox (NULL,lpszP,"Error",MB_OK);

return 0;

}

DWORD fsiz; // Визначаємо змінну fsiz для зберігання розміру вихідного файлу

fsiz = (GetFileSize(hfile_w,NULL));

IpBuf = LocalAlloc (0,fsiz); // Выделяем участок памяти

SetLastError(0);

if (GetLastError() > 0)

{

MessageBox (NULL,"Память для буфера не выделена", "Ошибка",MB_OK);

return 0;

}

SetFilePointer (hfile_w, 3, NULL, FILE_BEGIN);

ReadFile (hfile_w, IpBuf, fsiz, &counter1, NULL);

// Зчитуємо частину, яку необхідно перенести

MessageBox (NULL,"2-е считывание", "Error",MB_OK);

SetFilePointer (hfile_w, 3, NULL, FILE_BEGIN);

SetLastError(0);

if (!WriteFile (hfile_w, dataflow, size_r_w, &counter, NULL))

{

cod_er=GetLastError();

wsprintf (lpszP,"Ошибка при записи вставки. Номер ошибки: %d \n",cod_er);

MessageBox (NULL,lpszP,"Error",MB_OK);

}

MessageBox (NULL,"Записалась инф-я из входного файла", "Информация",MB_OK);

if (!WriteFile (hfile_w, IpBuf, counter1, &counter, NULL))

// Дописуємо зсунутий залишок файлу

{

cod_er=GetLastError();

wsprintf (lpszP,"Ошибка при дозаписи ''хвоста''. Номер ошибки: %d \n",cod_er);

MessageBox (NULL,lpszP,"Error",MB_OK);

return 5;

}

MessageBox (NULL,"Выполнилась дозапись ''хвоста''", "Информация", MB_OK);

LocalFree (IpBuf); // Звільнюємо пам'ять

return 0;

}

Порядок виконання роботи:

  1. Створити свою робочу директорію.

  2. Обрати завдання згідно з варіантом.

  3. Наберіть текст і налагодіть програму блокування та розблокування ділянки вхідного файлу, зазначеного індивідуальним завданням, який необхідно додати до вихідного файлу.

  4. Запустіть на виконання одночасно обидві налагоджені програми та продемонструйте викладачеві неможливість дочасного читання заблокованої ділянки файла, потім продемонструйте дії з розблокування виконання читання та запису.

  5. Продемонструйте викладачеві змінений вихідний файл відповідно з індивідуальним завданням.

Варіанти завдання:

  1. Написати програму для визначення кількості логічних дисків у системі, їх розмір, мітки, тип файлової системи для кожного з дисків.

  2. Написати програму для зміни дати та часу створення файлу, його останньої модифікації і доступу до нього. Нові значення дати/часу вводяться з клавіатури.

  3. Прочитати текстовий файл. Записати його зміст до того ж файлу у зворотному напрямку.

  4. Текстовий файл містить матрицю з 20 елементів (4х5). Визначити суму всіх елементів і записати результат у бінарний файл.

  5. Бінарний файл містить матрицю елементів N на M. Значення N і M зазначено у перших його 8 байтах. Визначити суму всіх елементів, результат записати до текстового файлу.

  6. Записати до текстового файлу послідовність даних, які вводяться з клавіатури. Підрахувати кількість чисел у даній послідовності і розташувати результат у новому файлі.

  7. Визначити кількість файлів у заданому каталозі. Результат розташувати у новому текстовому файлі у цьому ж каталозі.

  8. Визначити атрибути всіх файлів у заданому каталозі. Результат розташувати у новому текстовому файлі у тому ж каталозі.

Контрольні запитання

  1. Яким чином задається монопольність доступу до пристрою?

  2. Яким чином визначається адреса виконання запиту на ввід/вивід при синхронізованому вводі/виводі?

  3. Яким чином задається тип вводу/виводу (синхроній або асинхронний)?

  4. Як можна закрити пристрій?

  5. Як перевірити правильність виконання запиту на ввід/вивід?

  6. Чому дорівнює значення покажчика відразу після відкриття файлу?

  7. Як задається адреса початку ділянки файлу, яка блокується?

  8. Як визначити причину невдалого завершення функції запиту на ввід/вивід?