c/c++语言开发共享getlogin()c函数返回NULL并错误“没有这样的文件或目录”

我有一个关于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)!)。

      www.ctvol.com true Article c/c++语言开发共享getlogin()c函数返回NULL并错误“没有这样的文件或目录”

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560845.html

      (0)
      上一篇 2021年1月28日 上午9:58
      下一篇 2021年1月28日 上午10:02

      精彩推荐