文件系统.docx

上传人:b****8 文档编号:10034262 上传时间:2023-02-08 格式:DOCX 页数:11 大小:408.46KB
下载 相关 举报
文件系统.docx_第1页
第1页 / 共11页
文件系统.docx_第2页
第2页 / 共11页
文件系统.docx_第3页
第3页 / 共11页
文件系统.docx_第4页
第4页 / 共11页
文件系统.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

文件系统.docx

《文件系统.docx》由会员分享,可在线阅读,更多相关《文件系统.docx(11页珍藏版)》请在冰豆网上搜索。

文件系统.docx

文件系统

 

实验报告

(2014/2015学年第一学期)

 

课程名称

操作系统A

实验名称

文件系统

实验时间

2014

12

8

指导单位

指导教师

 

学生姓名

班级学号

学院(系)

计算机学院

专业

软件工程

实验报告

实验名称

文件系统

指导教师

徐鹤

实验类型

设计

实验学时

2

实验时间

2014.12.08

一、实验目的和要求

1.学习LINUX系统下对文件进行操作的各种命令和图形化界面的使用方法。

2.深入学习和掌握文件管理系统的基本原理和LINUX等操作系统下常用的系统调用,编写一个使用系统调用的例程。

3.实现一个文本文件的某信息的插入和删除

4.实现一个记录文件的某记录的插入和删除

 

二、实验环境(实验设备)

WindowsXP+VMWare+RedHatLinux8

 

实验报告

3、实验过程描述与结果分析

①实验指导:

1.目录/proc下与系统相关的文件和目录

(1)/proc/$pid/fd:

这是一个目录,该进程($PID号码进程)每个打开的文件在该目录下有一个对应的文件。

例如:

#ls/proc/851/fd

0        1  2  255

这表示,851号进程目前正在使用(已经打开的)文件有4个,它们的描述符分别是0、1、2、255。

其中,0、1、2依次分别是进程的标准输入、标准输出和标准错误输出设备。

(2)/proc/filesystems:

该文件记录了可用的文件系统类型。

(3)/proc/mounts:

该记录了当前被安装的文件系统信息

          例如:

#cat/proc/mount

(4)/proc/$pid/maps:

该文件记录了进程的映射内存区信息。

        例如:

#cat  /proc/851/maps

2.常用命令讲解

ls命令

用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。

例如:

  $ls-liah*

  22684-rw-r--r--1bluherusers952Dec2818:

43.profile

  19942-rw-r--r--1scalishusers30Jan320:

00test2.out

  925-rwxr-xr-x1scalishusers378Sep22002test.sh

  

  上面的列表显示8列:

  第1列指示文件的inode,因为我们使用了-i选项。

剩下的列通过-l选项来进行正常显示。

  第2列显示文件类型和文件访问权限。

  第3列显示链接数,包括目录。

  第4和第5列显示文件的所有者和组所有者。

