📄 getpwent.c
字号:
#include <stdio.h>#include <sys/types.h>#include <pwd.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <limits.h>static struct passwd pw_passwd; /* password structure */static FILE *passwd_fp;static char logname[8];static char password[1024];static char comment[1024];static char gecos[1024];static char dir[1024];static char shell[1024];struct passwd *getpwnam (name) const char *name;{ FILE *fp; int uid, gid; char buf[1024]; if ((fp = fopen ("/etc/passwd", "r")) == NULL) { return NULL; } while (fgets (buf, sizeof (buf), fp)) { sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n", logname, password, &pw_passwd.pw_uid, &pw_passwd.pw_gid, comment, gecos, dir, shell); pw_passwd.pw_name = logname; pw_passwd.pw_passwd = password; pw_passwd.pw_comment = comment; pw_passwd.pw_gecos = gecos; pw_passwd.pw_dir = dir; pw_passwd.pw_shell = shell; if (!strcmp (logname, name)) { fclose (fp); return &pw_passwd; } } fclose (fp); return NULL;}struct passwd *getpwuid (uid_t uid){ FILE *fp; char buf[1024]; if ((fp = fopen ("/etc/passwd", "r")) == NULL) { return NULL; } while (fgets (buf, sizeof (buf), fp)) { sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n", logname, password, &pw_passwd.pw_uid, &pw_passwd.pw_gid, comment, gecos, dir, shell); pw_passwd.pw_name = logname; pw_passwd.pw_passwd = password; pw_passwd.pw_comment = comment; pw_passwd.pw_gecos = gecos; pw_passwd.pw_dir = dir; pw_passwd.pw_shell = shell; if (uid == pw_passwd.pw_uid) { fclose (fp); return &pw_passwd; } } fclose (fp); return NULL;}struct passwd *getpwent (){ char buf[1024]; if (passwd_fp == NULL) return NULL; if (fgets (buf, sizeof (buf), passwd_fp) == NULL) return NULL; sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n", logname, password, &pw_passwd.pw_uid, &pw_passwd.pw_gid, comment, gecos, dir, shell); pw_passwd.pw_name = logname; pw_passwd.pw_passwd = password; pw_passwd.pw_comment = comment; pw_passwd.pw_gecos = gecos; pw_passwd.pw_dir = dir; pw_passwd.pw_shell = shell; return &pw_passwd;}voidsetpwent (){ if (passwd_fp != NULL) fclose (passwd_fp); passwd_fp = fopen ("/etc/passwd", "r");}voidendpwent (){ if (passwd_fp != NULL) fclose (passwd_fp);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -