【问题标题】:How to get string and string length in linux kernel mode?如何在linux内核模式下获取字符串和字符串长度?
【发布时间】:2019-05-25 07:49:52
【问题描述】:

我实际上是 linux 内核模式编程的新手。 我必须从用户模式程序 test.c 获得输入, 并将其写入我的驱动程序内核 mydrv.c

我所做的是通过scanf获取一个字符串输入,并将其写为 写入(文件,输出,MAX_SIZE);

file 是一个设备,out 是输入字符串。 在 mydrv_write 中,我试图通过 strlen 获取输入的字符串长度, 但是每当我尝试实现它时进程就会终止 我在程序前面加了。

我猜输入字符串 out 没有正确进入内核。 那么如何获取内核内部的字符串长度呢?

【问题讨论】:

  • 它是write 的 3d 参数,其中包含写入缓冲区的长度。相反MAX_SIZE 你需要传递你写的字符串的实际长度。
  • 您必须读取用户提供的尽可能多的字节,而write() 实际上可以连续拆分为多个调用。为此,您需要有一个缓冲区并了解用户输入时的结束标记。通常像你描述的那样使用 sysfs 节点。

标签: c linux kernel


【解决方案1】:

你有没有尝试过这样的事情:

#define strLength(x) (sizeof(x) / sizeof((x)[0]))

但是这个 marco 给你整个字符串数组的大小。现在我看一些 linux 源代码。 linux-4.19.3/drivers/bluetooth/btmrvl_sdio.c:1471

fw_dump_ptr += strlen("========Start dump ");

我认为在您的程序中使用strlen 或任何string.h 函数没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多