首页 > 其他分享 >《信息安全系统设计与实现》第四周学习笔记

《信息安全系统设计与实现》第四周学习笔记

时间:2023-09-28 18:14:14浏览次数:35  
标签:文件 stat 调用 int 信息安全 笔记 char file 四周

文件操作

文件操作级别

  • 文件操作分为五个级别:
    • 硬件级别
      1. fdisk
      2. mkfs
      3. fsck
      4. 碎片整理
    • 操作系统内核中的文件系统函数
    • 系统调用
    • I/O库函数
    • 用户命令
    • sh脚本

文件I/O操作

  • 双线上方的上半部分表示内核空间,下半部分表示进程的用户空间
  • 该图显示了进程读/写文件流时的操作序列

低级别文件操作

分区

  • 一个块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,称为分区
  • fdisk是一个交互程序。它有一个显示所以命令的帮助菜单。它收集用户的输入,在内存中创建一个分区表,该分区表仅在用户输入w命令时才被写入磁盘映像的MBR。但是在内存中,它允许用户创建、检查和修改分区。

格式化分区

  • 为了存储文件,必须先为特定的文件系统准备好分区,该操作习惯上称为格式化磁盘或磁盘分区。

挂载分区

  • 用dd命令创建一个虚拟磁盘映像
    • dd if=/dev/zero of=vdisk bs=1024 count=32768
  • 在vdisk上运行fdisk来创建一个分区P1
    • fdisk vdisk
  • 使用以下扇区数在vdisk的分区1上创建一个循环设备
    • losetup -o $(expr 2048 * 512) --sizelimit $(expr 65535 * 512) /dev/loop1 vdisk

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

系统调用

  • 系统调用(简称syscall)是一种允许进程进入Kmode以执行Umode不允许操作的机制

系统调用手册页

  • man2子目录中列出了所以系统调用手册页
    man 2 stat
    man 2 open
    man 2 read

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

  • 系统调用必须由程序发出,它们的用法就像普通函数调用一样。每个系统调用都是一个库函数,它汇集系统调用参数,并最终向操作系统内核发出一个系统调用

常用的系统调用

  • stat: 获取文件状态信息
    • int stat(char *filename, struct stat *buf)
      int fstat(int filedes, dtruct stat *buf)
      int lstat(char *filename, struct stat *buf)
  • open: 打开一个文件进行读、写、追加
    • int open(char *file,int flags, int mode)
  • close: 关闭打开的文件描述符
    • int close(int fd)
  • read:读取打开的文件描述符
    • int read(int fd,char buf[ ],int count)
  • write:写入打开的文件描述符
    • int write(int fd, char buf[ ], int count)

链接文件

  • 硬链接文件
    • 命令
      ln oldpath newpath
    • 创建从newpath到oldpath的硬链接。对应的系统调用
      link(char *oldpath, char *newpath)
  • 软链接
    • 命令
      ln -s oldpath newpath
    • 创建从newpath到oldpath的软链接或符号链接。对应的系统调用
      symlink(char *oldpath, char *newpath)

stat系统调用

  •  #include <stdio.h>
     #include <stdlib.h>
     #include <sys/stat.h>
     #include <sys/types.h>
     #include <unistd.h>
    
     int main() {
     const char *file_path = "/path/to/your/file"; // 替换成您要查询的文件的路径
     struct stat file_info;
    
     // 使用stat()函数获取文件信息
     if (stat(file_path, &file_info) == 0) {
      printf("文件信息:\n");
      printf("文件大小: %ld 字节\n", file_info.st_size);
      printf("文件权限: %o\n", file_info.st_mode & 0777);
      printf("文件拥有者的用户ID: %d\n", file_info.st_uid);
      printf("文件拥有者的组ID: %d\n", file_info.st_gid);
      printf("设备ID: %ld\n", file_info.st_dev);
     } else {
      perror("获取文件信息失败");
      return EXIT_FAILURE;
     }
    
     return EXIT_SUCCESS;
     }
    


文件类型和权限

  • 在stat结构体中,大多数字段都无需解释。只有st_mode字段需要进行说明

opendir-readdir函数

