Лабораторна робота №2 - Ввід інформації з клавіатури. Обмін інформації з файлами засобами мови Turbo C
Назва роботи: Обмін інформації з файлами засобами мови Turbo C
Мета роботи: Ознайомитись з можливостями організації обміну інформацією між файлами засобами бібліотечних функцій Turbo C.
Загальні положення
Бібліотечні функції Turbo C для роботи з файлами можна розділити на дві групи: потокові та префіксні. Як ті так і інші звертаються, в принципі, до одних і тих самих функціональних викликів MS DOS. Але потокові функції виконують додаткову буферизацію, що викликає подвійну буферизацію на рівні бібліотечних функцій і на рівні MS DOS. Префіксні функції одразу звертаються до префіксних функцій MS-DOS: це блок орієнтованих функцій і їх використання дає виграш у продуктивності при перенесенні одразу цілої групи байтів за одне звернення до функцій. Максимальний виграш досягається тоді, коли розмір блоку, що переноситься із програми кратний розміру сектора диску (512 байт). Обмін інформацією між файлом і Сі-програмою по символам і по рядкам більш ефективній при використанні потокового файлового вводу-виводу.
Як для потокових так і для префіксних функцій файлового вводу-виводу можливі два різних режими доступу до файла: текстовий і двійковий. В текстовому режимі відбувається трансляція символів СR (0DH,0AH)(ознака кінця регулярного файлу).При читананні інформації з файла в цьому режимі пара символів СR LF перетворюється в один символ нового рядка ' ',а при записі символ нового рядка перетворюється в пару символів СR LF. Крім того як тільки з файла зчитується символ Crtl-Z,(ASCII 1AH - символ EOF регулярного файла ),рахується, що кінець файла вже досягнуто(умова EOF).
Таким чином у текстовому файлі не можна прочитати інформацію після символа Crtl-Z. При виконанні файлового вводу-виводу у двійковому режимі ніякого перертворення символів не відбувається, а всі вони розглядаються як такі, що не мають якогось особливого значення.
Режим доступу дофайлу задається під час відкриття файлу через бібліотечну функцію відкриття або спеціальною зовнішньою змінною, яка описана в заголовочних файлах fcntl. h або stdlib. h і може приймати два значення:
- 0-BINARY - доступ до файла виконуються у двійковому режимі; 0-ТЕХТ - доступ до файла виконується в текстовому режимі;
По замовченню fmode встановлюється в значення 0-ТЕХТ.
Це значення може бути перевизначене при відкритті файла або оператором присвоєння.
Доступ до файлів через потік вводу-виводу.
Відриття файла вводу-виводу через потік виконує функція fopen( ), закриття fclose( ).Приклад, що демонструє використання функцій стандартної бібліотеки для відкриття та закриття файлів *L3-1.C*.Ім'я та режим відкриття задаються в командному рядку при запуску програми. Після успішного відкриття файла програма може виконувати файловий ввід-вивід. Функція потокового вводу-виводу можна розділити на чотири групи:
Функції символьного вводу-виводу, за одне звертання до яких переноситься один символ;
Функції порядкового вводу-виводу, за одне звертання до яких переноситься ASCIIZ-рядок символів( рядок у форматі ASCIIZ - це масив
Елементів типу char, в кінці якого символ''нуль-термінатор);
Функції блокового вводу-виводу, за одне звертання до яких переноситься цілий блок (або запис) інформації;
Функції форматованого вводу-виводу, при виконанні яких виконується присвоєння значень змінних (ввід) або вивід представлення змінних змінних у потік.
Приклад посимвольного вводу-виводу інформації у файли, що відкриті як потоки - *L3-2.C*.Програма *L3-3.C* виконує посимвольне копіювання файла джерела у файл призначення.
Приклад порядкового вводу-виводу - *L3-4.C*, *L3-5.C*. Функції dfread( )та fwrite( ) дозволяють виконувати виконувати перенос між файлом і програмою блока байтів або записів (records).Блок (запис)- це група поруч
Розташованих байтів, що немають ніяких спеціальних розділювачів.
Приклад блокового вводу-виводу - *L3-6.C*.Функції форматованого вводу-виводу наведені у прикладі *L3-7.C*.
Регулярний та спеціальні символьні файли не логічному рівні представляються стрічкою байтів, що має початок і кінець. Місце у файлі куди записується інформація, або звідки вона зчитується, визначається значенням покажчика запису-читання файла. Стандартна Сі - бібліотека включає функції, що дозволяють встановлювати на потрібному місці у файлі покажчик запису-читання, або, інакше кажучи, виконувати доступ до довільного байту файла. При виконанні послідовного доступу покажчик позиціонується автоматично на довільній операції читання чи запису. Але "пересуновши" покажчик на довільне місце, можна читати інформацію з файла або записувати її в файл у довільному порядку. Дві потокові функції, що найчастіше використовуєтьсядля явного керування положенням покажчика записучитання це rewind( ) та fseek( ).
Приклад довільного доступу до файлів - *L3-8.C*.
Префіксний доступ до файлів
Turbo C вміщує певну групу функцій префіксного доступут до файлів, або так званих "системних викликів" або "процедур нижнього рівня" ( LOW LEVEL FILE I/O Routines ).
Префіксне відкриття файла здійснюють дві функції: open( ), _open( ).
Наступні функції створюють файли : creat( ), _creat( ), createnew( ),
Createtemp( ).Закриття файлів відкритих префіксним доступом, виконується функціями close( ), _close( ).Hеявне закриття файлів, відкритих програмою, виконує операційна система при завершенні програми.
Приклад використання цього класу функцій - *L3-12.C*, *L3-13.C*, *L3-14.C*.
Перенесення інформації між прикладною програмою і файлом для префіксного доступу, виконують дві пари функцій: read ( )/_read( ) та
Write( )/_write( ). Приклад використання *L3-15.C*.
Порядок виконання роботи
В середовищі MS DOS ініціалізувати одну з систем програмування:
Turbo C, Turbo C++, Borland C++.
2. Відкомпілювати та виконати один або декілька прикладів, вказаних
Викладачем, виконючи модифікації, потрібні для функціонування тих чи інших функцій. Всі приклади з ВООК2.
3. Зробити висновки щодо особливостей функціонування засобів обміну інформацію між файлами.
Результат виконання роботи:
#include <stdio. h>
#include <stdlib. h>
#include <conio. h>
#include <string. h>
#include <io. h>
#define NAME 32
#define TITLE 64
Typedef struct {
Char name[32];
Char title[64];
Int year;
Float price;
} BOOKS;
Int file_input_book(FILE * fp, BOOKS * ptr){
Return(fread(ptr, sizeof(BOOKS), 1, fp));
}
Int file_output_book(FILE * fp, BOOKS * ptr){
Return(fwrite(ptr, sizeof(BOOKS), 1, fp));
}
Void main(void){
Int ch;
Clrscr();
// by chars
Printf("1. Copying by chars from stdin to stdout... (Ctlr+Z to finish) ");
While((ch = getchar()) != EOF)
Putchar(ch);
// by lines
Char string[256];
Int line_number = 0;
FILE * fptr;
Printf(" 2. Copying by lines from <testread. txt> to stdout... ");
If((fptr = fopen("testread. txt", "r")) != NULL){
For(; fgets(string,255,fptr) != NULL; line_number++)
Fputs(string, stdout);
Printf(" Read %d lines of file <testread. txt> ", line_number);
Fclose(fptr);
}
Else
Printf(" File not open! ");
// by block
FILE *b_in, *b_out;
BOOKS *b_ptr;
Printf(" 3. Copying by blocks from <books. txt> to <books2.txt> (1 block = 104 bytes) ");
If ((b_in = fopen("books. txt","r"))!= NULL){
B_out = fopen("books2.txt","w");
File_input_book(b_in, b_ptr);
File_output_book(b_out, b_ptr);
Fclose(b_in);
Fclose(b_out);
}
Else
Printf(" File 'books. txt' not open! ");
//formated
FILE * fp;
Int i, num;
Printf(" 4. Formated read &; write. ");
If((fp = fopen("square. txt", "wb")) == NULL){
Printf(" File 'square. txt' not open! "); exit(1);
}
For(i=1; i < 10; i++) if(fprintf(fp,"%d ",i*i) == 0)
Printf("File write error");
Freopen("square. txt", "r", fp);
For(i = 1; i < 10; i++){
Fscanf(fp,"%d",&;num);
Printf("%d * %d = %u ", i, i, num);
}
Fclose(fp);
}
#define STOP_STRING ""
#define BUFFER_SIZE 128
#define KEY_SIZE 16
#include <stdio. h>
#include <string. h>
#include <errno. h>
Struct file_record {
Long offset;
Char indicator;
Unsigned key_length;
Unsigned length;
} work;
Main(){
Char *argv="database. dat";
FILE * fptr;
Int in_lines;
Int file_lines;
Char key[KEY_SIZE];
Char buffer[BUFFER_SIZE];
Fpos_t f_ptr;
If((fptr = fopen(argv, "a+b")) == NULL){
Perror("ЋиЕЎЄ ®вЄалвЕп д ©" ");
Return(2);
}
Fseek(fptr, 0L, SEEK_END);
If(!ftell(fptr)){
File_lines = 0;
If(!fwrite(&;file_lines, 2, 1, fptr)) return(3);
}
Else{
Fseek(fptr, 0L, SEEK_SET);
If(!fread(&;file_lines, 2, 1, fptr)) return(3);
Fseek(fptr, 0L, SEEK_END);
}
Printf(" ‚ д ©"Г § ЇЕб ® %d бва®Є. "
"Џ®¦ "г©бв, ўў®¤ЕвГ ®ўлГ бва®ЄЕ "
"""п § ўГаиГЕп ўў®¤ ўўГ¤ЕвГ Їгбвго бва®Єг. ",
File_lines);
Fflush(stdin);
For(in_lines=0; strcmp(gets(buffer),STOP_STRING);){
Strcpy(key, " ");
Printf("‚ўГ¤ЕвГ Є"оз § ЇЕбЕ (15 бЕў®"®ў): ");
Fflush(stdin);
Fgets(key, 15, stdin);
Work. length = strlen(buffer);
Work. key_length = strlen(key);
If(*(key + work. key_length -1) == ' ')
Work. key_length--;
Work. offset = ftell(fptr) + work. length +
Work. key_length +
Sizeof(struct file_record);
Work. indicator = 'B';
If(!fwrite(&;work, sizeof(struct file_record), 1, fptr))
Break;
If(!fwrite(key, work. key_length, 1, fptr))
Break;
If(!fwrite(buffer, work. length, 1, fptr))
Break;
In_lines++;
Fflush(stdin);
}
If(in_lines){
File_lines += in_lines;
F_ptr = ftell(fptr);
Fclose(fptr);
Fopen(argv, "r+b");
Fseek(fptr, 0, SEEK_SET);
If(!fwrite(&;file_lines, 2, 1, fptr)) in_lines = 0;
Fsetpos(fptr, &;f_ptr);
}
Printf("ЏpЕГ бвp®Є § ўГpиГ ");
Printf("ЏpЕпв® %d бвp®Є: ‚бГЈ® ў д ©"Г бв "® %d бва®Є ",
In_lines, file_lines);
Fclose(fptr);
Return(0);
}
#include <io. h>
#include <stdio. h>
#include <dos. h>
#include <fcntl. h>
#include <sysstat. h>
Int main(void){
Int handle;
Unsigned segment;
Char string [512] = "'Гбв®ў п бвp®Є ¤"п § ЇЕбЕ ў д ©"";
// read file
If((handle = _creat("rd-wr. txt",FA_ARCH|FA_SYSTEM|FA_HIDDEN)) == -1){
Printf("ЋиЕЎЄ ®вЄpлвЕп д ©" 'rd-wr. txt' ");
Perror("ЏpЕзЕ ®иЕЎЄЕ");
Return (2);
}
Write(handle, string, sizeof(string));
Read(handle, string, 512);
Write(1, string, 512);
Close(handle);
// open file
If ((handle = open("dumpmem. dat", O_TRUNC|O_CREAT|O_WRONLY|O_TEXT, S_IWRITE)) ==-1){
Printf("ЋиЕЎЄ ®вЄpлвЕп д ©" 'dumpmem. dat' ");
Return(1);
}
// write to file
For(segment = 0; segment < 0x8000; segment += 0x1000){
If(_write(handle, (char far *)MK_FP(segment, 0), 0xffff) == 0){
Perror("aЋиЕЎЄ § ЇЕбЕ ў® ўаГГл© д ©"");
Return(2);
}
If(_write(handle, (char far *)MK_FP(segment, 0xffff), 1) == 0){
Perror("aЋиЕЎЄ § ЇЕбЕ ў® ўаГГл© д ©"");
Return(2);
}
}
Printf(" ‚лЇ®"Г ¤ Ї 512Љ Ў ©в Ї пвЕ ў д ©" 'dumpmem. dat' ");
}
Похожие статьи
-
Назва роботи: Ввід інформації з клавіатури Мета роботи: Ознайомитись з можливостями організації вводу з клавіатури в комп'ютерах сімейства ІВМ РС....
-
Назва роботи: Вивід інформації на екран ПК Мета роботи: Ознайомитись з можливостями організації виводу інформації на екран ПК. Загальні положення. Вивід...
-
Назва роботи : Організація функціонування маніпулятора "миша" Мета роботи: Ознайомитись з принципами функціонуваня маніпулятора "миша". Засобами Turbo C...
-
Програма - це опис розв'язання деякої задачі. Практично в кожній задачі можна виділити окремі допоміжні підзадачі. Деякі підзадачі доводиться...
-
Склад і характеристика проектів IDE MS Visual Studio C++ Будь-яка програма, що створюється в середовищі Visual Studio C++ завжди оформляється як окремий...
-
Объект ориентированный класс программирование Цель Работы - изучить методику создания одномерных динамических символьных массивов при помощи...
-
Основы работы с файлами, Режимы открытия файла - Сортировка массивов
Работа с файлом осуществляется в три этапа: - Открытие файла. - Обработка файла (чтение или запись). - Закрытие файла. Функция открытия файла возвращает...
-
Докладний опис мови - Гнучка система інформаційної підтримки підвищення кваліфікації персоналу ДП №9
З точки зору системи типізації, PHP є мовою програмування з динамічною типізацією. Немає необхідності явного визначення типу змінних, хоча така...
-
Розглянемо порядок заповнення інформації про внутрішньогосподарські пристрої земельних ділянок. Для всіх ділянок несільськогосподарського призначення...
-
Постановка задачи на разработку программного обеспечения Для того чтобы предлагаемая схема была интегрирована в САПР, который не имеет функции интеграции...
-
Розгалужені алгоритми бувають двох типів: Повні (If...Else) і неповні (If). Неповне розгалуження. If (x > 100) Сout << x << endl; Прикладом...
-
Программирование и основы алгоритмизации
Программирование и основы алгоритмизации 1. Текст задания Алгоритм программа блок схема Определить радиус и центр окружности минимального радиуса,...
-
Модуль - Самостоятельно компилируемый файл ТР, который может содержать описание констант, переменных и типов, процедур и функций. Он имеет имя и хранится...
-
Reset(имя файловой переменной); При этом указатель устанавливается на начало файла и вся информация сохраняется. Чтение из файла выполняется процедурой:...
-
Цикли вкладені - Формування навичок програмування з використанням алгоритмічної мови С++
Часто буває так, що при повтореннях змінюється не одна величина, а дві (чи навіть більше). І при кожному значенні однієї величини інша величина...
-
Конфигурация устройств ввода-вывода Турбо Паскаля - Программирование в среде Turbo Pascal
Результаты работы программы и исходные данные могут быть записаны в файлы на диске, с помощью специальных процедур работы с файлами прямо из программы. В...
-
Работа с файлами и папками - Основные термины по информатике
Чтобы создать новую папку 1. Откройте в папку "Мои документы" или другую папку, в которой необходимо создать новую папку. 2. Выберите в меню Файл пункт...
-
Кодирование информации -- процесс преобразования сигнала из формы, удобной для непосредственного использования информации, в форму, удобную для передачи,...
-
Работа программы представлена на рисунке 2.3 Рис. 2.3 Кодирование и тестирование программы Программа кодировалась на языке Си++, используя библотеку Qt5x...
-
Програмний алгоритм аутентифікація користувач При запуску програми першим вікном буде вікно авторизації (Див. Рис. 1.1.). В цьому вікні є можливість...
-
IOS сетевого оборудования должна быть настроена для обеспечения: - идентификацию и аутентификацию при попытке консольного, либо удаленного подключения; -...
-
Метод парольной защиты - Защита информации
Законность запроса пользователя определяется по паролю, представляющему собой, как правило, строку знаков. Метод паролей считается достаточно слабым, так...
-
Файл - это набор любых данных одного типа, который хранится на диске отдельно от прочих. Например, музыкальный файл, файл изображения или текстовый файл,...
-
До цього моменту було розглянуто одновимірні масиви, якими не завжди можна обмежитися. Припустимо, необхідно обробити деякі дані з таблиці. У таблиці є...
-
Одновимірний масив - це масив, з одним параметром, що характеризує кількість елементів одновимірного масиву. Фактично одновимірний масив - це масив, у...
-
Тема доклада: Файловый ввод/вывод. Функциональный язык программирования Лисп поддерживает широкие возможности для работы с файлами. При этом вводится...
-
Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с...
-
Робота з симулятором машини Ноймана. Дослідження виконання машинного коду в автоматичному режимі
ТЕОРЕТИЧНІ ВІДОМОСТІ: CISC - Complex Instruction Set Computing (обчислення Зі Складною Системою Машинних Інструкцій) Аби дослідити дію машини Ноймана...
-
Небезпечні й шкідливі виробничі фактори по природі виникнення діляться на наступні групи: - фізичні; - хімічні; - психофізіологічні; - біологічні. У...
-
Клавиатура - Изучение устройства ЭВМ, системного блока РС и подключение к нему оборудования
Клавиатура - это клавишное устройство управления персональным компьютером. Служит для ввода алфавитно-цифровых (знаковых) данных, а также команд...
-
Для запуску розробленого програмного продукту необхідна наявність на персо-нальному комп'ютері встановленого Mysql Server (локального), або доступ через...
-
ОПИСАНИЕ ПОДПРОГРАММ - Структуры и алгоритмы обработки данных
Процедуры начальной обработки базы данных: 1. void Read() - считывает базу данных и формирует индексный массив. 2. void PrintMas(void) - осуществляет...
-
РАБОТА ПРОГРАММЫ, ЛИСТИНГ И ТЕСТИРОВАНИЕ - Основы программирования в операционной системе Unix
После входа в операционную систему Mandriva Mageia нужно перейти в консоль, затем в директорию с программой - командой "cd KR". Чтобы просмотреть список...
-
Тема №1. Загальна характеристика системи програм 1С:Підприємство 1С: Підприємство є універсальною системою автоматизації і організації діяльності...
-
Класс System. Array Массивы в С# реализованы как объекты. Если говорить более точно, то они реализованы на основе базового класса Array, определенного в...
-
Висновок - Інтернет, як сучасний метод збору первинної інформації
Отже, роблячи висновок даної курсової роботи, можна запевнити про значну необхідність та ефективність використання первинної інформації при маркетингових...
-
Введение, Правила и порядок выполнения курсовой работы - Программирование в среде Turbo Pascal
Настоящие методические указания предназначены для выполнения курсовой работы "Расчеты на ЭВМ характеристик выходных сигналов электрических цепей" по...
-
Перед написанням драйверу доцільно переконатись чи працює фізичний пристрій як це очікувалось. Майстер можно використати для такої перевірки пристрою....
-
Утилита tput - Терминалы и псевдотерминалы в Linux. Средства работы с терминалами
Некоторые, хотя и весьма ограниченные, возможности управления терминалами предоставляет служебная программа tput: Tput [-T тип_терминала] действие...
-
Основные понятия и объекты - Терминалы и псевдотерминалы в Linux. Средства работы с терминалами
В стандарте POSIX-2001 Терминал или терминальное устройство определяется как символьный специальный файл, удовлетворяющий спецификациям общего...
Лабораторна робота №2 - Ввід інформації з клавіатури. Обмін інформації з файлами засобами мови Turbo C