1-1 Программирование С++ / html / modules / 024 / content / content2
.htmlІнформатика — Теорія — Використання дескрипторів файлів Автори
|
Контакти
|
Підсистема допомоги
|
Методичні вказівки
|
Анотація
|
Назад
ІнформатикаФайловий потік : Використання дескрипторів файлівЗміст курсу
Вступ
Теорія
Потокове введення і виведення
Використання дескрипторів файлів
Буферизація потоків
Практика
Лабораторна робота
Версія для друку
Використання дескрипторів файлів В мові С передбачений ще один механізм роботи з файлами - використання дескрипторів. Файли, які відкриваються таким чином, не розраховані на роботу з буферами та форматованими даними. На початку роботи будь-якої програми відкриваються п'ять стандартних потоків зі своїми дескрипторами.
Таблиця 3 - Дескриптори стандартних потоків введення-виведення
потік
дескриптор
stdin
0
стандартний вхідний потік
stdout
1
стандартний вихідний потік
stderr
2
стандартний потік повідомлень про помилки
stdaux
3
стандартний потік зовнішнього пристрою
stdprn
4
стандартний потік виведення на принтер
Але будь-яка програма може і явним чином відкривати будь-які файли з дескрипторами. Функції, які працюють з дескрипторами файлів, описані в модулі io.h. Файл відкривається функцією open(), яка повертає дескриптор файлу:int open(const char *path, int access [ , unsigned mode ] );де path задає ім'я файлу відкриття;
access визначає режим доступу до файлу; mode є не обов'язковим та задає режим відкриття файла. Параметр access формується за допомогою операціїлогічного складання з переліку прапорців.
Таблиця 4 - Допустимі значення параметру access
O_RDONLY
тільки для читання
O_WRONLY
тільки для запису
O_RDWR
для читання і запису
O_CREAT
створення нового файлу
O_TRUNC
якщо файл існує, то він стає порожнім
O_BINARY
двійковий файл
O_TEXT
текстовий файл
Таблиця 5 - Допустимі значення параметру mode
S_IWRITE
дозволити запис
S_IREAD
дозволити читання
Приклад 6. Використання дескрипторів файлів.#include <string.h>#include <stdio.h>#include <fcntl.h>#include <io.h>int main(void){ int handle; char msg[] = "Hello world"; if ((handle = open("TEST.TXT", O_CREAT | O_TEXT)) == -1) { perror("Error:"); return 1; } write(handle, msg, strlen(msg)); close(handle); return 0;}
Як видно з прикладу, файл, відкритий функцією open() повинен бути закритий за допомогою функції close().int close(int handle); Читання і запис даних при роботі з файлами, що визначаються дескрипторами handle, здійснюється функціями write() і read().int read(int handle, void *buf, unsigned len);int write(int handle, void *buf, unsigned len);де buf - покажчик на буфер, з якого записується в файл інформація, або в який читається; len - кількість байтів запису або читання з файла.
© 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS