||
(GNU_linux 编程指南-第二版-Page 200)
getlogin函数返回执行程序的用户登录名。一旦你拥有了登录名,就可以把它作为参数传递给getpwname函数,这个函数能够返回/ect/passwd文件中与该登录名相应的一行完整信息。另一种方法是把进程的UID传递给该getpwuid函数,这个函数也能返回/etc/passwd文件中恰当的条目。
getlogin的原型如下:
#include <unistd.h>
char *getlogin(void);
它返回一个指向字符串的指针,这个字符串包含有运行该进程的用户的登录名,如果没有得到这一点,则函数返回NULL。一旦你拥有了登录名,就可以调用getpwnam检索相应于用户名的UID。它的原型为
#include<pwd.h>
Struct passwd *getpwnam(const char *name);
Name必须是一个指向包含有感兴趣的用户名的字符串指针。Getpwnam返回一个指向passwd结构的指针。返回的passwd结构指针指向静态分配的内存,下次调用getpwname之前应该保存好passwd结构中的信息。程序清单13.3中的程序用getlogin和getpwnam显示出谁是正在运行的进程。
程序清单 13.3 getname.c
/*
*getname.c –Get login names
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
int main(void)
{
char *login;
struct passwd *pentry;
/*Get the login name*/
if ((login = getlogin()) == NULL){
perror(“getlogin”);
exit(EXIT_FAILURE);
}
/*Get the password entry for login*/
if((pentry = getpwnam(login)) == NULL){
perror(“getpwna”);
pxit(EXIT_FAILURE);
}
/*Display the password entry*/
printf(“user name : %s \n”, pentry->pw_name);
printf(“UID : %s \n”, pentry->pw_uid);
printf(“GID : %s \n”, pentry->pw_gid);
printf(“gecos : %s \n”, pentry->pw_gecos);
printf(“home dir : %s \n”, pentry->pw_dir);
Exit(EXIT_SUCCESS);
}
聪明的读者会注意到程序中故意不让代码显示出口领域的内容。执行make getname 编译getname.该程序的输出应该和下面类似:
$ ./getname
User name: kwall
UID : 500
GID : 100 Wall
Gecos :Kurt
Home dir :/home/kwall
Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )
GMT+8, 2024-11-24 06:58 , Processed in 0.030513 second(s), 18 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.