当前位置:文档之家› 实验五 文件系统设计

实验五 文件系统设计

实验五文件系统设计
一、文件的系统调用
1.文件描述符(fd)
UNIX的底层输入输出系统调用用一个整数来代表所打开的文件,这就文件描述符。

文件描述符与打开的文件名建立一一对应的关系。

2.Creat/link/unlink系统调用
Fd=creat(name,pmode);
Name为文件名,整数pmode为文件的许可机制。

Link建立链接,unlink删除链接。

3.Open/close系统调用
Fd=open(name,rwmode,[,pmode]);
Rwmode表示读写方式的整数,0—只读1—只写2—读写
Status=close(fd);
4.read/write系统调用
n=read(fd,buffer,size);
n=write(fd,buffer,size);
buffer是字符指针,存放读/写字节流的地址。

5.随机存取的系统调用lseek和tell
newpos=lseek(fd,offset,origin);
offset为位移量,origin=0从文件头开始,1从当前位置开始,2从文件尾开始。

Pos=tell(fd);报告当前文件指针的位置。

6.记录的锁定:就是进程在对文件的某个部分进行某种操作期间,为这部分文件内容设立一个“正在使用”的标志,防止其它进程对文件的这个部分进行操作。

status=lockf(fd,func,size);
func=0开锁,1锁定,2测试是否锁定,若已锁返回-1,若未锁则锁定,3测试是否
锁定,若已锁返回-1,若未锁返回0。

分析下面程序的执行结果:
#include <stdio.h>
#include <unistd.h>
main()
{int fd,int a[10],i;
for (i=0;I<10;i++) a[i]=i+1;
fd=creat(“aaa”,0755);
printf(“lockf 40 bytes in parent…\n”); fflush(stdout);
lockf(fd,1,40);
printf(“…locked.\n”);fflush(stdout);
if (fork()==0)
{printf(“Enter child,write 20 bytes in child…\n”);
fflush(stdout);
write(fd,a,20);
printf(“…writeen.\n”);fflush(stdout);
printf(“lockf 80 bytes in child…\n”);fflush(stdout);
lockf(fd,1,80);
printf(“…locked in child.\n”);fflush(stdout);
sleep(2);
lockf(fd,0,80);
printf(“…child unlocked.\n”);fflush(stdout);
exit(0);
}
printf(“Parent sleep now…\n”);
sleep(0);
prinf(“…parent wakeup.\n”);
printf(“Parent unlock now…\n”);fflush(stdout);
lockf(fd,0,40);
printf(“…Parent unlocked.\n”);fflush(stdout);
wait(0);
printf(“Program end.\n”);
}
二、实验内容
为Linux系统设计一个简单的文件系统。

要求做到以下几点:
(1)可以实现下列几条命令;
dir 列文件目录
create 创建文件
delete 删除文件
read 读文件
write 写文件
(2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(三种);(3)源文件可以进行读写保护。

相关主题