|
|
GruppenAnalog funktioniert das Auslesen der Gruppendatei. Auch hier gibt es eine Struktur, die nach der Datei benannt ist.
struct group { char *gr_name; /* Gruppenname */ char *gr_passwd; /* Gruppenpasswort */ gid_t gr_gid; /* Gruppen-id */ char **gr_mem; /* Gruppenmitglieder */ };
Die Gruppenmitglieder befinden sich im Strukturelement gr_mem. Das ist ein Array
von Strings. Das letzte Element des Arrays hat den Wert NULL.
Auch hier gibt es Funktionen um anhand der ID oder des Namens den
entsprechenden Eintrag zu finden. Sie heißen
#include <grp.h> #include <sys/types.h> struct group *getgrnam(const char *name); struct group *getgrgid(gid_t gid); Auch das Auslesen der group-Datei läuft auf diese Weise:
#include <grp.h> #include <sys/types.h> struct group *getgrent(void); void setgrent(void); void endgrent(void); Das folgende Beispiel liest die /etc/group aus und listet für jede Gruppe die Mitglieder auf.
[Auslesen der Gruppen und ihrer Mitglieder] #include <grp.h>
int main() { struct group *grp; char *member; int i;
setgrent(); while ( grp = getgrent()) { puts(grp->gr_name); i = 0; member = grp->gr_mem[i++]; while (member) { puts(member); member = grp->gr_mem[i++]; } puts("--------");
} endgrent(); }
Ein Prozess kann mit der Funktion
[mygroups] #include <grp.h> #include <limits.h> #include <sys/types.h>
int main() { gid_t grplist[NGROUPS_MAX]; struct group *grp; char *member; int i, anzGruppen;
anzGruppen = getgroups(NGROUPS_MAX, grplist); for (i=0; i<anzGruppen; i++) { grp = getgrgid(grplist[i]); puts(grp->gr_name); } }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|