
- •Методичні вказівки
- •Харків 2012
- •Лабораторна робота № 1 Знайомство користувача з графічним середовищем Linux.
- •Методичні вказівки з організації самостійної роботи студентів:
- •Лабораторна робота № 2 Вивчення засобів реалізації багатозадачності та синхронізації взаємодіючих потоків.
- •Методичні вказівки з організації самостійної роботи студентів:
- •Варіанти завдання:
- •Лабораторна робота № 3 Засоби дослідження та роботи з файловими системами
- •Методичні вказівки з організації самостійної роботи студентів:
- •1. Опис функцій синхронного вводу/виводу
- •2. Опис функцій блокування/розблокування частин файлу
- •3. Приклад програми читання інформації з вхідного файлу і додавання її до іншого файлу
- •Int Read_Write ()
- •Варіанти завдання:
- •Лабораторна робота № 4 Створення віконних Windows- додатків. Засоби керування пам’яттю та розподіл пам’яті.
- •Методичні вказівки з організації самостійної роботи студентів:
- •Варіанти завдання:
- •5 Навчально–методичне забезпечення дисципліни
- •5.1 Основна література
- •5.2 Додаткова література
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;
}
Порядок виконання роботи:
Створити свою робочу директорію.
Обрати завдання згідно з варіантом.
Наберіть текст і налагодіть програму блокування та розблокування ділянки вхідного файлу, зазначеного індивідуальним завданням, який необхідно додати до вихідного файлу.
Запустіть на виконання одночасно обидві налагоджені програми та продемонструйте викладачеві неможливість дочасного читання заблокованої ділянки файла, потім продемонструйте дії з розблокування виконання читання та запису.
Продемонструйте викладачеві змінений вихідний файл відповідно з індивідуальним завданням.
Варіанти завдання:
Написати програму для визначення кількості логічних дисків у системі, їх розмір, мітки, тип файлової системи для кожного з дисків.
Написати програму для зміни дати та часу створення файлу, його останньої модифікації і доступу до нього. Нові значення дати/часу вводяться з клавіатури.
Прочитати текстовий файл. Записати його зміст до того ж файлу у зворотному напрямку.
Текстовий файл містить матрицю з 20 елементів (4х5). Визначити суму всіх елементів і записати результат у бінарний файл.
Бінарний файл містить матрицю елементів N на M. Значення N і M зазначено у перших його 8 байтах. Визначити суму всіх елементів, результат записати до текстового файлу.
Записати до текстового файлу послідовність даних, які вводяться з клавіатури. Підрахувати кількість чисел у даній послідовності і розташувати результат у новому файлі.
Визначити кількість файлів у заданому каталозі. Результат розташувати у новому текстовому файлі у цьому ж каталозі.
Визначити атрибути всіх файлів у заданому каталозі. Результат розташувати у новому текстовому файлі у тому ж каталозі.
Контрольні запитання
Яким чином задається монопольність доступу до пристрою?
Яким чином визначається адреса виконання запиту на ввід/вивід при синхронізованому вводі/виводі?
Яким чином задається тип вводу/виводу (синхроній або асинхронний)?
Як можна закрити пристрій?
Як перевірити правильність виконання запиту на ввід/вивід?
Чому дорівнює значення покажчика відразу після відкриття файлу?
Як задається адреса початку ділянки файлу, яка блокується?
Як визначити причину невдалого завершення функції запиту на ввід/вивід?