linux 设备文件的操作
文件:包含数据,具有属性,通过目录中的名字被标识,
可以从文件读数据,可以向文件写数据。
设备也支持文件的操作。
每个设备都被当作一个文件,具有文件名,i-节点号,文件所有者,权限位的集合,最新修改时间。
设备支持系统调用:open,read,write,lseek,close,stat。
设备文件和文件大小:设备文件是一个链接,而不是容器。
设备文件的i-节点存储的是指向内核子程序的指针,而不是文件的大小和存储列表。子程序被称为设备驱动程序。
ls -al /dev/pts/0
crw--w---- 1 yingziliu tty 136, 0 2021-12-23 06:35 /dev/pts/0
136:指的是设备-进程表中编号位136的子程序,参数是0
136 和 0被称为设备的主设备号和次设备号。
主设备号确定处理该设备时实际的设备驱动程序,从设备号被作为参数传输到该子程序。
每个文件都有相应的读、写和执行权限,这些权限意味着对设备的操作。
每个i-节点编号指向i-节点表中的一个结构,i-节点可以是磁盘文件,也可以是设备文件的i-节点。
i-节点的类型被记录在结构stat的成员变量st_mode的类型区域中
通过查看i-节点的内核文件类型,内核区分磁盘文件和设备文件,进行读取磁盘和访问内核设备驱动程序。
磁盘文件的i-节点包含指向数据块的指针,设备文件的i-节点包含指向内核子程序表的指针,主设备号用于告知设备读取数据的那部分代码的位置。
如:read
内核首先找到文件描述符i-节点,该i-节点用于告诉内核文件的类型。
文件是磁盘文件,内核可以通过访问块分配表来读取数据;
文件是设备文件,内核调用设备驱动程序的read部分读取数据。open,write,lseek,close等都是类似。
磁盘文件和设备文件的不同之处。
磁盘文件和设备文件都有文件名和属性。系统调用open用于创建与文件设备的连接。
磁盘文件的连接通常有内核缓冲区,从进程到磁盘的字节先被缓冲,然后才从内核的缓冲区被发送出去,
设备文件的连接,只需要尽快把数据传说出去。
磁盘连接的属性:
1.缓冲:两个管道通过一个进程单元连接时的文件描述符,进程单元是用来进行缓冲和完成其他进程任务的。
int ret=fcntl(int fd, int cmd, ... /* arg */ )
属性2:自动添加模式:对竟态操作很有用,O_APPEND 位的使能。
竞争和原子操作密切相关, lssek 和 write 的调用都是独立的系统调用,内核可以随时打断进程,从而使后面的这两个操作被中断。
当O_APPEND 被置位时,内核将 lseek 和 write 组合成一个原子操作,被连接成一个不可分割的单元。
用 open 控制文件描述符
通常在打开一个文件时,可以通过系统调用 open 的第二个参数设置文件描述符的属性
如 fd=open(WTMP_FILE, O_WRONLY|O_APPEND|OSYNC);
终端连接的属性:
getchar 和 putchar 能够在设备和进程间传输数据。
终端设备的缓冲:
1.进程在用户输入Return后才接受数据
2.进程将用户输入的Return(ASCII 13)看作换行符(ASCII 10)
3.进程发送换行符,终端接收回车换行符。
终端的设备驱动程序:处理进程和外部设备数据流的内核子程序的集合被称为tty驱动程序
驱动程序包含很多控制设备操作的设置,进程可以读、修改和重置这些驱动控制标志。
stty命令:读取和修改终端驱动程序的设置。
编写终端驱动程序:关于函数
改变终端驱动程序的设置就像改变磁盘文件连接的设置一样
1.从驱动程序获得属性
2.修改所要修改的属性
3.将修改过的驱动程序送回驱动程序
#include <termios.h>
struct termios, settings;
tcgetattr(fd,&settings);
tcsetattr(fd,how,&settings);
终端文件是人们用来和Linux进程进行通信的设备。
终端是一个设备,在目录数中表现为一个特殊的文件,通常在/dev这个目录中。
控制一个设备:ioctl
文件、设备和流
任何数据的源或者目的都被Linux 视为文件。
连接可以看作是处理步骤的组合。
linux 设备文件的操作的更多相关文章
- (转载)使用 udev 高效、动态地管理 Linux 设备文件
概述: Linux 用户常常会很难鉴别同一类型的设备名,比如 eth0, eth1, sda, sdb 等等.通过观察这些设备的内核设备名称,用户通常能知道这些是什么类型的设备,但是不知道哪一个设备是 ...
- 嵌入式 使用udev高效、动态地管理Linux 设备文件
本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本文会使那 ...
- 【转】使用 udev 高效、动态地管理 Linux 设备文件
简介: 本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本 ...
- 使用 udev 高效、动态地管理 Linux 设备文件
本文转自:https://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html 概述: Linux 用户常常会很难鉴别同一类型的设备名,比如 ...
- 使用 udev 管理 Linux 设备文件
本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本文会使那 ...
- Linux设备文件简介(转载)
Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取).块设备(有缓冲且可以随机存取).每个字符设备和块设备都必须有主.次设备号,主设备号相同的设 备是同类设备(使用同一个驱动程序).这些设 ...
- Linux设备文件三大结构:inode,file,file_operations
驱动程序就是向下控制硬件,向上提供接口,这里的向上提供的接口最终对应到应用层有三种方式:设备文件,/proc,/sys,其中最常用的就是使用设备文件,而Linux设备中用的最多的就是字符设备,本文就以 ...
- Linux设备文件简介
转:http://www.360doc.com/content/11/0418/00/5087210_110410837.shtml 版权声明 本 文作者是一位自由软件爱好者,所以本文虽然不是软件,但 ...
- Linux 设备文件的创建和mdev
引子 本文是嵌入式企鹅圈开篇--<linux字符设备驱动剖析>的姐妹篇,在上述文章里面我们具体描写叙述了字符设备驱动框架涉及的驱动注冊.通过设备文件来訪问驱动等知识.并明白通过device ...
随机推荐
- Codeforces 1276F - Asterisk Substrings(SAM+线段树合并+虚树)
Codeforces 题面传送门 & 洛谷题面传送门 SAM hot tea %%%%%%% 首先我们显然可以将所有能够得到的字符串分成六类:\(\varnothing,\text{*},s, ...
- Codeforces 626G - Raffles(贪心+堆)
题面传送门 考虑对于固定的彩票池 \(i\),我们假设现在押了 \(x\) 张彩票.利用差分的思想,从 \(x\) 张彩票变为 \(x+1\) 张时,期望的变化量 \(\Delta E=\dfrac{ ...
- 洛谷 P4709 - 信息传递(置换+dp)
题面传送门 一道挺有意思的题罢-- 首先看到这种与置换乘法相关的题,首先把这些置换拆成一个个置换环,假设输入的置换有 \(m\) 个置换环,大小分别为 \(s_1,s_2,\cdots,s_m\),显 ...
- Nginx+uwsgi+django+vue部署项目
购买服务器 # 购买阿里云服务器 # 短期或是测试使用,创建 按量收费 服务器,可以随时删除,删除后不再计费,但要保证账户余额100元以上 连接服务器 1)账号 >: ssh root@39.9 ...
- 用友低代码开发平台YonBuilder首次亮相DevRun开发者沙龙
2020年的今天,没有人会再质疑企业上云的必要性与价值所在.从高科技行业到传统领域,大大小小的企业都希望走在变革道路前列,通过企业云加快业务数字化转型,更好地维护和管理企业数据. 然而,大多数企业都很 ...
- InnoDB学习(一)之BufferPool
我们知道InnoDB数据库的数据是持久化在磁盘上的,而磁盘的IO速度很慢,如果每次数据库访问都直接访问磁盘,显然严重影响数据库的性能.为了提升数据库的访问性能,InnoDB为数据库的数据增加了内存缓存 ...
- 巩固javaweb的第十九天
巩固内容: 使用 form 元素 使用 form 元素封装要提交的信息 要向服务器提交信息,需要使用 form 元素,所有要提交的信息都应该在 form 内部.在 注册界面中,所有要输入的信息都位于 ...
- 微信小程序的wx.login用async和data解决code不一致的问题
由于wx.login是异步函数,导致在我们获取微信小程序返回的code去请求我们的登录接口时code的值会异常.现在用promise封装一下,将他success的结果返回,在登陆函数中await就可以 ...
- Spark检查点机制
Spark中对于数据的保存除了持久化操作之外,还提供了一种检查点的机制,检查点(本质是通过将RDD写入Disk做检查点)是为了通过lineage(血统)做容错的辅助,lineage过长会造成容错成本过 ...
- 数仓day04----日志预处理2
1.详细描述idmap的整个计算方案 (1)使用SparkSession对象读取用户不同类别的埋点日志,解析并抽取出相应的标识id,使用union进行合并,得到装有汇总标识id的rdd(ids) (2 ...