However, volevo salvare le impostazioni di un programma in una directory nascosta della home dell'(ignaro)utente, come faccio a ricavarne il nome per comporre la directory home? Funziona anche la tilde? Perchè volevo ad esempio sul GtkFileChooser delle gtk impostare la home come directory mostrata per prima, e la tilde non gli va, gli serve il percorso completo...
ricavare l'utente... in c, ovvio!!!
Moderatore: Staff
Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
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) Rispettare le idee altrui.
2) Evitare le offese dirette.
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.
-
sir_alex
- Linux 3.x

- Messaggi: 735
- Iscritto il: lun 21 mar 2005, 0:00
- Kernel: 2.6.35-22
- Desktop: KDE4
- Distribuzione: Ubuntu
- Località: Milano - Corbola (RO)
- Contatta:
ricavare l'utente... in c, ovvio!!!
Ennesima questione in c... ammetto di aver preso questo forum un po' come forum di developers... d'altronde noi linuxiani conosciamo un po' tutti il c...
However, volevo salvare le impostazioni di un programma in una directory nascosta della home dell'(ignaro)utente, come faccio a ricavarne il nome per comporre la directory home? Funziona anche la tilde? Perchè volevo ad esempio sul GtkFileChooser delle gtk impostare la home come directory mostrata per prima, e la tilde non gli va, gli serve il percorso completo...
However, volevo salvare le impostazioni di un programma in una directory nascosta della home dell'(ignaro)utente, come faccio a ricavarne il nome per comporre la directory home? Funziona anche la tilde? Perchè volevo ad esempio sul GtkFileChooser delle gtk impostare la home come directory mostrata per prima, e la tilde non gli va, gli serve il percorso completo...
- gallows
- Staff

- Messaggi: 3471
- Iscritto il: lun 20 set 2004, 0:00
- Desktop: cwm
- Distribuzione: OpenBSD
- Località: ~/
- Contatta:
Codice: Seleziona tutto
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
non è correttissimo cercare il nome utente e assumere che la home sia /home/nomeutente, dato che le home potrebbero benissimo stare da un'altra parte (ad esempio mi pare che in bsd stiano in /usr/local/home). come diceve zzt la cosa migliore dovrebbe essere leggere la variabile d'ambiente $HOME oppure ancora meglio leggere la home dal db degli utenti di sistema (conosciuto anche come /etc/passwd
) mediante le system call preposte a tale scopo (come parlo bene quando voglio!): man getpwent.
@gallows: quel che hai scritto tu scrive su stdout il nome utente, ma di fatto dal tuo programma non puoi catturarlo
. dovresti usare popen, ma ovviamente tra tutti i metodi proposti è il peggiore
.
@gallows: quel che hai scritto tu scrive su stdout il nome utente, ma di fatto dal tuo programma non puoi catturarlo
- gallows
- Staff

- Messaggi: 3471
- Iscritto il: lun 20 set 2004, 0:00
- Desktop: cwm
- Distribuzione: OpenBSD
- Località: ~/
- Contatta:
verissimo
questa va meglio, no?
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
int main() {
char *homedir = getenv("HOME");
puts(homedir);
return 0;
}- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
yeah, oppure:
se ho capito bene NON ci vuole nessuna free. inoltre tutto ciò non è thread-safe, eventualmente bisogna usare getpwnam_r, ma la cosa si complica un po'.
Codice: Seleziona tutto
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
struct passwd *pwent;
pwent = getpwuid (getuid ());
printf ("%s", pwent -> pw_dir);-
sir_alex
- Linux 3.x

- Messaggi: 735
- Iscritto il: lun 21 mar 2005, 0:00
- Kernel: 2.6.35-22
- Desktop: KDE4
- Distribuzione: Ubuntu
- Località: Milano - Corbola (RO)
- Contatta:
In conclusione (useless's been useful
):
king@casa:~$ cd workspace
king@casa:~/workspace$ cat home.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <pwd.h>
int main(int argc, char *argv[])
{
struct passwd *pass;
char *user=getenv("LOGNAME");
if(user==NULL)
return 1;
do
{
pass=getpwent();
} while(strcmp(pass->pw_name, user)!=0);
fprintf(stdout, "%s %s\n", pass->pw_name, pass->pw_dir);
return 0;
}
king@casa:~/workspace$ ./home
king /home/king
king@casa:~/workspace$
No comment sul mio nome utente please...
king@casa:~$ cd workspace
king@casa:~/workspace$ cat home.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <pwd.h>
int main(int argc, char *argv[])
{
struct passwd *pass;
char *user=getenv("LOGNAME");
if(user==NULL)
return 1;
do
{
pass=getpwent();
} while(strcmp(pass->pw_name, user)!=0);
fprintf(stdout, "%s %s\n", pass->pw_name, pass->pw_dir);
return 0;
}
king@casa:~/workspace$ ./home
king /home/king
king@casa:~/workspace$
No comment sul mio nome utente please...
-
sir_alex
- Linux 3.x

- Messaggi: 735
- Iscritto il: lun 21 mar 2005, 0:00
- Kernel: 2.6.35-22
- Desktop: KDE4
- Distribuzione: Ubuntu
- Località: Milano - Corbola (RO)
- Contatta:
Bè a me sembrava meglio usare LOGNAME, consiglio letto sul man di uno di quei comandi lì... cos'è endpwent()? Ah... google ha rivelato (al momento sono su win (ok non uccidetemi vi prego!!!)), quindi bisgna anche chiudere il file... e che cavolo pensavo che getpwent aprisse e chiudesse... bè grazie!
p.s. 100mo post!!!

p.s. 100mo post!!!
