Нейл Мэтью - Основы программирования в Linux
- Название:Основы программирования в Linux
- Автор:
- Жанр:
- Издательство:«БХВ-Петербург»
- Год:2009
- Город:Санкт-Петербург
- ISBN:978-5-9775-0289-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Нейл Мэтью - Основы программирования в Linux краткое содержание
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.
Для начинающих Linux-программистов
Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Ведение файлов и каталогов
Стандартные библиотеки и системные вызовы обеспечивают полный контроль над созданием и ведением файлов и каталогов.
chmod
С помощью системного вызова chmod
вы можете изменять права доступа к файлу или каталогу. Он лежит в основе программы командной оболочки chmod
.
Далее приведена синтаксическая запись вызова:
#include
int chmod(const char *path, mode_t mode);
Права доступа к файлу, заданному параметром path
, изменяются в соответствии со значением параметра mode
. Режим файла mode
задается как в системном вызове open с помощью поразрядной операции OR
, формирующей требуемые права доступа. Если программе не даны соответствующие полномочия, только владелец файла и суперпользователь могут изменять права доступа к файлу.
chown
Суперпользователь может изменить владельца файла с помощью системного вызова chown.
#include #include
int chown(const char *path, uid_t owner, gid_t group);
В вызове применяются числовые значения идентификаторов (ID) нового пользователя и группы (взятые из системных вызовов getuid
и getgid
) и системная величина, используемая для ограничения пользователей, имеющих разрешение изменять владельца файла. Владелец и группа файла изменяются, если заданы соответствующие полномочия.
Стандарт POSIX в действительности допускает существование систем, в которых несуперпользователи могут изменять права владения файлом. Все "правильные" с точки зрения POSIX системы не допускают этого, но строго говоря, это расширение стандарта (в FIPS 151-2). Все виды систем, с которыми мы имеем дело в этой книге, подчиняются спецификации XSI (X/Open System Interface) и соблюдают на деле правила владения.
unlink, link и symlink
С помощью вызова unlink
вы можете удалить файл.
Системный вызов unlink
удаляет запись о файле в каталоге и уменьшает на единицу счетчик ссылок на файл. Он возвращает 0, если удаление ссылки прошло успешно, и -1 в случае ошибки. Для выполнения вызова у вас должны быть права на запись и выполнение в каталоге, хранящем ссылку на файл.
#include
int unlink(const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
Если счетчик становится равен нулю и файл не открыт ни в одном процессе, он удаляется. В действительности элемент каталога всегда удаляется немедленно, а место, занятое содержимым файла, не очищается до тех пор, пока последний процесс (если таковой существует) не закроет файл. Этот вызов использует программа rm
. Дополнительные ссылки, предоставляющие альтернативные имена файла, обычно создаются программой ln
. Вы можете программно создать новые ссылки на файл с помощью системного вызова link
.
Создание файла с помощью вызова open
и последующее обращение к unlink
для этого файла — трюк, применяемый некоторыми программистами для создания временных или транзитных файлов. Эти файлы доступны программе, только пока они открыты; и будут удалены автоматически, когда программа завершится, и файлы будут закрыты.
Системный вызов link
создает новую ссылку на существующий файл path1
. Новый элемент каталога задается в path2
. Символические ссылки можно создавать аналогичным образом с помощью системного вызова symlink
. Имейте в виду, что символические ссылки на файл не увеличивают значение счетчика ссылок и таким образом, в отличие от обычных (жестких) ссылок, не мешают удалению файла.
mkdir и rmdir
Вы можете создавать и удалять каталоги, применяя системные вызовы mkdir
и rmdir
.
#include #include
int mkdir(const char *path, mode_t mode);
Системный вызов mkdir
используется для создания каталогов и эквивалентен программе mkdir
. Вызов mkdir
формирует новый каталог с именем, указанным в параметре path
. Права доступа к каталогу передаются в параметре mode и задаются как опция о O_CREAT
в системном вызове open и также зависят от переменной umask
.
#include
int rmdir(const char *path);
Системный вызов rmdir
удаляет каталоги, но только если они пустые. Программа rmdir
использует этот системный вызов для выполнения аналогичной работы.
chdir и getcwd
Программа может перемещаться по каталогам во многом так же, как пользователь перемещается по файловой системе. Как вы применяете в командной оболочке команду cd
для смены каталога, так и программа может использовать системный вызов chdir
.
#include
int chdir(const char *path);
Программа может определить свой текущий рабочий каталог, вызвав функцию getcwd
.
#include
char *getcwd(char *buf, size_t size);
Функция getcwd
записывает имя текущего каталога в заданный буфер buf
. Она возвращает NULL
, если имя каталога превысит размер буфера (ошибка ERANGE
), заданный в параметре size
. В случае успешного завершения она возвращает buf
.
Функция getcwd
может также вернуть значение NULL
, если во время выполнения программы каталог удален ( EINVAL
) или изменились его права доступа ( EACCESS
).
Просмотр каталогов
Широко распространенная проблема систем Linux — просмотр каталогов, т.е. определение файлов, размещенных в конкретном каталоге. В программах командной оболочки она решается легко — просто скомандуйте оболочке выполнить подстановку в выражении с метасимволами. В прошлом в разных вариантах UNIX был разрешен программный доступ к низкоуровневой структуре файловой системы. Вы все еще можете открывать каталог как обычный файл и непосредственно считывать элементы каталога, но разные структуры файловых систем и реализации сделали такой подход непереносимым с машины на машину. Был разработан стандартный комплект библиотечных функций, существенно упрощающий просмотр каталогов.
Функции работы с каталогами объявлены в заголовочном файле dirent.h. В них используется структура DIR
как основа обработки каталогов. Указатель на эту структуру, называемый потоком каталога ( DIR*
), действует во многом так же, как действует поток файла ( FILE*
) при работе с обычным файлом. Элементы каталога возвращаются в структурах dirent, также объявленных в файле dirent.h, поскольку никому не следует изменять поля непосредственно в структуре DIR
.
Мы рассмотрим следующие функции:
□ opendir
, closedir
;
□ readdir
;
Интервал:
Закладка: