首页 > 其他分享 >2023-2024-1 20211327 信息安全系统设计与实现 学习笔记4(必做)

2023-2024-1 20211327 信息安全系统设计与实现 学习笔记4(必做)

时间:2023-09-30 21:55:18浏览次数:58  
标签:文件 调用 读取 分区 写入 2024 2023 20211327 操作

学习笔记4

  • 文件操作
  • 使用系统调用进行文件操作
  • 实践过程

文件操作

1. 文件操作级别

(1)硬件级别:

  • fdisk: 将硬盘、U盘或SDC盘分区
  • mkfs: 格式化磁盘分区,为系统做好准备
  • fsck:检查和维修系统
  • 碎片整理:压缩文件系统中的文件

(2)操作系统内核中的文件系统函数: 前缀 k 表示内核函数
(3)系统调用: 使用系统调用访问内核函数
(4)I/O库函数: C语言提供了一系列标准的I/O库函数
(5)用户命令
(6)sh脚本

2.文件的I/O操作

(1)文件打开和关闭:

  • I/O操作的第一步是打开文件。这通过调用操作系统提供的API函数(如C语言中的 fopen)来完成。打开文件后,系统为该文件分配资源,允许程序读取或写入文件的数据。
  • 在文件操作完成后,必须关闭文件以释放资源并确保数据的完整性。关闭文件通常使用
    fclose 等函数。

(2)读取数据:

  • 读取文件的数据是从文件中获取信息的过程。可以按字节、行或其他数据块的方式进行读取。通常使用freadfgets等函数来执行读取操作。
  • 读取操作需要指定读取位置,通常由文件指针(file pointer)管理。文件指针跟踪文件的当前位置,并在每次读取后自动向前移动。

(3)写入数据:

  • 写入文件是将数据写入文件的过程。可以按字节、行或其他数据块的方式进行写入。通常使用fwritefprintf等函数来执行写入操作。
  • 写入操作也需要指定写入位置,通常由文件指针管理。文件指针在写入时自动向前移动。

(4)定位和移动文件指针: 文件指针用于确定文件中的读取或写入位置。可以使用fseek函数来移动文件指针到文件中的指定位置,以支持随机访问文件。

(5)错误处理: I/O操作可能会遇到各种错误,如文件不存在、权限不足、磁盘空间不足等。程序需要处理这些错误情况,并采取适当的措施,如向用户报告错误或进行错误日志记录。

(6)缓冲: 文件I/O通常使用缓冲来提高性能。读取和写入的数据通常首先存储在内存缓冲区中,然后批量写入磁盘。这减少了磁盘访问的次数,提高了效率。

(7)文本和二进制文件: 文件可以分为文本文件和二进制文件。文本文件包含人可读的字符数据,而二进制文件包含不可打印字符和二进制数据。不同类型的文件需要不同的读写方式。

(8)同步和异步操作: 文件I/O可以是同步或异步的。同步操作会阻塞程序的执行,直到操作完成,而异步操作会允许程序继续执行其他任务。

3. 低级别文件操作:分区

(1)打开终端: 打开Linux终端,以便使用分区工具。可能需要以root用户或具有足够权限的用户身份执行这些操作。

(2)选择分区工具:

  • fdisk:这是一个经典的命令行分区工具,适用于专家用户。
  • parted:这是一个命令行分区工具,提供了更多的分区选项。
  • gparted:这是一个图形用户界面(GUI)工具,适用于新手用户,更容易使用。

(3)列出可用的磁盘: 在终端中运行以下命令之一,以列出系统中的可用磁盘和分区信息:

fdisk -l
parted -l

(4)选择要分区的磁盘: 根据列出的磁盘信息,选择要进行分区的磁盘,通常以如/dev/sda/dev/nvme0n1之类的形式表示。

(5)创建分区: 使用选定的分区工具创建新的分区,通常有以下步骤:

  • 在终端中运行分区工具,如fdisk /dev/sdX(/dev/sdX是选择的磁盘)。
  • 使用分区工具的命令(如n用于创建新分区)创建分区。需要指定分区的大小、类型、起始位置等信息。
  • 根据分区工具的提示,完成分区创建过程。
  • 保存分区表:
  • 在分区工具中完成分区创建后,不能忘记保存分区表。对于fdisk,可以使用w命令保存。对于parted,可以使用quit命令保存。

(6)格式化分区:
创建分区后,需要格式化它以创建文件系统。例如,如果要创建一个ext4文件系统,可以使用以下命令:

mkfs.ext4 /dev/sdXY

其中,/dev/sdXY是创建的分区的设备名称。

(7)挂载分区: 格式化后的分区需要挂载到Linux文件系统的目录中,以便可以访问其中的数据。可以使用mount命令手动挂载,也可以将挂载信息添加到/etc/fstab文件中,以在系统启动时自动挂载。

使用系统调用进行文件操作

1.操作过程

(1)包含头文件: 在C或C++程序中,使用文件操作系统调用之前,需要包含适当的头文件,如 <stdio.h><fcntl.h><unistd.h>。这些头文件包含了与文件操作相关的系统调用的声明和常量定义。

(2)文件描述符:

  • 在Linux中,每个打开的文件都与一个文件描述符相关联,这是一个整数值。通常情况下,0表示标准输入(stdin),1表示标准输出(stdout),2表示标准错误(stderr)。其他文件描述符用于表示用户打开的文件。

  • 使用 open() 系统调用来打开文件,它返回一个文件描述符,用于后续文件操作。

