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(®s, ®s);
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(®s, ®s);
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(®s, ®s);
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(®s, ®s);
if(regs.x.cflag !=0) {
puts("\n Error screen out !");
exit(4);
}
return 0;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.