Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Тут можно читать онлайн Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка приложений в среде Linux. Второе издание
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-8459-1143-8
  • Рейтинг:
    3.8/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание

Разработка приложений в среде Linux. Второе издание - описание и краткое содержание, автор Майкл Джонсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.

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

Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Ниже показан код loadhello.с.

1: /* loadhello.с */

2:

3: #include

4: #include

5: #include

6:

7: typedef void (*hello_function) (void);

8:

9: int main(void) {

10: void * library;

11: hello_function hello;

12: const char * error;

13:

14: library = dlopen("libhello.so", RTLD_LAZY);

15: if (library == NULL) {

16: fprintf (stderr, "He удается открыть libhello.so: %s\n",

17: dlerror());

18: exit(1);

19: }

20:

21: /* Хотя в данном случае мы знаем, что символ print_hello никогда

22: * не должен быть равен NULL, при поиске произвольных символов

23: * все происходит иначе. Поэтому вместо проверки результата функции dlsym()

24: * мы показываем пример проверки кода, возвращаемого функцией dlerror().

25: */

26: dlerror();

27: hello = dlsym(library, "print_hello");

28: error = dlerror();

29: if (error) {

30: fprintf(stderr, "He удается найти print_hello: %s\n", error);

31: exit(1);

32: }

33:

34: (*hello)();

35: dlclose(library);

36: return 0;

37: }

Глава 28

Идентификация и аутентификация пользователей

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

28.1. Преобразование идентификатора в имя

В результате выполнения команды ls -lдля вывода списка содержимого текущего каталога в третьей и четвертой колонках указываются идентификаторы (ID) пользователя и группы, к которой принадлежит каждый файл. Этот список выглядит примерно следующим образом.

drwxrwxr-x 5 christid christid 1024 Aug 15 02:30 christid

drwxr-xr-x 73 johnsonm root 4096 Jan 18 12:48 johnsonm

drwxr-xr-x 25 kim root 2048 Jan 12 21:13 kim

drwxrwsr-x 2 tytso tytso 1024 Jan 30 1996 tytso

Однако нигде в ядре не хранится строка christid. Программа lsосуществляет преобразование номеров, предоставленных ядром, в имена. Она получает номера из системного вызова stat()и производит поиск имен в двух системных базах данных. Обычно эти базы данных хранятся в файлах /etc/passwdи /etc/group, хотя в некоторых системах информация может располагаться где-нибудь в сети или в каком-то другом нестандартном месте. Программистам не нужно беспокоиться о том, где хранится эта информация; библиотека С предлагает обобщённые функции, которые считывают конфигурационные файлы для определения места хранения этой информации, производят выборку информации и возвращают ее незаметно для вас.

Чтобы продемонстрировать, что программа lsполучает из ядра, выполним команду ls -ln.

drwxrwxr-x 5 500 500 1024 Aug 15 02:30 christid

drwxr-xr-x 73 100 0 4096 Jan 18 12:48 johnsonm

drwxr-xr-x 25 101 0 2048 Jan 12 21:13 kim

drwxrwsr-x 2 1008 1008 1024 Jan 30 1996 tytso

Структура, представляющая элементы в /etc/passwd(или эквивалентной базы данных системы), определена в .

struct passwd {

char * pw_name; /* Имя пользователя */

char * pw_passwd; /* Пароль */

__uid_t pw_uid; /* Идентификатор пользователя */

__gid_t pw_gid; /* Идентификатор группы */

char * pw_gecos; /* Настоящее имя */

char * pw_dir; /* Домашний каталог */

char * pw_shell; /* Программа shell */

};

pw_nameпредставляет уникальное имя пользователя.

pw_passwdможет представлять зашифрованный пароль или нечто подобное, связанное с процедурой аутентификации. Зависит от системы.

pw_uidпредставляет номер (обычно уникальный), который используется в ядре для идентификации пользователя.

pw_gidпредставляет главную группу, которую ядро связывает с пользователем.

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

pw_dirпредставляет домашний каталог, связанный с пользователем. Обычные сеансы регистрации начинают работать с этим каталогом в качестве текущего каталога.

pw_shellпредставляет имя командной оболочки, которая запускается в случае успешной регистрации пользователя. Сюда обычно относятся /bin/bash, /bin/tcsh, bin/zshи так далее. Однако элементы, используемые для других целей, могут иметь другие оболочки, /bin/falseприменяется для элементов passwd, которые не используются для регистрации пользователей. Специализированные оболочки часто служат для целей, рассмотрение которых выходит за рамки настоящей книги.

Структура, которая представляет элементы в /etc/group(или в эквивалентных базах данных), определена в .

struct group {

char * gr_name; /* Имя группы */

char * gr_passwd; /* Пароль */

__gid_t gr_gid; /* Идентификатор группы */

char ** gr_mem; /* Список членов */

};

gr_nameпредставляет уникальное имя группы.

gr_passwdпредставляет пароль (обычно неиспользуемый). К нему применимы те же требования, что и к pw_passwd, только в еще большей степени.

gr_gidпредставляет номер (обычно неуникальный), который ядро использует для идентификации группы.

gr_memпредставляет список членов группы, разделенных запятыми. Это список имен пользователей, которые присваиваются этой группе на вторичной основе (см. главу 10).

Существуют две общих причины, по которым производится доступ к системным идентификационным базам данных: если ядро получает номер, а вам необходимо имя, или если какой-то пользователь или какая-то программа предоставляют вам имя, а вы должны сообщить ядру номер. Предусмотрены две функции поиска числовых идентификаторов, getpwuid()и getgrgid(), которые принимают целочисленный идентификатор и возвращают указатель на структуру, содержащую информацию из соответствующей системной базы данных. Точно так же имеются две функции, которые производят поиск имен, getpwnam()и getgrnam(), и они возвращают те же две структуры.

База данных пользователей База данных групп
Номер getpwuid() getgrgid()
Имя getpwnam() getgrnam()

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

Четыре вышеупомянутых функции являются, по сути, сокращениями, предлагающими наиболее часто используемые функции для доступа к системным базам данных. Функции низкого уровня, getpwent()и getgrent(), производят итерации по строкам в базе данных вместо поиска конкретной записи. Каждый раз при вызове одной из этих функций она будет считывать другой элемент из соответствующей системной базы данных, и возвращать его. После того как вы завершите чтение элементов, вызовите функцию endpwent()или endgrent(), чтобы закрыть файл.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Разработка приложений в среде Linux. Второе издание отзывы


Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x