Реферати українською » Информатика, программирование » Засоби введення-виведення в Сі + +


Реферат Засоби введення-виведення в Сі + +

Страница 1 из 2 | Следующая страница

Запровадження. 2

Загальні засади. 3

>Потоковий вхід-видобуток 9

>Форматний вхід-видобуток. 13

>Форматний введення з вхідного потоку. 15

Література 17


Запровадження.

У стандарті мови Сі відсутні кошти вводу-виводу. Усі операції вводу-виводу реалізуються з допомогою функцій, що у бібліотеці мови Сі, поставленої складі конкретної системи програмування Сі. Під час роботи з файлами дані можуть передаватися або у своїй внутрішньомудвоичном поданні чи текстовому форматі, тобто у більшудобочитаемом вигляді.

Особливістю мови Сі, що застосували три розробці ОС UNIX, є заздалегідь спланованих структур файлів. Усі файли розглядаються як неструктурована послідовність байтів. За такого підходу до організації файлів вдалося поширити поняття файла і різні устрою. У UNIX конкретному влаштуванню відповідає так званий "спеціальний файл", а одні й самі функції бібліотеки мови Сі використовують як обмінюватись даними з файлами, так обміну з пристроями.

Бібліотека мови Сі підтримує рівні вводу-виводу: потоковий вхід-видобуток, вхід-видобуток нижнього рівня життя та вхід-видобуток для консолі і портів. Останній рівень, який би зручний спеціалізований обмін даними з дисплеєм і портами виводу-введення-висновку, ми розглядати не в силу його системної залежності. Наприклад, він різний для MS-DOS, Windows і UNIX.


Загальні засади.

Мова Сі є фундаментом З++. У цьому З++ підтримує всю файлову систему Сі. Тому, за використанніС-кода в З++ не потрібно змінювати процедури вводу-виводу. Хоча за написанні програм на З++ зазвичай зручніше використати систему З++. Ідеться, зокрема, і перспективи використання ">iostream.h" замість ">stdio.h", що реалізують вхід-видобуток.Изучим файловий вхід-видобуток у мові Сі. Тим паче, що це саме собі дуже цікаво й дуже важливо задля розуміння "потоків" і "файлів" як і Сі, і у З++.

У системі виводу-введення-висновку в Сі для програм підтримується єдиний інтерфейс, котрий залежить від цього, якого конкретному влаштуванню здійснюється доступ. Тобто Сі між програмою і пристроєм перебуває щось більш загально, аніж сама пристрій. Таке узагальнену пристрій введення чи виведення (пристрій вищого рівня абстракції) називається потоком. У той самий час конкретне пристрій називається файлом. Наше завдання - зрозуміти, якимобрзом відбувається взаємодія потоків і файлів.

>Файловая система Сі варта роботи з різними пристроями, зокрема з терміналами,дисководами і накопичувачами. Навіть, якщо якийсь пристрій дуже відрізняється з інших пристроїв,буферизованная файлова система однаково представить його вигляді логічного устрою, що називається потоком. Усі потоки поводяться подібним чином. І оскільки вони у основному не залежить від фізичних пристроїв, то той самий функція, що виконує запис в дисковий файл, може таку ж операцію виконати і іншому устрої. Наприклад, на консолі. Потоки бувають два види: текстові ідвоичние.

У мові Сі файлом то, можливо що завгодно, починаючи в дискового файла і до терміналом чи принтером. Потік пов'язують із певним файлом, виконуючи обов'язкову операцію відкриття. Щойно файл відкритий, робити обміну інформацією останнім програму.

Не в усіх файлів однакові можливості. Наприклад, до дисковому файлу прямий доступ може бути, тоді як до деяких принтерам - не може бути. Отже, ви бачите, що напрошується певний висновок, є принципом системи виводу-введення-висновку мови Сі: все потоки однакові, а файли - немає!

Якщо файл може підтримувати запити на місце розташування (покажчик поточної позиції), то, при відкритті такого файла покажчик поточної позиції з файлі встановлюється на початок файла. Під час читання кожного символу з файла (чи запис у файл) покажчик поточної позиції збільшується. Тим самим було забезпечується просування по файлу.

>Файл від'єднується від певного потоку (тобто розривається зв'язок між файлом і потоком) з допомогою операції закриття файла. При закритті файла, відкритого з виведення, вміст (коли вона, звісно, є) що з ним потоку записується на зовнішнє пристрій. Цей процес відбувається зазвичай називаютьдозаписью потоку. У цьому гарантується, що її жодна інформація випадково не залишиться у буфері диска.

Якщо програма завершує роботу нормально, тобтоmain() повертає управління операційній системі, або вихід відбувається після exit(), усі файли закриваються автоматично.

У разі аварійного роботи програми, наприклад, в случити краху чи завершення шляхом викликуabort(), файли не закриваються.

Кожен потоку, що з файлом, є управляюча структура, яка містить інформацію про файлі. Вона має типFILE. Блок управління файлом - це невелике блок пам'яті, тимчасово виділений операційній системою для зберігання інформації про файлі, який відкрили від використання. Блок управління файлом зазвичай містить інформацію про ідентифікаторі файла, його розташуванні на диску і покажчику поточної позиції з файлі.

