Programme pour afficher tous les utilisateurs connectés via le programme C sur Ubuntu?

J’ai un programme appelé allloggedin.c , dont le but est d’afficher tous les utilisateurs connectés.

Chaque fois que j’essaye de l’exécuter sur un terminal (en utilisant gcc), cela me donne l’erreur “Défaut de segmentation (core dumped)”.

 #include #include #include int main(void) { struct utmp *n; char *a; int i; setutent(); n=getutent(); while(n!=NULL) { if(n->ut_type==7) { printf("%9s",n->ut_user); printf("%12s",n->ut_line); printf(" "); for(i=4;iut_host); printf(")"); printf("\n"); } n=getutent(); } } 

Quelqu’un peut-il m’expliquer s’il vous plaît ce programme?

La faille de segmentation que vous obtenez est due à la ligne:

 printf("%c",a[i]); 

Etant donné que vous n’avez pas initialisé le pointeur a , il peut pointer sur n’importe quelle adresse, ce qui peut entraîner une erreur de segmentation lorsque vous le déréférence.

Je ne suis pas sûr de ce que vous essayez d’imprimer dans la boucle for, je l’ai donc entièrement supprimée du code.

Ceci est une version nettoyée du code:

 #include #include #include int main(void) { struct utmp *n; setutent(); n=getutent(); while(n) { if(n->ut_type==USER_PROCESS) { printf("%9s%12s (%s)\n", n->ut_user, n->ut_line, n->ut_host); } n=getutent(); } return 0; } 

J’ai remplacé le numéro 7 par la macro appropriée USER_PROCESS . En outre, vous pouvez placer toutes les impressions en un seul appel printf .

Donc, le programme consiste essentiellement à obtenir la structure utmp pour chaque utilisateur et à l’imprimer de manière élégante.

Pour plus d’informations sur les fonctions utilisées et la structure utmp, consultez la référence utmp.h.