免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1415 | 回复: 0
打印 上一主题 下一主题

Linux系统调用(五)—系统文件和信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-10 23:33 |只看该作者 |倒序浏览
1.
名称::        getpwuid/getpwnam
功能:        Getpassword file entry
头文件:        #include <pwd.h>
函数原形:         struct passwd *getpwuid(uid_t uid);
struct passwd *getpwnam(const char *name);
参数:        Uid   用户id  
返回值:        若成功则返回指针,若出错则返回NULL
Getpwuid函数由ls(1)程序使用,它将i节点中的数值用户id映射为用户登录名。在键入登录名时,getpwnam函数由login(1)程序使用。

这些系统信息都是在/ect/passwd文件中读出的。里面记录着许多用户登录信息。
用户名                  char *pw_name
加密口令                char *pw_passwd
数值用户ID              uid_t pw_uid
数值组ID                gid_t pw_gid
注释字段                char *pw_gecos
初始工作目录            char *pw_dir
初始shell                char *pw_shell
用户访问类              char *pw_class
下次更改口令时间        time_t pw_chang
帐户到期时间            time_t pw_expire

2.
名称::        getpwent/setpwent/endpwent
功能:        get password file entry
头文件:        #include <pwd.h>
#include <sys/types.h>
函数原形:         struct passwd *getpwent(void);
void setpwent(void);
void endpwent(void);
参数:        无
返回值:        若成功则返回指针,若出错则返回NULL

这3个函数可以查看/ect/passwd文件中的所有信息。调用getpwent时,它返回口令文件中的下一个记录项。函数setpwent反绕它所使用的文件。Endpwent则关闭这些文件。下面是一个例子用来列出系统的所有用户.
  1. #include <stdio.h>
  2. #include <pwd.h>

  3. int main()
  4. {
  5. struct passwd *pwd;
  6. setpwent();
  7. while((pwd=getpwent())!=NULL)
  8. {
  9.     printf(“uid:%d\n”,pwd->pw_uid);
  10.     printf(“name:%s\n”,pwd->pw_name);
  11. }
  12. endpwent();
  13. }
复制代码
在程序开始处调用setpwent是自我保护性的措施,以便在调用getpwent打开有关文件情况下,反绕有关文件使他们定位到文件开始处。在使用getpwent查完口令文件后,一定要调用endpwent关闭这些文件.getpwent知道什么时候它应打开它所使用的文件(第一次被调用时),但是它并不知道何时关闭这些文件。

3.
名称::        getspnam/getspent/setspent/endspent
功能:        encrypted password file routines
头文件:        #include <shadow.h>
函数原形:         struct spwd *getspent();
struct spwd *getspnam(char *name);
void setspent();
void endspent();
参数:        name   用户名
返回值:        若成功则返回指针,若出错则返回NULL
加密口令是经单向加密算法处理过的用户口令副本。现在,某些系统将加密口令存放在另一个通常称为阴影口令的文件中。该文件包含的字段有。
用户登录名                       char *sp_namp
加密口令                         char *sp_pwdp
上次更改口令以来经过的时间       int sp_lstchg
经过多少天后容许更改             int sp_min
要求更改声音剩余天数             int sp_max
到期警告天数                     int sp_warn
帐户不活动以前尚余天数           int sp_inact
帐户到期天数                     int sp_expir
保留                             unsigned int sp_flag

4.
名称::        getgrgid/getgrnam
功能:        get group file entry
头文件:        #include <grp.h>
#include <sys/types.h>
函数原形:         struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);
参数:        name    用户名
gid      用户组id
返回值:        若成功则返回指针,若出错则返回NULL

用户组的信息包含在/ect/group文件中,该文件包括如下信息。
组名                       char *gr_name
加密口令                   char *gr_passwd
数值组id                   int gr_gid
指向各用户名的指针数组     char **grmen

5.
名称::        getgrent/sergrent/endgrent
功能:        get group file entry
头文件:        #include <grp.h>
函数原形:         void group *getgrent();
void setgrent();
void endgrent();
参数:        无
返回值:        若成功则返回指针,若出错则返回NULL

上面两组函数类似于针对口令的几个函数。
6.
名称::        getgroups/setgroups/initgroups
功能:        get group file entry
头文件:        #include <grp.h>
#include <unistd.h>
函数原形:         int getgroups(int gidsetsize,gid_t grouplist[]);
int setgroups(int ngroups,const gid_t grouplist[]);
int initgrops(const char *username,gid_t basegid);
参数:        grouplist[]  用于存放附加组id
gidsetsize  最大存放id的个数       
ngroups    数组中元素的个数
username   用户名
返回值:        getgroups  若成功则返回附加组id数,若出错则返回-1
setgroups/ initgrops  若成功则返回0,若出错则返回-1

