📄 linux 常用c函数(中文版)-用户组.htm
字号:
name);<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>getpwnam()用来逐一搜索参数name
指定的账号名称,找到时便将该用户的数据以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>/*取得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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -