Seppur semplice e scontato, riporto qui un pezzo di codice C che consente la scoperta dello username dell'utente che sta attualmente eseguendo l'applicazione e l'ottenimento del nome del primo gruppo a cui l'utente appartiene:
QString getUsername()
{
// get the data about the user using the getpwuid(2) system call
uid_t currentUID_t = getuid();
struct passwd *st_pwd = getpwuid( currentUID_t );
if( st_pwd != NULL )
// convert the string with the username into a "good" string
return QString::fromLatin1( st_pwd->pw_name );
else
// error !
return QString::number( currentUID_t );
}
QString getGroupname()
{
// get the data about the user using the getpwuid(2) system call
uid_t currentUID_t = getuid();
struct passwd *st_pwd = getpwuid( currentUID_t );
gid_t currentGID_t = getgid();
int ngroups = 1; // number of groups to be retrieved
gid_t *st_groups;
st_groups = (gid_t*) malloc( sizeof( gid_t ) * ngroups );
getgrouplist( st_pwd->pw_name,
currentGID_t,
st_groups,
&ngroups
);
if( st_groups != NULL ){
// convert the string with the username into a "good" string
group* groupID = getgrgid( st_groups[0] );
return QString::fromLatin1( groupID->gr_name );
}
else
// error !
return QString::number( currentGID_t );
}
Le due funzioni restituiscono entrambe un oggetto QString che può quindi essere utilizzato in una applicazione Qt/KDE. Nel caso particolare di KDE conviene invece utilizzare l'oggetto di libreria KUser che alla sua creazione effettua autonomamente l'aggancio allo username e alla lista dei gruppi:
KUser user;
user.loginName();
user.groupNames().at( 0 );
Nessun commento:
Posta un commento