You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用makedev宏构造mknod的__dev参数并区分设备类型?

mknod函数中makedev宏的使用及字符/块设备区分

一、用makedev宏生成__dev参数

直接调用makedev()宏,传入主设备号5和次设备号1,就能生成符合要求的dev_t类型参数。这个宏的作用就是把主、次设备号组合成mknod函数需要的设备标识值。

修正后的完整C代码示例:

#include <sys/stat.h>
#include <sys/types.h>  // makedev宏通常依赖这个头文件

static inline void create_console_dev() {
    dev_t dev = makedev(5, 1);
    // mode参数需同时指定设备类型(S_IFCHR)和权限(对应命令行的-m 666)
    mknod("/dev/console", S_IFCHR | 0666, dev);
}

注意:原代码框架仅设置了权限位0600,这是不完整的——必须加上S_IFCHR标记字符设备类型,否则无法正确创建目标设备文件。

二、字符设备与块设备的区分

  1. 代码层面
    调用mknod函数时,通过mode参数的文件类型位区分:

    • 字符设备:使用S_IFCHR宏(定义在<sys/stat.h>中),标识这是字符型设备文件
    • 块设备:使用S_IFBLK宏,标识这是块型设备文件
      这两个宏占据mode参数的高12位,专门用来标记文件的设备类型。
  2. 命令行层面
    使用mknod命令时,通过第三个参数区分:

    • 字符设备用c(对应代码里的S_IFCHR)
    • 块设备用b(对应代码里的S_IFBLK)

内容的提问来源于stack exchange,提问作者Bret Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:23:25