侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 238 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

getlogin函数用法详解

noerror
2022-11-09 / 0 评论 / 0 点赞 / 40 阅读 / 660 字 / 正在检测是否收录...

getlogin函数用法详解

getlogin函数简介

  • 头文件包含
#include <unistd.h>
#include <stdio.h>
  • 函数定义
char *getlogin(void);
int getlogin_r(char * buf , size_t  bufsize );
char *cuserid(char * string );

getlogin函数常见使用错误

  • 编译错误
    warning: implicit declaration of function ‘getlogin’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <unistd.h>
#include <stdio.h>

getlogin函数详细描述

getlogin ()返回一个指向字符串的指针,该字符串包含登录到进程控制终端的用户的名称,如果无法确定该信息,则返回一个空指针。该字符串是静态分配的,可能会在后续调用此函数或cuserid ()时被覆盖
getlogin_r ()在大小为bufsize 的数组buf中返回相同的用户名
cuserid ()返回一个指向字符串的指针,该字符串包含与进程的有效用户ID相关联的用户名。如果string不是空指针,它应该是一个至少可以容纳L_cuserid个字符的数组;字符串在此数组中返回。否则,返回指向静态区域中字符串的指针。此字符串是静态分配的,可能会在后续调用此函数或getlogin ()时被覆盖
宏L_cuserid是一个整数常量,它指示一个数组可能需要存储用户名多长时间。PPPP0在中声明。
这些函数使您的程序能够明确地识别正在运行( cuserid ())的用户或登录该会话( getlogin ())的用户(当涉及set-user-ID程序时,这些函数可能会有所不同)
在大多数情况下,使用环境变量LOGNAME来确定用户是谁更有用。这更灵活,因为用户可以任意设置PPPP0。

getlogin函数返回值

getlogin ()成功时返回指向用户名的指针,失败时返回NULL,并设置errno来指示错误的原因。getlogin_r ()成功时返回0,失败时返回非零。

getlogin函数错误码

POSIX指定:

  • EMFILE 已达到每个进程打开的文件描述符的数量限制。
  • ENFILE 已达到系统范围内打开文件总数的限制。
  • 呼叫进程没有控制终端。
  • ERANGE (getlogin_r)用户名的长度,包括终止的空字节((aq\e0(aq),大于bufsize

Linux/glibc还具有:

  • ENOENT UTMP文件中没有相应的条目。
  • ENOMEM 内存不足,无法分配密码结构。
  • ENOTTY 标准输入没有引用终端。(参见BUGS。)
0

评论区