UNIX环境高级编程-读书笔记-系统文件信息
2017-06-27 09:27
489 查看
1.用户信息文件
用户信息文件是在/etc/passwd
struct passwd {
char pw_name; / username */
char pw_passwd; / user 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 */
};
这是用户信息一个结构体。
struct passwd *getpwnam(const char *name);
通过用户名字来获取用户的所有信息
返回值的类型:struct passwd*
这个结构体:
pw_name 用户名
pw_passwd 密码
pw_uid 用户ID
pw_gid 用户组ID
pw_dir 家目录
pw_shell shell程序
struct passwd *getpwuid(uid_t uid);
通过用户的用户id来获取用户的信息的函数。
2.用户的密码文件
用户的密码文件是在/etc/shadow
包含:登录名:加密后的密码:密码最后一次修改的时间:修改密码的最小的时间间隔:密码修改后的有效期:警告时间
struct spwd {
char sp_namp; / Login name */
char sp_pwdp; / Encrypted password */
long sp_lstchg; /* Date of last change (measured
in days since 1 Jan 1970) */
long sp_min; /* Min # of days between changes */
long sp_max; /* Max # of days between changes */
long sp_warn; /* # of days before password expires
to warn user to change it */
long sp_inact; /* # of days after password expires
until account is disabled */
long sp_expire; /* Date when account expires (measured
in days since 1 Jan 1970) */
unsigned long sp_flag; /* Reserved */
};
struct spwd *getspnam(const char *name);
通过用户的名字获取用户的密码文件的信息
3.加密函数:crypt()
char *crypt(const char *key, const char *salt);
key : 要加密的密码
salt: 加密的佐料
说明:这里的salt ,就是在加密密码的时候,我们需要添加的一些字符,从而达到加密的目的
加密的算法有很多:
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
通过这些加密算法加密后的密码文件的格式如下:
5saltencrypted其中的三个符号是固定的格式。
5 是加密算法的ID
salt也就是佐料是固定的16位
encrypted也就是真正是加密后的密码,不同的加密算法,其位数是不一样的,
如下:
MD5 | 22 characters
SHA-256 | 43 characters
SHA-512 | 86 characters
现在版本使用的是SHA——512的加密算法
4.目录操作:
对目录的操作,我们有两组方式:
第一种方式:
struct dirent
{
ino_t d_ino;
char d_name[NAME_MAX+1] ;目录下文件的名字
};
DIR *opendir(const char *name);
打开一个目录
返回值:DOR*类型的值 DIR其实是宏定义的一个则整数,
struct dirent * readdir(DIR* );
读一个目录中的信息
dirent结构体在上面
int closedir(DIR *dirp);
关闭一个目录。
我们在打开一个目录后,在进行了操作以后 ,一定要把它进行关闭
下面是一个使用的实例:
int main (int argc, char ** argv)
{
DIR* dirptr = NULL;
struct dirent * entry;
if((dirptr = opendir(argv[1])) == NULL)
{
sprintf(stderr, “opendir falt!”);
return -1;
}
else
{
while(entry = readdir(dirptr))
{
printf(“%s\n”,entry->d_name);
}
closedir(dirptr);
}
return 0;
}
第二种方式:
使用glob模式:是在整个的文件系统中匹配指定模式的所有文件
int glob(const char *pattern, int flags,
int (*errfunc) (const char *epath, int eerrno),glob_t *pglob);
pattern: 指定的模式:例如: “./*” 就是匹配当前目录下所有的文件
“/etc/.*” 就是匹配/etc/下的所有以.开头的文件
flages :额外的标志,如果不需要就是 0
errfunc: NULL
pglob :获取的文件的信息都存储在这个类型的数据下
他的类型glob_t 如下
typedef struct {
size_t gl_pathc; /* Count of paths matched so far */
char *gl_pathv; / List of matched pathnames. */
size_t gl_offs; /* Slots to reserve in gl_pathv. */
} glob_t;
其中:gl_pathc :表示pattern所匹配的目录下面的文件的个数 gl_pathv :表示pattern所匹配的目录下面的文件名字的数组
void globfree(glob_t *pglob);
关闭一个glob_t 的对象.
注意每一次创建的时候,在最后的时候都必须要使用此函数进行关闭
实例:
实现把符合某一模式下的所有文件的名字都打印出来
int main ()
{
glob_t * glb;
glob(“/ect/.*”, 0, NULL,glb);
int i;
for(i = 0;i < glb->gl_pathc;i++)
{
printf(“%s\n”,glb->gl_pathv[i]);
}
return 0;
}
用户信息文件是在/etc/passwd
struct passwd {
char pw_name; / username */
char pw_passwd; / user 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 */
};
这是用户信息一个结构体。
struct passwd *getpwnam(const char *name);
通过用户名字来获取用户的所有信息
返回值的类型:struct passwd*
这个结构体:
pw_name 用户名
pw_passwd 密码
pw_uid 用户ID
pw_gid 用户组ID
pw_dir 家目录
pw_shell shell程序
struct passwd *getpwuid(uid_t uid);
通过用户的用户id来获取用户的信息的函数。
2.用户的密码文件
用户的密码文件是在/etc/shadow
包含:登录名:加密后的密码:密码最后一次修改的时间:修改密码的最小的时间间隔:密码修改后的有效期:警告时间
struct spwd {
char sp_namp; / Login name */
char sp_pwdp; / Encrypted password */
long sp_lstchg; /* Date of last change (measured
in days since 1 Jan 1970) */
long sp_min; /* Min # of days between changes */
long sp_max; /* Max # of days between changes */
long sp_warn; /* # of days before password expires
to warn user to change it */
long sp_inact; /* # of days after password expires
until account is disabled */
long sp_expire; /* Date when account expires (measured
in days since 1 Jan 1970) */
unsigned long sp_flag; /* Reserved */
};
struct spwd *getspnam(const char *name);
通过用户的名字获取用户的密码文件的信息
3.加密函数:crypt()
char *crypt(const char *key, const char *salt);
key : 要加密的密码
salt: 加密的佐料
说明:这里的salt ,就是在加密密码的时候,我们需要添加的一些字符,从而达到加密的目的
加密的算法有很多:
ID | Method
1 | MD52a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
通过这些加密算法加密后的密码文件的格式如下:
5saltencrypted其中的三个符号是固定的格式。
5 是加密算法的ID
salt也就是佐料是固定的16位
encrypted也就是真正是加密后的密码,不同的加密算法,其位数是不一样的,
如下:
MD5 | 22 characters
SHA-256 | 43 characters
SHA-512 | 86 characters
现在版本使用的是SHA——512的加密算法
4.目录操作:
对目录的操作,我们有两组方式:
第一种方式:
struct dirent
{
ino_t d_ino;
char d_name[NAME_MAX+1] ;目录下文件的名字
};
DIR *opendir(const char *name);
打开一个目录
返回值:DOR*类型的值 DIR其实是宏定义的一个则整数,
struct dirent * readdir(DIR* );
读一个目录中的信息
dirent结构体在上面
int closedir(DIR *dirp);
关闭一个目录。
我们在打开一个目录后,在进行了操作以后 ,一定要把它进行关闭
下面是一个使用的实例:
int main (int argc, char ** argv)
{
DIR* dirptr = NULL;
struct dirent * entry;
if((dirptr = opendir(argv[1])) == NULL)
{
sprintf(stderr, “opendir falt!”);
return -1;
}
else
{
while(entry = readdir(dirptr))
{
printf(“%s\n”,entry->d_name);
}
closedir(dirptr);
}
return 0;
}
第二种方式:
使用glob模式:是在整个的文件系统中匹配指定模式的所有文件
int glob(const char *pattern, int flags,
int (*errfunc) (const char *epath, int eerrno),glob_t *pglob);
pattern: 指定的模式:例如: “./*” 就是匹配当前目录下所有的文件
“/etc/.*” 就是匹配/etc/下的所有以.开头的文件
flages :额外的标志,如果不需要就是 0
errfunc: NULL
pglob :获取的文件的信息都存储在这个类型的数据下
他的类型glob_t 如下
typedef struct {
size_t gl_pathc; /* Count of paths matched so far */
char *gl_pathv; / List of matched pathnames. */
size_t gl_offs; /* Slots to reserve in gl_pathv. */
} glob_t;
其中:gl_pathc :表示pattern所匹配的目录下面的文件的个数 gl_pathv :表示pattern所匹配的目录下面的文件名字的数组
void globfree(glob_t *pglob);
关闭一个glob_t 的对象.
注意每一次创建的时候,在最后的时候都必须要使用此函数进行关闭
实例:
实现把符合某一模式下的所有文件的名字都打印出来
int main ()
{
glob_t * glb;
glob(“/ect/.*”, 0, NULL,glb);
int i;
for(i = 0;i < glb->gl_pathc;i++)
{
printf(“%s\n”,glb->gl_pathv[i]);
}
return 0;
}
相关文章推荐
- UNIX环境高级编程-第6章- 系统数据文件和信息
- UNIX环境高级编程学习之第六章系统数据文件和信息-取所有用户名和UID, GID
- UNIX环境高级编程学习之第六章系统数据文件和信息-取所有组名、GID
- (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息
- UNIX环境高级编程学习之第六章系统数据文件和信息-实现uid to name
- UNIX环境高级编程之第6章:系统数据文件和信息
- UNIX环境高级编程学习之第六章系统数据文件和信息-GID To GroupName
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- UNIX环境高级编程学习之第六章系统数据文件和信息 用链表的形式读出一个服务器的远程用户登入登出信息
- UNIX环境高级编程 第6章 系统数据文件和信息
- UNIX环境高级编程之第6章:系统数据文件和信息-习题
- UNIX环境高级编程学习笔记(七)系统数据文件和信息
- 标准IO库、系统数据文件和信息 - UNIX环境高级编程-第5、6章
- UNIX环境高级编程——第六章—系统数据文件和信息
- Unix环境高级编程-系统数据文件和信息
- UNIX环境高级编程-读书笔记-文件操作(一)
- Unix环境编程-系统文件和信息
- Unix环境高级程序设计入门----文件系统的相关编程(上)
- Unix环境高级程序设计入门--文件系统的相关编程(上)
- UNIX环境高级编程-读书笔记-文件操作(二)