文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Figure out the work flow of an linux utility

Figure out the work flow of an linux utility

时间:2009-04-24  来源:s_x_g

Using strace to figure out the work flow of an utility   Offen you want to know how an linux utility is implemented, if you have it's source codes around, just go throuth them to get your point, but if it's not available, which is offen the case, don't worry, we have got "strace".   "strace is a useful diagnostic, instructional, and debugging tool. It intercepts and records the system calls which are called by a process and the signals which are received by a process.  The name of each system call, its arguments and its return value are printed on standard error" -- from man pages.   Let's just see how it works(we use ifconfig as the example):   # strace ifconfig eth0
execve("/sbin/ifconfig", ["ifconfig", "eth0"], [/* 21 vars */]) = 0
uname({sys="Linux", node="esoogle.itc.inventec", ...}) = 0
brk(0)                                  = 0x880c000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
......
socket(PF_FILE, SOCK_DGRAM, 0)          = 3
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
access("/proc/net/if_inet6", R_OK)      = 0
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
......
ioctl(5, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(5, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr=00:a0:d1:e1:e8:ac}) = 0
ioctl(5, SIOCGIFMETRIC, {ifr_name="eth0", ifr_metric=0}) = 0
ioctl(5, SIOCGIFMTU, {ifr_name="eth0", ifr_mtu=1500}) = 0
ioctl(5, SIOCGIFMAP, 0xbfe86970)        = 0
ioctl(5, SIOCGIFMAP, 0xbfe86970)        = 0
ioctl(5, SIOCGIFTXQLEN, 0xbfe86970)     = 0
......
ioctl(4, SIOCGIFADDR, {ifr_name="eth0", ifr_addr={AF_INET, inet_addr("10.190.60.39")}}) = 0
ioctl(4, SIOCGIFDSTADDR, {ifr_name="eth0", ifr_dstaddr={AF_INET, inet_addr("10.190.60.39")}}) = 0
ioctl(4, SIOCGIFBRDADDR, {ifr_name="eth0", ifr_broadaddr={AF_INET, inet_addr("10.255.255.255")}}) = 0
ioctl(4, SIOCGIFNETMASK, {ifr_name="eth0", ifr_netmask={AF_INET, inet_addr("255.0.0.0")}}) = 0
......
munmap(0xb7dea000, 4096)                = 0
exit_group(0)                           = ?
  From the above output information, we now can have a very clear figure about "ifconfig"'s work flow:   It first creates sockets: socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
  And then use IOCTL interfaces to get information: ioctl(4, SIOCGIFADDR, {ifr_name="eth0", ifr_addr={AF_INET, inet_addr("10.190.60.39")}}) = 0
.....
  Very clear, isn't it?  
相关阅读 更多 +
排行榜 更多 +
飓风大作战

飓风大作战

休闲益智 下载
逸拍卖

逸拍卖

购物比价 下载
戴夫有枪

戴夫有枪

动作格斗 下载