getlogin()
считывает информацию для входа из файла utmp
, поэтому он не будет работать, если процесс не связан с терминалом.
Я предполагаю, что из вызова seteuid
в вашем Например, процесс A выполняется с эффективным идентификатором пользователя исходного пользователя.
Если у вас нет терминала, но есть идентификатор пользователя, вам необходимо использовать базу данных «passwd» (часто, но не всегда, при поддержке файла /etc/passwd
):
struct passwd *pw = getpwuid(geteuid());
string userName = pw->name;