Разработка приложений в среде Linux - [200]
>dlsym()
. Не сохраняйте результат в переменной >void *
; вам придется выполнять приведение типов каждый раз во время ее использования.Функция >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
> 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
представляет имя командной оболочки, которая запускается в случае успешной регистрации пользователя. Сюда обычно относятся
Одно из немногих изданий на русском языке, которое посвящено старейшей глобальной компьютерной сети "Fidonet". Сатирический справочник о жизни и смерти самого древнего сетевого сообщества, которое до сих пор существует среди нас.
В пособии излагаются основные тенденции развития организационного обеспечения безопасности информационных систем, а также подходы к анализу информационной инфраструктуры организационных систем и решению задач обеспечения безопасности компьютерных систем.Для студентов по направлению подготовки 230400 – Информационные системы и технологии (квалификация «бакалавр»).
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.Для программистов-пользователей операционной системы UNIX.
Книга адресована программистам, работающим в самых разнообразных ОС UNIX. Авторы предлагают шире взглянуть на возможности параллельной организации вычислительного процесса в традиционном программировании. Особый акцент делается на потоках (threads), а именно на тех возможностях и сложностях, которые были привнесены в технику параллельных вычислений этой относительно новой парадигмой программирования. На примерах реальных кодов показываются приемы и преимущества параллельной организации вычислительного процесса.
Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.
Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.