Bir programda çevreyi (getenv, ...) kullanmadan asıl "kullanıcı adı" nı nasıl edinebilirim?Linux'ta C/C++ kullanıcı adı nasıl edinilir?
cevap
getlogin_r()
unistd.h
tanımlanan fonksiyon u döndürür ullanıcı Adı. Daha fazla bilgi için bkz. man getlogin_r
.
Onun imzadır:
int getlogin_r(char *buf, size_t bufsize);
Söylemeye gerek, bu işlev aynı kolaylıkla C++ veya C çağrılabilir.
@ Armed9Gagger, POSIX'te tanımlanan bu şeylerin C++ kütüphanesinde API yoktur.C++, POSIX işlevlerini kullanmak için * varsayılır. – spatz
Not getlogin_r, bir işlemin kontrol terminaline giriş yapan kullanıcının adını döndürür. Bu, işin çalıştığı kullanıcıdan farklı olabilir. Bu işlev, bir denetim uçbirimine bağlı değilseniz (ör., Bir süreç belirlendiğinde) başarısız olur. –
getlogin() bu daha basit – rohitsakala
http://www.unix.com/programming/21041-getting-username-c-program-unix.html Gönderen:
/* whoami.c */
#define _PROGRAM_NAME "whoami"
#include <stdlib.h>
#include <pwd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
register struct passwd *pw;
register uid_t uid;
int c;
uid = geteuid();
pw = getpwuid (uid);
if (pw)
{
puts (pw->pw_name);
exit (EXIT_SUCCESS);
}
fprintf (stderr,"%s: cannot find username for UID %u\n",
_PROGRAM_NAME, (unsigned) uid);
exit (EXIT_FAILURE);
}
Sadece ana hatlarını alıp sınıfta hapsetmek: Sadece C için
class Env{
public:
static std::string getUserName()
{
register struct passwd *pw;
register uid_t uid;
int c;
uid = geteuid();
pw = getpwuid (uid);
if (pw)
{
return std::string(pw->pw_name);
}
return std::string("");
}
};
:
const char *getUserName()
{
uid_t uid = geteuid();
struct passwd *pw = getpwuid(uid);
if (pw)
{
return pw->pw_name;
}
return "";
}
Şanslar C * standart kütüphaneleri kullanamazsınız *, * tüm C işlevleri *. Görevinizi gerçekleştirmek için doğrudan veya dolaylı olarak C işlevlerini kullanmanız gerekir. – Kos
Pedantik olmak için, programınızın bir endpwent() çağrısı eksik değil mi? –
Doğru, teşekkürler, kodu güncelleyeceğim. –
c ve C++ işlevi arasındaki fark nedir? Sınıf metodunu mu kastediyorsun? – AlexTheo
Sadece c işlevi kullanmamalıyım – Zat42
Tüm POSIX API'ları, C++ ile aynı şekilde çağrılabilen C işlevleri olarak tanımlanır. Kısıtlamayı anlamıyorum. – spatz