【发布时间】:2014-04-17 10:51:00
【问题描述】:
我正在计算 dev.c 内核源代码中的中断时间,如下所示:
extern double InterruptTime;
InterruptTime = ktime_get_real(); //timestamp
我正在使用 procfs 将数据从内核空间写入用户空间,并使用内核空间中的以下 api 将数据发送到用户空间。 PROCFS.c:
struct device {
double array[100];
}chr_arr;
ssize_t dev_read(struct file *filp,const char *buf,size_t count,loff_t *offset)
{
int len;
chr_arr.array =InterruptTime; // Is this possible ??
len = count >= strlen(chr_arr.array) ? strlen(chr_arr.array) : count;
*offset += len;
if (*offset >= strlen(chr_arr.array))
return 0;
if (copy_to_user(buf,chr_arr.array,len))
return -EFAULT;
return len;
}
如上所示,是否可以从 PROCFS.c 中的 dev.c 读取 InterruptTime? 从上面内核代码发送的数据将如何在用户侧(即InterruptTime)接收??
【问题讨论】:
-
返回用户空间代码是什么?每次读取只有一个
char? -
InterruptTime 是我代码中的时间戳。我想将 InterruptTime 返回给用户。
-
那么
InterruptTime是什么类型的?extern char InterruptTime表明它只是一个字符。您是在 chr_arr 中缓冲多个字符还是只缓冲一个字符? - 或者,更具体地说,sizeof(InterruptTime)是什么? -
InterruptTime 是 double 类型;所以我修改了上面的代码。这是访问 InterruptTime 的正确方法(我通过 procfs.c 程序从 dev.c 程序计算)?用户端如何接收InterruptTime?
标签: c linux linux-kernel client-server procfs