ОБЗОР
#include <aliases.h>void setaliasent(void);
void endaliasent(void);
struct aliasent *getaliasent(void);
int getaliasent_r(struct aliasent *result,
char *buffer, size_t buflen, struct aliasent **res);
struct aliasent *getaliasbyname(const char *name);
int getaliasbyname_r(const char *name, struct aliasent
*result,
char *buffer, size_t buflen, struct aliasent **res);
ОПИСАНИЕ
Одной из баз данных, доступных в диспетчере службы имён (NSS), является база данных псевдонимов (aliases), в которой содержатся почтовые псевдонимы (для вывода поддерживаемых баз данных, запустите getent --help.) Для доступа к базе данных псевдонимов существуют шесть функций.Функция getaliasent() возвращает указатель на структуру, содержащую информацию о группе из базы данных псевдонимов. Во время первого вызова функция возвращает первую запись; в дальнейшем она возвращает все последующие записи.
Функция setaliasent() возвращает файловый указатель в начало базы данных псевдонимов.
Функция endaliasent() закрывает базу данных псевдонимов.
Функция getaliasent_r() является реентерабельной версией предыдущей функции. Запрашиваемая структура сохраняется через первый аргумент, но программисту также требуется передать и другие аргументы. При нехватке места функция завершается с ошибкой.
Функция getaliasbyname() берёт имя из аргумента и ищет его в базе данных псевдонимов. Найденный элемент возвращается в виде указателя на struct aliasent.
Функция getaliasbyname_r() является реентерабельной версией предыдущей функции. Запрашиваемая структура сохраняется через второй аргумент, но программисту также требуется передать и другие аргументы. При нехватке места функция завершается с ошибкой.
Структура struct aliasent определена в <aliases.h>:
struct aliasent { char *alias_name; /* имя псевдонима */ size_t alias_members_len; char **alias_members; /* список имён псевдонима */ int alias_local; };
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При ошибке функции getaliasent_r() и getaliasbyname_r() возвращают ненулевое значение.ФАЙЛЫ
По умолчанию файлом базы данных псевдонимов является /etc/aliases. Это можно изменить в файле /etc/nsswitch.conf.АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).Интерфейс | Атрибут | Значение |
setaliasent(), endaliasent(), getaliasent_r(), getaliasbyname_r() | безвредность в нитях | безвредно (MT-Safe locale) |
getaliasent(), getaliasbyname() | безвредность в нитях | небезопасно (MT-Unsafe) |
СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции есть только в glibc. В системе NeXT есть подобные функции:#include <aliasdb.h> void alias_setent(void); void alias_endent(void); alias_ent *alias_getent(void); alias_ent *alias_getbyname(char *name);
ПРИМЕР
Следующий пример компилируется командой gcc example.c -o example. Он выводит все имена из баз данных псевдонимов.
#include <aliases.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> int main(void) { struct aliasent *al; setaliasent(); for (;;) { al = getaliasent(); if (al == NULL) break; printf("Имя: %s\n", al->alias_name); } if (errno) { perror("чтение псевдонимов"); exit(EXIT_FAILURE); } endaliasent(); exit(EXIT_SUCCESS); }