这里,所有者'bluher'属于组'users'。

  第6列显示文件大小(单位为所显示的单位,而不是默认的字节数,因为我们使用了-h选项。

  第7列显示日期(它看起来像是三列),包括月、日和年,以及当天的时间。

  第8列显示文件名。

在选项列表中使用-a将使列表中包含隐藏文件(如.profile)的列表。

  处理文件

  可以移动(mv)、复制(cp)或删除(rm)文件和目录。

明智地使用-i选项,以获得确认通常是个不错的主意。

  $cp-ils.outls2.out

  cp:

overwrite`ls2.out'?

  mv命令允许使用-b选项,这将在移动文件之前作一个备份拷贝。

rm和cp接受功能强大但却危险的-r选项,它将在一个目录和它的文件上递归执行。

  $rm-irTest

  rm:

descendintodirectory`Test'?

y

  可以用mkdir来创建目录,用rmdir来删除目录。

不过,因为不能用rmdir来删除包含文件的目录,所以使用rm加-r选项通常要更方便些。

  出于安全的原因,所有的文件都有所有权和保护。

文件访问权限(或文件模式)包含之前提到的相同的10个字符:

  第一个字符指示文件类型。

最常见的是-代表文件,d代表目录,而l代表链接。

  接下来的9个字符是三种用户类别的访问权限:

文件所有者(字符2-4),用户组(5-7)和其它(8-10),其中r表示读权限,w表示写权限,x指示一个文件上的执行权限。

破折号-如果出现在这九个位置的任意一个,则指示这个操作对该类别的用户禁止。

  可以使用chmod命令通过字符符号或二进制掩码来设置访问权限。

要使用二进制掩码,必须将三个权限组的字符表示转换成二进制格式,然后转换成八进制格式:

  用户类别:

所有者用户组其它

  字符表示:

rwxr-xr--

  二进制表示:

111101100

  八进制表示:

754

  将写权限赋予用户组,可以使用:

  chmodg+wtest.shorchmod774test.sh

  用umask命令,在/etc/init.dev文件中进行系统范围内的、或在.profile文件中进行的本地的文件权限默认设置。

这个命令指示用777减去这个数字来获取默认的权限:

  $umask022

  这将为用户创建的所有新文件生成一个默认的文件权限755。

  可以用chown来修改文件的所有权:

  $chownbluherls.out

  这里,bluher是新的文件所有者。

类似地,组成员资格将按以下方式修改:

  $chgrpdevgrpls.out

  这里,devgrp是新的用户组。

  ls不提供哪些文件是文本的,哪些文件是二进制的的信息。

要了解这个信息,可以使用file*命令。

  重命名文件

  赋予一个文件多个名字的两种流行的方法是利用链接和alias命令。

Alias可以用来为一个更长的命令重新起一个更方便的名字:

  $aliasll='ls-l'

  $ll

  注意单引号的使用,这使得BASH将该项目传递给别名,而不是自己估计它。

别名还可用作较长的路径名的缩写:

  $aliasjdev9i=/jdev9i/jdev/bin/jdev

cat、more和less

命令让能够从命令行查看一个文本文件的内容,而无需调用编辑器。

Cat是'concatenate'的缩写,它将默认地在标准输出(显示屏)上显示文件内容。

和cat一起提供的最有趣的选项之一是-n选项,它用编号的输出行来显示文件内容。

  $cat-ntest.out

  1Thisisatest.

  因为cat一次性输出文件中的所有行,所以可能更喜欢用more和less,因为它们都一次输出一屏的文件内容。

Less是more的一个增强的版本,它允许用来自vi文本编辑器的关键命令来增强文件查看。

例如,d向前翻滚、b向后翻滚N行(如果N是在d或b之前指定的)。

为N输入的值成为随后的d命令的默认值。

man页面实用工具使用less来显示使用说明的内容。

  重定向和管道

  重定向允许将命令输出重定向到文件中,而不是标准输出,或者类似地,也可重定向输入。

重定向的标准符号〉创建一个新的文件。

〉〉符号将输出添加到一个现有的文件中:

  $moretest2.out

  Anothertest.

  $cattest.out〉〉test2.out

  $cattest2.out

  Anothertest.

  Thisisatest.

  到文件的标准输入可以用〈符号来重定向:

  $cat〈test2.out

  错误消息用2〉和2〉〉来重定向和添加,格式如下:

  $command2〉name_of_error_file

  重定向在一个命令和文件之间、或文件和文件之间工作。

重定向语句的一项必须是一个文件。

  管道使用|符号,并且在命令之间工作。

例如,可以用以下方式将一个命令的输出直接发送到打印机上:

  $ls-l*|lpr

  可以用以下方式快速地找到历史列表中的一个命令:

  $history|grepcat

  查找文件

  find命令的GNU版本非常强大、灵活并且比UNIX系统上存在的经典版本更具包容性。

它对于涉及到目录结构的任务非常有用,包括在文件上查找和执行命令。

find命令的基本格式是:

  $findstartdirectoryoptionsmatchcriteria[actionoptions]

  如果知道文件的名称、或者甚至名称的一部分,但不知道它所处的目录,可以这么做:

  $find.-name'test*'

  ./test

  ./jdevhome/mywork/EmpWS/EmpBC4J/test

  与经典的UNIX系统不同,在Linux中不需要在末尾添加-print操作,因为如果没有指定其它的操作选项,就将假定执行这个操作。

在目录起始位置上的一个点(.)将使find在的工作目录中开始搜索。

两个点,..,在父目录中开始搜索。

可以在任意目录下开始搜索。

  注意,可以使用通配符作为搜索准则的一部分(只要用单引号将整个项目括起来)。

  $find.-name'test*'-print

  ./test.out

  ./test2.out

  显示拥有.out扩展名的一系列文件:

  $find/home-name'*.out'

  不过记住,除非是作为超级用户运行这个命令,否则将可能得到许多的'Permissiondenied'错误消息。

3.Linux常用文件系统调用

(1)open系统调用

格式:

#include

      #inckude

      #include

      intopen(char*path,intflags,mode_tmode);

其中:

参数path是指向所要打开的文件的路径名指针。

参数falgs规定如何打开该文件它必须包含以下三个值之一

O_RDONLY    只读打开

O_WRONLY    只写打开

O_RDWR      读/写打开

            参数mode规定对该文件的访问权限,定义在

(2)read系统调用

格式:

#include

      #include

intread(intfd,void*buf,size_tnbytes)

      

该系统调用从文件描述符fd所代表的文件中读取nbytes个字节,buf指定的缓冲区内。

所读取的内容从当前的读/写指针所指示的位置开始,这个位置由相应的打开文件描述中的偏移值(off_set)给出,调用成功后文件读写指针增加实际读取的字节数。

使用read系统调用时,应注意设置的数据缓冲区充分大,能够存放所要求的数据字节,因为内核只复制数据,不进行检查。

返回:

  -1:

    错误

0:

    文件偏移值是在文件结束处

整数:

    从该文件复制到规定的缓冲区中的字节数。

通常这个字节数与所请求的字节数相同。

除非请求的字节数超过剩余的字节数,这时将返回一个小于请求的字节数的数字。

(3)write系统调用

格式:

  #include

        #include

        intwrite(intfd,void*buf,size_tnbytes)

该调用从buf所指的缓冲区中将nbytes个字节写到描述符fd所指的文件中。

    

(4)close系统调用

格式:

  #include

          intclose(intfd)

每打开一个文件,系统就给文件分配一个文件描述符,同时为打开文件描述符的引用计数加1。

Linux文件系统最多可以分配255个文件描述符。

当调用close()时,打开文件描述符的引用计数值减1,最后一次对close()的调用将使应用计数值为零。

虽然当一个进程结束时,任何打开的文件将自动关闭,明显地关闭任何打开的文件是良好的程序设计习惯。

②实验步骤(附程序原码):

#include

#include

#include

#include

#include

#include

#include

#include

#include

main()

{

intfd0,record_len,buff_len;

charfilename[50],f_buff[2000];

strcpy(filename,"/example.txt");

fd0=open(filename,O_RDWR|O_CREAT,0644);

if(fd0<0)

{

printf("Cann'tcreateexample.txtfile!

\n");

exit(0);

}

buff_len=20;record_len=10;

lseek(f,0,SEEK_SET);

cnt=read(fd0,f_buff,record_len*buff_len);/*读文件*/

cnt=cnt/record_len;

printf(“%s\n”,f_buff);

strcpy(f_buff,”1234567890”);

write(fd0,f_buff,strlen(f_buff));/*写文件*/

write(fd0,”\n\r”,2);

close(fd0);

}

③实验截图:

 

 

实验报告

四、实验小结(包括问题和解决方法、心得体会、意见与建议等)

一、本实验是模拟Linux文件管理系统,在实验的过程中对Linux文件管理系统有了深刻的认识。

二、通过实验我学习到了查找文件find命令的GNU版本非常强大、灵活并且比UNIX系统上存在的经典版本更具包容性。

它对于涉及到目录结构的任务非常有用,包括在文件上查找和执行命令。

find命令的基本格式是:

$findstartdirectoryoptionsmatchcriteria[actionoptions]。

三、在学习此类课程时我们要多实践才能了解到更多。

五、指导教师评语

成绩

批阅人

日期

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1