当我在内核空间时,如何从用户空间读取char *?

时间:2014-01-12 00:24:01

标签: c module io

我需要测试一个char *,以便比较它是否有0到3之间的长度,如果字符是'1','2'或'3'并且不重复它们。我在内核空间(编程模块)工作,我不知道如何格式化,我正在使用copy_to_user,但我不知道如何知道char []的长度(而不是字节长度, char数组的最大索引)我的当前代码失败并且有时会占用奇怪的字符。这是一个驱动程序,所以当我从另一个不相关的文件中写入相关文件(使用fprintf)时,它就会被废弃。

static ssize_t module_write(struct file *filp, const char *buff, size_t len, loff_t * off){ 

char aux[BUF_MAX_LEN];
int salir =0;
int i =0;
//[...]

if(copy_from_user(aux,buff, len ) ) //Sometimes this makes a copy of random characters because of the length
     return -EINVAL;

        for (i = 0; salir == 0;i++){

            if(aux[i] == '3'){
//              [...]
            }else if(aux[i] == '1'){
//              [...]
            }else if(aux[i]== '2'){
//              [...]
            }else if(aux[i] == '\n' || aux[i] == '\0'){
                salir++;
            }else{
                printk(KERN_ALERT "Error, character not valid");
                return -EINVAL;
            }
            if(i >=3) return -EINVAL;
        }

//[...]
    return length;
}

0 个答案:

没有答案