Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我在内核空间时,如何从用户空间读取char*?_C_Module_Io - Fatal编程技术网

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

当我在内核空间时,如何从用户空间读取char*?,c,module,io,C,Module,Io,我需要测试一个字符*,以便比较它的长度是否在0和3之间,字符是否为“1”、“2”或“3”,以及它们是否重复。我正在内核空间编程一个模块,我不知道如何格式化它,我正在使用copy_to_user,但我不知道如何知道char[]的长度,而不是字节长度,char数组的最大索引我当前的代码失败了,有时会使用奇怪的字符。这是一个驱动程序,所以当我从另一个不相关的文件中使用fprintf写入相关文件时,它会导致垃圾 static ssize_t module_write(struct file *filp,

我需要测试一个字符*,以便比较它的长度是否在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;
}

你怎么了?另外,你知道你可以跳出一个循环,对吧?当我使用strlen时,如果我写'echo 123>/dev/mydev',长度是4,加上一个我不知道如何用英语讲的换行。但是当我写'echo 12>/dev/mydev'时,长度也是4