Pagina 1 di 1

pogrammazione linux (utmp)

Inviato: mer 6 ott 2004, 22:22
da null
Salve ragazzi. Ho provato a scrivere questo programma per visualizzare dal database utmp l´utente loggato:
<BR>
<BR>#include <stdio.h>
<BR>#include <utmp.h>
<BR>
<BR>int main(){
<BR> struct utmp *user;
<BR> struct utmp **u;
<BR> setutent();
<BR> getutent_r(user,u);
<BR> printf("%s\n",(*u)->ut_user);
<BR> endutent();
<BR> return 0;
<BR>}
<BR>
<BR>ma il programma mi da questo errore: Segmentation fault.
<BR>Qualcuno sa come mai non mi da il nome dell´utente loggato?
<BR>Aiuto<br>

pogrammazione linux (utmp)

Inviato: mer 6 ott 2004, 23:42
da useless
credo che dovrebbe essere:
<BR>
<BR>struct utmp user, *userp;
<BR>setutent();
<BR>getutent_r(&user,&userp);
<BR>printf("%s\n",user.ut_user);
<BR>endutent();
<BR>
<BR>se poi funziona ti spiego perché ;-).<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 0:23
da infinito
si deve ripetere l´aritmetica dei puntatori...<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 0:47
da useless
compilare compila, funzionare anche, ma in modo un po´ strano. io non so di preciso cosa venga loggato in utmp, quindi + di tanto utile non ti posso essere. l´output è:
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR>sukko@unholycathedral ~ $ ./a.out
<BR> -> from
<BR>~ -> reboot from
<BR>~ -> runlevel from
<BR> -> from
<BR>tty2 -> LOGIN from
<BR>tty3 -> LOGIN from
<BR>tty4 -> LOGIN from
<BR>tty5 -> LOGIN from
<BR>tty6 -> LOGIN from
<BR> -> from
<BR>:0 -> sukko from
<BR>pts/6 -> root from zero.sukkonet.it
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>
<BR>il codice che l´ha generato:
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR>#include <stdio.h>
<BR>#include <utmp.h>
<BR>
<BR>int main (void) {
<BR> struct utmp user, *userp;
<BR> setutent ();
<BR> while (!getutent_r (&user,&userp))
<BR> printf("%s -> %s from %s\n", user.ut_line, user.ut_user, user.ut_host);
<BR> endutent();
<BR>
<BR> return (0);
<BR>}
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR><BR><BR>[ Questo Messaggio è stato Modificato da: useless il 07-10-2004 00:48 ]<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 1:01
da useless
toh, questo dovrebbe fare esattamente al caso tuo:
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR>#include <stdio.h>
<BR>#include <utmp.h>
<BR>
<BR>int main (void) {
<BR> struct utmp user, *userp;
<BR>
<BR> setutent ();
<BR> while (!getutent_r (&user ,&userp))
<BR> if (user.ut_type == USER_PROCESS)
<BR> printf("%s -> %s from %s\n", user.ut_line, user.ut_user, user.ut_host[0] != ´\0´ ? user.ut_host : "localhost");
<BR> endutent();
<BR>
<BR> return (0);
<BR>}
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>
<BR>output:
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR>sukko@unholycathedral ~ $ ./a.out
<BR>:0 -> sukko from localhost
<BR>pts/6 -> root from zero.sukkonet.it
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>
<BR><!-- BBCode Start --><A HREF="http://www.danasoft.com" TARGET="_blank"><!-- BBCode Start --><IMG SRC="http://www.danasoft.com/sig-ita.jpg"><!-- BBCode End --></A><!-- BBCode End -->
<BR>Think free @ <!-- BBCode Start --><A HREF="http://www.nyft.org" TARGET="_blank">http://www.nyft.org</A><!-- BBCode End -->
<BR><BR><BR>[ Questo Messaggio è stato Modificato da: useless il 07-10-2004 01:01 ]<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 1:42
da null
grazie a tutti ragazzi. Funziona tutto alla perfezione
<BR>Volevo chidervi un´altra cosa, dove posso trovare del materiale sulla programmazione c di linux? ma qualcosa che spieghi veramnete bene queste cose.
<BR>Una domanda: come mai alla funzione getutent_r passate sia la struct utmp che un suo puntatore?
<BR>Ho letto che bisogna passare un puntatore e un puntatore a puntatore della struttura utmp: getutent_r(*user,**user)
<BR>Grazie ancora<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 1:48
da useless
la funzione getutent_r riempie una struct utmp e un puntatore a questa, quindi:
<BR>struct utmp user, *userp;
<BR>
<BR>x far sì che la funzione li possa modificare, devi passare puntatori a questi paramentri, usando l´operatore &:
<BR>getutent_r (&user ,&userp);
<BR>
<BR>il bello è che la cosa è inutilmente complicata, dato che dopo la funzione, se è uscita correttamente (ossia se ha ritornato 0), userp punterà sempre a user, e non serve a niente, dato che possiamo accedere direttamente a user.
<BR>
<BR>in ogni caso nota che quando chiamo getutent_r() non ho ancora inizializzato userp, ci pensa lei.<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 1:54
da null
sai per caso se esiste del materiale (siti web, tutorial, howto, libri, ebook) su questo argomento o comunque sulla programmazione in c di linux in genere?
<BR>Tu ad esempio dove hai imparato queste cose? hai qualche libro da consigliarmi?<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 2:11
da useless
be´, io il c ormai lo conosco da un po´... queste cose su utmp nella fattispecie le ho imparate da man utmp, man getutent e po´ di intuizione/esperienza ;-).
<BR>
<BR>l´unico libro che posso consigliarti è la bibbia: "il linguaggio C", 2° edizione, di brian kernighan e dennis ritchie, ma ovviamente non aspettarti che parli di utmp o di linux (anche se accenna a un*x) :-).
<BR>
<BR>buon lavoro!<br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 2:22
da null
Ti ringrazio del consiglio. Io per ora sto imparando dal sito lulli, penso che avrai sentito parlare di "Impare il C". comunque acquisterò anche il libro che mi hai consigliato tu.
<BR>Grazie ancora per l´aiuto e per il consilgio.
<BR>Ciao e a presto per il mio prossimo problema. <br>

pogrammazione linux (utmp)

Inviato: gio 7 ott 2004, 9:40
da infinito
per acquistarlo si trova come ebook pero´ in inglese<br>