关于获取终端地址的问题
我想在内核代码里获取到当前系统调用进程的用户和登陆的终端地址,也就是执行who命令获取到的信息,请问有什么办法吗,求高手指点,谢谢! 回复 1# sky__sea看一下 who 的实现,以及对应的系统调用。
看了,是在看不出来是在哪里得到的,我看在输出之前调用了stat,如下:
stat("/dev/pts/2", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=405, ...}) = 0
但是stat貌似得不到吧?
回复 2# Godbach
回复 3# sky__sea
直接去看 who 的实现吧,没必要再 strace 跟踪了
不好意思,我想知道哪里能看到who的实现,who里面本身都是很多系统调用,但是命令本身我还真不知道哪里能看到源代码?回复 4# Godbach
知道了,都包含在 coreutils 软件包中,coreutils 软件包的源码可以在
htp://ftp.gnu.org/gnu/coreutils/找到 回复 6# sky__sea
:mrgreen:coreutils 是个好东东
此外,不知道某个命令是在哪个安装包,可以用下面这个命令
$rpm -qf `which who`
coreutils-8.4-16.1.alios6.x86_64
谢谢大侠!回复 7# Godbach
who的实现应是参考了utmp/wtmp记录,这些信息(登录时间、来源IP、甚至用户名)估计底层都没有?
当然底层有进程的控制终端的概念(对应who的终端信息),task_struct->signal_struct->tty 你说的没错,我只能找到tty这一步了。回复 9# nswcfd
页:
[1]