我有一个关于getlogin()函数()的问题。 我试图使用此函数从c程序中获取我的帐户的登录名。 但该函数返回NULL。 使用perror显示错误是“没有这样的文件或目录”。
我没有得到什么问题。 有没有办法在程序中获取用户登录名。
这是一个示例代码:
#include #include int main() { char *name; name = getlogin(); perror("getlogin() error"); //printf("This is the login info: %sn", name); return 0; }
这是输出: getlogin() error: No such file or directory
请让我知道如何做到这一点。
谢谢。
getlogin
是一种不安全且已弃用的确定登录用户的方法。 它可能试图打开登录用户的记录,可能是utmp
或者其他东西。 确定您正在运行的用户的正确方法(可能与登录用户不同,但无论如何总是更好),是getpwuid(getuid())
。
这是一个很好的链接,我发现它可能不起作用: getlogin
以下是它的引用:
不幸的是,愚弄getlogin()通常很容易。 有时它根本不起作用,因为某些程序弄乱了utmp文件
如果我评论perror
电话,它对我来说很好。
来自man
:
getlogin()返回一个指向字符串的指针,该字符串包含在进程的控制终端上登录的用户的名称,如果无法确定此信息,则返回空指针。
所以你应该这样做:
#include #include int main() { char *name; name = getlogin(); if (!name) perror("getlogin() error"); else printf("This is the login info: %sn", name); return 0; }
根据手册页错误(ENOENT)表示:
utmp文件中没有相应的条目。
我通常使用getpwent()以及对geteuid()和getegid()的调用。 这给了我可能需要知道的所有信息(至少就/ etc / passwd提供的信息)并告诉我我是否以setuid / setgid运行,这在防御性编程时很有用。
我已经为我的公司编写了几个程序,如果有人试图将它们设置为root并将所有权更改为root,或者如果被系统用户(www-data,nobody等)调用,则拒绝以root身份运行。
正如其他人所说,从utmp
读取这个目的是一个非常糟糕的主意。
以上就是c/c++开发分享getlogin()c函数返回NULL并错误“没有这样的文件或目录”相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560845.html