java操作系统文件系统实验_操作系统实验四:文件系统

本次实验旨在熟悉Linux文件系统,了解其目录结构,并通过Java模拟实现文件备份。实验内容包括浏览Linux目录、理解文件系统特性,以及使用C库函数实现文件复制。实验分析了文件备份的原理,并探讨了系统调用与C库函数的区别。
摘要由CSDN通过智能技术生成

一、实验目的

1、熟悉Linux文件系统的文件和目录结构,掌握Linux文件系统的基本特征;

2、模拟实现Linux文件系统的简单I/O流操作:备份文件。

二、实验环境

Linux系统

三、实验内容

1、浏览Linux系统根目录下的子目录,熟悉每个目录的文件和功能;

2、设计程序模拟实现Linux文件系统的简单I/O流操作:备份文件。

四、实验原理 实验中用到的系统调用函数(包括实验原理中介绍的和自己采用的),实验步骤,

1、Linux各种发行版的目录结构基本一致,各个目录简单介绍如下:

目录 描述

/ 根目录

/bin 做为基础系统所需要的最基础的命令就是放在这里。比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。

/boot Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;启动装载文件存放位置,如kernels,initrd,grub。一般是一个独立的分区。

/dev 一些必要的设备,声卡、磁盘等。还有如 /dev/null. /dev/console /dev/zero /dev/full 等。

/etc 系统的配置文件存放地. 一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;

/etc/opt:/opt对应的配置文件

/etc/X11:Xwindows系统配置文件

/etc/xml:XML配置文件

……

/home 用户工作目录,和个人配置文件,如个人环境变量等,所有的账号分配一个工作目录。一般是一个独立的分区。

/lib 库文件存放地。bin和sbin需要的库文件。类似windows的DLL。

/media 可拆卸的媒介挂载点,如CD-ROMs、移动硬盘、U盘,系统默认会挂载到这里来。

/mnt 临时挂载文件系统。这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。

/opt 可选的应用程序包。

/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。

/root Root用户的工作目录

/sbin 和bin类似,是一些可执行文件,不过不是所有用户都需要的,一般是系统管理所需要使用得到的。

/tmp 系统的临时文件,一般系统重启不会被保存。

/usr 包含了系统用户工具和程序。

/usr/bin:非必须的普通用户可执行命令

/usr/include:标准头文件

/usr/lib:/usr/bin/ 和 /usr/sbin/的库文件

/usr/sbin:非必须的可执行文件

/usr/src:内核源码

/usr/X11R6:X Window System, Version 11, Release 6.

/srv 该目录存放一些服务启动之后需要提取的数据

2、Linux的文件结构是单个的树状结构.可以用tree进行展示。文件操作命令见附录1,

3、Linux文件系统:Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而执行。“一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。

4、虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据 结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准 的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都是相同的。

5、利用C库函数fopen(), fread(), fwrite(), fclose() 来实现简单的文件备份, 即将一个文件的内容拷贝到另一个文件中去。

五、实验中用到的系统调用函数

实验只是模拟实现文件的备份功能,不需要系统调用函数。

六、实验要求

1、 对文件系统命令和库函数要提前熟悉;

2、 画出备份文件的过程图;

9e1bd61ca2293844d0b1b8cea7ebd8f4.png

3、 测试数据文件提前准备好;

4、 编写程序并调试;

#include

#include

int main()

{

FILE* file1, * file2;

char buf[100] = { 0 };

int a = 0;

if ((file1 = fopen("sample", "r"))==NULL)

{

printf( "打开文件1错误!!.\n" );

return -1;

}

if ((file2 = fopen("copy", "w")) == NULL)

{

printf( "打开文件2错误!!.\n" );

return -1;

}

while ((a=fread(buf, sizeof(char), 1, file1))>0)

{

fwrite(buf, sizeof(char), a, file2);

}

fclose(file1);

fclose(file2);

}

5、 截屏输出实验结果;

6、 根据实验结果与理论课讲述的原理进行实验分析。

七、思考题

1、使用系统调用函数open(),read(),write(),close()实现简单文件备份的原理是什么?

系统调用函数open(),read(),write(),close()是通过文件描述符来实现文件的备份,文件描述符就是一些数值,用来描述文件的配置情况,通过文件描述符的管理,open建立了一条到文件或设备的访问路径,如果调用成功,返回一个可以被read、write等其他系统调用的函数使用的文件描述符。write的作用是把缓冲区buf的前nbytes个字节写入到文件描述符关联的文件中,返回实际写入的字节数。read系统调用的作用是从与文件描述符相关的文件里读入nbytes个字节的数据,并把它们放到数据区buf中,返回读入的字节数。close函数的作用是关闭文件描述符和其对应的文件之间的关联。

2、使用C库函数fopen(), fread(), fwrite(), fclose() 来实现简单文件备份的原理是什么?

在linux系统中,文件和设备都被看做事数据流,进行操作之前,必须先将流打开,可以通过调用库函数fopen()打开一个流,库函数fopen()的返回值为一个FILE结构指针,此结构中包含对所打开的流进行操作所需的全部信息。当流操作完成后,需要执行清空缓冲区,保存数据等操作,所以这个时候需要将流关闭,调用函数fclose()来完成。在实现文件备份的过程中,实际上是建立了两个流,把其中一个流中的数据写入另一个流中从而实现备份。

3、上述二者的区别在哪里?

系统调用是在内核模式中的文件描述符的基础上运行,C库函数在用户模式中数据流的基础上运行,而每一个文件流都对应一个底层的文件描述符。在进行C库函数fopen()等函数的调用时,相应的操作会在进入内核中以相应系统调用函数实现。

八、实验结果分析(截屏的实验结果,与实验结果对应的实验分析)

eb61f984847e8c7871339021e737c51d.png

编译代码;以下是原本sample中的内容,编译代码后,sample中的内容拷贝到cpoy中

8fc426ff82cd3a73f810f99cc0420f87.png

d01d04e3dcd5d5a5c56c16b92a0a57f5.png

九、实验总结

通过这次实验,我对LINUX系统的文件系统的认识更加深刻了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值