📄 07.htm
字号:
<DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>/*取得root账号的识别码和根目录*/<BR>#include<pwd.h><BR>#include<sys/types.h><BR>main()<BR>{<BR>struct passwd *user;<BR>user = getpwnam(“root”);<BR>printf(“name:%s\n”,user->pw_name);<BR>printf(“uid:%d\n”,user->pw_uid);<BR>printf(“home:%s\n”,user->pw_dir);<BR>}<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>name:root<BR>uid:0<BR>home:/root<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc105></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2><BR>getpwuid(从密码文件中取得指定uid 的数据) </FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getpw,fgetpwent,getpwent,getpwnam<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<pwd.h><BR>#include<sys/types.h><BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>struct passwd * getpwuid(uid_t uid);<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getpwuid()用来逐一搜索参数uid 指定的用户识别码,找到时便将该用户的数据以结构返回结构请参考将该用户的数据以passwd 结构返回。passwd 结构请参考getpwent()。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>返回passwd 结构数据,如果返回NULL 则表示已无数据,或者有错误发生。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<pwd.h><BR>#include<sys/types.h><BR>main()<BR>{<BR>struct passwd *user;<BR>user= getpwuid(6);<BR>printf(“name:%s\n”,user->pw_name);<BR>printf(“uid:%d\n”,user->pw_uid);<BR>printf(“home:%s\n”,user->pw_dir);<BR>}<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>name:shutdown<BR>uid:6<BR>home:/sbin<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc106></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2><BR>getuid(取得真实的用户识别码) </FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>geteuid,setreuid,setuid<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<unistd.h><BR>#include<sys/types.h><BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>uid_t getuid(void);<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getuid()用来取得执行目前进程的用户识别码。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>用户识别码<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>main()<BR>{ <BR>printf(“uid is %d\n”,getuid());<BR>}<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>uid is 0 /*当使用root身份执行范例程序时*/<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc107></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2><BR>getutent(从utmp 文件中取得账号登录数据) </FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getutent,getutid,getutline,setutent,endutent,pututline,utmpname<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<utmp.h><BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>struct utmp *getutent(void);<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getutent()用来从utmp 文件(/var/run/utmp)中读取一项登录数据,该数据以utmp 结构返回。第一次调用时会取得第一位用户数据,之后每调用一次就会返回下一项数据,直到已无任何数据时返回NULL。<BR>utmp结构定义如下<BR>struct utmp<BR>{<BR>short int ut_type; /*登录类型*/<BR>pid_t ut_pid; /*login进程的pid*/<BR>char ut_line[UT_LINESIZE];/*登录装置名,省略了“/dev/”*/<BR>char ut_id[4]; /* Inittab ID*/<BR>char ut_user[UT_NAMESIZE];/*登录账号*/<BR>char ut_host[UT_HOSTSIZE];/*登录账号的远程主机名称*/<BR>struxt exit_status ut_exit;/* 当类型为DEAD_PROCESS时进程的结<BR>束状态*/<BR>long int ut_session; /*Sessioc ID*/<BR>struct timeval ut_tv; /*时间记录*/<BR>int32_t ut_addr_v6[4]; /*远程主机的网络地址*/<BR>char __unused[20]; /* 保留未使用*/<BR>};<BR>ut_type有以下几种类型:<BR>EMPTY 此为空的记录。<BR>RUN_LVL 记录系统run-level的改变<BR>BOOT_TIME 记录系统开机时间<BR>NEW_TIME 记录系统时间改变后的时间<BR>OLD_TINE 记录当改变系统时间时的时间。<BR>INIT_PROCESS 记录一个由init衍生出来的进程。<BR>LOGIN_PROCESS 记录login进程。<BR>USER_PROCESS 记录一般进程。<BR>DEAD_PROCESS 记录一结束的进程。<BR>ACCOUNTING 目前尚未使用。<BR>exit_status结构定义<BR>struct exit_status<BR>{<BR>short int e_termination; /*进程结束状态*/<BR>short int e_exit; /*进程退出状态*/<BR>};<BR>timeval的结构定义请参考gettimeofday()。<BR>相关常数定义如下:<BR>UT_LINESIZE 32<BR>UT_NAMESIZE 32<BR>UT_HOSTSIZE 256<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>返回utmp 结构数据,如果返回NULL 则表示已无数据,或有错误发生。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getutent()在第一次调用时会打开utmp 文件,读取数据完毕后可使用endutent()来关闭该utmp文件。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<utmp.h><BR>main()<BR>{<BR>struct utmp *u;<BR>while((u=getutent())){<BR>if(u->ut_type = = USER_PROCESS)<BR>printf(“%d %s %s %s \n”,u->ut_type,u->ut_user,u->ut_line,u->ut_host);<BR>}<BR>endutent();<BR>}<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>/* 表示有三个root账号分别登录/dev/pts/0,/dev/pts/1,/dev/pts/2 */<BR>7 root pts/0<BR>7 root pts/1<BR>7 root pts/2<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc108></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2><BR>getutid(从utmp 文件中查找特定的记录) </FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getutent,getutline<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<utmp.h><BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>strcut utmp *getutid(strcut utmp *ut);<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getutid()用来从目前utmp 文件的读写位置逐一往后搜索参数ut指定的记录,如果ut->ut_type 为RUN_LVL,BOOT_TIME,NEW_TIME,OLD_TIME 其中之一则查找与ut->ut_type 相符的记录;若ut->ut_type 为INIT_PROCESS,LOGIN_PROCESS,USER_PROCESS或DEAD_PROCESS其中之一,则查找与ut->ut_id相符的记录。找到相符的记录便将该数据以utmp 结构返回。utmp结构请参考getutent()。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>返回utmp 结构数据,如果返回NULL 则表示已无数据,或有错误发生。<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<utmp.h><BR>main()<BR>{<BR>struct utmp ut,*u;<BR>ut.ut_type=RUN_LVL;<BR>while((u= getutid(&ut))){<BR>printf(“%d %s %s %s\n”,u->ut_type,u->ut_user,u->ut_line,u->ut_host);<BR>}<BR>}<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>1 runlevel -<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc109></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2><BR>getutline(从utmp 文件中查找特定的记录) </FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>getutent,getutid,pututline<BR></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD> <TD> <DIV align=left><FONT face=宋体 size=2>#include<utmp.h><BR></FONT></DIV></TD></TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -