Toon posts:

[c++] username en homedir uitvogelen (linux)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mensen,

Ik ben nu al ochtend en middag aan het zoeken op google en GoT, maar nergens iets te vinden, terwijl het toch zo'n simpele vraag is (misschien kan ik daarom niets vinden ;) ).
Ik wil graag de username van de gebruiker die mijn programma uitvoert in een string hebben, en ook zijn homedir. Ik weet dat die in een environmentvariable zitten ($HOME en $USER), maar hoe krijg ik ze in c++?

Alvast bedankt!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
C++:
1
2
3
4
5
6
#include <stdlib.h>

char *home=getenv("HOME");
char *user=getenv("USER");

std::string home=getenv("HOME"); // < werkt ook. Maar dan $HOME een waarde hebben


in cstdlib is die functie ook aanwezig.

  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

Verwijderd schreef op 17 april 2004 @ 14:15:
Ik ben nu al ochtend en middag aan het zoeken op google en GoT, maar nergens iets te vinden, terwijl het toch zo'n simpele vraag is (misschien kan ik daarom niets vinden ;) ).
Ik wil graag de username van de gebruiker die mijn programma uitvoert in een string hebben, en ook zijn homedir. Ik weet dat die in een environmentvariable zitten ($HOME en $USER), maar hoe krijg ik ze in c++?
env variablen moet je niet gebruiken, iedereen kan die dingen naar hartelust wijzigen. Met getuid() en getpwuid() is dit net zo simpel op te lossen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Wat is daar mis mee? Geloof die environment, tenzij voorsecurity redenen. Maar als iemand $HOME verandert, wees dan niet zo bot om dat te negeren. De gebruiker heeft vast een goede reden.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 16-02 16:12
Als alternatief voor die getuid() / getpwduid(), kan je ook getlogin() gebruiken om de naam te krijgen die gebruikt werd voor login.

En voor de home-dir zou ik ook de environment variabele gebruiken...

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

VyperX schreef op 19 april 2004 @ 10:09:
Als alternatief voor die getuid() / getpwduid(), kan je ook getlogin() gebruiken om de naam te krijgen die gebruikt werd voor login.
getlogin() doet wat anders, en geeft de naam terug van de gebruiker ingelogd op de sessie. Dat geeft in combinatie met setuid apps andere uitkomsten. Verder wordt getlogin() en cuserid() afgeraden omdat die van utmp uitgaan.
En voor de home-dir zou ik ook de environment variabele gebruiken...
Ik vertrouw geen gebruikers, en ik kan weinig (geen eigenlijk) valide redenen bedenken om $HOME te wijzigen.

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Andere manier (voorbeeldje uit een college van een aantal jaar terug)
Zoals misschien wel duidelijk is bevat envp de volledige definitie, dus het kan zijn dat er in envp[0] "HOME=username" staat opgeslagen. Maar d'r zijn talloze variabelen daar terug te vinden. Moet volgens mij ook werken voor C (hieronder is C++)
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

using namespace std;

int main(int argc, char *argv[], char *envp[]) {
  int i = 0;

  while (envp[i]) {
    int j;
    string blaat0, var, value;
    blaat0 = envp[i];
    //j = envp[i].find_first_of('=', 0);
    j = blaat0.find_first_of('=', 0);
    var = blaat0.substr(0, j);
    value = blaat0.substr(j+1, blaat0.size());
    cout << "Variabele \'" << var << "\' heeft waarde \'" << value << "\'" << endl;
    i++;
  }

  return 0;

}

Used to be Down Under... Foto gallery

Pagina: 1