操作系统实验四陈珂精编版Word文档格式.docx

上传人:b****5 文档编号:16333475 上传时间:2022-11-23 格式:DOCX 页数:15 大小:637.34KB
下载 相关 举报
操作系统实验四陈珂精编版Word文档格式.docx_第1页
第1页 / 共15页
操作系统实验四陈珂精编版Word文档格式.docx_第2页
第2页 / 共15页
操作系统实验四陈珂精编版Word文档格式.docx_第3页
第3页 / 共15页
操作系统实验四陈珂精编版Word文档格式.docx_第4页
第4页 / 共15页
操作系统实验四陈珂精编版Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统实验四陈珂精编版Word文档格式.docx

《操作系统实验四陈珂精编版Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验四陈珂精编版Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统实验四陈珂精编版Word文档格式.docx

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<

stdio.h>

sys/types.h>

unistd.h>

fcntl.h>

sys/stat.h>

syslog.h>

string.h>

stdlib.h>

#defineMAX128

intchmd();

intchmd()

{

intc;

mode_tmode=S_IWUSR;

printf("

0.0700\n1.0400\n2.0200\n3.0100\n"

);

Pleaseinputyourchoice(0-3):

"

scanf("

%d"

&

c);

switch(c)

{

case0:

chmod("

file1"

S_IRWXU);

break;

case1:

S_IRUSR);

case2:

S_IWUSR);

case3:

S_IXUSR);

default:

printf("

Youhaveawrongchoice!

\n"

}

return(0);

}

main()

intfd;

intnum;

intchoice;

charbuffer[MAX];

structstatbuf;

char*path="

/bin/ls"

;

char*argv[4]={"

ls"

"

-l"

NULL};

while

(1)

********************************\n"

0.退出\n"

1.创建新文件\n"

2.写文件\n"

3.读文件\n"

4.修改文件权限\n"

5.查看当前文件的权限修改文件权限\n"

printf("

Pleaseinputyourchoice(0-6):

choice);

switch(choice)

case0:

close(fd);

exit(0);

fd=open("

O_RDWR|O_TRUNC|O_CREAT,0750);

if(fd==-1)

FileCreateFailed!

else

fd=%d\n"

fd);

break;

case2:

num=read(0,buffer,MAX);

write(fd,buffer,num);

case3:

read(fd,buffer,MAX);

write(1,buffer,num);

case4:

chmd();

Changemodesuccess!

case5:

execv(path,argv);

default:

}

五、测试结果(运行结果、结果分析)

六、回答问题:

1、程序分析

本程序主要是通过调用系统中“文件的建立、打开、读写、执行”等系统调用函数,实现对Linux文件的各种操作,例如创建、读写、修改文件权限等操作。

主要使用到以下几个系统调用函数:

(1)创建新文件fd=open("

调用函数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缓冲中。

调用该函数,将buffer缓冲区中的数据写入到输出流中,输出到显示器上。

(4)修改文件权限chmod("

调用该函数更改文件的权限,其中第一个参数为要更改权限的文件名,第二个参数为要修改到的权限,其中,S_IRWXU表示具有执行、可读、可写权限,S_IRUSR表示具有可读权限,S_IWUSR表示具有可写权限,S_IXUSR表示具有可执行权限。

(5)查看当前文件的权限修改文件权限

char*path="

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()的用途是替换当前的进程执行终端上的指令。

七、总结(实验效果分析、心得体会,遗留问题)

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

当前位置:首页 > 职业教育 > 中职中专

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

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