20211105李宜时《信息安全系统设计与实现》第四周学习总结

发布时间 2023-10-01 16:06:08作者: 李宜时

第七第八章学习笔记

学习笔记:文件操作和系统调用

文件操作级别

文件操作通常可以分为三个级别:

  1. 低级别文件操作:直接访问文件的二进制数据,通常由操作系统提供支持。
  2. 文件I/O操作:使用高级别的API(如C的stdio库)来读取和写入文件。
  3. 文件系统操作:使用文件系统调用访问和管理文件,如POSIX标准中的系统调用。

文件I/O操作

文件I/O操作是在高级别上进行文件读写的方式。以下是一些常见的文件I/O操作函数(使用C语言为例):

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[100];

    // 打开文件进行读取
    file = fopen("example.txt", "r");

    // 从文件中读取数据
    fgets(buffer, sizeof(buffer), file);

    // 关闭文件
    fclose(file);

    // 打开文件进行写入
    file = fopen("output.txt", "w");

    // 写入数据到文件
    fprintf(file, "Hello, World!");

    // 关闭文件
    fclose(file);

    return 0;
}

低级别文件操作

低级别文件操作允许直接访问文件的二进制数据,通常需要使用系统调用。这包括使用open()read()write()lseek()等函数。

#include <fcntl.h>
#include <unistd.h>

int main() {
    int file_descriptor;
    char buffer[100];

    // 打开文件进行读取
    file_descriptor = open("example.txt", O_RDONLY);

    // 从文件中读取数据
    read(file_descriptor, buffer, sizeof(buffer));

    // 关闭文件
    close(file_descriptor);

    // 打开文件进行写入
    file_descriptor = open("output.txt", O_WRONLY | O_CREAT, 0644);

    // 写入数据到文件
    write(file_descriptor, "Hello, World!", 13);

    // 关闭文件
    close(file_descriptor);

    return 0;
}

EXT2文件系统简介

EXT2(Second Extended File System)是Linux操作系统中广泛使用的文件系统。它具有高性能和稳定性,支持文件和目录的管理。

系统调用

系统调用是操作系统提供的接口,用于应用程序与操作系统内核之间的通信。它们允许应用程序执行底层操作,如文件访问、进程管理等。

简单的系统调用

一些简单的系统调用包括:

  • open():打开文件。
  • read():从文件中读取数据。
  • write():向文件写入数据。
  • close():关闭文件。
  • lseek():移动文件指针。

常用的系统调用

常用的系统调用包括:

  • fork():创建新进程。
  • exec():执行新程序。
  • wait():等待子进程结束。
  • pipe():创建管道。
  • select():多路复用I/O。

链接文件

链接文件允许一个文件关联到另一个文件,有两种类型的链接:硬链接和符号链接。

  • 硬链接:多个文件条目指向同一个磁盘数据块。
  • 符号链接:创建一个指向另一个文件的链接。
    当涉及基于Linux系统的文件操作和系统调用时,有一些额外的知识点和实践内容可以添加到学习笔记中:

基于Linux的文件操作

Linux系统提供了丰富的命令行工具和shell脚本,用于文件操作。以下是一些常用的Linux文件操作命令:

  • ls:列出目录中的文件和子目录。
  • cp:复制文件或目录。
  • mv:移动文件或目录。
  • rm:删除文件或目录。
  • chmod:修改文件权限。
  • chown:修改文件所有者。
  • find:在文件系统中查找文件。
  • grep:搜索文件中的文本。
  • tar:压缩和解压文件和目录。

Linux文件权限

Linux使用一套权限模型来控制文件和目录的访问权限。这包括读取(r)、写入(w)和执行(x)权限,分为所有者、组和其他用户。权限可以使用chmod命令进行修改。

系统调用在Linux中的应用

Linux系统调用是在应用程序和内核之间的桥梁,它们可以用于执行各种任务,如进程管理、文件操作、网络通信等。以下是一些在Linux中广泛使用的系统调用:

  • fork()exec():用于创建新进程并执行其他程序。
  • pipe():用于创建进程间通信的管道。
  • socket():用于网络编程。
  • poll()epoll():用于多路复用I/O。
  • mmap():用于内存映射文件。

实践内容

  1. 使用Linux命令行工具创建一个新的目录,并在其中创建几个文件和子目录。
  2. 使用chmodchown命令修改文件和目录的权限和所有者。
  3. 使用find命令查找特定类型的文件,并执行一些操作,如删除或移动。
  4. 编写一个简单的Shell脚本,演示如何使用Linux命令来自动化文件操作任务。
  5. 创建一个网络套接字,并使用系统调用编写一个简单的服务器和客户端程序。
  6. 使用mmap()系统调用将文件映射到内存,以进行高效的文件读写操作。

这些额外的知识点和实践内容将帮助你更深入地理解Linux系统下的文件操作和系统调用。请根据你的兴趣和需求选择相应的任务进行练习。如果你有任何问题或需要更多信息,请随时提问。

实践内容

  1. 创建一个文本文件 example.txt 并写入一些文本内容。
  2. 使用C编写程序,通过文件I/O操作读取 example.txt 的内容并写入到另一个文件 output.txt
  3. 使用低级别文件操作完成相同的任务。
  4. 探索Linux中的EXT2文件系统,了解其结构和特性。
  5. 编写一个C程序,演示常用的系统调用,如创建子进程、执行其他程序等。
  6. 创建一个硬链接和一个符号链接,演示它们的区别和使用场景。