来个百度的复制粘贴
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是不可重入函数。因此此程序运行的结果是不可预见的。