文件:包含数据,具有属性,通过目录中的名字被标识,

可以从文件读数据,可以向文件写数据。

设备也支持文件的操作。

每个设备都被当作一个文件,具有文件名,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 设备文件的操作的更多相关文章

  1. (转载)使用 udev 高效、动态地管理 Linux 设备文件

    概述: Linux 用户常常会很难鉴别同一类型的设备名,比如 eth0, eth1, sda, sdb 等等.通过观察这些设备的内核设备名称,用户通常能知道这些是什么类型的设备,但是不知道哪一个设备是 ...

  2. 嵌入式 使用udev高效、动态地管理Linux 设备文件

    本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本文会使那 ...

  3. 【转】使用 udev 高效、动态地管理 Linux 设备文件

    简介: 本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本 ...

  4. 使用 udev 高效、动态地管理 Linux 设备文件

    本文转自:https://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html 概述: Linux 用户常常会很难鉴别同一类型的设备名,比如 ...

  5. 使用 udev 管理 Linux 设备文件

    本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本文会使那 ...

  6. Linux设备文件简介(转载)

    Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取).块设备(有缓冲且可以随机存取).每个字符设备和块设备都必须有主.次设备号,主设备号相同的设 备是同类设备(使用同一个驱动程序).这些设 ...

  7. Linux设备文件三大结构:inode,file,file_operations

    驱动程序就是向下控制硬件,向上提供接口,这里的向上提供的接口最终对应到应用层有三种方式:设备文件,/proc,/sys,其中最常用的就是使用设备文件,而Linux设备中用的最多的就是字符设备,本文就以 ...

  8. Linux设备文件简介

    转:http://www.360doc.com/content/11/0418/00/5087210_110410837.shtml 版权声明 本 文作者是一位自由软件爱好者,所以本文虽然不是软件,但 ...

  9. Linux 设备文件的创建和mdev

    引子 本文是嵌入式企鹅圈开篇--<linux字符设备驱动剖析>的姐妹篇,在上述文章里面我们具体描写叙述了字符设备驱动框架涉及的驱动注冊.通过设备文件来訪问驱动等知识.并明白通过device ...

随机推荐

  1. 洛谷 P4272 - [CTSC2009]序列变换(堆)

    洛谷题面传送门 u1s1 在我完成这篇题解之前,全网总共两篇题解,一篇使用的平衡树,一篇使用的就是这篇题解讲解的这个做法,但特判掉了一个点,把特判去掉在 BZOJ 上会 WA 一个点. 两篇题解都异常 ...

  2. Linux中shell去除空行的几种方法

    有时我们在处理和查看文件时,经常会有很多空行,为了美观或是有需要时,就有必要把这些除行去掉了,方法如下: #如需将结果输出加入重定向        > 文件名 1)用tr命令 代码如下: cat ...

  3. 【模板】Splay(伸展树)普通平衡树(数据加强版)/洛谷P6136

    题目链接 https://www.luogu.com.cn/problem/P6136 题目大意 需要写一种数据结构,来维护一些非负整数( \(int\) 范围内)的升序序列,其中需要提供以下操作: ...

  4. 学习java的第七天

    一.今日收获 1.看完全学习手册上java关键字与标识符两节 2.了解了java的关键字与标识符 二.今日难题 1.基本都理解 三.明日目标 1.继续看完全学习手册上的内容 2.加油!

  5. HDFS06 DataNode

    DataNode 目录 DataNode DataNode工作机制 数据完整性 DataNode掉线时限参数设置 DataNode工作机制 一个数据块在DataNode上以文字形式存储在磁盘上,包括一 ...

  6. 日常Java 2021/11/6

    Java多线程编程 Java给多线程编程提供了内置的支持.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个钱程,每条线程并行执行不同的任务.多线程是多任务的一种特别的形式,但多线程使用 ...

  7. 大数据学习day36-----flume02--------1.avro source和kafka source 2. 拦截器(Interceptor) 3. channel详解 4 sink 5 slector(选择器)6 sink processor

    1.avro source和kafka source 1.1 avro source avro source是通过监听一个网络端口来收数据,而且接受的数据必须是使用avro序列化框架序列化后的数据.a ...

  8. 商业爬虫学习笔记day4

    一.获取登录后页面信息的两种方法 1.第一种方法: 人为把有效cookies加到请求头中,代码如下 import urllib.request # 确定url url = "https:// ...

  9. 【Reverse】每日必逆0x00

    附件:https://files.buuoj.cn/files/aa4f6c7e8d5171d520b95420ee570e79/a9d22a0e-928d-4bb4-8525-e38c9481469 ...

  10. Largest Rectangle in Histogram及二维解法

    昨天看岛娘直播解题,看到很经典的一题Largest Rectangle in Histogram 题目地址:https://leetcode.com/problems/largest-rectangl ...