一、实验名称:实验十一文件管理
二、实验日期:2014/5/8
三、实验目的:
1. 资源管理实验课主要内容
2. 本周大课内容回顾
3. 通过实验掌握OS中资源分配的银行家算法的应用
4. 通过实验掌握在OS中通过信号量解决资源分配问题
四、实验的步骤和方法:
第十一次小课 文件管理
第一部分本周大课内容回顾
第二部分实验内容
实验1:文件的打开与关闭
创建两个文件file1和file2,输出他们的文件标识符后关闭。
关闭0#和2#文件标识符后,再重新打开文件file1和file2,输出他们的文件标识符后关闭。
理解打开文件的系统调用命令,以及文件标识符的分配。
#include
#include
main()
{
int fd1, fd2;
fd1 = open("file1", O_WRONLY|O_TRUNC|O_CREAT, 0666);//创建file1
fd2 = open("file2", O_WRONLY|O_TRUNC|O_CREAT, 0666);//创建file2
printf("First: fd1 = %d, fd2 = %d\n", fd1, fd2);//显示file1、file2标识符
close(fd1);//关闭file1
close(fd2);//关闭file2
close(0);//关闭stdin
fd1 = open("file1", O_WRONLY);//再次以只写方式打开文件file1
close(2);//关闭stderr
fd2 = open("file2", O_RDONLY);//再次以只读方式打开文件file2
printf("Second: fd1 = %d, fd2 = %d\n",fd1, fd2);//显示file1、file2标识符
}
实验2:文件的读写
编写程序实现从标准输入读取最多128个字符,再从标准输出显示。
#include
#include
#include
main()
{
char buffer[128];
int num;
num = read(0, buffer, 128);//从标准输入读取最多128个字符
if((write(1, buffer, num)) != num)
write(2, "A write error has occurred.\n", 27);//从标准输出显示
exit(0);
}
理解文件读、写系统调用
实验3:文件的随机查找
假设当前目录下有文件a.c,其内容是26个英文字母。编写一程序移动指针到第10个字符,使其从第11个字符开始输出,直到最后一个字符。
分析:
先通过open打开文件
再通过lseek在文件中查找
再通过循环逐个字符读并输出
a.c
abcdefghijklmnopqrstuvwxyz
#include
#include
#include
#include
#include
int main()
{
int fd_src;
int fd_dest;
char buff;
int count;
fd_src=open("./a.c",O_RDONLY);
if(fd_src<0)
{
perror("Failed to open a.c");
return -1;
}
lseek(fd_src,-17,SEEK_END);
for(count=0;count<17;count++)
{
read(fd_src,&buff,1);
printf("%c",buff);
}
close(fd_src);
return 0;
}