Читання і запис в бінарному режимі Ми вже уміємо відкривати файли. Тепер поговоримо про їх обробку, тобто читанні і записі. На мал. 11.1 і 11.2 показано, як відбувається читання і запис бінарних файлів. Для кожного відкритого файлу система зберігає величину, яка називається покажчиком поточної позиції файлу. При відкритті файлу цей покажчик встановлюється на початок файлу. З кожним викликом функції читання файлу покажчик поточної позиції зрушується на певну кількість байтів (див. мал. 11.1). Line1\nLine2\Line3<- Line1\nLine2\Line3<- Line1\nLine2\Line3<- Л Л Л після відкриття читаємо 7 байтів досягнутий кінець файлу fread(Sf. 7) Мал. 11.1. Читання бінарного файлу Line1\nLine2MJne3<- Line1\nBYTe2\Line3<- Нагадаю, що \n — один символ. Запис даних в зрушуємо покажчик на Записуємо три байти 7 байтів вут фаил починається з позиції на яку указує покажчик (див. мал. 11.2). Мал. 11.2. Запис бінарного файлу тт 1Г і ^ Читання двійкового (бинарно- го) файлу здійснюється функцією fread(). Даній функції потрібно передати всього два параметри -идентификатор файлу і кількість символів, яку потрібно прочитати. Функція повертає рядок, в якому будуть прочитані символи. Якщо як параметр функції буде вказано більше число символів, чим є у файлі насправді, то помилки не буде — просто буде виведено все, що є. Приклад читання двійкового файлу приведений в лістингу 11.1. Лістинг 11.1. Читання двійкового (бінарного) файлу $f = fopen("/home/den/lines.txt","r") or die("0um6Ka при відкритті файла\ п"); $s = fread($f, 4); echo $s;
Мал. 11.3. Чтенієдвоїчного(бінарного) файлу Ми відкрили файл в бінарному режимі "тільки читання". Потім ми прочитали 4 байти і записали їх в рядок $s, яка була виведена на екран. На мал. ll.3 ми бачимо сам файл lines.txt, а також виведення сценарію — рядок Line. Для запису символів у файл використовується функція fwrite(), якою потрібно передати два параметри — ідентифікатор файлу і рядок, який буде записаний у файл. У приведеному вище прикладі після читання чотирьох байтів покажчик зупинився на п'ятому байті: наступна операція читання або запису почнеться з п'ятої позиції. Це означає, що якщо нам потрібно записати що-небудь після символів Line, ми можемо відразу після операції читання записати потрібні нам дані. Але адже ми відкрили файл в режимі читання, тому зараз запис неможливий. Виправимо це упущення. Напишемо сценарій, який працюватиме так: Відкриває файл в режимі запису. «Перемотує» файл на п'яту позицію, тобто встановлюєпокажчик поточної позиції. Записує інформацію у файл. | Зберігає зміни у файлі.Текст сценарію приведений в лістингу 11.2. Лістинг 11.2. Запис в бінарний файл <? $f = fopen("/home/den/lines.txt","r+") or с11е("0шибка при відкритті файла\ п"); fseek($f, 4, SEEK_SET); fwr.ite ($f, "BYTE") ; fflush($f); ?>