一个用户不仅属于口令文件记录项中组id所对应的组。也可以属于多达16个另外的组。在这里另外的组id叫附加组id。这样我们就可以实现一个人属于多个组了。下面的例子功能是打印当前用户的附加主组id。
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <grp.h>
  4. #include <sys/type.h>

  5. iint main()
  6. {
  7. int num;
  8. int i;
  9. int gidsetsize=16;
  10. gid_t grouplist[16];
  11. num=getgroups(gidsetsize,grouplist)
  12. for(i=0;i<num;i++)
  13.     printf(“%d\n”,grouplist[i]);
  14. }
复制代码


7.
名称::        uname
功能:        get name and information about current kernel
头文件:        #include <sys/utsname.h>
函数原形:         int uname(struct ursname *name);
参数:        name  主机名
返回值:        若成功则返回非负值,若出错则返回-1
Uname函数返回与当前主机和操作系统有关信息。通过该函数的参数向其传递一个utsname结构的地址,然后该函数填写该结构。
struct utsname{
        char sysname[];
        char nodename[];
        char release[];
        char version[];
        char machine[];
}

8.
名称::        gethostname
功能:        get group file entry
头文件:        #include <unistd.h>
函数原形:         int gethostname(char *name,int namelen)
参数:        name      指定name缓冲区长度
namelen    缓冲区
返回值:        若成功则返回0,若出错则返回-1
Gethostname函数的功能是返回系统的主机名。该名字通常是TCP/IP网络上的主机的名字。

        除了这些系统文件,linux还有其它系统文件记录着系统信息。如utmp(/var/run/utmp)记录着当前登录进系统的各个用户。wtmp(/var/log/wtmp)跟踪各个登录和注销事件。

下面对linux中的系统文件做个总结:
1.文件位置:/ect/passwd  文件功能:口令文件 头文件:<pwd.h> 结构passwd包括信息:用户名(char *pw_name),加密口令(char * pw_passwd),数值用户id(uid_t pw_uid),数值组id(uid_t pw_gid),注释字段(char *pw_gecos),初始工作目录(char *pw_dir),初始Shell(char *pw_shell),用户防问类(char *pw_class),下次更改口令时间(time_t pw_change),帐户到期时间(time_t pw_expire)相关函数: getpwuid/getpwnam(读当前用户的信息) getpwent/setpwent/endpwent(读所有用户的信息).
2.文件位置:/ect/group 文件功能:阴影口令文件 头文件:<shadow.h> 结构:spwd包括信息:用户登录名(char *sp_namp),加密口令(char *sp_pwdp),上次更改口令以来经过的时间(int sp_lstchg),经过多少天后容许更改(nt sp_min),要求更改声音剩余天数(int sp_max),到期警告天数                     (int sp_warn),帐户不活动以前尚余天数(int sp_inact),帐户到期天数(int sp_expir),保留(unsigned int sp_flag)。相关函数:getspnam/getspent/setspent/endspent。
        3.文件位置:/ect/group 文件名:组文件 头文件:<grp.h> 结构:group 包括信息:组名(char *gr_name),加密口令                   (char *gr_passwd),数值组id(int gr_gid),指向各用户名的指针数组(char **grmen)。相关函数:getgrgid/getgrnam (读取当前用户的组信息)getgrent/sergrent/endgrent(读取所有组的信息)。
        4.文件位置: /ect/host 文件功能:记录主机信息 头文件:<notdb.h> 结构:hostent 相关函数:gethostbyname/gethostbyaddr
        5. 文件位置:/ect/networks 文件功能:记录网络信息 头文件:<netdb.h> 结构:netent 相关函数: getnetbyname/getnetbyaddr
        5.文件位置:/ect/protocols 文件功能:记录协议信息 头文件:<netdb.h> 结构:protoent 相关函数:getprotobyname/getprotobynumber
        6.文件位置:/ect/services 文件功能:记录服务信息 头文件:<netdb.h> 结构:servent 相关函数:getservbyname,getservbyport
7.文件位置:/var/run/utmp 文件功能:记录当前登录进系统的各个用户。头文件:<unmp.h> 结构:utmp
        8.文件位置:/var/log/wtmp 文件功能:记录登录和注销事件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP