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

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

我不知道是否有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_Initmodulee4("iotop/__init__", iotop/__init___methods, iotop/__init___module_documentation, (PyObject*)NULL,PYTHON_API_VERSION); /* Add some symbolic constants to the module */ d = Pymodulee_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__"); } 

你可以在输出中查找你的文件

ls -l / proc / * / fd /

你不需要任何特殊的工具或根。

说明

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

一个入口例如可能…

lr-x —— app_25 app_25 2012-09-06 12:16 20 – > /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

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