实验5 文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五(1) Linux文件系统实验
实验目的
学习Linux中文件系统的使用,理解链接、权限的概念和使用;掌握常用的文件系统的系统调用,加深对文件系统界面的理解。
实验内容
1.学习文件链接的概念和使用(步骤一)
2.学习文件权限的概念和管理机制,并学会使用(步骤三)
3.学习和文件相关的系统调用和库函数,进行若干编程练习(步骤四,至
少完成两例)
实验步骤
一、文件链接与复制(hard link)
1.使用vi a创建一个文件a
2.使用ln a b命令创建一个链接
使用cp a c创建一个复制版本
观察3个文件的大小、时间、属主(owner)等属性
3.修改文件a
4.观察文件b的内容,观察文件c的内容,观察3个文件的大小、时间、属主(owner)等属性
5.使用ls –li命令,观察文件a, b, c的inode编号
6.使用rm a删除文件a
7.观察文件b, c是否仍然存在,内容如何
8.使用rm b删除文件b,再观察文件b, c是否存在
二、Linux中与文件系统相关的系统调用
1.通过使用man命令,查阅以下的系统调用的使用手册。
1)文件操作
open, close, read, write, seek
creat, truncate, mknod, dup, dup2
link, unlink, rename, symlink
chmod, chown, umask
fcntl, flock, fstat, lstat, stat, utime
fsync, fdatasync
2)目录操作
mkdir, chdir, rmdir
readdir, getdents
3)库函数
fopen, fclose, fread, fwrite, fscanf, fprintf, fseek ,ftell, feof等
2.文件系统的系统调用的编程练习
利用上面的系统调用,试写出自己的命令程序,完成以下功能(要求:1-7项至少完成5例,8-10项至少完成2例):
1)如何创建一个文件?
2)如何删除一个文件? (rm 命令)
3)如何将一个文件拷贝到另一个文件? (cp 命令)
4)如何重命名一个文件? (mv file命令)
5)如何截断一个文件(或使其长度为零)?How to truncate a file (or make it
be of length zero)?
6)如何向一个文件中追加内容?
7)如何锁定一个文件? (read lock, write lock)
8)如何创建一个目录? (mkdir 命令)
9)如何删除一个目录? (rmdir 命令)
10)如何遍历一个目录(或称浏览该目录下所有文件?)?(ls –lR 命令)
实验五(2) Linux文件系统实验
实验内容:
1.仔细阅读以下代码;
2.画出系统功能框图
3.程序注释
4.写出程序运行结果,分析说明结果。
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 128
int chmd();
int chmd ()
{
int c;
mode_t mode=S_IWUSR;
printf(" 0. 0700\n 1. 0400\n 2. 0200 \n 3. 0100\n "); //还可以增加其它权限printf("Please input your choice(0-3):");
scanf("%d",&c);
switch(c)
{
case 0: chmod("file1",S_IRWXU);break;
case 1: chmod("file1",S_IRUSR);break;
case 2: chmod("file1",S_IWUSR);break;
case 3: chmod("file1",S_IXUSR);break;
default:printf("You have a wrong choice!\n");
}
return(0);
}
main()
{
int fd;
int num;
int choice;
char buffer[MAX];
struct stat buf;
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("Please input your choice(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 0:close(fd);
exit(0);
case 1:
fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750);
if(fd==-1)
printf("File Create Failed!\n");
else
printf("fd = %d\n",fd);
break;
case 2:
num=read(0,buffer,MAX);
write(fd,buffer,num);
break;
case 3:
read(fd,buffer,MAX);
write(1,buffer,num);
break;
case 4:
chmd ();
printf("Change mode success!\n");
break;
case 5:
execv(path,argv);
break;