操作系统实验四陈珂精编版.docx
- 文档编号:3428016
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:15
- 大小:637.34KB
操作系统实验四陈珂精编版.docx
《操作系统实验四陈珂精编版.docx》由会员分享,可在线阅读,更多相关《操作系统实验四陈珂精编版.docx(15页珍藏版)》请在冰豆网上搜索。
操作系统实验四陈珂精编版
《操作系统原理》实验报告
专业
网络工程
班级
14-2
学号
14034460220
姓名
林浩强
指导教师
陈珂
完成时间
2016.12.08
成绩
实验四LINUX文件系统编程
一、实验目的
1.加深对文件,目录,文件系统等概念的理解。
2.掌握Linux文件系统的目录结构。
3.掌握有关Linux文件系统操作的常用命令。
4.了解有关文件安全方面的知识。
5.掌握LINUX文件系统的基本原理,结构和实现的方法
6.掌握LINUX文件系统中文件的建立,打开,读写,执行,属性等系统调用的使用.
二、实验内容
1.浏览文件系统
2.查看文件
3.文件操作
4.文件存取权限
5.仔细阅读提供的源代码
6.理解LINUX文件系统的基本原理
7.调试提供的源代码
三、实验步骤
一、Linux常用文件命令
1、浏览文件系统
1.1运行pwd命令,确定你当前的工作目录。
1.2利用以下命令显示当前工作目录的内容:
ls–l
1.3运行以下命令:
ls–ai
1.4使用mkdir命令建立一个子目录subdir。
1.5使用带-d选项的ls命令,你只能看到有关子目录的信息。
1.6使用cd命令,将工作目录改到根目录(/)上。
命令格式:
cd/
1.7使用ls命令列出根目录的内容,再分别列出各子目录的内容。
1.8使用ls-l命令列出/dev的内容
1.9使用不带参数的命令cd,然后用pwd命令确定你当前的工作目录是什么。
1.10使用命令cd../..,你将工作目录移到什么地方。
注意“/”前有无空格的区别。
2、查看文件
2.1利用cd命令,将工作目录改到你的主目录上。
2.2将工作目录改到你的子目录subdir,然后运行命令:
date>file1将当前日期和时间存放到新建文件file1中。
2.3使用cat命令查看file1文件的内容。
2.4利用man命令显示date命令的用法
2.5将date命令的用法附加到文件file1的后面
2.6利用cat命令显示文件file1的内容。
2.7利用ls-lfile1命令列出文件file1的较详细的信息,注意其中第二字段(链接计数)的值。
2.8利用lnfile1../fa命令进行文件链接。
然后运行ls-lfile1,查看显示的第二段的值发生了什么变化。
2.9现在想利用catfa命令显示文件fa的内容,应该如何改动工作目录?
2.10假设你的主目录是/usr/student,利用ln-s/usr/student/file1slink进行符号连接。
然后,利用ls-lfile1slink显示有关file1和slink的信息。
2.11运行ls-l/bin命令显示目录的内容。
2.12利用ls-l/bin|more命令行分屏显示/bin目录的内容。
3、文件操作
3.1利用find命令查找文件和目录
3.2查找文件中指定的内容
4、文件与目录存取权限
4.1文件读权限(r):
允许指定的用户可以打开文件并阅读其内容。
如cat,more,file和cp命令等。
4.2文件写权限(w):
允许指定的用户可以打开文件并修改其内容。
如vi,mail,cp等。
4.3文件执行权限(x):
允许指定的用户运行(即执行)一个二进制文件或者把一个shell脚本文件当作命令来运行。
当你通过输入命令名来调用命令时,你必须具有该命令文件的执行权限。
4.4目录读权限(r):
允许你列出相应目录中所存放的文件的名字(即目录的内容表)。
4.5目录写权限(w):
允许你从目录中删除已有文件或者把新文件添加到目录中。
4.6目录查询权限(x):
允许你在目录中进行查找和使用cd命令把工作目录放到它这里。
4.7修改文件或目录权限
二、LINUX文件系统编程
1.1、在VMware运行Linux(CentOS),并打开Terminal
1.2、新建eaxm.c文件,并使用C语言进行编程
1.3、编译文件“exam.c”
1.4、执行“exma.c”并观察输出结果
四、程序清单:
注意加注释(包含关键字、方法、变量等),在每个模块前加注释
#include
#include
#include
#include
#include
#include
#include
#include
#defineMAX128
intchmd();
intchmd()
{
intc;
mode_tmode=S_IWUSR;
printf("0.0700\n1.0400\n2.0200\n3.0100\n");
printf("Pleaseinputyourchoice(0-3):
");
scanf("%d",&c);
switch(c)
{
case0:
chmod("file1",S_IRWXU);break;
case1:
chmod("file1",S_IRUSR);break;
case2:
chmod("file1",S_IWUSR);break;
case3:
chmod("file1",S_IXUSR);break;
default:
printf("Youhaveawrongchoice!
\n");
}
return(0);
}
main()
{
intfd;
intnum;
intchoice;
charbuffer[MAX];
structstatbuf;
char*path="/bin/ls";
char*argv[4]={"ls","-l","file1",NULL};
while
(1)
{
printf("********************************\n");
printf("0.退出\n");
printf("1.创建新文件\n");
printf("2.写文件\n");
printf("3.读文件\n");
printf("4.修改文件权限\n");
printf("5.查看当前文件的权限修改文件权限\n");
printf("********************************\n");
printf("Pleaseinputyourchoice(0-6):
");
scanf("%d",&choice);
switch(choice)
{
case0:
close(fd);
exit(0);
case1:
fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750);
if(fd==-1)
printf("FileCreateFailed!
\n");
else
printf("fd=%d\n",fd);
break;
case2:
num=read(0,buffer,MAX);
write(fd,buffer,num);
break;
case3:
read(fd,buffer,MAX);
write(1,buffer,num);
break;
case4:
chmd();
printf("Changemodesuccess!
\n");
break;
case5:
execv(path,argv);
break;
default:
printf("Youhaveawrongchoice!
\n");
}
}
}
五、测试结果(运行结果、结果分析)
六、回答问题:
1、程序分析
本程序主要是通过调用系统中“文件的建立、打开、读写、执行”等系统调用函数,实现对Linux文件的各种操作,例如创建、读写、修改文件权限等操作。
主要使用到以下几个系统调用函数:
(1)创建新文件fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750);
调用函数open()打开文件,第一个参数为要打开的文件名,第二个参数为打开文件的方式,其中参数O_CREAT表示当打开的文件不存在时,创建该文件,此时要加上第三个参数,第三个参数表创建文件后文件所具有的权限。
该函数的返回值为打开文件的标识符,出错时fd=-1;
(2)写文件num=read(0,buffer,MAX);
调用read()函数,该函数的第一个参数为要读取的文件描述符,0表示从输入流中读取文件,第二个参数表示将读取到的数据存放到buffer缓冲区中,第三个参数为最大读取的字符个数。
函数的返回值为实际读取到的字符数。
write(fd,buffer,num);
调用write()函数,该函数的第一个参数为要将数据写入的文件描述符,第二个参数要写入的缓冲区,第三个参数为写入的字符长度。
(3)读文件read(fd,buffer,MAX);
调用该函数,将文件标识符为fd中的文件中的数据读取到buffer缓冲中。
write(1,buffer,num);
调用该函数,将buffer缓冲区中的数据写入到输出流中,输出到显示器上。
(4)修改文件权限chmod("file1",S_IRWXU);
调用该函数更改文件的权限,其中第一个参数为要更改权限的文件名,第二个参数为要修改到的权限,其中,S_IRWXU表示具有执行、可读、可写权限,S_IRUSR表示具有可读权限,S_IWUSR表示具有可写权限,S_IXUSR表示具有可执行权限。
(5)查看当前文件的权限修改文件权限
char*path="/bin/ls";char*argv[4]={"ls","-l","file1",NULL};execv(path,argv);
调用系统调用execv()函数,表示调用/bin/ls,实际相当于在终端上执行”ls–lfile1”,查看文件file1的详细信息。
2、解释num=read(0,buffer,MAX);write(fd,buffer,num);代码的含义?
num=read(0,buffer,MAX)表示从输入流中读取字符数据存放到缓冲区buffer中,write(fd,buffer,num)表示将buffer中的数据写入到文件表示符为fd的文件中。
3、系统调用execv()的用途?
该系统调用execv()的用途是替换当前的进程执行终端上的指令。
七、总结(实验效果分析、心得体会,遗留问题)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 四陈珂 精编