Linux c编程(20210605)

Linux文件的基础操作

Linux中的文件是指以计算机的存储设备为载体的信息集合,就是保存在内存、磁盘等设备上的一个个由各种数据组合在一起的实体,是Linux在物理上最基本的组成单元。

Linux文件

ls命令查看目录下的文件

Linux的文件类型

通常可以分为7大类

文件类型缩写英文名称
普通文件-Regular file
目录文件DDirectory file
块设备文件BBlock special file
字符设备文件CCharacter special file
命名管道文件FFIFO或者named pipe
套接字文件SSocket
符号链接文件lSymbolic link
  1. 普通文件

    不包含文件系统的结构信息,可包括图形文件、数据文件、文档文件、声音文件等

    按内部结构分为: 文本文件和二进制文件

    • 文本文件

      字符组成的文件,用户可以直接读到的数据,Linux系统的配置文件基本都属于这种

      可以使用cat 命令直接查看

    • 二进制文件

      按信息在内存中的格式表示的文件

      通常不能直接查看,必须使用相应的软件

      通常来说,Linux中的可执行文件基本都属于这种类型,可以运行

  2. 目录文件

    Linux中的目录也是以文件的形式存在,成为目录文件。

    用户可以读取但是不能修改目录文件的内容,只允许系统修改

    目录文件在文件名和索引节点之间的转换起到桥梁的作用,是文件系统树形文文件结构的关键。其由文件名和索引节点号构成。

    每个目录文件的前2项是2个特定的文件 : .和…,. 对应于该目录文件本身的索引节点,…对应其父目录的索引节点

  3. 字符设备文件和块设备文件

    Linux把设备(硬盘、串口等)也看作文件,具有相同的操作方法。

    这种文件被称为设备文件,是用于操作系统与IO设备提供连接的一种文件,分为字符设备文件和块设备文件,分别对应字符设备和块设备,这些文件通常存放在dev目录中。

    Linux中存在一个目录 /dev/null,所有放入这一文件的设备的数据都将不存在,可以把此放入操作看成是删除。

    • 字符设备文件:是一个顺序的数据流设备文件,读写按字节进行,而且这些字符是连续地形成一个数据流。字符设备不具有缓冲区,所以对这种设备地读写是实时地,如串口终端、磁带机等。
    • 块设备文件:具有一定结构地随机存取设备文件,读写按块进行,使用缓冲区来存放暂时的数据,待条件满足后,从缓冲区一次性写入设备,或一次性读出放到缓冲区中,如磁盘和文件系统等。
      • 串口设备文件 /dev/tty
      • 硬盘设备文件 /dev/hadl
  4. 命名管道文件

    又称为先进先出文件,其主要用于在Linux的进程间传递数据,是Linux进程间的一种通信机制。

    管道是进程间传递数据的"媒介",一个进程将数据写入管道的一端,另一个进程从管道另一端读取数据。

    通常,管道是建立在高速缓冲中的。

    先进先出的处理规定。

    可以分为有名管道和无名管道。

  5. 套接字文件

    主要用于在不同计算机进程间的通信,是操作系统内核中的一个数据结构,是网络中的节点进行相互通信的门户。

    三种类型:流式套接字、数据报套接字和原始套接字

    • 流式套接字就是TCP套接字

    • 数据报套接字也就是UDP套接字

    • 原始套接字用"SOCK_RAW"表示

      原始套接字允许对低层协议,如IP或ICMP进行直接访问,主要用于对新的网络协议进行测试。

  6. 符号链接文件

    又称链接文件,是一种特殊文件。

    实际上是指向一个真实存在的文件链接。

    链接文件提供了一种共享文件的方法,在链接文件中不是通过文件名实现文件共享,而是通过链接文件所包含的指向文件的指针来实现对文件的访问。

    普通用户可以建立链接文件,并通过其指针访问它所指向的那个文件。

    使用链接文件可以访问普通文件,也可以访问目录文件和不具有普通文件形态的其他文件。

    链接文件可以在不通过文件系统之间建立一种链接关系。

    根据链接对象的不同,可以分为硬链接文件和符号链接文件。

Linux的文件结构和文件描述符

Linux的文件是个简单的字节数据序列,所以在Linux下对于文本文件、二进制文件的结构和访问方法是相同的。

Linux的文件是由一系列的块组成,在同一个文件系统中块大小相同。

Linux使用文件描述符来标识一个进程正在访问的特定文件,当打开一个文件或者创建一个文件时,Linux将返回一个文件描述符,以供其他操作引用,通常来说文件描述符是一个小的非负整数。

文件描述符是对应进程的,每一个文件描述符都对应一个特定的文件,而每一个特定的文件可以对应不同的进程,存在多个不同的文件描述符。

在Linux中,每个进程都可以拥有最多1024个文件描述符,并且有自己的文件描述符表,其中前三项对于一般的进程是固定的,且是由系统自动打开的。说明如下:

  • 文件描述符0:标准输入文件,通常对应键盘等输入设备
  • 文件描述符1:标准输出文件,通常对应显示设备
  • 文件描述符2:标准错误输出文件,通常也是对应显示设备。

对于以上三个文件描述符,用户程序不用执行文件打开操作就可以直接使用,其在头文件中的定义部分:

#define STDIN_FILENO   0  //标准输入
#define STDOUT_FINENO  1  //标准输出
#define STDERR_FILENO  2  //标准错误输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值