Linux文件概述

一、文件与文件类型

  • 1、文件定义

定义:文件(File)是一个具有符号名字的一组相关联元素的有序序列。文件可以包含的内容十分广泛,操作系统和用户都可以将具有一定独立功能的一个程序模块、一组数据或一组文字命名为一个文件。
文件名:这个数据有序序列集合(文件)的名称。

  • 2、文件的分类

文件由许多种,运行的方式也各有不同。在Windows中,我们是通过文件的后缀名来对文件分类的。例如.txt、.doc、.exe等。而在Linux系统中则不是,它不以文件后缀来区分文件的类型。
在Linux中,我们可以使用ls -l指令来查看文件的类型。在Linux系统中,文件主要有7种类型。
- 普通文件 指ASCII文本文件、二进制文件以及硬链接文件
d 目录文件 包含若干文件或子目录
l 符号链接 只保留所指向文件的地址而非文件本身
p 管道文件 用于进程间通信
c 字符设备 原始的I/O设备文件,每次操作仅操作1个字符(例如键盘)
b 块设备 按块I/O设备文件(例如硬盘)
s 套接字 套接字是方便进程间通信的特殊文件,与管道不同的是套接字能通过网络连接使不同的计算机的进程进行通信

  • 3、Linux的文件目录结构

Linux系统中文件采取树形结构,即一个根目录(/),包含下级目录或文件的信息;子目录又包含更下级的目录或文件的信息。依次类推层层延伸,最终构成一棵树。
//见附图
Linux系统的每个目录都有其特定的功能,这里只简单介绍一些主要目录及其功能
目录 功能说明
/etc 存放系统配置文件
/bin 存放常用指令
/sbin (root用户的)存放指令目录
/home 用户主目录,所有用户p的文件默认建立在此目录下(用户工作目录)
/boot 包含内核启动文件
/dev 存放设备文件(与底层驱动交互)
/usr 存放应用程序
/mnt 挂载目录
/root root用户主目录
/proc process的所写,存放描述系统进程的详细信息
/lib 存放常见库文件
/lost+found 可以找到一些误删除或丢失的文件并恢复它们

二、系统调用与用户编程接口(API)

系统调用(System Call)是由操作系统实现提供的所有系统调用所构成的程序接口的集合。是应用程序与操作系统间的接口与纽带。
操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有良好的兼容性。为了达到这个目的,内核提供一系列具备预定功能的函数,通过系统调用的接口呈现给用户。当用户访问系统调用,系统调用把应用程序的请求传递给内核,调用相应的内核函数完成所需处理,将处理结果返回给应用程序。
应用程序编程接口(API,Application Programming Interface)是一些预定义的函数,目的是提供应用程序与开发人员基于软件/硬件得以访问一组例程的能力,而又无需访问源码或理解内部工作原理机制。
在实际开发应用程序的过程中,我们并不直接使用系统调用接口,而是使用用户编程接口(API)。为什么呢?
1.系统调用功能非常简单,有时无法满足程序的需求。
2.不同操作系统的系统调用接口不兼容,若使用系统调用接口则程序移植工作量非常大。
用户编程接口使用各种库(在C语言中最主要的是C库)中的函数。为了提高编程效率,C库中实现了很多函数。这些函数实现了许多常用功能供程序开发者调用。这样一来,程序开发者无需自己编写这些代码,直接可以调用函数就能实现功能,提高了编码效率和代码复用率。
使用用户编程接口还有一个好处:一定程度上解决了程序的可移植性(虽然C语言的可移植性仍没有Java好)。几乎所有的操作系统上都实现了C库,因此使用C语言编写的程序只需在不同的系统下重新编译即可运行。
通常情况下,用户编程接口API在实现时需要依赖系统调用接口。例如创建进程API函数fork()需要调用内核空间的sys_fork()系统调用。但是还有一些API无需调用任何系统调用。
在Linux中用户编程接口遵循在Unix系统中最流行的应用编程编程标准POSIX标准。

POSIX简介

POSIX表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。

标准I/O与文件I/O的区别:

1.文件I/O又称为低级磁盘I/O,遵循POSIX标准。任何兼容POSIX标准的操作系统都支持文件I/O。标准I/O又称为高级磁盘I/O,遵循ANSI C相关标准。只要开发环境有标准C库,标准I/O就可以使用。
在Linux系统中使用GLIBC标准,它是标准C库的超集,既支持ANSI C中定义的函数又支持POSIX中定义的函数。因此Linux下既可以使用标准I/O,也可以使用文件I/O。
2.通过文件I/O读写文件时,每次操作都会执行相关系统调用。这样的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销。标准I/O在文件I/O的基础上封装了缓冲机制,每次先操作缓冲区,必要时再访问文件,从而减少了系统调用的次数。
3.文件I/O使用文件描述符打开操作一个文件,可以访问不同类型的文件(例如普通文件、设备文件和管道文件等)。而标准I/O使用FILE指针来表示一个打开的文件,通常只能访问普通文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值