Файловая система операционной системы MS-DOS: Методические рекомендации по выполнению лабораторной работы, страница 2

3.  ЗАДАНИЕ  И  ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1.  Ознакомьтесь с текстами программ, приведенными в Приложениях 1, 2, 3. Программы содержат примеры файлового ввода / вывода на языках С и С++.

    Если те или иные функции вызывают сложности, то ознакомьтесь с ними в справочной системе  Borland C++ и выполните самостоятельные примеры их использования.

2.  С  помощью справочной системы Borland C++ изучите синтаксис и особенности применения  следующих функций стандартной библиотеки компилятора для системных вызовов MS-DOS:

а) intdos( ) , б) intdosx( ),  в)  int86( ), г)   int86x( ),  д)  intr( ).

3.  Выполните индивидуальное задание по теме лабораторной работы, представляющее собой разработку программы с использованием функций файловой системы MS-DOS.  Для получения справочных сведений по конкретным функциям MS-DOS используйте электронный справочник TECH  HELP.

4.   Оформите отчет, проверьте по контрольным вопросам степень владения материалом и защитите лабораторную работу.

4.  КОНТРОЛЬНЫЕ   ВОПРОСЫ

1.  Сформулируйте назначение и основные функции файловой системы.

2.  Назовите основные черты файловой системы MS-DOS.

3.  Составьте и выполните программу файлового ввода / вывода с применением функции fopen( ).

4.  Составьте и выполните программу файлового ввода / вывода с использованием дескрипторов файлов

5.  Составьте и выполните программу файлового ввода / вывода с помощью классов файлового ввода – вывода.

6.  Чем отличаются текстовые и двоичные файлы?

7.  Назовите и объясните атрибуты файлов MS-DOS. Имеются ли подобные атрибуты в ОС Windows?

8.  Объясните принцип учета распределения дискового пространства с помощью FAT.

9.  Как можно использовать файловые операции ввода / вывода для стандартных устройств компьютера?

10.  Как осуществляется перенаправление ввода / вывода в MS-DOS?

11.  Приведите примеры использования функций прерывания INT 21h для работы с файлами.

12.  Составьте и выполните программу, которая с помощью функций MS-DOS создает на диске пользователя файл, записывает в него данные и выводит их на экран.

13.  Составьте и выполните программу, которая с помощью функций MS-DOS создает каталог, файл в этом каталоге, записывает в него данные и перемещает файл в другой каталог.

14.  Составьте и выполните программу, которая с помощью функций MS-DOS выводит сведения о полном  и свободном объеме диска.

Рекомендуемая литература

1.  Фролов А.В., Фролов Г.В. MS-DOS для программиста: В 2-х ч. – М.: ДИАЛОГ – МИФИ,  1997.

2.  Финогенов К.Г.  Самоучитель по  системным  функциям  MS-DOS. –М.:  Радио и связь, 2001.

Электронные справочники

1. TECH   HELP  6.0.  Flambeuax Software  Inc.

Приложение 1.

// Файловый ввод-вывод с помощью потоков в стиле С

// Создается текстовый файл, в него заносится запись из двух строк

// Тип приложения -  DOS,  Standard

#include <stdio.h>

#include <string.h>

main()

{

 char string[40];

 int year = 1970;

 strcpy(string, "Иванов В.И.");

 FILE *F;

 // Создание файла

 if (( F = fopen("C:\\temp\\Test.txt", "wt")) == NULL)

 {

   printf( "Файл создать не удается");

   return 1;

 }

 // Запись в файл

 fprintf(F, "\t\t ХАРАКТЕРИСТИКА\n сотрудник %s,%i года рождения\n",

            &string, year);

 fclose(F);

 return 0;

}

Приложение  2 .

// Программа демонстрации дескрипторного файлового

// ввода-вывода на языке C,   файл - двоичный

// Тип приложения - Win32, Console

#include <stdio.h>

#include <fcntl.h>

#include <sys\stat.h>

#include <io.h>

#include <string.h>

#include <windows.h>

int main()

{

int i=1, j=25, i1, j1;

double a=25e6,  a1;

char s[10], s1[10];

strcpy(s,  "Hello!");

int handle;

//

if ((handle = open("c:\\мои документы\\Myfile1.txt",

                      O_WRONLY | O_CREAT | O_BINARY))==-1)

      {

  MessageBox(NULL, "Файл создать не удалось",

              "Информация", MB_OK);

  return  -1;

 }

write(handle, &i, sizeof(int));

write(handle, &j, sizeof(int));

write(handle, &a, sizeof(double));

write(handle, s,  strlen(s)+1);

close(handle);

// Открытие файла для чтения

if ((handle = open("c:\\мои документы\\Myfile.txt",

            O_RDONLY|O_BINARY))==-1)

      {

  MessageBox(NULL, "Файл открыть не удалось",

              "Информация", MB_OK);

  return  -2;

      }

read(handle, &i1, sizeof(int));

read(handle, &j1, sizeof(int));

read(handle, &a1, sizeof(double));

read(handle, s1,  strlen(s)+1);

close(handle);

MessageBox(NULL, "Для окончания программы нажмите OK ",

           "Информация", MB_OK);

return 0;

}

