- •Введення
- •1. Структура та обсяг дисципліни
- •2. Основи програмування на мові с
- •2.1 Найпростіші конструкції мови
- •2.2 Типи даних
- •2.4 Операції мови с
- •2.5 Структура простої с програми
- •2.6 Організація введення-виведення
- •2.7 Компіляція в системі Linux
- •2.8 Організація розгалужень в програмі
- •2.9 Організація циклів
- •2.10 Оператор break
- •2.11 Оператор continue
- •2.11 Масиви
- •2.12 Функції
- •2.13 Вызов функции с переменным числом параметров
- •2.14 Рекурсивні функції
- •2.15 Читання і запис текстових файлів
- •2.16 Структури даних
- •2.17 Перелік|перерахування| (enumeration)
- •2.18 Об'єднання (union)
- •3. Операційні системи і системне програмування
- •3.1. Поняття операційної системи
- •4. Корисні команди Linux
- •4.1. Загальні|спільні| команди
- •4.1.1. Команда arch – виведення архітектури комп'ютера
- •4.1.2. Команда clear – очищення екрану
- •4.1.3. Команда date
- •4.1.9. Команда uptime – інформація про роботу системи
- •4.1.10. Команда users – інформація про користувачів
- •4.1.11. Команди w, who і whoami інформація про користувачів
- •4.1.12. Команда xf8config – настройка графічної підсистеми
- •4.2. Команди для роботи з текстом
- •4.2.1. Команди diff і cmp
- •4.2.2. Команди grep і egrep – текстовий фільтр
- •4.2.3. Команди more и less – посторінкове виведення
- •4.2.4. Команди head і tail – виведення начала і хвоста файлу
- •4.2.5. Команда wc – підрахунок слів у файлі
- •5. Захист інформації в інформаційних системах
- •5.1 Основні завдання забезпечення безпеки
- •5.2 Базові поняття криптографії
- •5.2.1 Поняття криптографічного алгоритму і протоколу
- •5.2.2 Криптосистеми з секретним ключем
- •5.2.3 Криптосистеми із відкритим ключем
- •5.2.4. Гибридні криптосистеми
- •5.2.5. Цифрові підписи
- •5.2.6. Сертифікати
- •5.3. Принципи аутентифіекації і керування доступом
- •5.3.1. Основи аутентифікації
- •5.3.2. Основи керування доступом
- •5.4. Аутентифікація та керування доступом в unix
- •5.4.1. Облікові записи користувачів
- •5.4.2. Аутентифікація
- •5.4.3. Керування доступом
- •6. Програмний інтерфейс unix. Системні виклики і функції стандартних бібліотек
- •6.1. Підтримка програмування в oc unix. Вивчення передачі інформації
- •6.2. Змінні оточення
- •6.3. Обробка помилок
- •6.4. Правила формування і засоби розбору командних рядків
- •7. Операції над файлами
- •7.1 Файлові операції posix
- •7.2. Збирання інформації про атрибути файла
- •7.3. Операції над каталогами
- •Література
2.15 Читання і запис текстових файлів
Для тривалого зберігання даних, введених користувачем, можна використовувати два підходи: зберігати дані у файлах даних або використовувати для цих цілей бази даних. Предметом нашого розгляду буде читання і запис текстових файлів.
Перед роботою з файлом його потрібно відкрити. Це можна зробити за допомогою функції fopen():
FILE *fopen(const char *filename,const char *mode)
Функція fopen() відкриває існуючий файл або створює новий. У разі успіху вона повертає покажчик потоку, який повинен бути оголошений до цього, запам'ятав в змінній для використання іншими функціями. У разі помилки функція повертає нуль. Розглянемо параметри цієї функції:
const char *filename - покажчик на рядок імені файлу. Може містити повний шлях до файлу.
const char *mode - покажчик на один з можливих режимів, розглянутих нижче.
Таблица 2
Режим |
Опис |
rt |
Відкриває файл для читання |
wt |
Створює новий файл. У випадку, якщо файл з таким ім'ям вже існує, то він буде перезаписаний
|
at |
Відриває файл в режимі додавання інформації |
r+t |
Відкриває існуючий файл для читання і запису |
w+t |
Створює новий файл для читання і запису. Якщо файл з таким ім'ям вже існує, то він буде перезаписаний |
a+t |
Відкриває існуючий файл або створює новий в режимі додавання інформації |
Параметр, задаючий режим, при виклику функції fopen() потрібно брати в подвійні лапки.
Нижче приведений фрагмент коду для створення файлу dat1.txt:
FILE *fp;
fp=fopen(“dat1.txt”,”wt”);
if(fp==NULL)
{
printf(“Неможливо створити файл”);
exit(1);
}
Розглянута в даному прикладі функція exit() використовується для припинення роботи програми при виникненні помилки.
Якщо до exit() звернулися з функції, викликаною головною програмою, то припиняє роботу вся програма, а не тільки ця функція. Приємна особливість цієї функції полягає в тому, що вона закриває будь-які файли, відкриті функцією fopen().
Аргументом функції exit() є номер коду помилки. У некоторsх системах він може передавться іншій програмі, якщо початкова припинила роботу.
Існує угода, що 0 - нормальне завершення, тоді як будь-яке інше значення свідчить про помилку.
Розглянемо деякі основні функції для роботи з файлами.
fgetc()
Функція fgetc() призначена для посимвольного читання з файлу. У разі успіху повертає лічений символ. Досягши кінця файлу або у разі помилки повертає EOF.
Далі приведений приклад програми, яка прочитує і відображає на екран вміст текстового файлу.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main(void0
{
FILE *fp;
char з;
fp=fopen(“dat1.txt”,”rt”);
if(fp==NULL)
{
printf(“Неможливо відкрити файл”);
exit(1);
}
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
getch();
}
fgets()
Формат функції:
char *fgets(char *str,int num,FILE *stream)
Функція fgets() прочитує до num-1 символів з файлу stream і поміщає їх в масив символів, на який указує str. Символи прочитуються до тих пір, поки не зустрінеться символ “новий рядок”, EOF. У разі успіху fgets() повертає рядок, при невдачі повертається NULL.
Приведений нижче фрагмент коду по строках прочитує вміст текстового файлу.FILE *fp;
char str[256];
fp=fopen(“dat1.txt”,”rt”);
if(fp==NULL)
{
printf(“Невозможно открыть файл”);
exit(1);
}
while(fgets(str,256,fp)!=NULL)
puts(str);
fclose(fp);
fputc()
Функція fputc() здійснює запис одного символу у відкритий файл в позицію, відповідну поточному положенню покажчика. Потім дає приріст покажчику. Повертає значення записаного символу. У разі помилки повертає EOF. Наприклад:
FILE *fp;
char c=’A’;
fputc(с,fp);
fputs()
Функція fputs() записує рядок, заданий першим аргументом у файл. У разі помилки повертає EOF
