Для роботи з даними на диску вам потрібний дескриптор. У C таким дескриптором є покажчик, який повертається функцією fopen. Ви вказуєте режим, отримуєте покажчик і використовуєте його для потокової передачі всередину файлу або з нього. Найбільш поширені режими: r для читання, w для запису та a для додавання. Якщо вибрати їх неправильно, можна втратити дані або викликати помилку програми.
Розглянемо просте завдання: запис чисел від 1 до 10 у файл.
`
Цей код відкриває файл із ім’ям out у режимі w. Це режим запису з перезаписом (руйнівний запис). Якщо файл out немає, система створює його. Якщо вона вже існує, його старий вміст повністю стирається і замінюється новим. Змінна f зберігає покажчик на файл. Цей покажчик використовується всім наступних операцій. Якщо відкрити файл не вдається (через проблеми з правами доступу, переповнення диска або неіснуючого шляху), f набуває значення NULL.
Функція виведення тут – fprintf. Вона працює так само, як printf, але першим аргументом їй передається покажчик на файл. Щойно роботу завершено, fclose звільняє ресурс.
Обробка помилок під час роботи з файлами у функції main
Цей фрагмент коду є першим у серії прикладів, що повертає код помилки з функції main. Коли fopen завершується невдачею, f містить нульове значення. C нуль інтерпретується як брехня (false). Усі інші значення інтерпретуються як істина (true). Оператор ! інвертує цю булеву логіку.
Конструкція if(!f) перевіряє, чи є покажчик нульовим. Це еквівалентно if(f==0), але перший варіант є стандартною ідіомою. Якщо умова є істинною, програма повертає код 1.
У системах UNIX можна перевірити цей код виходу безпосередньо з командного рядка. Він повідомляє, чи успішно виконався скрипт чи програма, чи зіткнулася з помилкою. Вміння вчасно перехоплювати такі помилки заощаджує години налагодження в майбутньому.
Навіщо взагалі морочитися з кодами повернення, якщо можна викликати аварійне завершення (crash)? Тому що контрольоване завершення краще, ніж невизначена поведінка. Ви можете записати помилку в журнал, повідомити користувача або спробувати виконати операцію повторно. Дозволяти програмі тихо падати — це лінива інженерія.
Принадність цього підходу полягає в його простоті. Відкриваєте. Перевіряєте. Записуєте. Закриваєте. Жодної магії. Жодного прихованого стану. Просто покажчик та файл.
А якщо вам потрібно прочитати те, що ви тільки що записали? Чи додати дані до існуючого журналу, не знищуючи історію? Рядок режиму змінює все. r залишає файл без змін. a додає дані до кінця. w стирає весь вміст. Вибирайте уважно.






























