struct passwd
#include <pwd.h> struct passwd *getpwuid (uid_t uid); #include <pwd.h> struct passwd *getpwnam (const char *name); |
Листинг 3.1. Описание функций getpwuid() и getpwnam(). |
Закрыть окно |
#include <unistd.h> #include <sys/types.h> #include <pwd.h> #include <stdio.h> /* Печать элемента базы данных пользователей */ static void print_pwent (const struct passwd *pw) { printf ("Имя пользователя: %s\n", pw->pw_name); printf ("Идентификатор пользователя: %d\n", pw->pw_uid); printf ("Идентификатор группы: %d\n", pw->pw_gid); printf ("Начальный каталог: %s\n", pw->pw_dir); printf ("Начальная программа: %s\n", pw->pw_shell); } int main (void) { char *lgnm; /* Имя текущего пользователя */ struct passwd *pw; /* Данные о текущем пользователе */ /* Поиск и печать информации о текущем пользователе */ if ((lgnm = getlogin ()) == NULL || (pw = getpwnam (lgnm)) == NULL) { fprintf (stderr, "\nНе удалось найти информацию о текущем пользователе\n"); return 1; } printf ("\nИнформация о текущем пользователе\n"); print_pwent (pw); /* То же для пользователя root */ if ((pw = getpwuid ((uid_t) 0)) == NULL) { fprintf (stderr, "\nНе удалось найти информацию о пользователе root\n"); return 1; } printf ("\nИнформация о пользователе root\n"); print_pwent (pw); return 0; } |
Листинг 3.2. Пример работы с базой данных пользователей. |
Закрыть окно |
Информация о текущем пользователе Имя пользователя: galat Идентификатор пользователя: 108 Идентификатор группы: 3 Начальный каталог: /home/galat Начальная программа: /bin/sh Информация о пользователе root Имя пользователя: root Идентификатор пользователя: 0 Идентификатор группы: 0 Начальный каталог: /root Начальная программа: /bin/bash |
Листинг 3.3. Возможный результат работы с базой данных пользователей. |
Закрыть окно |
#include <grp.h> struct group *getgrgid (gid_t gid); #include <grp.h> struct group *getgrnam (const char *name); |
Листинг 3.4. Описание функций getgrgid() и getgrnam(). |
Закрыть окно |
#include <sys/types.h> #include <grp.h> #include <stdio.h> /* Печать списка пользователей, включенных в группу с заданным идентификатором */ static int print_gr_mem (const gid_t gid) { struct group *grp; /* Данные о группе */ char **c_gr_mem; /* Текущий указатель на имя члена группы */ char *c_gr_mem_name; /* Текущее имя члена группы */ if ((grp = getgrgid (gid)) == NULL) { fprintf (stderr, "\nНе удалось найти информацию о группе с идентификатором %d\n", gid); return 1; } printf ("\nПользователи, включенные в группу с идентификатором %d:\n", gid); c_gr_mem = grp->gr_mem; while ((c_gr_mem_name = *c_gr_mem++) != NULL) { printf(" %-8.8s", c_gr_mem_name); } printf ("\n"); return 0; } int main (void) { return print_gr_mem (1); } |
Листинг 3.5. Пример работы с базой данных групп. |
Закрыть окно |
Пользователи, включенные в группу с идентификатором 1: root bin daemon |
Листинг 3.6. Возможный результат работы с базой данных групп. |
Закрыть окно |
who | while read a b c do write $a $b << ! $1 ! done |
Листинг 3.7. Пример использования утилит who и write. |
Закрыть окно |
address=... . . . mailx $address << ! . . . текст письма . . . ! |
Листинг 3.8. Пример использования вставки для формирования письма. |
Закрыть окно |