- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Призначеня функцій бібліотеки введення-виведення
Функції бібліотеки введення-виведення призначені для читання даних з файлів (або отримання від пристроїв) та запису даних у файл (або пересилання на пристрій). Пристрої розглядаються системою як файли введення-виведення. Наприклад, пристрій необхідно відкривати і закривати точно так само, як і файл.
Деякі функції використовують для введення-виведення даних стандартні файли (пристрої) введення-виведення. Однак для більшості функцій ви можете визначати свої власні файли для введення та виведення даних. Для багатьох функцій можна використовувати покажчик на файл, тобто на структуру, яка містить ім'я файлу; для інших ви можете використовувати дескриптор файлу (позитивний цілий ідентифікатор, який присвоюється файлу при його відкритті).
Функції вводу-виводу, які зберігаються в бібліотеці мови C (libc.a), здійснюють потоковий ввід-висновок. Для доступу до цих функцій необхідно включити в програму файл stdio.h наступним чином:
# Include <stdio.h>
Макрокоманди
Деякі функції бібліотеки введення-виведення - це макрокоманди, визначені у файлі заголовка, а деякі - це об'єктні модулі функцій. У багатьох випадках бібліотека містить макрокоманду і функцію, що виконують одну і ту ж операцію. Вибираючи між макрокомандою і функцією, врахуйте наступне:
Для макрокоманди можна встановити контрольну точку за допомогою програми dbx program.
Макрокоманди зазвичай виконуються швидше, ніж функції, так як препроцесор заміняє макрокоманду на рядки коду.
При компіляції макрокоманд створюється більш громіздкий об'єктний код.
Файли, команди та функції, вживані для управління введенням-виводом, надають наступні типи інтерфейсів: Низькорівневий (низькорівневий інтерфейси введення-виведення) Базові функції відкриття і закриття файлів і пристроїв.
Потоковий (Потокові інтерфейси введення-виведення) Читання-запис даних в режимах каналу і FIFO.
Термінальний (Термінальні інтерфейси введення-виведення) Форматований висновок і буферизація.
Асинхронний (Асинхронні інтерфейси введення-виведення) Одночасне виконання операцій обробки та вводу-виводу.
Мовний (Створення мови введення за допомогою команд lex і yacc) Для інтерпретації даних введення-виведення команди lex і yacc генерують програми лексичного і синтаксичного аналізу.
Потокові інтерфейси введення-виведення
Потокові інтерфейси, що представляють дані у вигляді потоків байтів, не інтерпретуються системою, більш ефективні з погляду мережевих протоколів, ніж символьні інтерфейси. При читанні-запису потоку даних не відбувається підрозділу на окремі записи. Наприклад, при читанні 100 байтів по деякому каналу неможливо визначити, записав Чи процес відразу 100 байтів, або ж він записав два рази по 50 байтів, або ж ці 100 байтів надійшли від двох різних процесів.
Потоковий ввод-вивід організований у вигляді каналів або файлів FIFO ("першим увійшов - першим вийшов"). Файли FIFO схожі з каналами, оскільки дані в них можуть рухатися тільки в одному напрямку (зліва направо). Однак, на відміну від каналу, файлу FIFO можна привласнювати ім'я і до нього можуть звертатися не пов'язані з ним процеси. Іноді файл FIFO називають іменованих каналом. Оскільки у файлу FIFO є ім'я, його можна відкривати за допомогою стандартної функції fopen. Процедура відкриття каналу складніше: необхідно викликати функцію pipe, повертаючу дескриптор файлу, а потім за допомогою стандартної функції вводу-виводу fdopen зв'язати дескриптор відкритого файлу зі стандартним потоком вводу-виводу.
Доступ до потоковим інтерфейсам введення-виведення можна отримати за допомогою наступних функцій та макрокоманд:
fclose Закриває потік
feof, ferror, clearerr і fileno Перевіряє стан потоку
fflush Записує всі буферізованние на даний момент символи з потоку
fopen, freopen або fdopen Відкриває потік
fread і fwrite Виконує двійковий ввід
fseek, rewind, ftell, fgetpos і fsetpos Переміщає покажчик файлу в потоці
getc, fgetc, getchar і getw Витягує символ або слово з вхідного потоку
gets і fgets Отримує рядок з потоку
getwc, fgetwc або getwchar Витягує "широкий" символ з вхідного потоку
getws і fgetws Отримує рядок з потоку
printf, fprintf, sprintf, wsprintf, vprintf, vfprintf, vsprintf і vwsprintf
Друкує форматований вивід
putc, putchar, fputc або putw Поміщає символ або слово в потік
puts і fputs Записує рядок в протоку
putwc, putwchar і fputwc Поміщає символ або слово в потік
putws і fputws Поміщає рядок "широких" символів в потік
scanf, fscanf, sscanf або wsscanf Перетворює форматований ввід
setbuf, setvbuf, setbuffer і setlinebuf Виділяє буфер для потоку
ungetc і ungetwc Повертає витягнутий символ назад у вхідний потік
Питання для контролю:
1. Яке призначення функцій бібліотеки введення-виведення?
2. Які є макрокоманди для роботи з введенням – виведенням?
3. Що таке потокові інтерфейси введення – виведення?
Література:
1. Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. – с. 312-318
Урок №50
(згідно робочої навчальної програми)
Тема:Далекі покажчики і клавіатура
Питання:
1. Ближні покажчики (near)
2. Дальні покажчики (far)
3. Покажчики huge
Яке відношення мають покажчики до моделей пам'яті і Turbo C + +? Найбезпосередніше. Тип вибраній вами моделі пам'яті визначає тип за замовчуванням покажчиків, використовуваних для коду та даних (хоча ви можете явно оголосити покажчик або функцію як мають той чи інший конкретний тип, незалежно від поточної моделі пам'яті). Покажчики бувають чотирьох різновидів: near (16 бітів), far (32 біта), huge (також 32 біта) і segment (16 бітів).
