在C语言中对utmp文件进行查找和写入操作的函数小结
C语言pututline()函数:将utmp记录写入文件
头文件:
#include<utmp.h>
定义函数:
voidpututline(structutmp*ut);
函数说明:pututline()用来将参数ut的utmp结构记录到utmp文件中.此函数会先用getutid()来取得正确的写入位置,如果没有找到相符的记录则会加入到utmp文件尾.
附加说明:需要有写入/var/run/utmp的权限
范例
#include<utmp.h> main() { structutmput; ut.ut_type=USER_PROCESS; ut.ut_pid=getpid(); strcpy(ut.ut_user,"kids"); strcpy(ut.ut_line,"pts/1"); strcpy(ut.ut_host,"www.gnu.org"); pututline(&ut); }
执行:
//执行范例后用指令who-l观察 rootpts/0dec919:20 kidspts/1dec1210:31(www.gnu.org) rootpts/2dec1213:33
C语言getutline()函数:文件查找函数(从utmp文件中查找特定的)
头文件:
#include<utmp.h>
定义函数:
structutmp*getutline(structutmp*ut);
函数说明:getutline()用来从目前utmp文件的读写位置逐一往后搜索ut_type为USER_PROCESS或LOGIN_PROCESS的记录,而且ut_line和ut->ut_line相符.找到相符的记录便将该数据以utmp结构返回。
返回值:返回utmp结构数据,如果返回NULL则表示已无数据,或有错误发生.
范例
#include<utmp.h> main() { structutmput,*u; strcpy(ut.ut_line,"pts/1"); while((u=getutline(&ut))) { printf("%d%s%s%s\n",u->ut_type,u->ut_user,u->ut_line,u->ut_host); } }
执行:
7rootpts/1
C语言getutid()函数:从utmp文件中查找特定的记录
头文件:
#include<utmp.h>
定义函数:
strcututmp*getutid(strcututmp*ut);
函数说明:
getutid()用来从目前utmp文件的读写位置逐一往后搜索参数ut指定的记录。
1、如果ut->ut_type为RUN_LVL,BOOT_TIME,NEW_TIME,OLD_TIME其中之一则查找与ut->ut_type相符的记录;
2、若ut->ut_type为INIT_PROCESS,LOGIN_PROCESS,USER_PROCESS或DEAD_PROCESS其中之一,则查找与ut->ut_id相符的记录.找到相符的记录便将该数据以utmp结构返回.
返回值:返回utmp结构数据,如果返回NULL则表示已无数据,或有错误发生.
范例
#include<utmp.h> main() { structutmput,*u; ut.ut_type=RUN_LVL; while((u=getutid(&ut))) { printf("%d%s%s%s\n",u->ut_type,u->ut_user,u->ut_line,u->ut_host); } }
执行:
1runlevel-