V unixu je několik základních souborů nutných pro běh systému: soubor hesel /etc/passwd a soubor skupin /etc/group. Tyto soubory jsou často používány ostatními programy. Např. soubor hesel je použit při každém přihlášení uživatele nebo při spuštění příkazu ls -l.
POSIX.1 definuje soubor nazývaný databáze uživatelů, který obsahuje následující informace -- viz tab. 11
| Popis | struct passwd | POSIX.1 |
|---|---|---|
| uživatelské jméno | char *pw_name | |
| šifrované heslo | char *pw_passwd | |
| user ID | uid_t pw_uid | |
| group ID | gid_t pw_gid | |
| komentář | char *pw_gecos | |
| počáteční pracovní adresář | char *pw_dir | |
| počáteční shell (či jakýkoli program) | char *pw_shell |
Historicky jsou tyto informace uloženy v ASCII souboru /etc/passwd. Příklad tohoto souboru můžete nalézt v kap. "Přihlášení do systému".
POSIX.1 definuje pouze dvě operace nad těmito záznamy. První funkce vyhledá položku podle UID a druhá podle uživatelského jména.
| #include <sys/types.h> #include <pwd.h> |
| struct passwd *getpwuid (uid_t uid); struct passwd *getpwnam (const char name); |
| Obě vrací: ukazatel když OK, NULL při chybě |
Tyto funkce však vrátí jen jeden záznam. Pro procházení celého souboru slouží následující funkce.
| #include <sys/types.h> #include <pwd.h> |
| void setpwent(void); |
| void endpwent(void); |
| struct passwd *getpwent (void); |
| Vrací: ukazatel když OK, NULL při chybě |
getpwent vrátí další položku v pořadí a ostatní funkce slouží jen k otevření a uzavření souboru. Vše je nejlépe patrné na příkladu.
Příklad:
#include <sys/types.h>
#include <pwd.h>
#include <stddef.h>
#include <string.h>
struct passwd *
getpwnam(const char *name)
{
struct passwd *ptr;
setpwent();
while ( (ptr = getpwent()) != NULL) {
if (strcmp(name, ptr->pw_name) == 0)
break; /* found a match */
}
endpwent();
return(ptr); /* ptr is NULL if no match found */
}
Informace o skupinách lze nalézt v souboru se skupinami, který POSIX nazývá databáze skupin. Tento soubor obsahuje položky vypsané v tabulce 12.
| Popis | struct group | POSIX.1 |
|---|---|---|
| jméno skupiny | char *gr_name | |
| šifrované heslo | char *gr_passwd | |
| group ID | gid_t gr_gid | |
| pole ukazatelů na jména uživatelů | char **gr_mem |
Pole uživatelů je ukončeno NULL. V tomto souboru opět můžeme vyhledávat pomocí dvojice funkcí.
| #include <sys/types.h> #include <grp.h> | ||
struct group *getgrgid (gid_t gid);| struct group *getgrnam (const char name); |
Obě vrací: ukazatel když OK, NULL při chybě
| |
Tyto funkce však vrátí jen jeden záznam. Pro procházení celého souboru slouží následující funkce.
| #include <sys/types.h> #include <grp.h> |
| void setgrent(void); |
| void endgrent(void); |
| struct group *getgrent (void); |
| Vrací: ukazatel když OK, NULL při chybě |
POSIX.1 poskytuje funkce pro identifikaci hostitelského počítače a operačního systému:
| #include <sys/utsname.h> |
| int uname (struct utsname *name); |
| Vrací: nezáporné číslo když OK, -1 při chybě |
Funkce vyplní danou strukturu. Ta má následující tvar:
struct utsname {
char sysname[9]; /* název operačního systému */
char nodename[9]; /* název uzlu */
char release[9]; /* release operačního systému */
char version[9]; /* verze release */
char machine[9]; /* název typu hardware */
};
Ladislav Dobias