My-library.info
Все категории

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

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Майкл Джонсон - Разработка приложений в среде Linux. Второе издание. Жанр: Программное обеспечение издательство -, год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Разработка приложений в среде Linux. Второе издание
Издательство:
-
ISBN:
-
Год:
-
Дата добавления:
16 сентябрь 2019
Количество просмотров:
267
Читать онлайн
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

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

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

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

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

Функция dlclose() закрывает библиотеку.

void * dlclose(void * handle);

Функция dlclose() проверяет счетчик обращений, который увеличивался на единицу при каждом повторном вызове функции dlopen(), и если он равен нулю, она закрывает библиотеку. Этот счетчик обращений позволяет библиотекам применять функции dlopen() и dlclose() для произвольных объектов, не беспокоясь о том, что код, в котором производится вызов, уже открыл какие-либо из этих объектов.

27.1.1. Пример

В главе 8 был представлен пример использования обычной разделяемой библиотеки. Библиотеку libhello.so, которую нам удалось создать, можно загружать во время выполнения. Программа loadhello загружает libhello.so динамически и вызывает функцию print_hello, которая находится в библиотеке.

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

 1: /* loadhello.с */

 2:

 3: #include <dlfcn.h>

 4: #include <stdio.h>

 5: #include <stdlib.h >

 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: %sn",

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: %sn", 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 (или эквивалентной базы данных системы), определена в <pwd.h>.

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 (или в эквивалентных базах данных), определена в <grp.h>.

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(), чтобы закрыть файл.

В качестве примера далее приводится функция getpwuid(), записанная в отношении функции getpwent().

struct passwd * getpwuid(uid_t uid) {

 struct passwd * pw;

 while (pw = getpwent()) {

  if (!pw)


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

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


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

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

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.