Приложение  3.

 //Программа демонстрации файлового ввода-вывода

 //с помощью потоков С++

 // Тип приложения- Win32, Console

#include <stdio.h>

#include <stdlib.h>

#include <io.h>

#include <windows.h>

#include <iostream.h>

#include <fstream.h>

int main()

{

int i=1, j=25, i1, j1;

double a=25e6,  a1;

char s[10], s1[10];

strcpy(s,  "Hello!");

// Создание файла как выходного потока

ofstream outfile("c:\\мои документы\\Myfile.txt");

if (!outfile)

      {

  MessageBox(NULL, "Файл создать не удалось",

             "Информация", MB_OK);

  return -1;

 }

// вывод в файл

outfile <<i<<' '<<j<<' '<<a<<' '<<s<<endl;

//закрытие файла

outfile.close();

// открытие файла как входного потока

ifstream infile("c:\\мои документы\\Myfile.txt");

if (!infile)

      {

   MessageBox(NULL, "Файл открыть не удалось",

              "Информация", MB_OK);

   return -2;

      }

// ввод из файла

infile >>i1  >>j1 >> a1  >> s1;

infile.close();

// вывод на экран данных, прочитанных из файла

cout << " i1==" <<i1 << "\n j1==" <<j1 << "\n a1==" <<a1 <<

"\n s1==" <<s1;

// вариант

//printf("i1==%d\n\n j1==%d\n\n a1==%e\n\n s1==%s",

//       i1, j1, a1, s1 );

MessageBox(NULL, "Для окончания программы нажмите OK ",

           "Информация", MB_OK);

return 0;

}

Приложение  4.

//Программа, в которой с помощью функции 0x39 INT 21h

//создается каталог,

//с помощью функции 0x3C INT 21h создается файл,

//с помощью функции 0x40 INT 21h в файл записывается строка,

//с помощью дескриптора стандартного вывода осуществляется

// вывод на экран

//Тип приложения - DOS(standard)

#include <stdio.h>

#include <dos.h>

#include <string.h>

#include <stdlib.h>

unsigned int handle;

union REGS regs;

int MakeDir(char *dname);

int MakeFile(char *filename, unsigned attr);

int WriteFile(unsigned int handle, char *str);

int ScreenOut(char *str);

int main(void)

{

char *string = "This is test string.";

char *dirname = "a:\\dir1";

char *filename = "a:\\dir1\\myfile.txt";

MakeDir(dirname);

MakeFile(filename,0);

WriteFile(handle,string);

ScreenOut(string);

return 0;

}

//Функция создания каталога

int MakeDir(char *dname)

{

regs.h.ah = 0x39;

regs.x.dx = FP_OFF(dname);

//sreg.ds = FP_SEG(dname);

intdos(&regs, &regs);

if(regs.x.cflag !=0) {

   puts("\n Error creating catalog !");

   exit(1);

}

return 0;

}

//Функция  создания файла

int MakeFile(char *fname, unsigned attr)

{

regs.h.ah = 0x3c;

regs.x.dx = FP_OFF(fname);

regs.x.cx = attr;

intdos(&regs, &regs);

if(regs.x.cflag !=0) {

   puts("\n Error creating file !");

   exit(2);

}

handle = regs.x.ax;

return 0;

}

//Функция записи в файл

int WriteFile(unsigned handle,char *str)

{

regs.h.ah = 0x40;

regs.x.bx = handle;

regs.x.cx = strlen(str);

regs.x.dx = FP_OFF(str);

intdos(&regs, &regs);

if(regs.x.cflag !=0) {

   puts("\n Error file writing !");

   exit(3);

}

return 0;

}

// Функция вывода на экран

int ScreenOut(char *str)

{

regs.h.ah = 0x40;

regs.x.bx = 1;  // Дескриптор стандартного вывода

regs.x.cx = strlen(str);

regs.x.dx = FP_OFF(str);

intdos(&regs, &regs);

if(regs.x.cflag !=0) {

   puts("\n Error screen out !");

   exit(4);

}

return 0;

}