精华内容
下载资源
问答
  • Linux一切皆文件

    千次阅读 2018-07-08 22:58:16
    1. Linux文件类型普通文件-,Normal File如mp4、pdf、html log用户可以根据访问权限对普通文件进行查看、更改和删除包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性...

    1. Linux文件类型

    普通文件

    -,Normal File

    mp4pdfhtml log

    用户可以根据访问权限对普通文件进行查看、更改和删除

    包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-] 

    目录文件

    ddirectory file

     /usr/ /home/

    目录文件包含了各自目录下的文件名和指向这些文件的指针,打开目录事实上就是打开目录文件,只要有访问权限,就可以随意访问这些目录下的文件

    能用#cd命令进入的。第一个属性为[d],例如 [drwxrwxrwx]

    硬链接

    - ,hard links: 

    若一个inode号对应多个文件名,则称这些文件为硬链接。硬链接就是同一个文件使用了多个别名删除时,只会删除链接不会删除文件;

    硬链接的局限性:1.不能引用自身文件系统以外的文件,即不能引用其他分区的文件;2.无法引用目录;

     

    符号链接

    (软链接)

    lsymbolic link

     

    若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接,克服硬链接的局限性类似于快捷方式,使用与硬链接相同。

    字符设备文件 

    cchar

    文件一般隐藏在/dev目录下,在进行设备读取和外设交互时会被使用到

    即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]

    #/dev/tty的属性是 crw-rw-rw-,注意前面第一个字 c,这表示字符设备文件

    块设备文件

     

    bblock

    存储数据以供系统存取的接口设备,简单而言就是硬盘。

    # /dev/hda1 的属性是 brw-r----- ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备

     

    系统中的所有设备要么是块设备文件,要么是字符设备文件,无一例外

    FIFO管道文件

    ppipe

    管道文件主要用于进程间通讯。FIFO解决多个程序同时存取一个文件所造成的错误。比如使用mkfifo命令可以创建一个FIFO文件,启用一个进程AFIFO文件里读数据,启动进程BFIFO里写数据,先进先出,随写随读。

    # pipe

    套接字

     

    ssocket

    以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。用于进程间的网络通信,也可以用于本机之间的非网络通信,第一个属性为 [s],这些文件一般隐藏在/var/run目录下,证明着相关进程的存在

    # softlink...

    参考网址:

    Linux - 硬链接(Hard Links)和符号链接(Symbolic Links)

    Linux一切皆文件

    Linux文件系统详解

    理解linux虚拟文件系统VFS - 概述

    2. 文件的管理机制(虚拟文件系统VFS)

    1) 虚拟文件系统VFS的作用

    虚拟文件系统就是:对于一个system,可以存在多个“实际的文件系统”,例如:ext2ext3fat32ntfs...例如我现在有多个分区,对于每一个分区我们知道可以是不同的“实际文件系统”,例如现在三个磁盘分区分别是:ext2ext3fat32,那么每个“实际的文件系统”的操作和数据结构什么肯定不一样,那么,用户怎么能透明使用它们呢?那么这个时候就需要VFS作为中间一层!用户直接和VFS打交道。例如readwrite,那么映射到VFS中就是sys_readsys_write,那么VFS可以根据你操作的是哪个“实际文件系统”(哪个分区)来进行不同的实际的操作!那么这个技术也是很熟悉的“钩子结构”(此名称不知道是否合理,自己一直这样叫了)技术来处理的。其实就是VFS中提供一个抽象的struct结构体,然后对于每一个具体的文件系统要把自己的字段和函数填充进去,这样就解决了异构问题。

    VFS存在的意义可归结为以下四点

    l 向上,对应用层提供一个标准的文件操作接口;

    l 对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;

    l VFS内部则通过一系列高效的管理机制,比如inode cache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;

    l 此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单。

    VFS框架结构图

    或者:

     虚拟文件系统结构图

    2 文件系统分类

    文件系统一般可以分为以下几类

    l 网络文件系统,如 nfscifs、cdoa、afs等网络文件系统

    l 磁盘文件系统,如ext2/ext3/ext4文件系统;

    l 特殊文件系统,如 procsysfsramfstmpfspipe文件系统等。

     

    实现以上这些文件系统并在 Linux 下共存的基础就是Linux VFSVirtual File System又称 Virtual Filesystem Switch),即虚拟文件系统。VFS作为一个通用的文件系统,抽象了文件系统的四个基本概念:文件、目录项(dentry)、索引节点(inode)及挂载点,其在内核中为用户空间层的文件系统提供了相关的接口。VFS实现了open()read()等系统调并使得cp等用户空间程序可跨文件系统。VFS真正实现了上述内容中:在 Linux中除了进程之外一切皆是文件。

     

    3) Linux VFS四个基本对象

    l 超级块对象(superblock object)

    l 索引节点对象(inode object)

    l 目录项对象(dentry object)

    l 文件对象(file object)

    超级块对象代表一个已安装的文件系统;索引节点对象代表一个文件;目录项对象代表一个目录项,如设备文件 event5 在路径 /dev/input/event5 中,其存在四个目录项对象:dev/ input/ 及 event5。文件对象代表由进程打开的文件。为文件路径的快速解析,Linux VFS 设计了目录项缓存(Directory Entry Cache,即 dcache)。

    详细解释网址:Linux 文件系统(一)---虚拟文件系统VFS----超级块、inode、dentry、file

     

    4) 目录树

    VFS是一种软件机制,也许称它为Linux的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。所以在每次系统初始化期间,Linux都首先要在内存当中构造一棵 VFS的目录树(Linux 的源代码里称之为namespace),实际上便是在内存中建立相应的数据结构。VFS目录树在Linux的文件系统模块中是个很重要的概念,VFS中的各目录其主要用途是用来提供实际文件系统的挂载点,当然在 VFS 中也会涉及到文件级的操作,如图:

    是一种可能的目录树在内存中的影像:

     VFS 目录树结构

    5) 文件系统的注册

    这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。比如在笔者的 Linux 机器下就注册有 "rootfs""proc""ext2""sockfs" 等十几种文件系统。

    在一个区被格式化为一个文件系统之后,它就可以被Linux操作系统使用了,只是这个时候Linux操作系统还找不到它,所以我们还需要把这个文件系统「注册」进Linux操作系统的文件体系里,这个操作就叫「挂载」 (mount)
    挂载是利用一个目录当成进入点(类似选一个现成的目录作为代理),将文件系统放置在该目录下,也就是说,进入该目录就可以读取该文件系统的内容,类似整个文件系统只是目录树的一个文件夹(目录)。
    这个进入点的目录我们称为「挂载点」。

    由于整个 Linux 系统最重要的是根目录,因此根目录一定需要挂载到某个分区。 而其他的目录则可依用户自己的需求来给予挂载到不同的分去。

    硬盘经过分区和格式化,每个区都成为了一个文件系统,挂载这个文件系统后就可以让Linux操作系统通过VFS访问硬盘时跟访问一个普通文件夹一样。这里通过一个在目录树中读取文件的实际例子来细讲一下目录文件和普通文件。

    参考网址

    linux的文件系统和虚拟文件系统(VFS)

    理解linux虚拟文件系统VFS - 概述

    解析 Linux 中的 VFS 文件系统机制

    Linux文件系统详解

    展开全文
  • 为何linux一切皆文件

    千次阅读 2019-11-25 23:35:17
    本文作为linux文件的基础介绍,是linux文件系列的开篇,主要面向想深入学习linux的小伙伴,最后的延伸学习部分给出了学习建议。

    1 引言

    · 本文作为linux文件的基础介绍,是linux文件系列的开篇,主要面向想深入学习linux的小伙伴,最后的延伸学习部分给出了学习建议。
    · 首先开门见山,给出结论:因为linux将文件作为一切可用资源的使用接口.“一切资源”包括内存、磁盘、其他各种设备、进程间的通信,还有网络通信。这是一种简化的思想,把一切资源都简化为文件展示出来,将这些对资源的操作简化为对文件的操作。
    · 下面探究这个结论如何得出:

    2.文件类型

    通过linux文件有如下几种类型,在Linux下可用ls –al来查看:

    文件描述符 解释
    -rw-r—r— 指明了该文件是一个普通文件,以”-“开头的都是普通文件,而以”d”开头的是目录文件
    brw-rw---- 指明了/dev/sda1是一个块设备(Block Device)文件。以”b”开头的文件都是块设备文件。
    crw-rw---- 指明了/dev/ttyS0是一个字符设备(Chartacter Device)文件,以”c”开头的文件都是字符设备文件。
    srwxrwxrwx 指明了这是一个socket文件。以””开头的文件都是指明了socket文件
    prwxr—r– 指明了了该文件是一个管道文件。管道文件的一个属性是”p”。
    lrwxrwxrwx 指明了该文件是一个软链接文件(或称符号链接文件),该文件指向了另一个文件。以”l”开头的文件是软链接文件。
    -rw-r—r— 该文件看上去是个普通文件,但它实际上是一个硬链接文件
    -rwsr-xr-x 指明了该文件是一个setUid可执行文件,这是根据第四个字符”s”判断的。
    -rwxr-sr-x 指明了该文件是一个setGid可执行文件,这是根据第七个字符中的”s”判断的。

    上述文件中,普通文件和硬链接文件并无什么区别,软连接文件只是指向了一个普通文件,所以把这些都认为是普通文件了;而块设备文件和字符设备文件统称为设备文件;socket文件和管道文件都是用作进程间通信的,只不过socket文件可以用在不同系统间的两个进程来通信,统称为通信文件。而最后两个是可以影响用户执行权限的文件,只是在普通文件上做了标记,这里不做深究,想了解的见 Linux 文件特殊权限详解[suid/sgid/t]

    3.文件解析图

    · 这里将文件的操作简化成一个图来描述:

    操作文件
    应用程序
    虚拟文件系统VFS
    设备文件
    文件系统
    特殊文件
    字符设备
    块设备

    · 由上图可以看出,系统对文件的操作首先是通过虚拟文件系统来区分。
    · 首先,普通文件是通过文件系统来访问,设备文件是通过设备文件来访问,有一个例外就是块设备可以通过文件系统的接口访问。最后特殊文件,是一些虚拟的文件系统的文件,包括proc、sysfs等。
    · 大家肯定发现了,通信文件咋没讲?其实通信文件是作为网络的抽象而存在,其实是属于proc,也就是属于特殊文件中。

    4.虚拟文件系统(VFS)

    · 通过文件解析图,我们了解到,虚拟文件系统是文件操作的入口。linux内核通过虚拟文件系统来管理文件系统。VFS为所有的文件系统提供了统一的接口,这使得用户访问文件系统可以使用同样的系统调用,为此,所有的文件系统也必须要按照VFS定义的方式来实现。
    · 而VFS只存在于内存当中,它需要将硬盘上的文件系统提取(也可说是抽象)到内存中来实现。

    5.文件系统

    · 对普通文件操作,用户通常使用的是open、close、read、write等函数,而这也是文件系统的基本操作。
    · 这里讲的文件系统都是真实的文件系统,也就是文件是的确存在的,而不仅仅是个接口。而文件数据最重要的就是如何在这种介质上存放数据。这里依据存储介质做一个简单的分类:
    1)内存文件系统
    这种文件系统的文件是存储在内存当中的,主要作用就是暂存运行时的数据。特点是,掉电不保存,存储速度快。例如tmpfs。
    2)磁盘文件系统
    这是最主要的文件系统,最初的计算机都是用磁盘来存取数据的,因此这种类型的文件系统数量最多。例如NTFS、ext4等。
    3)flash文件系统
    由于flash芯片的成本不断降低,以及在嵌入式领域的广泛使用,由于flash独特的存取访视,因而也出现了很多专门针对flash的文件系统,例如jffs2、yafffs等。
    · 文件系统设计上的不同,主要是由于存储介质存取效率的差异。存取效率又和应用场景、操作系统等因素关系密切。因此我们可以看到,不同操作系统的文件系统通常是不同的。

    6.设备文件

    · 设备文件的位置在"/dev"目录下。可以通过“ls -al”查看设备对应的设备号,设备文件的内容就是设备的唯一编号,包括主设备号和次设备号。
    · 如下图所示:(不是设备文件的次设备号位置标示的是文件大小)blog.csdnimg.cn/20191127080723144.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUyMzc3NA==,size_16,color_FFFFFF,t_70)
    · 设备其实并不像文件,比如鼠标就是需要读取鼠标滑动和敲击输入的数据,这和读写不是很像,为了适应这种设备的特殊需要,linux对设备新增了ioctl接口,让各自不同的设备实现特定的ioctl。
    · 而块设备是可以通过文件系统来访问的,要以这种方式访问之前,需要mount指令来挂载到对应的目录下,才能像普通文件一样访问。

    7.特殊文件-socket文件

    · 对于特殊文件,例如sysfs和proc,都是作为显示系统信息而存在的特殊文件系统,sysfs是显示设备、驱动和总线间关系的文件系统,而proc则将大量内核中的信息以及可调参数作为文件方式来显示,包括各个进程使用的情况,这些文件都是只读文件。socket文件就是作为一种特殊的服务显示在每个进程的内容中。我们知道socket常被用作进程间通信的工具,这样的socket文件通常放到/var目录中。
    · 相比于设备文件,socket文件更不像文件了。因为要使用网络通信,重要的是各种网络协议的选择,以及各种属性的配置。通过socket函数的定义,我们就能明白,这个比open一个文件复杂的多,因此需要另外设计了一些接口(例如; socket、bind、listen、connect、send、recv等),但是read、write和close仍然还是可以使用的。

    8.延伸学习

    · linux一切皆文件,这种思想的目的是简化对资源的操作,让应用开发变得简单方便,但也是这样,导致对不太像文件的设备和socket需要提供定制接口,因此这两块内容的学习也比较难以理解,当然也由于这两块本身就很复杂(+﹏+) 。
    · 因此想进一步深入学习的同学可以有以下方向:
    (1) 对设备操作感兴趣的,可以了解设备驱动程序开发,推荐宋宝华老师的《Linux设备驱动开发详解》
    (2) 对网络设备感兴趣的,推荐《TCPIP详解》(讲理论)和 《深入理解LINUX网络技术内幕》(讲实践)
    (3) 对各种系统操作感兴趣的,推荐《 UNIX环境高级编程》和《Linux UNIX系统编程手册》嘿嘿,这两本书相比,前者更注重全面,后者更注重深度。
    (4) 如果对各种文件系统感兴趣,就要看各种文件系统的源码了,这也是我后续的写作方向,后续我会深入内核源码,分析文件从应用层通过内核如何一步步到达磁盘。

    如果觉得我的文章还有点收获,就点个赞吧! d=====( ̄▽ ̄*)b

    下一篇:https://blog.csdn.net/weixin_42523774/article/details/103341058

    展开全文
  • Linux 一切皆文件认知

    2020-04-25 10:38:10
    Linux一切皆文件 一切都可看作是文件,其最显著的好处是对于上面所列出的输入/输出资源,只需要相同的一套 Linux 工具、实用程序和 API。你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)来处理unix...

    Linux的一切皆文件

    一切都可看作是文件,其最显著的好处是对于上面所列出的输入/输出资源,只需要相同的一套 Linux 工具、实用程序和 API。你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)来处理unix中大多数的资源。

    为了便于文件的管理,Linux 还引入了目录(有时亦被称为文件夹)这一概念。目录使文件可被分类管理,且目录的引入使 Linux 的文件系统形成一个层级结构的目录树。

    Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

    更新学习资料:

    https://edu.csdn.net/course/detail/28104
    https://edu.csdn.net/course/detail/28103

    查看一个文件的属性以及文件所属的用户和组命令

    ls -l

    ll

    在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。

    • 当为[ d ]则是目录
    • 当为[ - ]则是文件;
    • 若是[ l ]则表示为链接文档(link file);
    • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);(/dev )
    • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

    rwxr-xr-x

    其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)

    要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已

    每个文件的属性由左边第一部分的10个字符来确定(如下图)。

     

    从左至右用0-9这些数字来表示。

    第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。

    第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

    其中,第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;

    第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限;第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。

    Linux档案的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限

    更新学习资料:

    https://edu.csdn.net/course/detail/28104
    https://edu.csdn.net/course/detail/28103​​​​​​​

    举例:档案的权限字符为 -rwxrwxrwx  这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

    r:4  w:2 x:1

    每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:

    owner = rwx = 4+2+1 = 7

    group = rwx = 4+2+1 = 7

    others= --- = 0+0+0 = 0

     

     

    更新学习资料:

    https://edu.csdn.net/course/detail/28104
    https://edu.csdn.net/course/detail/28103​​​​​​​

     

    展开全文
  • LINUX一切皆文件

    2015-07-22 20:21:00
    只要用过linux的筒子,或者保守点说接触到一些linux思想的同志肯定听说过这样一句话,在linux下,“一切皆文件”! 不错,今天walfred将在快速上手linux设备驱动这一块,谈谈linux的设备也符合“一切皆文件...

    只要用过linux的筒子,或者保守点说接触到一些linux思想的同志肯定听说过这样一句话,在linux下,“一切皆是文件”!


    不错,今天walfred将在快速上手linux设备驱动这一块,谈谈linux的设备也符合“一切皆是文件”的思想在linux设备驱动模型应用。如果你不理解Linux设备模型,请看下面:

    1.[快速上手Linux设备驱动]之我看Linux设备模型(总线篇)

    2.[快速上手Linux设备驱动]之我看Linux设备模型(设备篇)

    3.[快速上手Linux设备驱动]之我看Linux设备模型(设备驱动篇)

    4.[快速上手Linux设备驱动]之我看Linux设备模型(类子系统篇)

    “一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。

    当然,在这里我先给大家上一道预备知识的大菜,不过这边我先暂时小打小闹下,稍微说下,日后详述之。

    有请VFS上场--

    虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个抽象功能,允许不同的文件系统共存。系统中所 有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。

    为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据 结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准 的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都 是相同的。下图显示了VFS在内核中与实际的文件系统的协同关系。


    正文

    从上图,我们可以简单的看出一个在user space的应用程序通过系统调用,经过VFS层面,在和设备驱动打交道,最后设备驱动驱动对应设备,这是一个比较简单的描述,如果分析起来也就不难得到:user space的应用程序与VFS的接口就是系统调用,VFS与驱动程序的接口就是file_operations。

    关于file_operations

    从之前打过交道的字符设备驱动,我们就知道存在了这么一种file_operations结构体,我现在可以说在描述一个设备,我们用户最接近的方 法是file_operations,Linux每类设备都定义了文件操作方法,例如,字符设备的操作方法为def_chr_fops,块设备为 def_blk_fops,网络设备为bad_sock_fops。每种设备类型底层操作方法是不一样的,但是通过file_operations方法将 设备类型的差异化屏蔽了,这就是Linux能够将所有设备都理解为文件的缘由。这里因为我这几天在搞块设备,所以先看下def_blk_fops。

     

    struct file_operations def_blk_fops = {

            open:           blkdev_open,

            release:        blkdev_close,

            llseek:         block_llseek,

             read:           generic_file_read,

             write:          generic_file_write,

             mmap:           generic_file_mmap,

             fsync:          block_fsync,

             ioctl:          blkdev_ioctl,

    };

     设备差异性

    到这里,又提出一个问题:既然这样,那设备的差异化又该如何体现呢?在文件系统层定义了文件系统访问设备的方法,该方法就是 address_space_operations,文件系统通过该方法可以访问具体的设备。对于字符设备而言,没有实现 address_space_operations方法,也没有必要,因为字符设备的接口与文件系统的接口是一样的,在字符设备open操作的过程中,将 inode所指向的file_operations替换成cdev所指向的file_operations就可以了。这样用户层读写字符设备可以直接调用 cdev中file_operations方法了。 

    [linux/fs.h]

    /*

    *Linux页高速缓存实用化address_space结构体描述页高速缓存中的页面

    *定义文件在linux/fs.h中

    */

    struct address_space {

            struct inode            *host;              /* 拥有节点 */

            struct radix_tree_root  page_tree;          /* 包含全部页面的radix树 */

            spinlock_t              tree_lock;          /* 保护page_tree的自旋锁 */

            unsigned int            i_mmap_writable;    /* VM_SHARED记数 */

            struct prio_tree_root   i_mmap;             /* 似有映射链表 */

            struct list_head        i_mmap_nonlinear;   /* VM_NONLINEAR链表 */

            spinlock_t              i_mmap_lock;        /* 保护i_mmap的自旋锁 */

            atomic_t                truncate_count;     /* 截断记数 */

            unsigned long           nrpages;            /* 页总数 */

            pgoff_t                 writeback_index;    /* 回写的起始偏移 */

            struct address_space_operations   *a_ops;   /* 操作表 */

            unsigned long           flags;              /* gfp_mask掩码与错误标识 */

            struct backing_dev_info *backing_dev_info;  /* 预读信息 */

            spinlock_t              private_lock;       /* 私有address_space锁 */

            struct list_head        private_list;       /* 私有address_space链表 */

            struct address_space    *assoc_mapping;     /* 相关的缓冲 */

    };

    /*

    */

    struct address_space_operations {

            int (*writepage)(struct page *, struct writeback_control *);

            int (*readpage) (struct file *, struct page *);

            int (*sync_page) (struct page *);

            int (*writepages) (struct address_space *, struct writeback_control *);

            int (*set_page_dirty) (struct page *);

            int (*readpages) (struct file *, struct address_space *,

                              struct list_head *, unsigned);

            int (*prepare_write) (struct file *, struct page *, unsigned, unsigned);

            int (*commit_write) (struct file *, struct page *, unsigned, unsigned);

            sector_t (*bmap)(struct address_space *, sector_t);

            int (*invalidatepage) (struct page *, unsigned long);

            int (*releasepage) (struct page *, int);

            int (*direct_IO) (int, struct kiocb *, const struct iovec *,

                              loff_t, unsigned long);

    };

            到这里,是不是明白了linux的“设备”也是文件了呢?

    转载于:https://www.cnblogs.com/reality-soul/p/4668526.html

    展开全文
  • Linux 一切皆文件

    千次阅读 2016-12-09 22:19:54
    一切皆文件”是 Unix/Linux 的基本哲学之一,不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。 文件本质就是一种...
  • 一、linux文件类型 (涉及到I/O的都可以抽象为文件) 1.普通文件 # xxx.log 2.目录 # /usr/ /home/ 3.字符设备文件 # /dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件,比如猫等串口...
  • Linux一切皆文件(包含好处和弊端) Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录(Windows 下称为文件夹)是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接...
  • Linux一切皆文件

    2019-04-25 16:50:03
    Linux一切皆文件 1、 Linux中所有内容都是以文件的形式保存和管理,即:一切皆文件。 普通文件是文件。 目录(在win下称为文件夹)是文件。 硬件设备(键盘、硬盘、打印机)是文件。 套接字(socket)、网络通信等...
  • Linux一切皆文件(包含好处和弊端)

    千次阅读 2019-06-29 20:44:56
    Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录(Windows 下称为文件夹)是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接字(socket)、网络通信等资源也都是...
  • linux环境中有一个基本的设计原则—everything is file。所有的内容都是以文件的形式来抽象(比如:普通文件、目录、进程、网络、硬件等),可以对其进行打开、读取、写入等操作。 文件系统为操作系统提供了组织...
  • 来自《实例演绎Unix/Linux的"一切皆文件"思想》 大家习惯了使用socket来编写网络程序,socket是网络编程事实上的标准。 我们知道,在Unix/Linux系统中“一切皆文件”,socket也被认为是一种文件,socket被表示成文件...
  • 1、在linux中,一切皆文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2、操作这些不同的类型就像操作文件一样,比如增删改查等 3、块设备支持随机访问,而字符设备只能依据先后...
  • linux下“一切皆文件”是Unix/Linux的基本哲学之一。 普通文件、目录、字符设备、块设备和网络设备(套接字)等在Unix/Linux都被当做文件来对待。虽然他们的类型不同,但是linux系统为它们提供了一套统一的操作接口...
  • 为何说在LINUX一切皆文件

    千次阅读 2020-03-20 00:11:16
    关于linux下一切皆文件的思考linux和windows的区别了解一切皆文件...于是乎就查找在windows中 是什么样子的通过链接:Linux一切皆文件(包含好处和弊端) 里明白了 linux和window的区别以及各自的优缺点 了解一切皆...
  • Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而...
  • Linux 的世界,一切皆文件linux的世界中,它会把一切都看作是文件,包括普通文件、目录文件、字符设备(键盘、鼠标等)、块设备(硬盘、光驱等)、socket、epoll、socket、管道、终端等等,所有一切都抽象成了...
  • 参考内容 : Linux中“一切皆文件”是什么意思?中刘长元大佬回答 万物皆文件 Linux中的一切对象都可以通过文件的方式访问、保存、管理。它体现了一种面向对象的设计思想。 在Linux下, 普通文件、目录、硬件设备、...
  • LinuxLinux根目录下的文件说明(一切皆文件) 文章目录【LinuxLinux根目录下的文件说明(一切皆文件)1、/bin 目录2、/sbin 目录3、/home 目录4、/root 目录5、/dev 目录6、/tmp 目录7、/boot 目录8、/lib 目录9...
  • 深入解析Linux系统中的“一切皆文件

    千次阅读 2021-03-23 10:29:11
    一切皆文件1 C文件IO2 文件相关系统调用接口2.1 open 接口介绍3 文件描述符3.1 什么是文件描述符3.2 文件描述符的分配规则3 你是怎么理解重定向的(从OS的角度)4二级目录三级目录 1 C文件IO C默认会打开三个输入...
  • 刚开始接触linux的时候, 看到过这样一句话:linux一切皆文件。 当理解深刻后, 发现确实如此。  又记得当年学习C语言的时候, 看到书上介绍文本文件和二进制文件, 瞬间懵逼, 理解非常模糊。 后来玩h.264, 生成...
  • 大家习惯了使用socket来编写网络程序,socket是网络编程事实上的标准。我们知道,在Unix/Linux系统中“一切皆文件”,socket也被认为是一种文件,soc...
  • 一切皆文件:UNIX,Linux 操作系統的設計哲學

    万次阅读 多人点赞 2020-08-19 10:37:27
    Linux 中的进程就是一个数据结构,看明白就可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。 一、进程是什么 首先,抽象地来说,我们的计算机...
  • 一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时...
  • 众所周知,在 Linux一切皆文件,包括硬盘和显卡等。在 Linux 中导航时,大部分的文件都是普通文件和目录文件。但是也有其他的类型,对应于 5 类不同的作用。因此,理解 Linux 中的文件类型在许多方面都是非常...
  • 只要用过linux的筒子,或者保守点说接触到一些linux思想的同志肯定听说过这样一句话,在linux下,“一切皆文件”! 不错,今天walfred将在快速上手linux设备驱动这一块,谈谈linux的设备也符合“一切皆文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,634
精华内容 3,853
关键字:

linux一切皆文件理解

linux 订阅