Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

У флагов

st_mode
, возвращаемых в структуре
stat
, также есть ряд ассоциированных макросов в заголовочном файле sys/stat.h. В эти макросы включены имена флагов для прав доступа и типов файлов и некоторые маски, помогающие проверять специфические типы и права.

Флаги прав доступа такие же, как в системном вызове

open
, описанном ранее. Для флагов типов файла включены следующие имена:

S_IFBLK
— блочное устройство;

S_IFDIR
— каталог;

S_IFCHR
— символьное устройство;

S_IFIFO
— FIFO (именованный
канал);

S_IFREG
— обычный файл;

S_IFLNK
— символическая ссылка.

Для других флагов режима файла включены следующие имена:

S_ISUID
— элемент получает setUID при выполнении;

S_ISGUID
— элемент получает setGID при выполнении.

Для масок, интерпретирующих флаги

st_mode
, включены следующие имена:

S_IFMT
— тип файла;

S_IRWXU
— права пользователя на чтение/запись/выполнение;

S_IRWXG
— права группы на чтение/запись/выполнение;

S_IRWXO
— права остальных на чтение/запись/выполнение.

Существует ряд макросов, помогающих определить типы файлов. Они просто сравнивают надлежащим образом установленные флаги режима файла с подходящим флагом, типа устройства. К ним относятся следующие:

S_ISBLK
— проверка для блочного файла;

S_ISCHR
— проверка для символьного файла;

S_ISDIR
— проверка для каталога;

S_ISFIFO
— проверка для FIFO;

S_ISREG
— проверка для обычного файла;

S_ISLNK
— проверка для символической ссылки.

Например, для проверки того, что файл не является каталогом и у него есть права на выполнение только для владельца и больше никаких других прав, вы можете воспользоваться следующим тестом;

struct stat statbuf;

mode_t modes;

stat("filename", &statbuf);

modes = statbuf.st_mode;

if (!S_ISDIR(modes) && (modes & S_IRWXU) = S_IXUSR)

...

dup и dup2

Системные вызовы

dup
позволяют дублировать дескриптор файла, предоставляя два или несколько разных дескрипторов, обращающихся к одному и тому же файлу. Эта возможность может применяться для чтения и записи в разные части файла. Системный вызов
dup
дублирует файловый дескриптор
fildes
и возвращает новый дескриптор. Системный вызов
dup2
умело копирует один дескриптор файла в другой, задавая дескриптор, применяемый для копии.

Далее приведена синтаксическая запись для вызовов.

#include <unistd.h>

int dup(int fildes);

int dup2(int fildes, int fildes2);

Эти

вызовы могут оказаться полезными в случае нескольких процессов, взаимодействующих через именованные каналы. Более глубоко мы рассмотрим системные вызовы
dup
в главе 13.

Стандартная библиотека ввода/вывода

Стандартная библиотека ввода/вывода (stdio) и ее заголовочный файл stdio.h предоставляют универсальный интерфейс для системных вызовов ввода/вывода нижнего уровня. Библиотека, теперь часть языка С стандарта ANSI, в отличие от системных вызовов, с которыми вы встречались ранее, включает много сложных функций для форматирования вывода и просмотра ввода. Она также обеспечивает необходимые условия буферизации для устройств.

Во многих случаях эта библиотека используется так же, как низкоуровневые дескрипторы файлов. Вы должны открыть файл для установления пути доступа. Это действие возвращает значение, применяемое как параметр в других функциях библиотеки ввода/вывода. Эквивалент низкоуровневого дескриптора файла называется потоком и реализуется как указатель на структуру

FILE*
.

Примечание

Не путайте эти потоки файлов с потоками ввода/вывода в языке С++ и механизмом STREAMS, описывающим взаимодействие процессов и введенным в системе AT&T UNIX System V Release 3, который не рассматривается в данной книге. Для получения дополнительной информации о средствах STREAMS обратитесь к спецификации X/Open (по адресу http://www.opengroup.org) и руководству по программированию AT&T STREAMS Programming Guide, поставляемому с системой System V.

Три файловых потока открываются автоматически при старте программы. К ним относятся stdin, stdout и stderr. Эти потоки объявлены в файле stdio.h и представляют вывод, ввод и стандартный поток ошибок, которым соответствуют низкоуровневые файловые дескрипторы 0, 1 и 2.

В данном разделе мы рассмотрим следующие функции:

fopen
,
fclose
;

fread
,
fwrite
;

fflush
;

fseek
;

fgetc
,
getc
, getchar;

fputc
,
putc
,
putchar
;

fgets
,
gets
;

printf
,
fprintf
и
sprintf
;

scanf
,
fscanf
и
sscanf
;

fopen
.

fopen

Библиотечная функция f

o
pen — это аналог низкоуровневого системного вызова
open
. Она используется в основном для файлов и терминального, ввода и вывода. Там, где нужно явное управление устройствами, больше подойдут системные вызовы, поскольку они устраняют потенциальные нежелательные побочные эффекты применения библиотек, например, в случае буферизации ввода/вывода.

Поделиться:
Популярные книги

Год 1942 — «учебный»

Бешанов Владимир Васильевич
Документальная литература:
биографии и мемуары
6.20
рейтинг книги
Год 1942 — «учебный»

"Фантастика 2025-103". Компиляция. Книги 1-17

Поселягин Владимир Геннадьевич
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Фантастика 2025-103. Компиляция. Книги 1-17

Том 4. Белая гвардия, Дни Турбиных (с иллюстрациями)

Булгаков Михаил Афанасьевич
Проза:
классическая проза
5.00
рейтинг книги
Том 4. Белая гвардия, Дни Турбиных (с иллюстрациями)

"Фантастика 2024-110". Компиляция. Книги 1-19

Евдокимов Дмитрий Викторович
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Фантастика 2024-110. Компиляция. Книги 1-19

Риф яркости

Брин Дэвид
4. Возвышение
Фантастика:
научная фантастика
7.50
рейтинг книги
Риф яркости

Сладких снов

Эшли Кристен
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сладких снов

Письма и документы (1917-1922)

Мартов Юлий Осипович
Научно-образовательная:
история
5.00
рейтинг книги
Письма и документы (1917-1922)

Прорыв реальности

Бурносов Юрий Николаевич
Новая зона
Фантастика:
боевая фантастика
6.40
рейтинг книги
Прорыв реальности

Божественная комедия (илл. Доре)

Алигьери Данте
Старинная литература:
европейская старинная литература
7.62
рейтинг книги
Божественная комедия (илл. Доре)

Повелитель императоров

Кей Гай Гэвриел
2. Сарантийская мозаика
Фантастика:
фэнтези
6.57
рейтинг книги
Повелитель императоров

Море серебрянного света

Уильямс Тэд
4. Иноземье
Фантастика:
киберпанк
7.33
рейтинг книги
Море серебрянного света

Черный Лев

Деверо Джуд
Бархатная сага
Любовные романы:
исторические любовные романы
8.77
рейтинг книги
Черный Лев

Ричард Длинные Руки (Книга 1)

Орловский Гай Юлий
1. Ричард Длинные Руки
Фантастика:
научная фантастика
7.76
рейтинг книги
Ричард Длинные Руки (Книга 1)

Россия молодая

Герман Юрий Павлович
Полное издание в одном томе
Проза:
историческая проза
6.57
рейтинг книги
Россия молодая