• Non ci sono risultati.

Funzioni importanti

Nel documento Linguaggio C: (pagine 166-170)

Puntatore a carattere per il nome dell’host sul quale l’utente ha effet- tuato il login.

7. ut exit

Struttura di tipo exit status del cui scopo `e gi`a stato detto. 8. ut session

Long int necessario all’identificazione della sessione. 9. ut tv

Struttura di tipo timaval per informazioni sul l’ultimo reboot etc.. (da verificare)

10. ut addr v6[4]

Array di interi a 32 bit (int32) per la memorizzazione dell’indirizzo di un host remoto.

17.11

Funzioni importanti

17.11.1

La funzione setutent

Function: void setutent (void)

Come abbiamo detto, il file umtp non `e un semplice file di testo. Tuttavia, prima di poterlo scandire o modificare in qualche modo dobbiamo aprirlo. Tale apertura avviene proprio per mezzo di questa funzione. Una volta effet- tuata la chiamata il file potr`a essere letto o modificato6. Nel caso in cui il file

fosse gi`a aperto un’ulteriore chiamata ci riporta all’inizio del file stesso.

17.11.2

La funzione endutent

Function: void endutent (void)

Come potete immaginare questa funzione chiude il file umtp.

17.11.3

La funzione getutent

Function: struct utmp * getutent (void)

Questa funzione legge le informazioni relative al prossimo utente loggato nel sistema presente nel database. Com’`e evidente, se ci troviamo all’inizio del file l’utente letto sar`a naturalmente il primo registrato nel database stes- so. I dati vengono memorizzati in memoria allocata staticamente alla quale `e possibile accedere. Tale memoria verr`a sovrascritta da ulteriori chiamate quindi, se intendiamo memorizzare stabilmente i dati, occorrer`a copiarla in un’apposita struttura in precedenza allocata. Nel caso in qui non vi sia alcun utente inserito nel database allora viene ritornato un null pointer.

17.11.4

La funzione getutent r

Function: int getutent r (struct utmp *BUFFER, struct utmp **RESULT)

Questa funzione svolge fondamentalmente la stessa funzione della precedente, l’unica differenza `e che le informazioni, anzich`e essere memorizzate in memo- ria allocata staticamente, vengono inserite all’interno della struttura puntata da BUFFER, viene inoltre restituito un puntatore(RESULT) al puntatore alla struttura contenente le informazioni. In caso di successo il valore ritornato `e 0, -1 altrimenti.

17.11.5

La funzione getutid

Function: struct utmp * getutid (const struct utmp *ID)

Questa funzione ha un comportamento piuttosto particolare che vale la pe- na analizzare: puntualizziamo innanzitutto che si tratta di una funzione di ricerca ossia vengono scandite le entry del database alla ricerca della prima occorrenza determinata dalla seguenti regole:

• Se il campo ut type della struttura ID `e uguale ad uno dei seguen- ti valori: RUN LVL, BOOT TIME, OLD TIME, NEW TIME allora ogni struttura avente lo stesso valore nel campo ut type soddisfa la regola. • Se il campo ut type della struttura ID `e uguale ad uno dei seguenti val-

17.11 Funzioni importanti Imparare il C pag. 139 allora ogni struttura che ha uno dei suddetti valori nel campo ut type e un valore del campo ut id identico a quello dello stesso campo nella struttura ID, soddisfa la regola.

Qualora il campo ut id di ID o della entry nel database siano nulle, il confronto viene effettuato sul campo ut line.

In caso di successo della ricerca, l’entry trovata viene memorizzata in ap- posita memoria allocata staticamente (con tutto ci`o che questo comporta) e viene restituito un puntatore proprio a tale indirizzo di memoria. In ca- so di fallimento viene ritornato un puntatore nullo. Poich`e, inoltre, questa funzione tende a fare un cashing di quanto trovato, qualora si stiano cer- cano occorrenze multiple, `e consigliabile effettuare la pulizia della memoria allocata staticamente per ogni occorrenza.

17.11.6

La funzione getutid r

Function: getutid r (const struct utmp *ID, struct utmp *BUFFER, struct utmp **RESULT)

Analogamente a quanto riportato in precedenza anche questa funzione svolge lo stesso compito della precedente, valgono inoltre le stesse consider- azioni fatte per getutent r. Per ulteriori informazioni o chiarimenti invitiamo il lettore a consultare la relativa pagina di manuale.

17.11.7

La funzione getutline

Function: struct utmp * getutline (const struct utmp *LINE)

Questa funzione scandisce il file, dal punto in cui ci si trova a causa dell’u- tilizzo precedente di funzioni di ricerca, alla ricerca di entry per cui il valore di ut type risulti essere LOGIN PROCESS o USER PROCESS e per le quali il valore di ut line risulti uguale a quello della struttura il cui puntatore `e passato come parametro. In caso di successo viene restituito un puntatore all’entry in memoria allocata staticamente. In caso di fallimento viene ritor- nato un null pointer. Anche in questo caso `e consigliabile effettuare la pulizia della memoria allocata staticamente per ogni occorrenza.

17.11.8

La funzione getutline r

Function: int getutline r (const struct utmp *LINE, struct utmp *BUFFER, struct utmp **RESULT)

Beh, ormai dovreste aver compreso il meccanismo quindi, per ulteriori chiari- menti consultate la pagina di manuale della funzione.

17.11.9

La funzione pututline

struct utmp * pututline (const struct utmp *UTMP)

Le funzioni precedenti non modificavano il database, esse servivano solamente ad acquisire informazioni (erano funzioni GET). La funzione corrente invece `e utilizzata per inserire l’entry puntata dal parametro. L’entry viene inserita nella sua corretta posizione, se non trovata viene inserita alla fine del file. In caso di successo viene ritornato un puntatore ad una copia dell’entry, altrimenti un null pointer. Naturalmente una chiamata del genere pu`o essere effettuata solo da un processo privilegiato, per questo motivo la variabile errno, in caso di fallimento, pu`o assumere il valore EPERM ad indicare che non si hanno i permessi necessari alla modifica.

17.11.10

La funzione utmpname

Function: int utmpname (const char *FILE)

Se le informazioni relative agli utenti loggati sul sistema di trovano al- l’interno del file utmp le informazioni relative ai login precedenti vengono memorizzate all’interno di files simili, come ad esempio wtmp. Questa fun- zione cambia dunque il nome del database che deve essere esaminato tramite le funzioni viste in precedenza.

Sono inoltre definite due macro: PATH UTMP per indicare fondamen- talmente il file utmp e PATH WTMP per indicare il file wtmp. Tali macro possono tranquillamente essere passate come argomento della funzione.

Qualora si aprisse un nuovo file di database quello precedentemente aperto verr`a automaticamente chiuso.

Nel documento Linguaggio C: (pagine 166-170)

Documenti correlati