C++。从 Linux 守护程序获取登录用户名

C++. Get logged in user name from Linux daemon

有没有办法从 linux 守护程序获取登录用户名? 我试过了

seteuid(1000);
std::string userName = getlogin();

但似乎这次调用失败了,之后我的应用程序终止了。 一般情况如下:一些运行我的守护进程的脚本。在这个守护进程中,我启动了另一个 UI 进程(我们称之为 A)。然后在进程 A 中,我尝试使用前面描述的方式登录用户名。我的进程 A 在 getlogin 调用后终止。有什么可靠的方法可以从进程 A 获取登录用户名吗?

getlogin()utmp 文件中读取登录信息,因此如果进程未与终端关联,它将无法工作。

我从您示例中的 seteuid 调用假设进程 A 是 运行 原始用户的有效用户 ID。

如果你没有终端,但有你需要使用“passwd”数据库的 uid(通常,但不总是,由 /etc/passwd 文件支持):

struct passwd *pw = getpwuid(geteuid());
string userName = pw->name;