来个百度的复制粘贴
getpwnam
getpwnam() 函数功能:获取用户登录相关信息
原型定义: struct passwd *getpwnam(const char *name);
表头文件:
#include <pwd.h>
#include <sys/types.h>
信息存贮在如下的结构体之中
struct passwd {
char * pw_name; /* Username. */
char * pw_passwd; /* Password. */
__uid_t -pw_uid; /* User ID. */
__gid_t -pw_gid; /* Group ID. */
char * pw_gecos; /* Real name. */
char * pw_dir; /* Home directory. -*/
char * pw_shell; /* Shell program. */
};
例子:
#include <stdio.h>
#include <pwd.h>
int main()
{
struct passwd * pw;
char *username = "devis";
pw = getpwnam(username);
if(!pw)
{
printf("%s is not exist\n", username);
return -1;
}
printf("pw->pw_name = %s\n", pw->pw_name);
printf("pw->pw_passwd = %s\n", pw->pw_passwd);
printf("pw->pw_uid = %d\n", pw->pw_uid);
printf("pw->pw_gid = %d\n", pw->pw_gid);
printf("pw->pw_gecos = %s\n", pw->pw_gecos);
printf("pw->pw_dir = %s\n", pw->pw_dir);
printf("pw->pw_shell = %s\n", pw->pw_shell);
return 0;
}
运行的结果:
pw->pw_name = devis
pw->pw_passwd = x
pw->pw_uid = 500
pw->pw_gid = 500
pw->pw_gecos = devis
pw->pw_dir = /home/devis
pw->pw_shell = /bin/bash
pw->pw_passwd = x
pw->pw_uid = 500
pw->pw_gid = 500
pw->pw_gecos = devis
pw->pw_dir = /home/devis
pw->pw_shell = /bin/bash
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <pwd.h>
void sig_handler(int signo);
int main(int argc, char** argv)
{
int ret;
struct passwd* ptr;
signal(SIGALRM, sig_handler);
alarm(1);
for(; ;){
ptr = getpwnam("xxxx");
if(ptr == NULL){
perror("getpwnam");
exit(1);
}
if(strcmp(ptr->pw_name, "xxxx") != 0){
printf("return value has corrupted by sig_handler, pw_name = %s\n", ptr->pw_name);
}
}
exit(0);
}
void sig_handler(int signo)
{
struct passwd* root_ptr;
printf("in sig_handler\n");
root_ptr = getpwnam("root");
if(root_ptr == NULL){
perror("sig_usr getpwnam");
exit(2);
}
printf("pw_name = %s\n", root_ptr->pw_name);
alarm(1);
}
getpwnam是不可重入函数。因此此程序运行的结果是不可预见的。
更多文章,欢迎访问 :
http://blog.youkuaiyun.com/wallwind