pogrammazione linux (utmp)
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.
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.
pogrammazione linux (utmp)
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>
<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>
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
pogrammazione linux (utmp)
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>
<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é
pogrammazione linux (utmp)
si deve ripetere l´aritmetica dei puntatori...<br>
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
pogrammazione linux (utmp)
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>
<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>
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
pogrammazione linux (utmp)
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>
<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)
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>
<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>
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
pogrammazione linux (utmp)
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>
<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)
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>
<BR>Tu ad esempio dove hai imparato queste cose? hai qualche libro da consigliarmi?<br>
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
pogrammazione linux (utmp)
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>
<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)
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>
<BR>Grazie ancora per l´aiuto e per il consilgio.
<BR>Ciao e a presto per il mio prossimo problema. <br>
pogrammazione linux (utmp)
per acquistarlo si trova come ebook pero´ in inglese<br>

