操作系统实验报告(文件系统的API应用)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验题目
文件系统的API应用
小组合作
否
姓名
班级
学号
一、实验目的
文件系统是使用计算机信息系统的重要接口。通过实验学习文件系统的系统调用命令,提高对文件系统实现功能的理解和掌握
二.实验环境
计算机一台Windows XP及安装了Linux虚拟机
三、实验内容与步骤
1、利用宏来检查给定文件的类型
代码如下:
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
int i;
struct stat bf;
char *ptr;
for(i=1;i<argc;i++)
{
printf("%s:",argv[i]);
if(lstat(argv[i],& bf<0))
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
main(int ragc,char * argv[])
{
int fd,where;
char c1;
if(ragc!=2)
exit(1);
if((fd=open(argv[1],O_RDONL,Y))==-1)
{
err_ret("lstat error");
continue;
}
if((S_IFMT & bf.st_mode)==S_IFREG)
ptr="regular";
else if((S_IFMT & bf.st_mode)==S_IFDIR)
ptr="directory";
else if((S_IFMT & bf.st_mode)==S_IFCHR)
#include<sys/types.h>
#define PERM 0644
char * progname;
main(argc,argv)
int argc;
char *argv[];
{
int f1,f2,n;
char buf[BUFSIZ];
progname=argv[0];
if(argc !=3)
五、实验总结
UNIX系统文件有如下的分类:普通文件、目录文件、符号链接文件、有名管道文件、字符设备和块设备文件等。文件的分类主要是由其I节点中的i_mode给出。为了能够检查每个文件的类型,linux系统在sys/stat.h中定义了文件类型structstat,并用宏定义来决定文件的类型,每个宏的参数就是结构stat中的st_mode的值。
exit(1);
lseek(fd,184L,0);
where=lseek(fd,0L,1);
printf("NOW new pointer value is %d.\n",where);
where((where=read(fd,&c1,1){
printf("the char is %c,"c1);
}
#include<fcntl.h>
int creat(const char * pathname,mode_t mode);
返回值:如果正确创建,返回文件的描述符;否则返回-1。
这里pathname是要创建文件的路径名。创建文件时,文件只能以只写的方式打开,mode用来规定该文件的拥有者、小组用户及其他用户的访问权限。
{
printf("Usage:%s from to ",progname);
}
if((f1=open(argv[1],0))==-1)
{
printf("can't open %s",argv[1]);
}
if((f2=creat(argv[2],PERM))==-1)
{
printf("can't creat %s",argv[2]);
#define SIZE 512
mian()
{
char buf[SIZE];
int n;
while((n=read(0,buf,size of buf))>0)
write(1,buf,n);
exit(0);
}
运行结果:
3、open和creat系统调用的使用,实现文件复制。
代码如下:
#include<stdio.h>
printf("the char is %c,",c1);
}
printf(".\n");
}
运Biblioteka Baidu结果:
四、实验过程与分析
对于实验的第1个进行操作时注意stat()函数与lstat()以及fstat()的差别:stat()函数统计由文件名制定的文件信息,并填充到以struct stat为结构的buf中;lstat()函数与stat()函数功能一样,只是仅仅统计文件的符号链接时有所不同;fstat()函数与stat()函数功能一样,只是仅仅统计被打开的文件。
}
while((n=read(f1,buf,BUFSIZ))>0)
{
if(write(f2,buf,n)!=n)
{
printf("write error",(char *)0);
}
}
close(f1);
close(f2);
exit(0);
}
运行结果:
4、利用lseek系统调用移动文件的读写指针
代码如下:
ptr="character special device";
else
ptr="*** unknown file mode ***";
printf("%s",*ptr);
}
exit(0);
}
运行结果:
2、cat命令的简单实现,完成从键盘复制到终端显示器。
代码如下:
#include<unistd.h>
UNIX系统把所有的文件都看成武结构的字符流式的文件,如果特定的应用中使用了某种类型的数据结构,只能由程序员对数据结构增加相应的数据结构。这样使得UNIX对文件的接口变得特别简单。
UNIX提供文件的顺序存取,也提供文件的随机存取。NUIX把文件看出字符流文件,这类文件只能顺序存取,为此,NUIX提供了随机修改文件的读写指针,以满足用户对文件的随机存取。
printf(".\n");
}
$./lseek ./lseek.c
NOW new pointer value is 184.
lseek(fd,184L,0);
where=lseek(fd,0L,1);
printf("NOW new pointer value is %d.\n",where);
while((where=read(fd,&c1,1)==1){
对于实验的第2个目的在与实现键盘输入的内容显示到屏幕上的目的,输入dinghongzhng显示dinghongzhang,输入fehf显示fehf这就是实验的正确结果。
对于实验的第3个目的在于实现打开相应的文件,创建一个新文件时使用如下的语句:
#include<sys/types.h>
#include<sys/stat.h>
文件系统的API应用
小组合作
否
姓名
班级
学号
一、实验目的
文件系统是使用计算机信息系统的重要接口。通过实验学习文件系统的系统调用命令,提高对文件系统实现功能的理解和掌握
二.实验环境
计算机一台Windows XP及安装了Linux虚拟机
三、实验内容与步骤
1、利用宏来检查给定文件的类型
代码如下:
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
int i;
struct stat bf;
char *ptr;
for(i=1;i<argc;i++)
{
printf("%s:",argv[i]);
if(lstat(argv[i],& bf<0))
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
main(int ragc,char * argv[])
{
int fd,where;
char c1;
if(ragc!=2)
exit(1);
if((fd=open(argv[1],O_RDONL,Y))==-1)
{
err_ret("lstat error");
continue;
}
if((S_IFMT & bf.st_mode)==S_IFREG)
ptr="regular";
else if((S_IFMT & bf.st_mode)==S_IFDIR)
ptr="directory";
else if((S_IFMT & bf.st_mode)==S_IFCHR)
#include<sys/types.h>
#define PERM 0644
char * progname;
main(argc,argv)
int argc;
char *argv[];
{
int f1,f2,n;
char buf[BUFSIZ];
progname=argv[0];
if(argc !=3)
五、实验总结
UNIX系统文件有如下的分类:普通文件、目录文件、符号链接文件、有名管道文件、字符设备和块设备文件等。文件的分类主要是由其I节点中的i_mode给出。为了能够检查每个文件的类型,linux系统在sys/stat.h中定义了文件类型structstat,并用宏定义来决定文件的类型,每个宏的参数就是结构stat中的st_mode的值。
exit(1);
lseek(fd,184L,0);
where=lseek(fd,0L,1);
printf("NOW new pointer value is %d.\n",where);
where((where=read(fd,&c1,1){
printf("the char is %c,"c1);
}
#include<fcntl.h>
int creat(const char * pathname,mode_t mode);
返回值:如果正确创建,返回文件的描述符;否则返回-1。
这里pathname是要创建文件的路径名。创建文件时,文件只能以只写的方式打开,mode用来规定该文件的拥有者、小组用户及其他用户的访问权限。
{
printf("Usage:%s from to ",progname);
}
if((f1=open(argv[1],0))==-1)
{
printf("can't open %s",argv[1]);
}
if((f2=creat(argv[2],PERM))==-1)
{
printf("can't creat %s",argv[2]);
#define SIZE 512
mian()
{
char buf[SIZE];
int n;
while((n=read(0,buf,size of buf))>0)
write(1,buf,n);
exit(0);
}
运行结果:
3、open和creat系统调用的使用,实现文件复制。
代码如下:
#include<stdio.h>
printf("the char is %c,",c1);
}
printf(".\n");
}
运Biblioteka Baidu结果:
四、实验过程与分析
对于实验的第1个进行操作时注意stat()函数与lstat()以及fstat()的差别:stat()函数统计由文件名制定的文件信息,并填充到以struct stat为结构的buf中;lstat()函数与stat()函数功能一样,只是仅仅统计文件的符号链接时有所不同;fstat()函数与stat()函数功能一样,只是仅仅统计被打开的文件。
}
while((n=read(f1,buf,BUFSIZ))>0)
{
if(write(f2,buf,n)!=n)
{
printf("write error",(char *)0);
}
}
close(f1);
close(f2);
exit(0);
}
运行结果:
4、利用lseek系统调用移动文件的读写指针
代码如下:
ptr="character special device";
else
ptr="*** unknown file mode ***";
printf("%s",*ptr);
}
exit(0);
}
运行结果:
2、cat命令的简单实现,完成从键盘复制到终端显示器。
代码如下:
#include<unistd.h>
UNIX系统把所有的文件都看成武结构的字符流式的文件,如果特定的应用中使用了某种类型的数据结构,只能由程序员对数据结构增加相应的数据结构。这样使得UNIX对文件的接口变得特别简单。
UNIX提供文件的顺序存取,也提供文件的随机存取。NUIX把文件看出字符流文件,这类文件只能顺序存取,为此,NUIX提供了随机修改文件的读写指针,以满足用户对文件的随机存取。
printf(".\n");
}
$./lseek ./lseek.c
NOW new pointer value is 184.
lseek(fd,184L,0);
where=lseek(fd,0L,1);
printf("NOW new pointer value is %d.\n",where);
while((where=read(fd,&c1,1)==1){
对于实验的第2个目的在与实现键盘输入的内容显示到屏幕上的目的,输入dinghongzhng显示dinghongzhang,输入fehf显示fehf这就是实验的正确结果。
对于实验的第3个目的在于实现打开相应的文件,创建一个新文件时使用如下的语句:
#include<sys/types.h>
#include<sys/stat.h>