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;
有没有办法从 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;