1

デバイス用のモジュールを作成しましたが、読み取り機能に問題があります。

ssize_t my_sys_read(struct file *f, char __user *buffer, size_t s, loff_t *off){

    char * myBuffer = "ossec buffer";
    size_t read_bytes;

    if (s > ( sizeof(char) * 13 ) ) s = ( sizeof(char) * 13 );

    if (!access_ok(%VERIFY_WRITE, (void *) buffer, s)) return -EFAULT;
        read_bytes = copy_to_user((void *) buffer, (void *) myBuffer, s);

    printk(KERN_INFO "myBuffer %s", myBuffer);
    printk(KERN_INFO "buffer %s", buffer);

    read_bytes = s - ( sizeof(char) * 13 );

    return read_bytes;

}

理由は本当にわかりませんが、コピーが機能せず、印刷されたバッファーは意味がありません。

 [10038.885838] buffer \xffffff81\xffffffc3\xffffffcb\x1a

デバイスを使用するプログラムは単純なので、問題はコピーにあると思います。

int main(void)
  {
    int fd = open(device_name, O_RDONLY);
    if(fd < 0)
    {
      printf("Error: Impossible to open device, action not permited.\n");
      return 0;
    }

    char * buff;
    int read_bytes;
    read_bytes = read(fd, buff, (13 * sizeof(char) ) );

    printf(" %s\n", buff);


  }

ありがとう!

4

1 に答える 1

1
char * buff;
int read_bytes;
read_bytes = read(fd, buff, (13 * sizeof(char) ) );

メモリを割り当てずにポインタ バフを使用していると、ランダムな値を持つダングリング ポインタになります。あなたがする必要があります

char *buff = new char();また

  char buff;
  int read_bytes;
  read_bytes = read(fd, &buff, (13 * sizeof(char)) );
于 2013-01-30T20:21:27.440 に答える