(3)打开文件: 使用 open() 系统调用可以打开文件。它的原型如下:

int open(const char *path, int flags, mode_t mode);
  • path 是文件的路径。
  • flags 是打开文件的模式,如只读、只写、追加等。
  • mode 是文件的权限(仅在文件不存在时才使用)。

(4)读取文件: 使用 read() 系统调用从已打开文件中读取数据。它的原型如下:

ssize_t read(int fd, void *buf, size_t count);
  • fd 是文件描述符。
  • buf 是读取数据的缓冲区。
  • count 是要读取的字节数。
  • read() 返回实际读取的字节数,如果达到文件末尾则返回0,如果出现错误则返回-1。

(5)写入文件: 使用 write() 系统调用将数据写入已打开的文件。它的原型如下:

ssize_t write(int fd, const void *buf, size_t count);
  • fd 是文件描述符。
  • buf 是要写入的数据。
  • count 是要写入的字节数。
  • write() 返回实际写入的字节数,如果出现错误则返回-1。

(6)关闭文件: 使用 close() 系统调用关闭文件,释放文件描述符。它的原型如下:

int close(int fd);

(7)文件定位: 使用 lseek() 系统调用可以移动文件指针,以支持随机访问文件。它的原型如下:

off_t lseek(int fd, off_t offset, int whence);
  • fd 是文件描述符。
  • offset 是要移动的偏移量。
  • whence指定偏移量的基准,如文件开头、文件末尾或当前位置。

(8)文件权限和所有权: 使用 chmod()chown() 系统调用可以更改文件的权限和所有者。这些系统调用允许管理文件的访问权限和所有权。

(9)错误处理: 系统调用可能会引发各种错误,如文件不存在、权限不足、磁盘空间不足等。程序需要适当处理这些错误情况,通常通过检查系统调用返回值和 errno 变量来确定是否发生了错误。

(10)同步和异步操作: 文件操作可以是同步或异步的。同步操作会阻塞程序的执行,直到操作完成,而异步操作会允许程序继续执行其他任务。

实践过程

标签:文件,调用,读取,分区,写入,2024,2023,20211327,操作
From: https://www.cnblogs.com/shen-jianxiang/p/17738294.html

相关文章

  • #2023-2024-1 20231311《计算机基础与程序设计》第一周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/这个作业的要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009这个作业的目标快速浏览一遍教材计算机科学概论,课本每章提出至少一个自己不懂的......
  • 2023.9.23 总结
    T1题面:从左往右有n个格子,编号\(1\)至\(n\)。一开始每个格子都有1颗糖果。你总共需要进行\(k\)次操作,每次操作把从某个格子取\(1\)颗糖(前提是该格子有糖),放到另一个格子。当\(k\)次操作全部结束以后,从左往右检查,这\(n\)个格子的糖果数量。求这\(n\)个格子总共有多少......
  • 2023-2024-1 20231304《计算机基础与程序设计》第一周学习总结
    2023-2024-120231304《计算机基础与程序设计》第一周学习总结作业信息这个作业属于哪个课程<班级的链接>2023-2024-1-计算机基础与程序设计这个作业要求在哪里<作业要求的链接>2023-2024-1计算机基础与程序设计第一周作业这个作业的目标快速浏览预习《计算机科......
  • 202309301820_《Spring boot项目,继承mybatis-generator遇到的问题及解决》
     当配置到最后,双击右侧maventab,准备生成时,报红:1.“Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.ThedriverisautomaticallyregisteredviatheSPIandmanualloadingofthedriverclassisgen......
  • 2023-2024 20231324《计算机基础与程序设计》第1周学习总结
    这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业的要求在哪里2023-2024-1计算机基础与程序设计第一周作业这个作业的目标快速浏览教材《计算机科学概论》,提出自己不懂或最想解决的问题并在期末回答作业正文本博客链接https://ww......
  • 2023.9.30日报
    今天学习了部分vue的开发知识,了解了一部分vue的运作原理,即先定义数据,然后生成对应的app,然后嵌入到对应的div视图中即可,在这个过程中,起初使用的是vscode,但是没有查找到对应的启动html的插件,因此还是转到了idea......
  • 2023-2024-1 20231321王曦轶《计算机基础与程序设计》第一周学习总结
    2023-2024-120231321《计算机基础与程序设计》第1周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第一周作业)这个作业的目标<预习教材计算机科学概......
  • 2023-2024-1 20231310 《计算机基础与程序设计》第一周学习总结
    作业信息作业属于课程<班级的链接>(2023-2024-1-计算机基础与程序设计)作业要求<作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01这个作业的目标<快速浏览一遍教材计算机科学概论,课本每章提出至少一个问题>作业正文https://i.cnblogs.......
  • 2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1, 每一
    2023-09-30:用go语言,给你一个整数数组nums和一个整数k。nums仅包含0和1,每一次移动,你可以选择相邻两个数字并将它们交换。请你返回使nums中包含k个连续1的最少交换次数。输入:nums=[1,0,0,1,0,1],k=2。输出:1。来自左程云。答案2023-09-30:步骤描述:1.......
  • 2023年最新版Apollo保姆级使用手册(超级详尽版本)
    目录Apollo操作说明前言Apollo环境部署一、环境构建二、官方地址三、数据库脚本使用四、配置Apollo文件五、启动Apollo六、访问ApolloApollo产品使用一、修改部门二、应用操作三、用户操作四、系统权限管理1、创建应用权限配置2、创建应用权限配置3、与旧版比对五、系统参数1、Por......