【问题标题】:stdlib.h alternative in Linux kernel?Linux内核中的stdlib.h替代品?
【发布时间】:2012-08-17 18:14:47
【问题描述】:

在 Linux 中开发内核模块时,不允许使用 C 标准库。
但是,如果我需要使用strcat() 等一些常用功能,我需要去哪里?

【问题讨论】:

    标签: c linux kernel


    【解决方案1】:

    Linux 内核中没有实现的东西,你必须自己实现或者借用另一个开源内核模块。但是,您会发现strcat 是在内核中实现的。

    请参阅kernel API 文档。特别是 Basic C Library Functions 部分用于您的一般问题,String Manipulation 部分用于您关于 strcat 的具体问题。

    您需要包含linux/string.h

    我不知道为什么内核 API 文档实际上没有显示您必须包含的头文件才能获得该函数。但是,如果您正在寻找某些东西,则可以将搜索范围限制在 /include/linux,因为如果头文件具有在内核不同部分之间共享的功能,那么这就是头文件所在的位置。

    /include/linux 之外的头文件仅包含与头文件位于同一目录中的源文件的定义。例外是/arch/.../include,它将包含特定于架构的标头,而不是独立于平台的标头。

    【讨论】:

    • 是否有保存这些函数的头文件列表? (就像你提到的'linux\string.h')
    • @Fairview:我找不到,这很奇怪。我想你必须在内核 API 中找到你想要的函数,然后在 /include/linux 中搜索它。我在回答中添加了更多关于内核头文件的详细信息,以及为什么您可以将搜索限制在 /include/linux 及其子目录中。
    【解决方案2】:

    抱歉@eq - 正在考虑另一个函数。

    为什么不

    void (char *d, const char *s);
    {
       if (*d)
       { 
           for (; *d; ++d) {} ;
          --d;
       }
       strcpy(d, s);
    }
    

    如果你愿意,我可以strcpy

    【讨论】:

    • @indiv - 哎呀,想法是对的。这些功能可以轻松实现。
    • 我们都很高兴吗?尽管字符串函数需要一个库?!
    • ... Linux 内核是用 C 写的吗?
    • @indiv - 你明白了。关键是内核是用 C 语言编写的,因此最初的提问者可以自己编写。
    • @indiv - 我试图指出 fairview 是不正确的,即 C 中的内核模型很难用这些库重建。是的,代码是错误的,但我一头雾水地写了出来。但是现在是晚上 9 点,我们(我的男朋友、我的另一个朋友(袋子)和我自己需要吃点东西!)
    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多