Informazioni utente con C++ su Linux

Mattepuffo's logo
Informazioni utente con C++ su Linux

Informazioni utente con C++ su Linux

Questo articolo si riferisce a Linux e forse, ma non ho ancora provato, anche ai Mac visto che sono molto simili.

Non funzionerebbe invece su Windows.

Quello che vogliamo fare è recuperare informazioni sull'utente usando un piccolo programmino scritto in C++.

Avremo bisogno di alcune cose:

  • struct passwd -> una struttura dati che contiente le informazioni dell'utente
  • un dato di tipo uid_t -> corrisponde all'ID dell'utente nel sistema
  • getpwuid(ID)
  • geteuid() -> ritortna l'ID reale dell'utente

Per questi ulitmi guardate le pagine man per vedere bene a cosa servono e quali librerire richiedono.

A questo punto vediamo come strutturare il tutto.

Senza scomodare classi e oggetti mettiamo tutto nel main:

#include <cstdlib>
#include <stdio.h>

#include <pwd.h>
#include <unistd.h>


using namespace std;
int main(int argc, char** argv) {
  struct passwd *p;
  uid_t uid = geteuid();
  if ((p = getpwuid(uid)) != NULL) {
   printf("Name  : %s\n", p->pw_name);
   printf("Uid   : %d\n", (int) p->pw_uid);
   printf("Gid   : %d\n", (int) p->pw_gid);
   printf("Home  : %s\n", p->pw_dir);
   printf("Shell : %s\n", p->pw_shell);
  }
  return 0;
}

Con geteuid() prendiamo l'id dell'utente con il quale lanciamo il programma; questo ID lo passiamo poi a getpwuid() per controllare se esiste davvero.

Se volessimo vedere le info di altri utenti dovremmo metterlo a mano e dovete modificare un pò la logica (mettendolo ad esempio come parametro in fase di esecuzione).

Se l'ID esiste vengono stampate le varie informazioni.

Qui ho preso inconsiderazione:

  • il nome utente
  • uid -> id utente
  • gid -> id gruppo
  • home directory
  • shell attiva

Ad esempio:

$ ./prove
Name  : mf
Uid   : 1000
Gid   : 100
Home  : /home/mf
Shell : /bin/bash

Sul mio sistema Archlinux a 64bit.

Se guardate al link della struct passwd vedrete che ci sono anche altre info.

Direci che mi manca solo la prova sul Mac, ma sono fiducioso!


Condividi

Commentami!