博客
关于我
Linux--文件
阅读量:789 次
发布时间:2023-02-02

本文共 2394 字,大约阅读时间需要 7 分钟。

Linux 文件操作深入解析


文件的基础概念

在 Linux 环境中,文件是一个存储不可置换的数据的抽象概念。文件可以是磁盘中的数据,也可以是键盘输入或显示器输出的内容。从狭义上讲,文件是在磁盘存储介质上保存的永久性数据,磁盘作为双向输入输出设备(IO),所有与文件相关的操作都通过 IO 协议来完成。

从广义上讲,Linux 系统下的所有资源都抽象为文件。无论是键盘、鼠标、显示器,还是网络接口卡、硬盘、GPU,甚至进程本身,都可以看作是文件。这种抽象化使得操作系统能够统一处理各种资源。


文件操作的分类认知

  • 文件的基本属性

    文件包含内容和属性(元数据)。例如,文件的大小、权限、所有者、创建时间等,都是元数据的一部分。

  • 文件操作的归类

    • 空文件仍然占用磁盘空间。
    • 文件操作包括内容操作(如读写)和属性操作(如查看权限、删除文件)。这些操作在底层是通过文件描述符(file descriptor)实现的。
  • 文件操作的本质

    文件操作的本质是进程对文件的操作,而不是直接对磁盘进行操作。文件读写实际上是通过文件描述符进行 IO 操作。文件在被打开后,会从磁盘加载到内存中,进程才能访问文件内容。


系统角度的文件管理

  • 文件操作的本质是进程操作

    进程通过文件描述符(file descriptor)对文件进行操作,描述符是一个小整数值,指向文件相关的数据结构。

  • 文件管理是操作系统的任务

    操作系统负责管理文件和目录的存储,例如文件的创建、删除、复制、移动等操作。

  • 文件操作的实现方式

    虽然我们通常使用 C 库函数(如 fopenfclose)来处理文件,但这些函数实际上是对系统接口(如 openreadwrite)的另一种封装。系统调用的接口提供了更底层的文件操作方法。


fiile描述符和标准输入输出

  • 文件描述符(fd)

    文件描述符是一种用于文件操作的机制,它是一个小整数值。进程在打开文件时会得到一个描述符,通过描述符可以进行读写操作。例如:

    int fd = open("myfile", O_WRONLY);write(fd, "Hello, World!\n", strlen("Hello, World!\n"));close(fd);
  • 标准输入输出流

    不同于其他文件,标准输入流(stdin)、标准输出流(stdout)、标准错误流(stderr)也是文件描述符(分别对应 0、1、2)。

  • 如何读取标准输入

    char buf[1024];ssize_t nread;while ((nread = read(0, buf, sizeof(buf))) > 0) {    buf[nread] = '\0';    printf(buf);}

库函数与系统接口的区别

  • 库函数

    fopenfclosefwrite 等,这些函数是 C 标准库中的接口,适用于大多数文件操作。

  • 系统接口

    openreadwriteclose 等系统调用的接口,操作更底层,提供了更高效的文件操作方法。

  • 两者的关系

    库函数是对系统接口的封装,提供了更方便的操作方式。进程通过库函数便捷地操作文件,而实际上这些操作都最终转化为对底层系统接口的调用。


文件操作的具体方法

  • 打开文件

    使用 fopenopen 函数打开文件,函数参数决定了操作模式(只读、只写、读写等)。例如:

    FILE *fp = fopen("myfile", "r");

    或者

    int remove("myfile"); // 删除文件
  • 文件读写

    使用 readwrite 函数进行文件操作。例如:

    char buf[1024];ssize_t nread = read(fp, buf, sizeof(buf));if (nread > 0) {    buf[nread] = '\0';    printf(buf);}
  • 文件描述符的管理

    文件描述符可以重复使用。例如:

    int fd = open("myfile", O_WRONLY);// 写入数据write(fd, "Hello, World!\n", strlen("Hello, World!\n"));// 刷新文件指针位置lseek(fd, 0, SEEK_SET);// 读取数据char buf[1024];read(fd, buf, sizeof(buf));
  • 关闭文件

    使用 fcloseclose 函数关闭文件描述符。


系统文件 I/O 接口

  • 文件操作的底层实现

    在 Linux 系统中,文件操作通过 openreadwriteclose 等系统调用实现。这些接口直接进行磁盘操作,是文件系统的核心。

  • 文件权限和访问控制

    使用 accesschmod 等函数设置文件权限,控制文件的读写访问。

  • 文件创建和删除

    使用 creatopen(指定创造模式)创建新文件,unlinkrm 删除文件。


exception

  • 错误处理

    在文件操作中,常需要处理错误。使用 perrorprintf 指定错误信息,确保程序能友好地处理异常。

    FILE *fp = fopen("file.txt", "r");if (fp == NULL) {    perror("无法打开文件");    exit(EXIT_FAILURE);}
  • 文件描述符的异常情况

    对于 certain drivers,文件描述符可能出现错误。如果出现错误,应及时处理并退出程序。


总结

文件是 Linux 系统中处理各种资源的核心抽象。通过理解文件的本质、操作方式以及文件描述符的管理机制,可以更高效地开发和优化文件操作相关的应用程序。在实际编程中,合理使用库函数和系统接口,确保文件操作的效率和健壮性,是系统开发的关键技能。

转载地址:http://ggwfk.baihongyu.com/

你可能感兴趣的文章
linux 单机版安装5.7
查看>>
Linux 卸载JDK并安装新版本JDK (rpm,tar)
查看>>
Linux 卸载mysql-libs包出现问题如何解决
查看>>
linux 卸载、安装mysql
查看>>
Linux 压缩、解压和打包命令
查看>>
linux 发现交换文件 ".swp"
查看>>
linux 启动nacos报错_深入浅出高性能服务发现、配置框架Nacos系列 1: HelloWorld
查看>>
Linux 命令
查看>>
linux 命令 - 磁盘管理命令 df
查看>>
Linux 命令 —— lsof 查看打开的文件信息
查看>>
Linux 命令中 find 和 xargs 命令的用法
查看>>
Linux 命令大全
查看>>
Linux 命令大全
查看>>
Linux 命令大全
查看>>
linux 命令拾遗
查看>>
linux 命令查看内存和cpu信息
查看>>
Linux 命令的执行过程/Shell提示符/alias命令
查看>>
linux 命令详解 十二
查看>>
Linux 命令集
查看>>
Linux 基本bash命令
查看>>