Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS_chast_2.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
66 Кб
Скачать
☆

54. Файлові операції posix

Відкриття і створення файлів

Для відкриття файла використовують системний виклик ореп(), першим пара­метром якого є шлях до файла.

#і ndude <fcntl,h>

int open(const char ‘pathname. int flags[. mode_t mode]);

Виклик open() повертає цілочислове значення - файловий дескриптор.

Закриття файла

Файл закривають за допомогою системного виклику close(), що приймає файло­вий дескриптор:

closetfdl);

Читання і записування даних

Для читання даних із відкритого файла використовують системний виклик readO: ssizet re ad (i n t fdl, void *buf, size_t count);

). Виклик readO повертає реальний обсяг прочитаних даних (тип ssizet є цілочисловим). Покажчик позиції у файлі пересувають за зчитані дані.

char buf [ 1 00] ;

jj читають 100 байт з файлу в buf

int bytes_read = read(fdl. buf. sizeof (buf));

Для записування даних у відкритий файл через файловий дескриптор вико­ристовують системний виклик writeC):

ssize_t writetint fdl, const void *buf. size_t count);

Внаслідок цього виклику буде записано count байтів у файл через дескриптор fdl із пам'яті, на яку вказує buf. Виклик wri te() повертає обсяг записаних даних.

int fdl. bytes_written;

fdl - openC./myfile.txt", 0_RDWR10_CREAT. 00644); bytes_written = writeCfdl, "hello", sizeofC'hello");

Реалізація копіювання файлів

char buf[ 1024] ; int bytes_read. intfile, outfile; jj відкриття вихідного файла для читання infile = openCinfile.txt". 0_RD0NLY); if Cinfile == -1 ) {

printf ("помилка під час відкриття файла\п"); exit(-l);

}

jj створення результуючого файла, перевірку помилок пропущено outfile - openC'ou tfile.txt", O_WR0NLY|O_CREAT|O_TRUNC. 0644); do {

jj читання даних із вихідного файла у буфер bytes_read - readtinfile. buf. s ize of ( b uf ) ) ;

// записування даних із буфера в результуючий файл if (bytes_read > 0) writeioutfile. buf, bytes_read):

} while (bytes_read > 0);

Переміщення покажчика поточної позиції у файлі

Кожному відкритому файлу відповідає покажчик позиції (зсув) усередині файла. Його можна пересувати за допомогою системного виклику 1 seek О:

off_t lseekiint fdl. off_t offset, int whence);

П

ssize t

араметр offset задає величину переміщення покажчика. Режим переміщен­ня задають параметром whence, який може набувати значень SEEKSET (абсолютне

переміщення від початку файла), SEEK_CUR (відносне переміщення від поточного місця покажчика позиції) і SEEK_END (переміщення від кінця файла).

// переміщення покажчика позиції на 100 байт від поточного місця Iseek (outfile. 100. SEEK_CUR);

// записування у файл

write (outfile. "hello". sizeofC'hello")):

Збирання інформації про атрибути файла

Для отримання інформації про атрибути файла (тобто про вміст його індексного дескриптора) використовують системний виклик stat().

#include <sys/stat.h>

int stattconst char ‘path. struct stat *attrs);

Першим параметром є шлях до файла, другим — структура, у яку записувати­муться атрибути внаслідок виклику.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]