首页 > 其他分享 >学习笔记4

学习笔记4

时间:2023-09-28 11:55:05浏览次数:36  
标签:char 调用 文件 int 分区 笔记 学习 buf

第七章 第八章 自学笔记

1.第七章

7.1 文件操作级别

文件操作分为五个级别,按照从低到高的顺序排列如下。

(1)硬件级别∶硬件级别的文件操作包括∶
● fdisk∶将硬盘、U盘或SDC盘分区。

● mkfs∶格式化磁盘分区,为系统做好准备。

● fsck∶检查和维修系统。

● 碎片整理;压缩文件系统中的文件。
2.操作系统内核中的文件系统函数
前缀为k表示内核函数

3.系统调用
open()、read()、lseek()、close()

4.I/O库函数

FILE fopen()、fread();fwrite()、fseek()、fclose()、fflush()
char getc()、getchar()、ugetc()、putc()、putchar()
line gets()、fgets()、puts()、fputs()
formatted scanf()、fscanf()、sscanf()、printf()、fprintf()、sprintf()
5.用户命令
mkdir、rmdir、cd、pwd、ls、link、unlink、rm、cat、cp、mv、chmod、etc。

6.sh脚本
需要手动呼入命令,如果使用的是GUI,必须要拖放文件图标和点击指向设备来输入,操作繁琐而且耗时。

7.2 文件操作

低级别文件操作
1.分区

​ 像给一块大容量硬盘分区,可以通过分区操作来将一个大存储空间分为不同的逻辑单元,各个分区可以格式化成为特定的文件文件系统,可以有效的隔离不同数据。

​ 在Linux系统下,可以通过如下操作创建一个虚拟磁盘映象文件:

dd if=/dev/zero of=disk20211326 bs=1024 count=1440
2.格式化分区
为了存储文件,必须先为特定的文件系统准备好分区,该操作成为格式化磁盘或磁盘分区。
为了确保数据的一致性,用户应该先卸载设备,然后自断开连接。
3.挂载分区
man 8 losetup:显示用于系统管理的losetup 实用工具命令:
(1)用dd命令创建-一个虚拟磁盘映像:

dd if=/dev/zero of=vdisk bs=1024 count=32768 #32K (1KB) blocks
(2)在vdisk. 上运行fdisk来创建一一个分区P1:

fdisk vdisk
输人n(new)命令,使用默认的起始和最后扇区编号来创建一个分区Pl。然后,输人w命令将分区表写人vdisk并退出fdisko vdisk 应包含-个分区P1 [start=2048, end=65535]。该分区的大小是63488个扇区。

(3)使用以下扇区数在vdisk的分区1上创建一个循环设备 :

losetup -o $(expr 2048 * 512) --sizelimit $(expr 65535 * 512) /dev/1oop1vdisk
losetup需要分区的开始字节(start_ sector512) 和结束字节(end_ sector512)。 读者可手动计算这些数值,并在losetup命令中使用它们。可用类似方法设置其他分区的循环设备。循环设备创建完成后,读进程可以使用命令

losetup - a
将所有循环设备显示为/dev/loopN。

(4)/dev/loop1,它是一个EXT2文件系统:

mke2fs -b 4096 /dev/loop1 7936 # mke2fs with 7936 4KB blocks

7.4EXT2文件系统

Linux一直使用EXT2作为默认文件系统,EXT3是EXT2的扩展,增加的主要是一个日志文件,EXT4是EXT3的扩展,增加了磁盘块的分配(连续的)。

Block#0:引导块,文件系统不使用它,用于容纳从磁盘引导操作系统的引导程序。
Block#1:超级块,用于容纳关于整个文件系统的信息。
Block#2:块组描述符块,EXT2将磁盘分成几个组(每组8192块),每组用一个块组描述符结构体描述。
Block#8:块位图,用来表示某种项的位序列。
Block#9:索引节点位图,用来代表一个文件的数据结构。
Block#10:索引节点,每个文件都用一个128字节(EXT4的是256字节)的独特索引节点结构体表示。

2.第八章

8.1系统调用

在操作系统中,进程以两种不同的模式运行,即内核模式和用户模式,简称Kmode和Umode。在Umode中,进程的权限非常有限。它不能执行任何需要特殊权限的操作。特殊权限的操作必须在Kmode下执行。系统调用(简称syscall)是一种允许进程进入Kmode以执行Umode不允许操作的机制。复刻子进程、修改执行映像,甚至是终止等操作都必须在内核中执行。

8.2 系统调用手册页

在Unix以及大多版本的Linux中,在线手册页保存在/usr/man/目录中(Goldt等1995;Kerrisk 2010,2017)。而在Ubuntu Linux中,则保存在/usr/share/man目录中。man2子目录中列出了所有系统调用手册页。sh命令man 2 NAME显示了系统调用名称的手册页。
int syscall(int a,int b,int c, int d)
更改某个文件的权限
int chmod(char *path, mode_t mode);
mkdir:创建目录
int mkdir(char *pathname, mode_t mode);
rmdir:移除目录(必须为空)
int rmdir (char *pathname);
link:将新文件名硬链接到旧文件名
int link(char *oldpath, char *newpath)
unlink:减少文件的链接数;如果链接数达到0,则删除文件
int uniink(char *pathname);
symlink:为文件创建一个符号链接
int symliak(char *oldpath, char *newpath);

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

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

8.4 常规的系统调用

