当前位置:文档之家› 福建工程学院实验5 linux文件系统

福建工程学院实验5 linux文件系统

实验五(1) Linux文件系统实验
实验目的
学习Linux中文件系统的使用,理解链接、权限的概念和使用;掌握常用的文件系统的系统调用,加深对文件系统界面的理解。

实验内容
1.学习文件链接的概念和使用(步骤一、步骤二)
2.学习文件权限的概念和管理机制,并学会使用(步骤三)
3.学习和文件相关的系统调用和库函数,进行若干编程练习(步骤四,至少完成两例)
实验步骤
一、文件链接与复制(hard link)
1.使用vi a创建一个文件a
Vi a
2.使用ln a b命令创建一个链接
使用cp a c创建一个复制版本
观察3个文件的大小、时间、属主(owner)等属性
3.修改文件a
4.观察文件b的内容,观察文件c的内容,观察3个文件的大小、时间、属主(owner)等属性
5.
6.使用ls –li命令,观察文件a, b, c的inode编号
7.使用rm a删除文件a
8.观察文件b, c是否仍然存在,内容如何
b、c依然存在,b为a改变的内容,c内容不变
9.使用rm b删除文件b,再观察文件b, c是否存在
b不存在,c存在
二、符号链接(软链接)symbolic link / soft link
1.创建文件a
2.使用ln –s a b创建符号一个链接
3.执行上述步骤3-8,观察有什么异同
三、不同用户之间的硬链接和符号链接
1.在用户stu下创建文件a
注意使用chmod命令,将主目录(~stu)权限改为所有其它用户可访问(r-x)(如果不知道chmod命令的用法,可以使用man chmod来查阅)
chmod o+rx ~
2.在另一个登录窗口内(使用Alt+F2切换到另一个登录窗口,使用Alt+F1切换回原登录窗口),以用户stu2登录,分别使用ln ~stu/a ha和
ln –s ~stu/a sa命令创建硬链接ha和符号链接sa
观察3个文件的大小、时间、属主(owner)等属性
3.在用户stu下,修改文件a;在用户stu2下分别观察文件ha和sa的内容
4.在用户stu下,修改文件a的访问权限;在用户stu2下,用ls –l命令观察ha和sa的访问权限、用户属主等信息,并使用cat命令、cp命令、vi命令验证访问控制权限的作用
5.两个用户下,分别使用ls –li命令检查文件a, ha, sa的inode编号,想一下为什么6.在用户stu2下删除ha;观察sa存在与否?用户stu下文件a存在与否?
7.在用户stu下可以删除文件a吗?删除后,用户stu2下的文件sa还存在吗?内容是什么?
四、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<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<syslog.h>
#include<string.h>
#include<stdlib.h>
#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); //关闭file1文件
exit(0);
case 1:
fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750); /*创建file1*/ if(fd==-1)
printf("File Create Failed!\n");
else
printf("fd = %d\n",fd); /*显示file1*/
break;
case 2:
num=read(0,buffer,MAX); //从键盘里面读取最多128个字符
write(fd,buffer,num); //把读入的信息送到file1里面去
break;
case 3:
/* 把file1文件的内容在屏幕上输出*/
read(fd,buffer,MAX);
write(1,buffer,num);
break;
case 4:
chmd ();
printf("Change mode success!\n");
break;
case 5:
execv(path,argv); //执行ls –l file1
break;
default:
printf("You have a wrong choice!\n");
}
}
}。

相关主题