如何以root用户身份运行时获取用户的语言环境?

时间:2011-11-24 16:02:33

标签: c++ macos locale setuid

我以root身份运行,但拥有用户的uid(例如504)。如何计算用户的语言环境(在我的情况下为en_GB)?以下不起作用:

setuid(user_uid);
fprintf(stderr,
        CFStringGetCStringPtr(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
                              kCFStringEncodingMacRoman);
setuid(0);

这为我输出en_US

2 个答案:

答案 0 :(得分:1)

此信息包含在GlobalPreferences.plist中,因此正在运行:

$ defaults read /Library/Preferences/.GlobalPreferences AppleLocale

给出了期望的结果。

答案 1 :(得分:-1)

你不能,因为它不存在。该区域设置由控制 环境变量,并且可以动态地改变,从窗口到 窗口,甚至从应用程序到应用程序(即,如果用户 开始了一个程序:

env LC_LANG=fr_FR program_name ...

。)在Unix下,你可以通过这样做来获得用户的默认语言环境 类似的东西:

FILE* in = popen( "su -c 'env | grep ^LC_ ; env | grep ^LANG' - user", "r" );

,然后阅读和解析输入,但我不认为有 更简单。