2012-08-23 54 views
0

內核模塊(/ dev的)文件在我的內核模塊讀取功能如下:如何讀取用戶空間C

ssize_t aes_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) { 

    unsigned long aes_reg[4]; 
    aes_reg[0] = leon_load_reg(output_mem_loc); 
    aes_reg[1] = leon_load_reg(output_mem_loc+4); 
    aes_reg[2] = leon_load_reg(output_mem_loc+8); 
    aes_reg[3] = leon_load_reg(output_mem_loc+12); 
    copy_to_user(buf, (char *)aes_reg, 16); 
    .... 

,看來,buf被正確設置內核模塊中。在用戶空間我寫這篇文章:

int main(int argc, char* argv[]){ 
    FILE *fpaes; 
    char *str; 
    int buf[4]; 

    fpaes = fopen("/dev/aes", "r"); 
    fread(str, 16, 1, fpaes); 
    p_long = (unsigned long *)str; 
    .... 

str未更新與我期望的值。我被允許以這種方式做fread還是我離開?

+1

這不會導致你的問題,但不是說它通常最好直接調用系統調用['read(2)'](http://linux.die.net/man/2/read)et al而不是通過stdio層,因爲默認情況下stdio緩衝區讀取和寫入。 –

+0

謝謝,我會考慮到這一點。 – Stuart

回答

3

str未在程序中初始化。訪問*str是未定義的行爲。

+0

是的,我一定錯過了。謝謝。 – Stuart