本节讨论一些最常见的文件操作的系统调用。
常用的系统调用:
stat:获取文件状态信息
int stat(char *filename, struct stat *buf); int fstat(int filedes, struct 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);
lseek:重新定位文件描述符的读/写偏移量

int lseek(int fd, int offset, int whence);
dup:将文件描述符复制到可用的最小描述符编号中

int dup(int oldfd);

8.5 链接文件

在Unix/Linux中,每个文件都有一个路径名。但是,Unix/Linux允许使用不同的路径名来表示用一个文件。这些文件叫作LINK(链接)文件。有两种类型的链接,即硬链接和软链接或符号链接。

问题与解决:

D:int stat(const char *pathname, struct stat *buf);这段函数的说明?
Q:函数的参数说明如下:

pathname:文件路径名。
buf:指向存储文件状态信息的结构体。
函数返回值为0表示调用成功,-1表示调用失败。在调用成功后,可以通过结构体的成员变量获取文件状态信息,例如:

c
struct stat buf;

if (stat("/path/to/file", &buf) == 0) {
printf("File type: %o\n", buf.st_mode & S_IFMT);
printf("File size: %ld bytes\n", buf.st_size);
printf("Last access time: %s", ctime(&buf.st_atime));
}
其中,st_mode是包含文件类型和访问权限的位掩码,S_IFMT是文件类型的掩码。st_size是文件大小,st_atime是最后访问时间。

标签:char,调用,文件,int,分区,笔记,学习,buf
From: https://www.cnblogs.com/deyong/p/17735342.html

相关文章

  • 阅读笔记一:《软件需求分析》的观后感
    软件需求分析是软件开发过程中至关重要的一环,它为项目的成功奠定了坚实的基础。通过对软件需求分析的学习和思考,我深刻地认识到了其在软件开发中的重要性以及如何有效地进行需求分析。首先,我认为软件需求分析是软件工程的关键步骤之一,因为它直接关系到软件项目的成败。在需求分析......
  • 算法学习——同向扫描的双指针
    考虑到,$1\leN\le2\times10^5$,$O(n^2)$的暴力判断无法通过此题,下面给出三种可行的解决方案。1.哈希容易想到的一个思路是:用哈希表记录一下$a_1\sima_n$每个数出现了多少次,然后求出$\Sigma_{i=1}^ncnt_{a_i-c}$即可,$cnt_{a_i}$表示$a_i......
  • 尝试用ColabPro训练深度学习模型
    Colab中使用.ipynb文件,即我们平时使用的JupyterNotebook文件来完成相关代码的执行。如果要训练模型,需要将模型封装成可以经过ipynb文件执行的形式。在具体的运行时类型中,可以选择不同的运行时,其中包含了可选的GPU和CPU。GPU中有V100、A100、T4这几种可以选择,在选择相应的资源连......
  • 深度学习 学习与训练中遇到的问题 记录
    RuntimeError:Sizesoftensorsmustmatchexceptindimension1.Got61and60indimension2错误产生原因:在模型中有以下操作:torch.cat(x,y)   当x,y的尺寸不一致时,就会出现以上错误。   进行单步调试,发现我的错误是因为图像山采样和下采样后,由于取整的......
  • 网络安全学习常见的靶场环境
    01DVWADVWA靶场是我们新手入门必练靶场之一,包含暴力破解(BruteForce)、命令注入(CommandInjection)、跨站请求伪造(CSRF)、文件包含(FileInclusion)、文件上传(FileUpload)、不安全的验证码(InsecureCAPTCHA)、SQL注入(SQLInjection)、SQL盲注(SQLInjectionBlind)、反射......
  • EMQX学习笔记:常用功能
    本文更新于2023-03-01,使用EMQX4.4.3。禁止匿名登录修改/etc/emqx/emqx.conf中相应的行如下:allow_anonymous=false重启EMQX。emqxstartHTTP回调CONNECT身份验证配置鉴权回调URL。根据实际情况修改/etc/emqx/plugins/emqx_auth_http.conf中相应的行如下:auth.http.au......
  • 动手学深度学习_3 线性神经网络
    summerpocket_久岛鸥我将会跨越七大洋,将我的爱意带到你的身边线性回归基本概念这里的price泛化后就是我们的y,即标签label这里的area,age泛化后就是我们的X,即特征features当L(W,b)能够通过直接求导得到W与b,那么我们称之W与b有解析解(因为L(W,b)是一个凸函数,当求导后令导......
  • 迷失岛2 笔记2 事件的使用学习
       今天终于明白这个事件使用  他是首先我们在EventHandler里面设置我们的一个订阅和呼叫事件  也就是设置好想要的一个参数值类型然后再相应脚本中 我们注册订阅一样也就是我们的InventoryUI这个脚本里面 我们订阅出一个方法和值类型  里面写好我们的......
  • docker笔记
    docker笔记参考docker菜鸟教程pdfdocker入门教程一、安装与卸载docker1安装curl-sSLhttps://get.docker.com/|sh2启动docker服务sudosystemctlstartdocker3卸载sudosystemctlstopdockersudodnf-yremovedocker-cedocker-ce-clicontainerd.ios......
  • Qemu源码分析(8)—Apple的学习笔记
    一,前言本节主要看stm32f4_discovery_board_init_callback函数,里面大概看明白了,主要是2个部分,一个是SDL的初始化,另外一个是mcu中各个模块中寄存器对象的属性添加及设置属性值。二,分析Object*object_new(constchar*typename)才会调用class_init和ti->instance_init看到了set"hse......