Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Элементы вызываемой структуры stat могут меняться в разных UNIX-подобных системах, но обязательно включают перечисленные в табл. 3.4 элементы.
Таблица 3.4
Элемент структуры stat | Описание |
---|---|
st_mode | Права доступа к файлу и сведения о типе файла |
st_ino | Индекс, ассоциированный с файлом |
st_dev | Устройство, на котором размещен файл |
st_uid | Идентификатор (user identity) владельца файла |
st_gid | Идентификатор группы (group identity) владельца файла |
st_atime | Время последнего обращения |
st_ctime | Время последнего изменения прав доступа, владельца, группы или объема |
st_mtime | Время последней модификации содержимого |
st_nlink | Количество жестких ссылок на файл |
У флагов
st_mode
stat
Флаги прав доступа такие же, как в системном вызове
open
□
S_IFBLK
□
S_IFDIR
□
S_IFCHR
□
S_IFIFO
□
S_IFREG
□
S_IFLNK
Для других флагов режима файла включены следующие имена:
□
S_ISUID
□
S_ISGUID
Для масок, интерпретирующих флаги
st_mode
□
S_IFMT
□
S_IRWXU
□
S_IRWXG
□
S_IRWXO
Существует ряд макросов, помогающих определить типы файлов. Они просто сравнивают надлежащим образом установленные флаги режима файла с подходящим флагом, типа устройства. К ним относятся следующие:
□
S_ISBLK
□
S_ISCHR
□
S_ISDIR
□
S_ISFIFO
□
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
dup
fildes
dup2
Далее приведена синтаксическая запись для вызовов.
<b>#include <unistd.h></b>
<b>int dup(int fildes);</b>
<b>int dup2(int fildes, int fildes2);</b>
Эти вызовы могут оказаться полезными в случае нескольких процессов, взаимодействующих через именованные каналы. Более глубоко мы рассмотрим системные вызовы
dup
Стандартная библиотека ввода/вывода
Стандартная библиотека ввода/вывода (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