linux常用c函数用户组篇

来源:Linux认证    发布时间:2012-11-10    Linux认证视频    评论

  halt:7:0:halt:/sbin:/sbin/halt

  mail:8:12:mail:/var/spool/mail:

  news:9:13:news:var/spool/news

  uucp:10:14:uucp:/var/spool/uucp:

  operator:11:0:operator :/root:

  games:12:100:games:/usr/games:

  gopher:13:30:gopher:/usr/lib/gopher-data:

  ftp:14:50:FTP User:/home/ftp:

  nobody:99:99:Nobody:/:

  xfs:100:101:X Font Server: /etc/Xll/fs:/bin/false

  gdm:42:42:/home/gdm:/bin/bash

  kids:500:500: : /home/kids:/bin/bash

  getpwnam(从密码文件中取得指定账号的数据)

  相关函数  getpw,fgetpwent,getpwent,getpwuid

  表头文件  #include<pwd.h>

  #include<sys/types.h>

  定义函数  struct passwd * getpwnam(const char * name);

  函数说明  getpwnam()用来逐一搜索参数name 指定的账号名称,找到时便将该用户的数据以passwd结构返回。passwd结构请参考getpwent()。

  返回值  返回passwd 结构数据,如果返回NULL 则表示已无数据,或有错误发生。

  范例  /*取得root账号的识别码和根目录*/

  #include<pwd.h>

  #include<sys/types.h>

  main()

  {

  struct passwd *user;

  user = getpwnam(“root”);

  printf(“name:%s/n”,user->pw_name);

  printf(“uid:%d/n”,user->pw_uid);

  printf(“home:%s/n”,user->pw_dir);

  }

  执行  name:root

  uid:0

  home:/root

  getpwuid(从密码文件中取得指定uid 的数据)

  相关函数  getpw,fgetpwent,getpwent,getpwnam

  表头文件  #include<pwd.h>

  #include<sys/types.h>

  定义函数  struct passwd * getpwuid(uid_t uid);

  函数说明  getpwuid()用来逐一搜索参数uid 指定的用户识别码,找到时便将该用户的数据以结构返回结构请参考将该用户的数据以passwd 结构返回。passwd 结构请参考getpwent()。

  返回值  返回passwd 结构数据,如果返回NULL 则表示已无数据,或者有错误发生。

  范例  #include<pwd.h>

  #include<sys/types.h>

  main()

  {

  struct passwd *user;

  user= getpwuid(6);

  printf(“name:%s/n”,user->pw_name);

  printf(“uid:%d/n”,user->pw_uid);

  printf(“home:%s/n”,user->pw_dir);

  }

  执行  name:shutdown

  uid:6

  home:/sbin

  getuid(取得真实的用户识别码)

  相关函数  geteuid,setreuid,setuid

  表头文件  #include<unistd.h>

  #include<sys/types.h>

  定义函数  uid_t getuid(void);

  函数说明  getuid()用来取得执行目前进程的用户识别码。

  返回值  用户识别码

  范例  main()

  {

  printf(“uid is %d/n”,getuid());

  }

  执行  uid is 0 /*当使用root身份执行范例程序时*/

  getutent(从utmp 文件中取得账号登录数据)

  相关函数  getutent,getutid,getutline,setutent,endutent,pututline,utmpname

  表头文件  #include<utmp.h>

  定义函数  struct utmp *getutent(void);

  函数说明  getutent()用来从utmp 文件(/var/run/utmp)中读取一项登录数据,该数据以utmp 结构返回。第一次调用时会取得第一位用户数据,之后每调用一次就会返回下一项数据,直到已无任何数据时返回NULL。

  utmp结构定义如下

  struct utmp

  {

  short int ut_type; /*登录类型*/

  pid_t ut_pid; /*login进程的pid*/

  char ut_line[UT_LINESIZE];/*登录装置名,省略了“/dev/”*/

  char ut_id[4]; /* Inittab ID*/

  char ut_user[UT_NAMESIZE];/*登录账号*/

  char ut_host[UT_HOSTSIZE];/*登录账号的远程主机名称*/

  struxt exit_status ut_exit;/* 当类型为DEAD_PROCESS时进程的结

  束状态*/

  long int ut_session; /*Sessioc ID*/

  struct timeval ut_tv; /*时间记录*/

  int32_t ut_addr_v6[4]; /*远程主机的网络地址*/

  char __unused[20]; /* 保留未使用*/

  };

  ut_type有以下几种类型:

  EMPTY 此为空的记录。

  RUN_LVL 记录系统run-level的改变

  BOOT_TIME 记录系统开机时间

  NEW_TIME 记录系统时间改变后的时间

  OLD_TINE 记录当改变系统时间时的时间。

  INIT_PROCESS 记录一个由init衍生出来的进程。

  LOGIN_PROCESS 记录login进程。

  USER_PROCESS 记录一般进程。

  DEAD_PROCESS 记录一结束的进程。

  ACCOUNTING 目前尚未使用。

  exit_status结构定义

  struct exit_status

  {

  short int e_termination; /*进程结束状态*/

  short int e_exit; /*进程退出状态*/

  };

  timeval的结构定义请参考gettimeofday()。

  相关常数定义如下:

  UT_LINESIZE 32

  UT_NAMESIZE 32

  UT_HOSTSIZE 256

  返回值  返回utmp 结构数据,如果返回NULL 则表示已无数据,或有错误发生。

  附加说明  getutent()在第一次调用时会打开utmp 文件,读取数据完毕后可使用endutent()来关闭该utmp文件。

  范例  #include<utmp.h>

  main()

  {

  struct utmp *u;

  while((u=getutent())){

  if(u->ut_type = = USER_PROCESS)

  printf(“%d %s %s %s /n”,u->ut_type,u->ut_user,u->ut_line,u->ut_host);

  }

  endutent();

  }

  执行  /* 表示有三个root账号分别登录/dev/pts/0,/dev/pts/1,/dev/pts/2 */

  7 root pts/0

  7 root pts/1

  7 root pts/2

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答