На виконання всіх операцій виводу-введення-висновку варто використовувати лише поняття потоків і застосовувати лише одну файлову систему. Введення або виведення від кожної устрою автоматично перетвориться системи у легкоуправлемий потік. І це є досягненням мови Сі.

Такі основні зауваження щодо існування різних потоків інформації та що з ними файлів.

>Файловая система мови Сі складається з кількох взаємозалежних між собою функцій. Для його роботи в Сі потрібно заголовний файл <>stdio.h> і той самий аналогічний йому заголовний файл <>iostream.h> потрібно роботи у З++.

Нижче приведено таблиця основних (часто використовуваних) функцій файловою системи мови Сі.

Ім'я                                                                                                                            Що робить цю функцію Ім'я Що робить цю функцію
>fopen() Відкриває файл >feof() >Возвращает значенняtrue (істина), якщо досягнуть кінець файла
>fclose() >Закривает файл >ferror() >Возвращает значенняtrue (істина), якщо відбулася помилка
>putc() >Записивает символ в файл >remove() >Стирает файл                                                                                                                                                         
>fputc() І це, як іputc() >fflush() >Дозапись потоку в файл
>getc() Читає символ з файла >rewind() Встановлює покажчик поточної позиції з початок файла                                                                  
>fgetc() І це, як іgetc() >ftell() >Возвращает поточне значення покажчика поточної позиції з файлі
>fgets() Читає рядок із файла >fprintf() Для файла те, щоprintf() для консолі
>fputs() >Записивает рядок в файл >fscanf() Для файла те, щоscanf() для консолі
>fseek() Встановлює покажчик поточної позиції визначений байт файла      

Заголовок <>stdio.h> представляє прототипи функцій вводу-виводу в Сі яких і визначає такі три типу:size_t,fpos_t іFILE. Перші дві:size_t,fpos_t є різновиду подібного типу, як єдине ціле без знака. Окремо розглянемо третій тип:FILE.

Покажчик файла - те, що з'єднує у єдине ціле всієї системи вводу-виводу мови Сі. Покажчик файла - це покажчик на структуру типуFILE. Він свідчить про структуру, що містить різні інформацію про файлі, наприклад, його ім'я, статус, і покажчик поточної позиції з початок файла. По суті покажчик файла визначає конкретний файл і використовується відповідним потоком і під час функції вводу-виводу.

Щоб виконувати в файлах операції читання і запис, програми повинні йти покажчики відповідних файлів. Щобобъвитьпеременную-указатель файла необхідно використовувати наступний оператор:

>FILE *>fp;

Функціяfopen() відкриває потік пов'язує з цим потоком файл. Потім вона повертає покажчик цього файла. Прототип функції має вигляд:

>FILE *>fopen(constchar *>имя_файла,constchar *режим);

Тутимя_файла - це покажчик на рядок символів, яка була дозволене ім'я файла, у якому може входити специфікація файла (включає позначення логічного устрою, шлях до файлу та власне ім'я файла).

Режим - визначає, як файл буде відкрито. Нижче в таблиці показані допустимі значення режимів.

Режим Що означає даний режим
>r Відкрити текстовий файл для читання
w Створити текстовий файл для записи
a Додати насамкінець текстового файла
>wb Створити двоїчний файл для записи
>rb Відкрити двоїчний файл для читання
>ab Додати насамкінецьдвоичного файла
>r+ Відкрити текстовий файл длячтения/записи
w+ Створити текстовий файл длячтения/записи
a+                                                                                                                                                                                                      Додати насамкінець текстового файла або створити текстовий файл длячтения/записи
>r+b Відкрити двоїчний файл длячтения/записи
>w+b Створити двоїчний файл длячтения/записи
>a+b Додати насамкінецьдвоичного файла або створити двоїчний файл длячтения/записи              

Наведемо фрагмент програми, у якому використовується функціяfopen() відкриття файла під назвоюTEST.

>FILE *>fp;

>fp =fopen("test", "w");

Слід відразу ж потрапити зазначити недостатність такого коду у програмі. Хоча наведений код технічно правильний, та його зазвичай пишуть трохи інакше.

>FILE *>fp;