readlink函数

  • Linux的open()系统调用遵循符号链接。因此,无法打开符号链接文件并读取其内容。要想读取符号链接文件的内容,我们必须使用readlink系统调用,即:
    int readlink(char *pathname, char buf[],int bufsize);

open-close-lseek系统调用

  • open:打开一个文件进行读、写、追加
    • int open(char *file, int flags, int mode);
  • close:关闭打开的文件描述符
    • int close(int fd);
  • read:读取打开的文件描述符
    • int read(int fd, char buf[], int count);
  • write:写入打开的文件描述符
    • int write(int fd, char buf[], int count);
  • lseek:将文件描述符的字节偏移量重新定位为偏移量
    • int lseek(int fd, int offset, int whence);
  • umask:设置文件创建掩码;文件权限为(mask& ~mask)

文件操作示例程序


苏格拉底挑战




标签:文件,stat,调用,int,信息安全,笔记,char,file,四周
From: https://www.cnblogs.com/zsj6787/p/17731767.html

相关文章

  • 基本技巧——根号分治 学习笔记
    基本技巧——根号分治学习笔记根号分治与其说是一个算法,更不如说是一种思想(trick)。定义根号分治,是一种对数据进行点分治的分治方式,它的作用是优化暴力算法;类似于分块,但应用范围比分块更广。具体来说,对于所进行的操作,按照某个点\(B\)划分,分为大于\(B\)及小于\(B\)两个部......
  • Git合并分支和复位笔记
    复位reset复位是把目前branch的版本复位到某个指点的版本。要复位branch到某个指定版本,要先到history里reset再Revertchange。这里不管是复位到旧版本还是新版本,由于和原来的不一致,都算被修改过,所以都要重新Revert掉。这里的reset就可以fetch远程库后进行更新,也可以reset旧......
  • MySQL 45讲笔记(2)
    全局锁和表锁根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类全局锁顾名思义,全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock(FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线......
  • k8s 安装笔记
    安装dockeryum-yinstallyum-utilsdevice-mapper-persistent-datalvm2yum-config-manager-y--add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyumlistdocker-ce--showduplicates|sort-ryuminstall-ydocker-ce-cli-23.0.6dock......
  • Python学习笔记
    一.简介1.概述文档仅是简单学习python,并不深入探究,保证能够正常使用。在进行python学习的时候,建议直接学习python3,不要在学python2,浪费时间。更详细学习,请参考:https://www.liaoxuefeng.com/wiki/10169596636024002.python优势简单,强大的库调用使得实现功能更加简单。中文,免......
  • SpringBoot笔记
    1.原理SpringApplication这个类主要做了以下四件事情:1、推断应用的类型是普通的项目还是Web项目2、查找并加载所有可用初始化器,设置到initializers属性中3、找出所有的应用程序监听器,设置到listeners属性中4、推断并设置main方法的定义类,找到运行的主类run方法剖析2.......
  • 学习Serilog日志笔记
       本学习笔记所有的.net 版本为6.0 首先引包nuget包为:serilog 和serilog.aspnetcore1、在控制台下使用日志:  需要引入Serilog.Sinks.Console包 然后在program.cs中写入以下语句:  Log.Logger=newLogerConfiguration().MinimumLevel.Debug()  .WriteT......
  • Uniapp学习笔记(vue3)
    https://uniapp.dcloud.net.cn/使用Vue.js开发所有前端应用的框架开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。周边生态丰富发送请求 methods:{ getMsg(msg){ ......
  • 《Unix/linux系统编程》教材第7、8章学习笔记
    第七章:文件操作文件操作级别(1)硬件级别fdisk:将硬盘、U盘或SDC盘分区mkfs:格式化磁盘分区,为系统做好准备fsck:检查和维修系统碎片整理:压缩文件系统中的文件(2)操作系统内核中的文件系统函数前缀为k表示内核函数(3)系统调用:用户模式程序使用系统调用来访问内核函数open()、read......
  • 学习笔记4
    第七章第八章自学笔记1.第七章7.1文件操作级别文件操作分为五个级别,按照从低到高的顺序排列如下。(1)硬件级别∶硬件级别的文件操作包括∶●fdisk∶将硬盘、U盘或SDC盘分区。●mkfs∶格式化磁盘分区,为系统做好准备。●fsck∶检查和维修系统。●碎片整理;压缩文件系统......