如果我希望直接使用其他应用程序的虚拟地址访问数据,我可以使用虚拟地址访问proc / [pid] / mem吗?偏移量是否与虚拟地址相同?
代码方面,如果我fseeko(the-proc/[pid]/mem-File, virtual_address, SEEK_SET);
和fread
来自virtual_address的金额,我是否会从应用程序的虚拟地址获取数据?
谢谢!
答案 0 :(得分:0)
/ proc / [pid]就是这样,它保存给定PID的进程信息。请记住,每个进程都有自己的PID,由linux内核全局存储。
这是一个如何从proc读取proc的statm部分的例子。根据相应的联机帮助页,此代码可以很容易地适应/ proc / [pid] / mem。
const char *statm_path = "/proc/[pid]/statm";
proc_f = fopen(statm_path, "r");
if (proc_f == NULL)
{
perror("Error opening proc file");
return;
}
// Writing the info from /proc/[pid]/statm to a struct.
if (7 != fscanf(proc_f, "%ld %ld %ld %ld %ld %ld %ld", &result.size,
&result.resident, &result.share, &result.text, &result.lib,
&result.data, &result.dt))
{
perror(statm_path);
return;
}
fclose(proc_f);
对于/ mem中的字段,我建议this page。在这里,您可以访问页面上列出的任何统计数据。我不认为您可以显式访问特定变量或类似的变量,因为每个进程都有自己的内核单独维护的虚拟内存空间。充其量它可能会变得非常混乱。
答案 1 :(得分:0)
你无法做到这一点。但我相信你所寻找的是Public Function BalancoTotal()
SqlCon = New SqlConnection
SqlCon.ConnectionString = "........"
Try
SqlCon.Open()
Query2 = "SELECT
CAST(SUM(amountTransaction) AS INT)
FROM Transactions"
SqlCmd = New SqlCommand(Query2, SqlCon)
SqlDR = SqlCmd.ExecuteReader
If SqlDR.Read() Then
Return SqlDR.GetDecimal(0)
End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
SqlCon.Close()
End Try
End Function
。任何两个进程都可以使用共享内存读写公共内存。进程之间此共享内存的虚拟地址可能不同。并且必须由用户以受控方式访问它,没有给出自然锁定机制。
来自link的linuxgazette对示例有很好的解释。