>if ((>fp =fopen("test", ">w")==NUL)

{

>printf("Ошибка під час відкриттяфайла.nr")"

>exit(1);

}

>Рис. 1

Цей метод допомагає під час відкриття файла знайти будь-яку помилку.

Наприклад, захисту від записи чи повний диск. Причому, знайти ще до його того, як програма спробує у цей файл щось записати. Тому потрібно спочатку отримати підтвердження, що функціяfopen() виконалася успішно, і потім виконувати з файлом інші операції. Нижче малюнку 1 приведено невелику частину програми, яка. підтверджує або підтверджує відкриття файла. Результати роботи зазначеної програми наведено малюнку 2.

>Рис. 2.


>Потоковий вхід-видобуток

 

На рівні потокового виводу-введення-висновку обмін даними виробляєтьсяпобайтно. Такий вхід-видобуток може бути як власне пристроївпобайтового обміну (друкарка, дисплей), так файлів на диску, хоча устрою зовнішньої пам'яті, слід сказати, є пристроямипоблочного обміну, тобто. впродовж одного звернення до влаштуванню виробляється зчитування чи запис фіксованою порції даних. Найчастіше мінімальної порцією даних, що у обміні із зовнішнього пам'яттю, є блоки в 512 байт чи 1024 байта. При введення з диска (під час читання з файла) дані вкладаються у буфер ОС, та бувпобайтно чи певними порціями передаються програмі користувача. При виведення даних в файл вони накопичуються в буфері, а під час заповнення буфера записуються у вигляді єдиного блоку на диск впродовж одного звернення до останнього.Буфери ОС реалізуються як ділянок основний пам'яті. Тому пересилки між буферами вводу-виводу і виконуваної програмою відбуваються досить швидко на відміну реальних обмінів з обмеженими фізичними пристроями.

Функції бібліотеки вводу-виводу мови Сі, підтримують обмін даними з файлами лише на рівні потоку, дозволяють обробляти дані різних ж розмірів та форматів, забезпечуючи у своїйбуферизованний введення та виведення. Отже, потік - це файл разом із наданими засобамибуферизации.

Працюючи з потоком можна робити такі дії:

· відкривати і закривати потоки (пов'язувати покажчики на потоки з конкретними файлами);

· вводити і виводити: символ, рядок,форматированние дані, порцію даних довільній довжини;

· аналізувати помилки потокового виводу-введення-висновку і умова досягнення кінця потоку (кінця файла);

· управлятибуферизацией потоку і розміром буфера;

· отримувати встановлювати покажчик (індикатор) поточної позиції

Відкриття потоку виникатимуть такі помилки: зазначений файл, пов'язані з потоком, не знайдено (для режиму "читання"); диск заповнений чи диск захищений від запису і т.п. Необхідно також відзначити, що з виконанні функціїfopen() відбувається виділення динамічної пам'яті. При її відсутності встановлюється ознака помилки ">Notenoughmemory" (недостатньо пам'яті). У перелічених випадках покажчик на потік набуває значенняNULL. Зауважимо, що покажчик на потік у кожному режимі, відмінному від аварійного не буває рівнимNULL.

Наведемо типову послідовність операторів, що використовується під час відкриття файла, що з потоком:

>if ((>fp =fopen("t.txt","w")) ==NULL)

>perror("ошибка під час відкриття файлаt.txt n");

>exit(0);

}

ДеNULL - нульової покажчик, певний в файліstdio.h.

Відкриті на диску файли по закінченні роботи із нею рекомендується закрити явно. І тому використовується бібліотечна функція

>intfclose (>указатель_на_поток);

Відкритий файл можна відкрити повторно (наприклад, зміни режиму роботи з нею) тільки тоді, як файл буде закрито з допомогою функціїfclose().

Коли програма починає виконуватися, автоматично відкриваються п'ять потоків, у тому числі основними є:

· стандартний потік введення (нею посилаються, використовуючи визначений покажчик на потікstdin);

· стандартний потік виведення (>stdout);

· стандартний потік виведення повідомлень помилки (>stderr).

За умовчанням стандартному потоку введенняstdin ставлять у відповідність клавіатура, а потокамstdout іstderr відповідає екран дисплея.

Однією з найефективніших способів здійснення вводу-виводу одного символу є використання бібліотечних функційgetchar( ) іputchar(). Прототипи цих функцій мають такий вигляд:

>intgetchar(void);

>intputchar(int з);

Функціяgetchаr( ) здійснює введення одного символу. При зверненні вона повертає у викликала її функцію один запроваджений символ.

Функціяputchar( ) виводить у стандартний потік один символ, у своїй також повертає у викликала її функцію хіба що виведений символ.

Зверніть увагу, що функціяgetchar( ) вводить черговий байт інформації (символ) як значення типуint. Це у тому, щоб гарантувати успішність розпізнавання ситуації "досягнуть кінець файла". Річ у тім, що з читанні з файла з допомогою функціїgetchar() може бути досягнуто кінець файла. І тут операційна система у відповідь спробу читання символу передає функціїgetchar() значенняEOF (End ofFile).КонстантаEOF визначена узаголовочном файліstdio.h в різних операційні системи має значення 0 чи -1. Отже, функціяgetchar() повинен мати можливість прочитати з вхідного потоку як символ, а й ціле значення. Саме із метою функціяgetchar( ) завжди повертає значення типуint.

Що стосується помилки при введення функціяgetchar() також повертаєEOF.

Набираючи тексту на клавіатурі коди символів записуються у внутрішній буфер ОС, Водночас вони відбиваються (для візуального контролю) на екрані дисплея.Набранние на клавіатурі символи можна редагувати (видаляти і набирати нові). Фактичний перенесення символів з внутрішнього буфера у програмі відбувається за натисканні клавіші . У цьому код клавіші

Страница 1 из 2 | Следующая страница

Схожі реферати:

Навігація