pogrammazione linux (utmp)

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
null
Linux 1.x
Linux 1.x
Messaggi: 167
Iscritto il: ven 2 lug 2004, 0:00

pogrammazione linux (utmp)

Messaggio 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>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

pogrammazione linux (utmp)

Messaggio 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>

infinito
Linux 0.x
Linux 0.x
Messaggi: 70
Iscritto il: gio 24 giu 2004, 0:00

pogrammazione linux (utmp)

Messaggio da infinito »

si deve ripetere l´aritmetica dei puntatori...<br>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

pogrammazione linux (utmp)

Messaggio 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>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

pogrammazione linux (utmp)

Messaggio 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>

null
Linux 1.x
Linux 1.x
Messaggi: 167
Iscritto il: ven 2 lug 2004, 0:00

pogrammazione linux (utmp)

Messaggio 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>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

pogrammazione linux (utmp)

Messaggio 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>

null
Linux 1.x
Linux 1.x
Messaggi: 167
Iscritto il: ven 2 lug 2004, 0:00

pogrammazione linux (utmp)

Messaggio 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>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

pogrammazione linux (utmp)

Messaggio 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>

null
Linux 1.x
Linux 1.x
Messaggi: 167
Iscritto il: ven 2 lug 2004, 0:00

pogrammazione linux (utmp)

Messaggio 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>

infinito
Linux 0.x
Linux 0.x
Messaggi: 70
Iscritto il: gio 24 giu 2004, 0:00

pogrammazione linux (utmp)

Messaggio da infinito »

per acquistarlo si trova come ebook pero´ in inglese<br>

Rispondi