2014-01-14 70 views
1

有谁知道哪个系统调用属于I/O组件(WiFi,SDcard或GSP等)?如何使用“strace”知道组件的系统调用

我使用strace跟踪应用程序,而现在,我有一个应用程序(A应用程序只是有开/关功能的WiFi,A的PID = 999),我用cmd以键盘命令

./strace -p 999 -t -v 如果我用这个命令./strace -p 999 -t -v -e trace=open,close,read,write输出例如:

04:18:11.473383 read(52, "D", 1)  = 1 

04:18:11.476191 write(39, "W", 1)  = 1 

04:18:11.477198 write(53, "u", 1)  = 1 

04:18:11.478114 read(38, "W", 16)  = 1 

04:18:11.583430 read(52, "D", 1)  = 1 

04:18:11.584315 write(39, "W", 1)  = 1 

04:18:11.586787 write(53, "u", 1)  = 1 

04:18:11.587824 read(38, "W", 16)  = 1 

04:18:11.794337 read(38, "W", 16)  = 1 

04:18:11.800227 read(38, "W", 16)  = 1 

04:18:11.802210 syscall_983042(0x4e1d5428, 0x4e1d542c, 0, 0xfff, 0x408e54d8, 0x4e1d5428, 0x4e1d8469, 0xf0002, 0, 0x4e1d542c, 0xf81ef003, 0x14, 0, 0xbee5c738, 0x408b6093, 0x4006c8fc, 0x40000010, 0x4e1d5428, 0, 0, 0xc764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) = 

但输出有那么多......我无法解释那么......

所以,我想知道

  1. 什么系统调用名称是属于组件(属于WiFi或属于SD卡)
  2. 我如何使用组件来获得组件的系统调用(什么命令,我应该UE的?)
  3. 应该如何使用“strace的”到跟踪SDcard?我是否应该有B应用程序(B应用程序只是打开SD卡或关闭SD卡?)我不知道我可以做什么实验。

回答

1

所有这些调用属于文件系统组件。然后通过内核路由到实际的硬件驱动器。所以没有办法通过查看系统调用来知道。

您需要做的是查找打开的调用以查看正在打开的文件。该调用将返回一个数字,称为文件句柄。此号码稍后将用作读取/写入/关闭呼叫的第一个参数。

对于WIFI来说,事情甚至会更加诡计,因为您将不得不监视一大堆套接字调用以及像sendto这样的事情。另外,您需要交叉引用路由映射。

基本上,你试图做的事情在系统调用级别上很难做到。我过去通过深入到内核和驱动程序来做这样的事情。在那里你可以看到上下文更接近实际的硬件。

+0

你好,感谢回复! 您的回应: 【所以无法通过查看系统调用知道】 我不知道这是什么意思? ,因为我想知道跟踪组件的系统调用。 Strace可以跟踪应用程序的pid, 所以,我有一个应用程序(只有wifi开/关功能,A应用程序是这样的:http://ppt.cc/DYbJ) 如果可能知道哪个系统调用属于wifi开/关 另一个问题, strace的输出有这个 【syscall_983042(0x4e1d5428,0x4e1d542c,...】 什么意思???很多“syscall_983042” – user3192332

+1

如果我追踪“愤怒的小鸟”,如果可能知道wifi打开/关闭打开,并打开SDcard(这意味着运行愤怒的小鸟必须使用wifi,SD卡或其他组件,所以我想每个组件的打开或关闭) – user3192332

+0

Linux比你想要做的更复杂一点。应用程序所做的系统调用不会寻址到系统中非常接近硬件的组件。应用程序可以与文件系统或套接字层进行通信。内核可以调用WiFi或SD等硬件子系统。如果你想从strace中找出你需要考虑在他们的上下文中的调用。 – Vlad

0

请注意,为了更清楚地了解文件描述符(如果继续使用strace),可以使用最近版本的-y选项(至少4.8版本)。 -y会将文件描述符解码为路径。

相关问题