首页 > 系统相关 >《Unix/Linux系统编程》第五周学习笔记

《Unix/Linux系统编程》第五周学习笔记

时间:2022-10-03 19:33:31浏览次数:80  
标签:count sp blocks 编程 Unix Linux print printf 磁盘

《Unix/Linux系统编程》第五周学习笔记

EXT2文件系统

ext2功能

Ext2(第二扩充文件系统)是一种功能强大、易扩充、性能上进行全面的优化的文件系统,也是目前Linux文
件系统实际上标准。Linux将Minix文件系统修改后用于Linux,但是文件系统有几个主要缺陷∶磁盘分区大小必须
小于64MB;必须使用14个字符定找的文件名;难于扩展。

Ext2的特点

节点中使用15个数据块指针,最大可支持4TB的磁盘分区;使用变长的目录项,既可以不浪费磁盘空间,又能支持
最长255个字符文件名称;使用位图来管理 数据块和节点的使用情况,解决Ext出现的问题;它在磁盘上布局做改
进,使数据的读/写更快、更有效、系统变得更加安全可靠。

文件操作

假设用户要对一个已有文件进行写操作,用户进程必须先打开这个文件,file结构记录此文件的当前位置,然后
用户把一个指向用户内存区的指针和请求写的字节数传送给系统,请求写操作,这时系统要进行两次映射。一组字节
到逻辑块的映射;逻辑块到物理块的映射;

磁盘布局

Ext2磁盘布局∶文件系统的逻辑空间最终要通过逻辑块到物理块的映射转化为磁盘等介质上的物理空间。一个文件
系统在磁盘如何布局,综合考虑如下因素∶最重要的保证数据的安全性;数据结构要高效地支持所有的操作;磁盘布局
应使数据查找的时间尽量缩短,提高效率磁盘布局应该考虑节省空间。Ext2磁盘布局在逻辑空间的映像如下

Ext2索引节点

Ext2索引节点∶和UNIX类的文件系统一样,使用索引节点来记录文件信息。每一个普通文件和目录都有唯一的
索引与之对应,索引节点中含有文件或目录的重要信息。当我们要访问一个文件或目录时,通过文件或目录名称首先
找到与之对应的索引节点,然后通过索引节点得到文件或目录的信息及磁盘上的具体的存储位置。

实践(模拟环境)(在上周博客中提及了很多实践代码这周代码是对上周代码的修改)

创建空文件

dd if=/dev/zero of=mydisk bs=1M count=30

格式化文件

mkfs.ext2 mydisk

虚拟一个设备

lostup/dev/loop11 mydisk

挂在文件到设备

mount/dev/loop11/opt/mydisk

查看内容

hexdump -n2048-s515k mydisk

显示超级快

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <ext2fs/ext2_fs.h>
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef struct ext2_super_block SUPER;
SUPER* sp;
char buf[1024];
int fd, blksize, inodesize;
int print(char *s, u32 x)
{
    printf("%-30s = %8d\n",s,x);
}
int super(char *device)
{
    fd = open(device, O_RDONLY);
    if (fd < 0)
    {
        printf("open %sfailed\n",device);
        exit(1);
    }	
    lseek(fd ,(long)1024*1,0);
    read(fd, buf, 1024);
    sp = (SUPER *)buf;
    printf("%-30s = %8x ", "s_magic", sp->s_magic);
    if(sp->s_magic != 0xEF53)
    { 
        printf("NOT an EXT2 FS\n");
        exit(2);
    }
    printf("EXT2 FS OK\n");
    print("s_inodes_count",sp->s_inodes_count);
    print("s_blocks_count",sp->s_blocks_count);
    print("s_r_blocks_count",sp->s_r_blocks_count);
    print("s_free_inodes_count",sp->s_free_inodes_count);
    print("s_free_blocks_count",sp->s_free_blocks_count);
    print("s_first_data_block",sp->s_first_data_block);
    print("s_log_block_size",sp->s_log_block_size);
    print("s_blocks_per_group",sp->s_blocks_per_group);
    print("s_innodes_per_group",sp->s_inodes_per_group);
    print("s_mnt_count",sp->s_mnt_count);
    print("s_max_mnt_count",sp->s_max_mnt_count);
    printf("%-30s = %8x\n","s_magic",sp->s_magic);
    printf("s_mtime = %s",ctime(&sp->s_mtime));
    printf("s_mtime = %s",ctime(&sp->s_wtime));
    blksize = 1024 * (1 << sp->s_log_block_size);
    printf("block size = %d\n" ,blksize);
    printf("inode size = %d\n" ,sp->s_inode_size);
}
char *device = "vdisk";
int main(int argc, char *argv[])
{
    if(argc < 1)
    {
        device = argv[1];
    }
    super(device);
}    

问题

标签:count,sp,blocks,编程,Unix,Linux,print,printf,磁盘
From: https://www.cnblogs.com/hzxjkl/p/16751052.html

相关文章

  • Tubian Linux 0.44,增加了对无线网卡的支持
    Github主页(提供下载):https://github.com/jinshulumengchuang/Tubian-Linux123网盘下载:https://www.123pan.com/s/XjkKVv-JO9Uvhttps://www.123pan.com/s/XjkKVv-BO9Uvhtt......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • ASP.NET Core – Thread, Task, Async 线程于异步编程
    前言平常写业务代码,很少会写到多线程.久了很多东西都忘光光了.刚好最近在复习RxJS.有一篇是讲scheduler的.会讲到JavaScript异步相关的资讯.既然如果那就一次......
  • java网络编程--2 IP,端口,通信协议,TCP/UDP对比
    java网络编程--2IP,端口,通信协议,TCP/UDP对比1.3、IPip地址:InetAddress唯一定位一台网络上的计算机127.0.0.1:本机localhostIP地址的分类ipv4/ipv6IPV4......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • GUI编程
    我们要怎么学?是什么,怎么玩,怎么用组件窗口弹窗面板文本框列表框按钮图片监听事件键盘事件破解工具1.简介GUI的核心技术:SwingAW......
  • 我的编程之旅
    我是一名程序员,虽然码龄只有两年,但是读过许多经典的书籍,比如《java核心技术卷I》,《java核心技术卷II》,学了许多框架,从最初的javaweb到ssm,再到springboot,以及springclo......
  • 【Linux】学习-07-Linux防火墙端口
    firewall-cmd--list-ports:查看当前开启的端口情况firewall-cmd--zoon=public--add-port=9000/tcp-parmanent:开启9000端口firewall-cmd--reload:重启防火墙,上......
  • Java SE 宋红康 days04-高级篇-网络编程
    1.Socket:端口号与IP地址的组合得出一个网络套接字;2. 计算机网络中实现通信必须有一些约定,即通信协议:对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。......
  • 【Linux】学习-06-磁盘管理与进程管理
    1、磁盘管理df:显示当前磁盘的情况,显示的是字节的形式df-h:以M为单位显示当前磁盘的使用情况 du:查看当前文件夹所占用的空间du-a:查看当前文件夹下每个文件(夹......