介绍个特殊的字符设备,主设备号为1的设备

1 char Memory devices

1 = /dev/mem Physical memory access

2 = /dev/kmem Kernel virtual memory access

3 = /dev/null Null device

4 = /dev/port I/O port access

5 = /dev/zero Null byte source

6 = /dev/core OBSOLETE - replaced by /proc/kcore

7 = /dev/full Returns ENOSPC on write

8 = /dev/random Nondeterministic random number gen.

9 = /dev/urandom Faster, less secure random number gen.

10 = /dev/aio Asynchronous I/O notification interface

11 = /dev/kmsg Writes to this come out as printk's, reads

export the buffered printk records.

12 = /dev/oldmem OBSOLETE - replaced by /proc/vmcore

主设备号为1 的设备严格上都不是真正的字符设备,都是和mem有关系的MEM_MAJOR 1

例如:/dev/null 内核中有些信息不适合在屏幕上显示,又不适合重定向到磁盘中,这时候

/dev/null起到直接把数据消失的作用。

实现代码原理如下:

最终执行是在file_operations中的,所以从文件操作开始:主设备号为1的如下:

static const struct file_operations memory_fops = {

.open = memory_open,

.llseek = noop_llseek,

};

static int memory_open(struct inode *inode, struct file *filp)

{

int minor;

const struct memdev *dev;

minor = iminor(inode);  //获取次设备号

if (minor >= ARRAY_SIZE(devlist)) //主设备号为1的devlist设备列表 ,判断是否在范围内

return -ENXIO;

dev = &devlist[minor];    //从列表中获取设备指针

if (!dev->fops)           //判断文件操作是否有效

return -ENXIO;

filp->f_op = dev->fops;      //赋值文件操作指针

filp->f_mode |= dev->fmode;

if (dev->fops->open)        //如果非空,执行自己的open操作/dev/null为空

return dev->fops->open(inode, filp);

return 0;

}

static const struct file_operations null_fops = {

.llseek = null_lseek,

.read = read_null,

.write = write_null,

.read_iter = read_iter_null,

.write_iter = write_iter_null,

.splice_write = splice_write_null,

};

上面filp->f_op = dev->fops;     后就可进行读写操作了。

读写操作如下:

static ssize_t read_null(struct file *file, char __user *buf,

size_t count, loff_t *ppos)

{

return 0;

}

static ssize_t write_null(struct file *file, const char __user *buf,

size_t count, loff_t *ppos)

{

return count;

}

没错,什么也没做直接返回了。从而掩盖事实。做了啊,实际什么也没做。

起到一些消息不得不管理,统一空处理的作用。

linux主设备号作用是什么,linux 主设备号为1 以及/dev/null的介绍相关推荐

  1. 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么

    Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到win ...

  2. linux命令vi作用,详解Linux常用命令的用法(二)――――文本编辑器命令vi/vim

    vi/vim介绍 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. 1.vi和vim的区别: 就是在进入一般命令模式后,当按下(i.I.o ...

  3. 在linux中hdparm作用,详解Linux系统中hdparm硬盘检测工具的使用

    在linux下可以使用hdparm工具查看硬盘的相关信息或对硬盘进行测速.优化.修改硬盘相关参数设定.我主要常用这个工具来测试硬盘速度. hdparm(hard disk parameters) 功能 ...

  4. 在linux中hdparm作用,详解Linux中hdparm命令查看硬盘信息的用法

    功能说明:显示与设定硬盘的参数. 语 法:hdparm [-CfghiIqtTvyYZ][-a ][-A <0或1>][-c ][-d <0或1>][-k <0或1> ...

  5. 在linux中hdparm作用,關於Linux中hdparm的應用

    功能說明:顯示與設定硬盤的參數. 語 法:hdparm [-CfghiIqtTvyYZ][-a ][-A <0或1>][-c ][-d <0或1>][-k <0或1> ...

  6. php 点号作用,PHP - 逗号和点号的区别

    php点号(.)和逗号(,)作用都是链接字符串 echo '点'.'号': //用点号连接字符串 输出 点号 echo '逗','号': //用逗号连接字符串 输出 逗号 效果是一样的,但还是有很大区 ...

  7. Linux下的、1、2、2>1、dev/null黑洞文件

    (1)& 可以让我们的任务在后台运行,而不会卡住我们的命令行 (2)1 1代表的意义是成功在命令行内执行的内容 (2)2 与1恰恰相反 (2)2>&1 全部记录 (3)黑洞文件 ...

  8. linux 冒号的作用

    linux 冒号的作用 文章目录 linux 冒号的作用 1.清空文件 2.占位符 总结 1.清空文件 我们新建一个文件 然后:>test.txt 再查看一下 nice! 2.占位符 相当于py ...

  9. Linux下/dev/null 21 相关知识说明

    在学习Linux的过程中,常会看到一些终端命令或者程序中有 ">/dev/null 2>&1" 出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者 ...

最新文章

  1. 24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1
  2. android layout后还原位置,Android图片框架photoview如何记住所有状态并还原,包括缩放度,缩放后的移动的距离等等...
  3. 9.可变参数创建不可变集合
  4. 软件设计师考试下午真题 数据流图 数据库设计 面向对象 数据结构与算法 UML建模
  5. amap vueamap 与_在vue中使用高德地图vue-amap
  6. 【C++编程题2】字符串插入空格
  7. Mac下安装caffe(cpu-only)
  8. 洛谷P2037 电话号码
  9. Java8 Stream流式编程,极大解放你的生产力!
  10. Conflux获上海市政府超过500万美元的研究资助
  11. 信捷plc编程100例梯形图_PLC分类组成与梯形图编程语言
  12. cvCloneImage()内存泄漏解决方法, cvCloneImage()和cvCopy()的区别
  13. 微信中文件为什么不能另存?
  14. 现在进行时和一般现在时的区分_38
  15. U3D PDF 旋转中心设置方法
  16. Science fiction list
  17. php yaf twig,GitHub - cheerego/happy_yaf: 搭建一个可用的Yaf,包括Laravel的Eloquent ORM、Twig、脚手架、Whoops和使用用例...
  18. 世界杯数据清单:真球迷看球必备,伪球迷速成指南(附数据amp;论文)
  19. 爱快软路由+panabit上网行为管理
  20. 刚刚,ChatGPT官宣数学能力再升级,网友:终于精通十以内加减法了

热门文章

  1. python批量删除_Python批量删除只保留最近几天table的代码实例
  2. 国内主流设计作品分享社区,用作品动世界
  3. 年底各类大型年会晚会必用的高清丝绸海报设计背景来喽!
  4. UI实用素材|电商购物类APP界面设计原则!
  5. springboot项目实例_Springboot项目的接口防刷的实例
  6. 牛客网编程题03--明明的随机数
  7. Linux C语言:用零拷贝技术实现TCP代理(源代码+测试服务端客户端代码)
  8. DPDK内存篇(一): 基本概念
  9. Linux内存管理:NUMA技术详解(非一致内存访问架构)
  10. PyCUDA Documentation