如何知道哪个应用程序正在读取或写入文件

时间:2012-09-06 12:07:56

标签: android linux file android-ndk linux-kernel

在Android或Android NDK中是否有任何方法可以知道哪个应用程序正在读取或写入磁盘或设备内存上的数据?

3 个答案:

答案 0 :(得分:1)

您可以在

的输出中查找您的文件
  

ls -l / proc / * / fd /

您不需要特殊工具或根。

<强>解释

每个正在运行的进程都会在以{pid}命名的/proc/中获取一个条目。对于每个pid,都是一个目录fd,带有符号链接,文件句柄的名称指向文件名。

例如,一个条目可能......

  

lr-x ------ app_25 app_25 2012-09-06 12:16 20 - &gt;   /system/etc/fallback_fonts.xml

不幸的是,我们没有看到PID,但我们可以看到流程所有者app_25

因此,我们可以查看/data/data/(使用ls -l /data/data

...
drwxr-x--x app_9    app_9             2012-02-23 08:31 com.android.launcher 
drwxr-x--x app_25   app_25            2012-02-23 08:30 com.android.mms 
drwxr-x--x app_5    app_5             2012-02-23 08:29 com.android.music
...

因此它是应用程序com.android.mms

答案 1 :(得分:0)

我不知道是否有SDK方法可以做到这一点,但Linux允许你列出进程/打开文件/套接字,你可以尝试从那里抓取东西。

首先使用ps命令获取进程的PID,输入:

$ ps -aef | grep {process-name}
$ ps -aef | grep httpd

接下来将此PID传递给pfiles命令,

$ pfiles {PID}
$ pfile 3533

这就是你列出firefox使用的所有打开文件的方法......

lsof -p `ps -C firefox -o pid=`

您可以使用System.exec()来执行这些操作,但您还需要具有root访问权限。无论如何,我认为这是你必须要查看的那种信息......

编辑:

这是我从Py2Cmod

获得的

INIT.C

/* Generated by py2cmod
*
* py2cmod (c) 2001 Mark Rowe
*/

#include "Python.h"

static PyObject *ErrorObject;

/* ----------------------------------------------------- */

/* List of methods defined in the module */

static struct PyMethodDef iotop/__init___methods[] = {

{NULL,   (PyCFunction)NULL, 0, NULL}        /* sentinel */
};


/* Initialization function for the module (*must* be called initiotop/__init__) */

static char iotop/__init___module_documentation[] =  "";

void initiotop/__init__()
{
PyObject *m, *d;

/* Create the module and add the functions */
m = Py_InitModule4("iotop/__init__", iotop/__init___methods,
    iotop/__init___module_documentation,
    (PyObject*)NULL,PYTHON_API_VERSION);

/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
ErrorObject = PyString_FromString("iotop/__init__.error");
PyDict_SetItemString(d, "error", ErrorObject);

/* XXXX Add constants here */
PyDict_SetItemString(d, "__file__", PyString_FromString("iotop/__init__.py"));
PyDict_SetItemString(d, "__name__", PyString_FromString("iotop/__init__"));


/* Check for errors */
if (PyErr_Occurred())
    Py_FatalError("can't initialize module iotop/__init__");
}

答案 2 :(得分:0)

目前尚不清楚“在磁盘或设备内存中读取或写入数据”是什么意思,但我希望dumpsys工具可以提供帮助。