学习笔记四

一、知识点归纳
第七章
7.1文件操作级别
(1)硬件级别
fdisk:将硬盘、U盘或SDC盘分区
mkfs:格式化磁盘分区,为系统做好准备
fsck:检查和维修系统
碎片整理:压缩文件系统中的文件
(2)操作系统内核中的文件系统函数
(3)系统调用
(4)I/O库函数
(5)用户命令
7.2文件I/O操作
文件操作示意图:
在这里插入图片描述
7.3低级别文件操作
分区:一个块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,称为分区
格式化分区:fdisk只是将一个存储设备划分为多个分区。每个分区都有特定的文件系统类型,但是分区还不能使用。为了存储文件,必须先为特定的文件系统准备好分区。
挂载分区:
1.dd命令创建一个虚拟硬盘映像
2.在vdisk上运行fdisk来创建一个分区P1
3.使用扇区数在vdisk的分区1上创建一个循环设备
4.格式化/dev/loop1
5.挂载循环设备
6.访问作为文件系统一部分的挂载设备
7.设备使用完毕后卸载
7.4 EXT2文件系统简介
EXT2文件系统采用了一种称为索引节点(inode)的数据结构来管理文件和目录。每个文件和目录都有一个唯一的inode,该inode包含有关该文件或目录的元数据,如文件大小、创建时间、权限等。这种设计使得文件系统能够更高效地管理文件和目录。
EXT2文件系统支持文件和目录的层次结构,允许用户创建子目录和文件,并对它们进行组织和管理。它还支持文件和目录的权限设置,可以控制用户对文件和目录的访问权限。
EXT2文件系统还具有一些其他特性,如文件系统日志(journaling)和文件系统扩展性。文件系统日志可以记录文件系统的操作,以防止数据损坏。文件系统扩展性允许文件系统在需要时动态增长,以适应存储需求的增加。
7.5编程示例
为了编译和运行程序,系统必须安装ext2fs.h头文件
在这里插入图片描述
7.6 编程项目:将文件路径名转换为索引节点
将路径名转换为文件的INODE

第八章
8.1系统调用
进程运行模式分为内核模式与用户模式。系统调用是一种允许进程进入Kmod以执行Umode不允许操作的机制
8.2系统调用手册页
大多数版本的Linux中在线手册页保存在/usr/man/目录
Ubuntu Linux中,保存在/usr/share/man目录
8.3使用系统调用进行文件操作
每个系统调用都是一个库函数,它汇集系统调用参数,并最终向操作系统内核发出一个系统调用。
access:检查对某个文件的权限
int access(char *pathname,int mode)
mkdir:创建目录
int mkdir(char *pathname,mode_t mode)
rmdir:移除目录(必须为空)
int rmdir(char *pathname)
link:将新文件名硬链接到旧文件名
int linke(char *oldpath,char *newpath)
8.4常用的系统调用
stat:获取文件状态信息
open:打开一个文件进行读写追加
close:关闭打开的文件描述符
read:读取打开的文件描述符
write:写入打开的文件描述符
lseek:重新定位文件描述符的读/写偏移量
symlink:创建一个符号链接
8.5链接文件
硬链接文件: 1n oldpath newpath
符号链接文件:1n -s oldpathnewpath
8.6stat系统调用
stat系统调用是一个用于获取文件或文件夹的元数据的函数。它可以返回文件的大小、权限、创建时间、修改时间、访问时间等信息。
stat系统调用的原型如下:
int stat(const char *pathname, struct stat statbuf);
参数说明:
pathname:要获取元数据的文件或文件夹的路径。
statbuf:用于存储元数据的结构体。
调用成功时,stat函数返回0,并将文件或文件夹的元数据填充到statbuf结构体中。调用失败时,返回-1,并设置errno来指示错误类型。
以下是stat结构体的定义:
struct stat {
dev_t st_dev; /
文件所在设备的ID /
ino_t st_ino; /
文件的inode号 /
mode_t st_mode; /
文件的类型和权限 /
nlink_t st_nlink; /
文件的硬链接数 /
uid_t st_uid; /
文件所有者的用户ID /
gid_t st_gid; /
文件所有者的组ID /
dev_t st_rdev; /
特殊文件的设备ID /
off_t st_size; /
文件的大小(字节数) /
blksize_t st_blksize; /
文件系统的块大小 /
blkcnt_t st_blocks; /
文件所占用的块数 /
time_t st_atime; /
文件的最后访问时间 /
time_t st_mtime; /
文件的最后修改时间 /
time_t st_ctime; /
文件的最后状态改变时间 */
};
使用stat系统调用,可以获取文件或文件夹的各种属性信息,从而进行文件管理、权限控制等操作。
8.7open-close-lseek系统调用
打开文件和文件描述符
int open(char *pathname,int flags,mode_t mode)
关闭文件描述符
int close(int fd)
lseek文件描述符
off_t lseek(int fd,off_t offset,int whence)
8.8read()系统调用
将n个字节从打开的文件描述符读入用户空间的buf[]
8.9write()系统调用
将n个字节从用户空间的buf[]写入文件描述符
8.10文件操作程序
示意图:
在这里插入图片描述
二、GPT问答
格式化分区
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
链接文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
三、实践
显示文件内容
在这里插入图片描述
在这里插入图片描述
当运行无文件名程序时,从fd=0收集输入。
复制文件
在这里插入图片描述
四、问题
写书上代码的时候发现有个fcntl.h库找不到,提示我目录中不存在
在这里插入图片描述
最后发现是把书上的fcntl看出fcnt1了
五、代码上传
https://gitee.com/zhou-zhecheng/emotion/issues/I84FGL
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值