学习笔记4

第七、八章

文件操作

文件操作级别

1.硬件操作

  大多数是针对系统的实用程序

2.操作系统内核中的文件系统函数

  每个操作系统内核均可为基本文件操作提供支持

3.系统调用

  用户模式程序使用系统调用来访问内核函数

  每个库函数都会发出一个系统调用,使进程进入内核模式来执行相应的内核函数

4.I/O库函数

  

5.用户命令

  用户可以使用Unix/Linux命令来执行文件操作

6.sh脚本

分区

在计算机存储中,分区(Partition)是将物理存储设备(如硬盘、固态硬盘等)划分为逻辑部分的过程。每个分区被视为独立的存储空间,并被操作系统识别和管理。

分区的主要目的是将物理存储设备划分为多个逻辑单元,使得每个分区可以被独立格式化、挂载以及用于存储文件系统。这样可以提供更灵活和有效的存储管理,以满足不同的需求和使用场景。

每个分区可以具有不同的文件系统类型,例如常见的FAT32、NTFS、EXT4等。每个文件系统都有其特定的功能、性能和限制。

分区还可以有不同的目的,例如:

  1. 启动分区:在计算机启动过程中,用于存储启动相关的引导程序和操作系统。
  2. 系统分区:用于安装和运行操作系统及其相关文件。
  3. 数据分区:用于存储用户数据、应用程序、媒体文件等。
  4. 交换分区(Swap分区):用于操作系统将部分内存内容临时存储到磁盘,以满足内存需求的扩展。
  5. 备份分区:用于存储备份和恢复数据。

需要注意的是,每个物理存储设备通常可以被划分为多个分区。分区的大小和数量取决于操作系统和存储设备的限制。

总而言之,分区是将物理存储设备划分为逻辑部分的过程,用于提供独立的存储空间和灵活的存储管理。

系统调用:内核模式(Kmode)用户模式(Umode)
文件操作系统调用函数:

access:检查对某个文件的权限
int access (char *pathname, int mode);
chdir:更改目录
int chdir (const char *path);
chmod: 更改某个文件的权限
int chmod (char *path, mode_t mode);
chown:更改文件所有人
lat chow (char *name, int uid, int gid),
chroot:将(逻辑)根目录更改为路径名
Int chroot (char *pathname);
getcwd:获取 CWD 的绝对路径名
char *getcwd(char *buf, int size);
mkdir:创建目录
int mkdir (char *pathname, mode_t mode) ;
rmdir:移除目录(必须为空)
int rmdir (char *pathname);
link:将新文件名硬链接到旧文件名
int link(char *oldpath, char *newpath);
unlink:减少文件的链接数,如果链接数达到0,则删除文件
int unlink(char *pathname)
symlink:为文件创建一个符号链接
int symlink(char *oldpath, char *path name);
rename:更改文件名称
int rename(char *oldpath, char *newpath);
stat:获取文件状态信息
int stat(char *filename, srtuct stat *buf)
int fstat(int filedes, struct stat *buf)
int lstat(char *filename, srtuct stat *buf)

以mkdir为例的程序:

按照书上的代码写了,编译报错连篇,执行可执行错误的时候野报错:段错误(核心以转储)。但神奇的是依然成功的创建了newdir这个文件夹。

先修正代码部分,不得不说gcc的报错非常清晰明了,知道错误在哪,在询问gpt后加了包含mkdir、strerror、chdir、getcwd函数的头文件 就解决了。

创建成功

至于为什么报错依然能创建还没搞懂 gpt也没有很懂的样子,可能是我提问方式有误,猜想和代码段main函数没错,gcc功能强大有关。

链接文件:
硬链接:命令
    ln -s oldpath newpath
  对应的系统调用为:
   link(char *oldpath, char *newpath)

软链结:命令
    ln -s oldpath newpath
  创建从newpath到oldpath的软链接或符号链接,对应的系统调用为:
   symlink(char *oldpath, char *newpath)

在open-close-lseek中不知道文件描述符是什么,问GPT

苏格拉底挑战:

1.文件I/O操作

2.链接文件

posted @ 2023-09-28 20:34  周意凯  阅读(5)  评论(0编辑  收藏  举报