理解 Linux 文件结构:一份简单易懂的入门教程

个人主页:chian-ocean

文章专栏-Linux

前言:

Linux 文件系统是指 Linux 操作系统用于组织和管理文件、目录及其元数据(如权限、时间戳等)的系统。文件系统定义了文件的存储、访问和管理的方式,并提供了数据持久性和组织结构。

在这里插入图片描述

C语言文件操作

C语言文件

  • FILE* 是一个指向文件的结构体,通过它,程序可以与文件进行交互。

  • 文件指针由标准库函数如 fopen() 创建和返回,文件的读写操作通过这个指针来执行。

  • 文件指针常用于文件操作函数,如 fopen()fread()fwrite()fclose() 等。

#include <stdio.h>       
#include <string.h>    
          
int main()    
{
   
    
        
    // 打开名为 "log.txt" 的文件以进行写入("w" 模式)
    FILE* fd = fopen("log.txt", "w"); //路径默认在当前工作路径
    if (fd == NULL)    // 如果fopen失败(例如文件无法打开)
    {
   
    
        
        perror("fopen");  // 输出错误信息,指示fopen失败
        return 1;          // 返回错误代码(1),表示程序失败
    }    
    const char* msg = "hello linux!\n"; // 定义要写入文件的字符串消息
    // 使用strlen计算消息长度,并将消息写入文件
    fwrite(msg, strlen(msg), 1, fd);    
   
    fclose(fd);   // 写入完成后关闭文件

    return 0;     // 返回0,表示程序成功执行
}

理解当前工作路径:

  • 在进程文件读写的时候会进程会记录当前的工作目录(cwd),如图:在/home/ocean/linux/file/filetest路径下创建文件。

在这里插入图片描述

  • 我们在代码上加上
chdir("/home/ocean/linux/file");

就会更改当前的工作路径,如图查看到的cwd是: /home/ocean/linux/file

在这里插入图片描述

再次执行代码后文件会创建在 /home/ocean/linux/file这个路径下

在这里插入图片描述

文件打开方式

r

  • 打开文件进行读取,文件指针定位在文件的开始位置。
  • 如果文件不存在,打开失败。

r+

  • 打开文件进行读取和写入,文件指针定位在文件的开始位置。
  • 如果文件不存在,打开失败。

w

  • 打开文件进行写入,如果文件存在,则截断文件至零长度;如果文件不存在,创建文件。
  • 文件指针定位在文件的开始位置。

w+

  • 打开文件进行读取和写入,如果文件不存在,创建文件;如果文件存在,截断文件至零长度。
  • 文件指针定位在文件的开始位置。

a

  • 打开文件进行附加写入,写入的内容会追加到文件的末尾;如果文件不存在,创建文件。
  • 文件指针定位在文件的末尾。

a+

  • 打开文件进行读取和附加写入,读取时从文件的开始位置开始,写入时追加到文件末尾;如果文件不存在,创建文件。

在这里插入图片描述

本质上没有必要记那么多,如果需要直接去看官方的文档即可

文件的系统调用

在操作系统中,文件操作通常通过系统调用(system calls)进行。这些系统调用直接与操作系统的内核交互,以进行文件的创建、读取、写入、删除等操作。

open()

  • 功能:打开文件,返回文件描述符。
  • 语法int open(const char *pathname, int flags, mode_t mode);
  • 参数
    • pathname:要打开的文件路径。
    • flags:指定文件的打开模式(如只读、写入、追加等)。
    • mode:文件权限,如果文件是新建的,指定文件权限。
  • 返回值:成功返回文件描述符(一个非负整数),失败返回 -1,并设置 errno