[c++]GetUserName pod Linux

0

Jak pobrac nazwe (login) uzytkownika aktualnie zalogowanego (Linux), nie wykozystujac zmiennej $USER ? bo to mozna zmienic ?!

echo $USER
user1
export USER=user2
echo $USER
user2

?!
dziekuje z jakiekolwiek zainteresowanie !

0

No tak .... przekombinowalem !

jednak zwraca NULL (pod dwoma linuxami ?!)

0

No gdy uzylem (starego podejscia podobno) bylo ok

struct passwd *www;
www = getpwuid(getuid());
printf("%s\n",www->pw_name);

jadro 2.6.8 PLD i mandrake ? ja sie na tym dobrze nie znam wiec moze jakies uwagi ?

0
reichel napisał(a)

No tak .... przekombinowalem !

jednak zwraca NULL (pod dwoma linuxami ?!)

U mnie getlogin_r działa. Ale faktem jest, że używam FreeBSD, a nie Linuksa. Ale wiadomym jest, że Linuks nie trzyma się tak kurczowo POSIX-a jak FreeBSD (chociaż czuję, że po prostu źle stosujesz).

0

chyba nie bo z manuala (kilku) przyklad skopiowalem !

0

Właśnie znajomego męczyłem z Archlinuksem.

Jest u niego getlogin_r, ale:

  • jeżeli odpala z aterma to wypisuje krzaczki
  • jeżeli z xterma to działa

Użyte przeze mnie:

#include <stdlib.h>
#include <unistd.h>

int
main()
{
    char haslo[30];

    getlogin_r(haslo, 30);
    printf("%s\n", haslo);
    exit(0);
}
0

U mnie tez krzaczki i zwraca blad = 2

#define ENOENT 2 /* No such file or directory */

chodz nie ma w opisie do getlogin_r ?(moze nie moze passwd albo innego w danym miejscu znalezc ?

0

Witam
Również mam problem z tym. Z Xterminala działa bez problemu. Problem zaczął się u mnie od wersji Ubuntu 7.10.
Ja pobieram nazwę może i nie za profesjonalnie ale zrobiłem mały skrypcik w bash-u który pobiera nazwę użytkownika i zapisuje do pliku a w programie wczytuję z tego pliku :)

Znalazłem rozwiązanie dzięki funkcji getenv

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
	cout << getenv ("USER");
	cout <<endl;
	return 0;
}

Zamiast USER można wpisać HOME i wtedy mamy adres do katalogu domowego.
Pozdrowienia.

0

Znalazłem rozwiązanie dzięki funkcji getenv

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
	cout << getenv ("USER");
	cout <<endl;
	return 0;
}

Zamiast USER można wpisać HOME i wtedy mamy adres do katalogu domowego.
Pozdrowienia.

0

To gorsze rozwiązanie. Nie zawsze będziesz miał ustawione ENVy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1