Нейл Мэтью - Основы программирования в Linux
- Название:Основы программирования в Linux
- Автор:
- Жанр:
- Издательство:«БХВ-Петербург»
- Год:2009
- Город:Санкт-Петербург
- ISBN:978-5-9775-0289-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Нейл Мэтью - Основы программирования в Linux краткое содержание
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.
Для начинающих Linux-программистов
Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
#include
#include
off_t lseek(int fildes, off_t offset, int whence);
Параметр offset
применяется для указания позиции, а параметр whence
определяет способ применения offset
и может принимать следующие значения:
□ SEEK_SET
— offset
задает абсолютную позицию;
□ SEEK_CUR
— offset
задается относительно текущей позиции;
□ SEEK_END
— offset
задается относительно конца файла.
Вызов lseek
возвращает величину параметра offset
в байтах, измеряемую от начала файла, для которого установлен указатель, или -1 в случае неудачного завершения. Тип данных off_t
, применяемый для параметра offset
в операциях поиска, — зависящий от реализации тип integer
(целое), определенный в файле sys/types.h.
Системный вызов fstat
возвращает информацию о состоянии файла, ассоциированного с открытым дескриптором файла. Эта информация записывается в структуру buf
, адрес которой передается как параметр.
Далее приведена синтаксическая запись вызовов.
#include
#include
#include
int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
Учтите, что включение файла sys/types.h не обязательное, но мы рекомендуем включать его при использовании системных вызовов, поскольку некоторые из их определений применяют для стандартных типов псевдонимы, которые могут измениться когда-нибудь.
Родственные функции stat
и lstat
возвращают информацию о состоянии названного файла. Они возвращают те же результаты за исключением того, что файл является символической ссылкой. Вызов lstat
возвращает данные о самой ссылке, а вызов stat
— о файле, на который ссылка указывает.
Элементы вызываемой структуры 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
, также есть ряд ассоциированных макросов в заголовочном файле 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
позволяют дублировать дескриптор файла, предоставляя два или несколько разных дескрипторов, обращающихся к одному и тому же файлу. Эта возможность может применяться для чтения и записи в разные части файла. Системный вызов dup
дублирует файловый дескриптор fildes
и возвращает новый дескриптор. Системный вызов dup2
умело копирует один дескриптор файла в другой, задавая дескриптор, применяемый для копии.
Далее приведена синтаксическая запись для вызовов.
#include
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.
Читать дальшеИнтервал:
Закладка: