首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串数组作为参数传递给linux内核模块

将字符串数组作为参数传递给linux内核模块
EN

Stack Overflow用户
提问于 2019-03-21 22:59:16
回答 1查看 1.2K关注 0票数 1

有没有办法将字符串数组传递给kernel-module?我想这样通过它:

代码语言:javascript
复制
insmod mod.ko array="string1","string2","string3"

这是我的代码,但它不能编译:

代码语言:javascript
复制
#include<linux/module.h>
#include<linux/moduleparam.h>

static int number_of_elements = 0;
static char array[5][10];
module_param_array(array,charp,&number_of_elements,0644);



static int __init mod_init(void)
{

    int i;
    for(i=0; i<number_of_elements;i++)
    {
        pr_notice("%s\n",array[i]);
    }

    return 0;
}

static void __exit mod_exit(void)
{
    pr_notice("End\n");
}

module_init(mod_init);
module_exit(mod_exit);

MODULE_AUTHOR("...");
MODULE_LICENSE("GPL");
MODULE_VERSION("1.0");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 03:14:48

module_param_array(array,charp,&number_of_elements,0644);期望array是一个char *数组。您只需要用static char *array[5];替换static char array[5][10];

一个普通的命令外壳程序(比如/bin/sh )会将"string1","string2","string3"作为一个参数对待(假设您没有在外壳程序的IFS变量上胡乱操作)。内核的模块参数解析器会将其视为一个参数:string1,string2,string3,并使用逗号将其拆分为三个以null结尾的字符串。您的char *array[5]内容将用指向这些以null结尾的字符串的指针填充,并且您的number_of_elements将被设置为逗号分隔的字符串数量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55283368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档