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. –
- 1. Asp.net Core'da kullanıcı Tarayıcı adı (kullanıcı aracı) nasıl edinilir?
- 2. Kullanıcı eylemleri nasıl edinilir?
- 3. Mac OS'de işlem kullanıcı adı PID ile nasıl edinilir?
- 4. Kullanıcı için kullanıcı adı ve SID, ldap
- 5. Kod adı Groovy'de nasıl edinilir
- 6. Kullanıcı ilgi alanları nasıl edinilir?
- 7. Kullanıcı aracısı iOS'ta nasıl edinilir?
- 8. django'da python kullanarak uygulama adı nasıl edinilir
- 9. Android: Çekilebilir Resim adı nasıl edinilir
- 10. Windows 7 tema adı nasıl edinilir
- 11. Android'de yüklü uygulama adı nasıl edinilir?
- 12. Alan adı, JavaScript ile nasıl edinilir?
- 13. Android KSoap2: özellik adı nasıl edinilir
- 14. Geçerli özellik adı yansıma aracılığıyla nasıl edinilir?
- 15. Laravel - Geçerli kullanıcı AppServiceProvider'da nasıl edinilir
- 16. Kullanıcı cihazı/Android/Ios/Web nasıl edinilir
- 17. Android'de facebook kullanıcı bilgisi nasıl edinilir?
- 18. Kullanıcı Adı Rails'de Yönlendirme
- 19. Denetleyici için kullanıcı adı kullanıcı adında mı?
- 20. algılama kullanıcı adı
- 21. Restful web hizmetleri kullanıcı adı veya parola program aracılığıyla nasıl edinilir (temel kimlik doğrulaması)
- 22. Yürütme listesi kimliğini kullanarak youtube oynatma listeleri için youtube banner'ı veya kullanıcı adı nasıl edinilir?
- 23. Titanyum'da UserID kullanıcı adı nasıl saklanır
- 24. Geçerli kullanıcı adı bir hücrede nasıl gösterilir?
- 25. Windows'ta git bash kullanıcı adı nasıl değiştirilir?
- 26. Şu anda oturum açmış kullanıcı adı nasıl?
- 27. Kullanıcı adı verilen makineyi sıfırla
- 28. Şemadaki devam (çağrı/cc)
- 29. [cc yaratıcısı] Karşılaştırma çalışmıyor
- 30. WCF kullanıcı adı sertifikası yok
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