📄 07.html
字号:
<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>
<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 * getutline (struct
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'> getutline()用来从目前utmp文件的读写位置逐一往后搜索ut_type为USER_PROCESS
或LOGIN_PROCESS 的记录,而且ut_line 和ut->ut_line 相符。找到相符的记录便将该数据以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>
strcpy (ut.ut_line,”pts/1”);<br>
while ((u=getutline(&ut))){<br>
printf(“%d %s %s %s \n”,u->ut_type,u->ut_user,u->ut_line,u->ut_host);<
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -