当前位置:文档之家› 第十章 文件

第十章 文件

第十章 文件
第十章 文件

一、概念题

1. fopen函数的返回值是返回指向该流的文件指针。

2. 文件打开方式为"r+",文件打开后,文件读写位置在头。

3. 文件打开方式为"a",文件打开后,文件读写位置在尾。

4. 表达式“fgetc(fpn)”的值为带回所读的字符或EOF 。

5. 表达式“fgets(a, 10, fpn)”的值为a地址或NULL 。

6. 函数fscanf的返回值为输入项个数或EOF 。

7. 函数fread的返回值为所读入数据的个数或0 。

8. 表达式“fscanf(fpn, "%f", &x)”的值为-1时,函数feof()的值为 1 。

二、判断题

1. 若文件型指针fp已指向某文件的末尾,则函数feof(fp)的返回值是0(F )。

2. 不能用“r”方式打开一个并不存在的文件(T )。

3. FILE *fp;的功能是,将fp定义为文件型指针(T )。

4. “文件”是指存储在外部介质上数据的集合(T)。

5. “文件”根据数据的组织形式可以分为ASCII文件和十进制文件(F )。

6. 用“r”方式打开的文件只能用于向计算机输入数据(F)。

7. 用“wb”方式打开的文件为输出打开一个ASCII文件(F )。

8. 文件结束标志EOF(-1)表示已经遇到文件结束符(T)。

9. fseek函数用于文件读写时的文件指针定位(F)。

三、单选题

1. 以下叙述中不正确的是(D )。

A. C语言中的文本文件以ASCⅡ码形式存储数据

B. C语言中对二进制文件的访问速度比文本文件快

C. C语言中,随机读写方式不适用于文本文件

D. C语言中,顺序读写方式不适用于二进制文件

2. 若用fopen()函数打开一个已经存在的文本文件,保留该文件原有数据且可以读也可以写,则文件的打开模式为(C )。

A.“ab+” B.“w+” C.“a+” D.“a”

3. 若想对文本文件只进行读操作,打开此文件的方式为(A )。

A."r" B."W" C."a" D."r+"

4. 用(A )函数打开文件,操作完毕后用(C )函数关闭它。

A.fopen

B.open

C.fclose

D.close

5. 如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为( D )。

A. c:file\abc.dat

B. c:\file\abc.dat

C. "c:\file\abc.dat"

D. "c:\\file\\abc.dat"

6. 以“只读”方式打开文本文件c:\xy.txt,下列语句中哪一个是正确的(B )。

A. fp=fopen("c:\\xy.txt","a");

B. fp=fopen("c:\\xy.txt","r");

C. fp=fopen("c:\\xy.txt","wb");

D. fp=fopen("c:\xy.txt","r");

7. fseek函数可以实现的操作是(A)。

A. 改变文件的位置指针的当前位置

B. 文件的顺序读写

C. 文件的随机读写

D. 以上都不对

8. 检测fp文件流的文件位置指针在文件头的条件是(B )。

A. fp=0

B. ftell(fp)=0

C. fseek(fp,0,SEEK_SET)

D. feof(fp)

9. 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。

#include “stdio.h”

main()

{ FILE *fout; char ch;

fout=fopen('abc.txt','w');

ch=fgetc(stdin);

while(ch!='#')

{ fputc(ch,fout);

ch=fgetc(stdin);

}

fclose(fout);

}

出错的原因是A

A. 函数fopen调用形式错误

B. 输入文件没有关闭

C. 函数fgetc调用形式错误

D. 文件指针stdin没有定义

四、程序填空题

1. 以下程序将一个磁盘文件中的信息复制到另一个磁盘文件中。

#include "stdio.h"

main( )

{ FILE *in, *out;

char ch;

char infile[10], outfile[10];

printf("Enter the infile name\n");

scanf("%s", 【1】infile );

printf("Enter the outfile name\n");

scanf("%s", outfile);

if (( 【2】in=fopen(“””) )==NULL) {

printf("can not open infile %s\n", infile);

exit(0); }

if ((out = fopen(outfile, " 【3】"))==NULL){

printf("can not open outfile %s\n", outfile);

exit(0); }

while( 【4】)

fputc( 【5】, out);

fclose(in);

fclose(out);

}

2. 当前目录下存放着文本文件from.txt, 将其中除数字以外的内容显示在屏幕上。

#include < stdi0.h >

#include < stdlib.h >

void main ()

{ FILE *fr;int ch;

if( 【1】){

printf("Can not open file-- form.txt.\n");

exit (0);

}

while (!feof(fr)){

【2】;

if (【3】)

putchar(ch);

}

fclose(fr);

}

3. 从键盘输入一批以-1结束的整数,将其中的奇数写入当前目录下的文本文件res.txt。

#include

#include

void main()

{ int x;

【1】;

if((fp=fopen("res.txt","w"))==NULL) {

printf("Can not open file! \n ");

exit(0);

}

scanf("%d", &x);

while( 【2】){

if(x%2!=0) 【3】;

【4】;

fclose(fp);

}

4. 本文件a.dat、b.dat中每行存放一个数且均按从小到大存放。下列程序将这两个文件中的数据合并到c.dat,文件c.dat中的数据也要从小到大存放。请填空,将程序补充完整、正确(若文件a.dat数据为1、6、9、18、27、35,文件b.dat数据为10、23、25、39、61,则文件c.dat中数据应为1、6、9、10、18、23、25、27、35、39、61)。

# include

# include

void main()

{ FILE *f1, *f2, *f3; int x, y;

if((f1=fopen("a.dat", "r"))==NULL)

{ printf("Can not open a.dat!\n"); exit(0); }

if((f2=fopen("b.dat", "r"))==NULL)

{ printf("Can not open b.dat!\n"); exit(0); }

if( 【1】)==NULL}

{ printf("Can not open c.dat!\n"); exit(0); }

fscanf(f1, "%d", &x); 【2】;

while(!feof(f1)&&!feof(f2))

if( 【3】)

{ fprintf(f3, "%d\n", x); fscanf(f1, "%d", &x); }

else { fprintf(f3, "%d\n", y); fscanf(f2, "%d", &y); }

if(feof(f1))

{ 【4】fprintf(f3,”%d”,y);

while(!feof(f2))

{ fscanf(f2, "%d", &y); 【5】; }

}

else { fprintf(f3, 【6】);

while(!feof(f1))

{ 【7】; fprintf(f3, "%d\n", x); }

}

fclose(f1); fclose(f2); fclose(f3);

}

五、程序阅读题

1. 已有文本文件test.txt,其中的内容为:Hello,everyone!。以下程序中,文件test.txt已正确为"读"而打开,由文件指针fr指向该文件,则程序的输出结果是:

#include "stdio.h"

{ FILE *fr; char str[40];

……

fgets(str,5,fr);

printf("%s\n",str);

fclose(fr);

}

hell

2. 假设读写文件的操作能正常完成,则程序的输出结果是:

#include

#include

void main ()

{ char ch,*s=”ACEDB”;

int x;

FILE *in;

if ((in=fopen(“file.txt”,”w”))!=NULL)

while(*s!=’\0’)

fputc(*s++,in);

fclose(in);

if ((in=fopen(“file.txt”,”r”))!=NULL)

while ((ch=fgetc(in))!=EOF){

switch(ch) {

case ’A’:x=95; break;

case ’B’:x=85; break;

case ’C’:x=75; break;

case ’D’:x=60; break;

default:x=0;break;

}

print(“%d#”,x);

}

fclose(in);

}

3. 以下程序完成的功能是:

#include "stdio.h"

main()

{

FILE *fp;

char ch;

char filename[10];

printf("Input filename\n");

scanf("%s\n", filename);

if ((fp = fopen(filename, "w"))==NULL) {

printf("can not open file %s\n", filename);

exit(0); }

ch = getchar();

while(ch != '#') {

fputc(ch,fp);

putchar(ch);

ch = getchar();

}

fclose(fp);

}

4. 以下程序完成的功能是:

#include "stdio.h"

main()

{ FILE *fp;

char ch;

fp = fopen("c:\\TC\\FILE\\test.txt", "r");

if (fp == NULL) {

printf("can not open test.txt \n");

exit(0); }

ch = fgetc(fp);

while(ch != EOF)

{ putchar(ch);

ch = fgetc(fp); }

fclose(fp);

}

5. 以下程序完成的功能是:

#include "stdio.h"

main()

{

FILE *in, *out;

char ch;

char infile[10], outfile[10];

printf("Enter the infile name\n");

scanf("%s", infile);

printf("Enter the outfile name\n");

scanf("%s", outfile);

if ((in = fopen(infile, "r"))==NULL)

{ printf("can not open infile %s\n", infile);

exit(0); }

if ((out = fopen(outfile, "w"))==NULL)

{ printf("can not open outfile %s\n", outfile);

exit(0); }

while(!feof(in))

fputc(fgetc(in), out);

fclose(in);

fclose(out);

}

6. 以下程序执行后输出结果是:。

#include

main( )

{ FILE *fp; int i,k=0,n=0;

fp=fopen("d1.dat","w");

for(i=1;i<4;i++) fprintf(fp,"%d",i);

fclose(fp);

fp=fopen("d1.dat","r");

fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);

fclose(fp);

}

7. 以下程序执行后输出结果是:。

#include

main( )

{ FILE *fp;

int i,a[4]={1,2,3,4},b;

fp=fopen("data.dat","wb");

for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);

fclose(fp);

fp=fopen("data.dat","rb");

fseek(fp,-2L*sizeof(int).SEEK_END);/*使位置指针从文件尾向前移2*sizeof(int)字节*/ fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中*/

fclose(fp);

printf("%d\n",b);

}

3

8. 设head是node类型的全程量,以head为头指针的链表各节点的值如下图所示。head→ 3 ()→4 ()→5 ()→6 ()→7 NULL ,调用fun(head)返回值是:#include

#define LEN sizeof(struct node)

struct node{

int nun;

struct node *next;

};

int fun(struct node*h)

{int k=0;

struct node*p=h;

while(p!=NULL){

if(p->next!=NULL)k+=p->num;

p=p->next;

}

return k;

}

void main()

{ struct node*head ,*p1,*p2;

int i;

head=(struct node *) malloc(LEN);p1=head;

for(i=3;i<=7;i++)

{p2=(struct node*)malloc(LEN);p1->next=p2;

p2->num=i;p2->next=NULL;

p1=p2;printf(“%d\n”,fun(head->next));

}}

18

9. 以下程序执行后输出结果是:。

# include

void main()

{ struct info {int data; struct info *pn;};

info base, p;

base=NULL;

for(int i=0; i<10; i++)

{ p=(struct info*)malloc(sizeof(struct info)); p->data=i+1;

p->pn=base; base=p;

}

p=base;

while(p!=NULL)

{ printf("%2d", p->data); p=p->pn;

}

printf("\n");

}

1 2 3 4 5 6 7 8 9 10

六、程序设计题

1. 从C盘根目录下名为“xhar

2.txt“的文本文件中读取前10个字符,依次显示在屏幕上。如果文本文件中不足10个字符,则有多少个字符读取并显示多少个字符。

提示:参考程序段:

for(i=0;i<10;i++)

{ if(feof(fp)) break;

c=fgetc(fp);

putchar();

}

2. 从键盘上读取3个字符串,依次写入D盘根目录下名为“string1.txt”的文本文件。

提示:参考程序段:

for(i=0;i<3;i++)

{ gets(s1[i]);

fputs(s1[i],fp); }

3. 有两个磁盘文件a.dat和b.dat,要求产生一个新的文件c.dat,将b.dat中的数据追加到a.dat 后面,并存入到c.dat中。

提示:设两个磁盘文件为文本文件。以读的方式打开a.dat和b.dat,以写的方式创建c.dat。先将b.dat的数据复制到c.dat,再将a.bat的数据复制到c.dat。

4. 从键盘输入一些字符,逐个把它们存入磁盘文件test.txt中去,直到输入一个#为止。

提示:利用fputc函数将字符写入到磁盘文件中。

5. 编程统计C盘Mydir文件夹中文本文件data.txt中字符'$'出现的次数。并将统计结果写入到文本文件C:\Mydir\res.txt中。

6. 读入一个文件,输出其中最长的一行的行号和内容。

提示:以硬回车键'\n'作为行的结束标志。

7. 编写程序将全班同学的姓名、地址和电话号码写到一个文件class.dat中。

提示:学生的信息可以存放到结构体数组,以fwrite函数写数据到文件中。

8. 将6题产生的class.dat文件中的数据按姓名从低到高排列输出到显示器上,并把排了序的数据重新写入到文件class1.dat中。

提示:以fread函数从文件中读入学生的信息,并存放到结构体数组,在数组中进行排序。排序完毕再写入文件中。

9. 利用7题产生的class1.dat文件,编程实现从中直接读取第三个同学的数据。

10. 在7题产生的class1.dat文件中插入一个新生的数据,要求插入后的文件数据仍然按姓名顺序排列。

提示:先将数据读入到数组中,插入新的数据后,再写入到文件中。

[VIP专享]第十章 文件

一、概念题 1. fopen函数的返回值是返回指向该流的文件指针。 2. 文件打开方式为"r+",文件打开后,文件读写位置在头。 3. 文件打开方式为"a",文件打开后,文件读写位置在尾。 4. 表达式“fgetc(fpn)”的值为带回所读的字符或EOF 。 5. 表达式“fgets(a, 10, fpn)”的值为a地址或NULL 。 6. 函数fscanf的返回值为输入项个数或EOF 。 7. 函数fread的返回值为所读入数据的个数或0 。 8. 表达式“fscanf(fpn, "%f", &x)”的值为-1时,函数feof()的值为 1 。 二、判断题 1. 若文件型指针fp已指向某文件的末尾,则函数feof(fp)的返回值是0(F )。 2. 不能用“r”方式打开一个并不存在的文件(T )。 3. FILE *fp;的功能是,将fp定义为文件型指针(T )。 4. “文件”是指存储在外部介质上数据的集合(T)。 5. “文件”根据数据的组织形式可以分为ASCII文件和十进制文件(F )。 6. 用“r”方式打开的文件只能用于向计算机输入数据(F)。 7. 用“wb”方式打开的文件为输出打开一个ASCII文件(F )。 8. 文件结束标志EOF(-1)表示已经遇到文件结束符(T)。 9. fseek函数用于文件读写时的文件指针定位(F)。 三、单选题 1. 以下叙述中不正确的是(D )。 A. C语言中的文本文件以ASCⅡ码形式存储数据 B. C语言中对二进制文件的访问速度比文本文件快 C. C语言中,随机读写方式不适用于文本文件 D. C语言中,顺序读写方式不适用于二进制文件 2. 若用fopen()函数打开一个已经存在的文本文件,保留该文件原有数据且可以读也可以写,则文件的打开模式为( C )。 A.“ab+” B.“w+” C.“a+” D.“a” 3. 若想对文本文件只进行读操作,打开此文件的方式为(A )。 A."r" B."W" C."a" D."r+" 4. 用(A )函数打开文件,操作完毕后用(C )函数关闭它。 A.fopen B.open C.fclose D.close 5. 如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为( D )。 A. c:file\abc.dat B. c:\file\abc.dat C. "c:\file\abc.dat" D. "c:\\file\\abc.dat" 6. 以“只读”方式打开文本文件c:\xy.txt,下列语句中哪一个是正确的(B )。

第十章文件

第十章文件 1、文件操作的一般步骤是()。 A) 打开文件,定义文件指针,修改文件,关闭文件 B) 打开文件,定义文件指针,读写文件,关闭文件 C) 定义文件指针,定位指针,读写文件,关闭文件 D) 定义文件指针,打开文件,读写文件,关闭文件 2、下面程序的运行结果是()。 #include main() { FILE *fp; int a=2,b=4,c=6,k,n; fp=fopen("test.dat","w"); fprintf(fp,"%d\n",a); fprintf(fp,"%d %d\n",b,c); fclose(fp); fp=fopen("test.dat","r"); fscanf(fp,"%d%*d%d",&k,&n); printf("%d %d\n",k,n); fclose(fp); } A) 2 4 B) 2 6 C) 4 2 D) 6 2 3、对于以下程序,说法正确的是()。 #include main() { FILE *fp; fp=fopen("quiz.txt", "w"); if(fp!=NULL) { fprintf(fp,"%s\n", "success!"); fclose(fp); printf("ok!"); } } A) 程序运行后,当前工作目录下存在quiz.txt文件,其中的内容是"ok!" B) 程序运行后,当前工作目录下存在quiz.txt文件,其中的内容是"success!" C) 程序运行之前,当前工作目录下一定不存在quiz.txt文件 D) 程序运行之前,当前工作目录下一定存在quiz.txt文件 4、若在fopen函数中使用文件的方式是"a+",该方式的含义是()。 A) 以读/写方式打开一个文本文件 B) 以输出方式打开一个文本文件 C) 以读/写方式建立一个新的文本文件 D) 以读/写方式建立一个新的二进制文件 5、当顺利执行了文件关闭操作时,fclose函数的返回值是()。 A) 1 B) 0 C) -1 D) 一个非0值

NTFS文件系统中文件的安全擦除7页word

NTFS文件系统中文件的安全擦除 NTFS(New Technology File System)是微软开发的具有较好容错性和安全性的文件系统。NTFS将磁盘卷中的所有数据都以文件的方式,而数据类型,大小等信息都作为文件的属性,记录在主文件表(Main File Table, MFT)记录中,每条MFT记录都分配同样大小的空间描述文件(夹)。当文件放入回收站并被清空删除时,操作系统将文件MFT记录相应字段置为删除标志(在MFT中0x16偏移处),同时文件MF记录号在$MFT的Bitmap属性 中对应位置0标志该MFT记录号可供重新分配,将文件占用的数据簇在$Bitmap中的对应位置0标志空闲可供再分配。虽然删除文件,在操作系 统用户视图中无法获取,但通过数据恢复手段,该文件仍然可以再现。 本文对NTFS的主文件表记录及位图文件进行分析,研究了NTFS文件系统下文件的安全擦除。 1 NTFS 卷文件管理 1.1 簇管理 NTFS以簇为基本单位分配回收存储空间[1],与FAT结构不同,NTFS 卷(volume)从0扇区开始划分簇,每簇为1,2,4或8个扇区,根据分区的大小不同,最大值不超过8扇区,格式化时可以以格式化参数的形式设定。而在FAT中,由于卷管理空间的限制,只能通过增加簇大小来管理大容量硬盘,较NTFS文件系统,容易造成存储空间的浪费。NTFS簇大小, 即每簇扇区数保存在BOOT扇区(0扇区)。同时,NTFS通过Bitmap文件记录所有簇的使用情况,1个bit对应一个簇,值为1表示已经分配,为0 表示未分配。FAT文件系统中的FAT表不仅记录了数据簇的使用情况,还

第10章 预处理命令

第十章预处理命令 所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。 一、宏定义与符号常量 在C语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。 无参宏定义 1.无参宏定义的一般格式 #define 标识符字符串 其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“字符串”可以是常数、表达式、格式串等。 2.使用宏定义的优点 (1)可提高源程序的可维护性 (2)可提高源程序的可移植性 (3)减少源程序中重复书写字符串的工作量 例9.1 输入圆的半径,求圆的周长、面积和球的体积。要求使用无参宏定义圆周率。 /*程序功能:输入圆的半径,求圆的周长、面积和球的体积。*/ #define PI 3.1415926 /*PI是宏名,3.1415926用来替换宏名的常数*/ void main() { float radius,length,area,volume; printf("Input a radius: "); scanf("%f",&radius); length=2*PI*radius; /*引用无参宏求周长*/ area=PI*radius*radius; /*引用无参宏求面积*/ volume=PI*radius*radius*radius*3/4; /*引用无参宏求体积*/ printf("length=%.2f,area=%.2f,volume=%.2f\n", length, area, volume); } 3.说明 (1)宏名一般用大写字母表示,以示与变量区别。但这并非是规定。 (2)宏定义不是C语句,所以不能在行尾加分号。否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。 (3)在宏展开时,预处理程序仅以按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。 (4)宏定义命令#define出现在函数的外部,宏名的有效范围是:从定义命令之后,到

第10章 图形操作

第10章图形操作* VB为用户提供了简洁有效的图形图像功能。除了窗体和控件的图形图像特征以外,还提供了一系列基本的图形处理函数、语句和方法,可直接在窗体上产生图形,处理图像,设置图形颜色以及控制其位置和外观。本章主要介绍VB的坐标系统、自定义坐标系统;与图形操作有关的属性;PictureBox、Image、Line和Shape四种图形控件及应用;Line、Circle、Pset和Point四种图形方法及应用;与图形、图像处理有关的示例。 10.1 图形操作基础 10.1.1 图形的坐标系统 在VB中,每个对象定位于存放它的容器内,使用的是容器的坐标系统,对象的Left、Top属性指示了相对于容器左侧、顶部的距离。例如,窗体处于屏幕(Screen)内,屏幕是窗体的容器。在窗体内绘制控件,窗体就是容器。如果在图片框内绘制图形或控件,该图片框就是容器。对象位置及大小只能在容器界定的范围内变动。当移动容器时,容器内的对象也随着一起移动。而且与容器的相对位置保持不变。 每个容器都有一个坐标系统。构成一个坐标系统需要三个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。 容器的ScaleTop、ScaleLeft属性用于控制容器对象左边和顶端的坐标,这两个属性值指定了该容器对象坐标系统的坐标原点。所有容器对象的ScaleTop、ScaleLeft值默认为0,坐标原点在容器的左上角。 容器的ScaleHeight、ScaleWidth属性确定对象内部垂直方向和水平方向的大小,这个数值与所用的度量单位有关。度量单位不同,ScaleHeight、ScaleWidth属性值也不同。 属性ScaleMode决定对象坐标的度量单位,共有11种设置(常用8种),见表10-1。 表10-1 ScaleMode属性的设置 -258-

文件系统安全

现在你已知道如何实施帐号的安全,并已建立了一个有效的认证机制,接下来将实施安全中访问控制部分。访问控制必须在两个地方实施,即本地和远程。文件可以由用户在本地访问或通过网络进行远程访问。本课将对这两种方法逐一进行测试。 Windows NT文件系统安全 当建立文件的权限时,你必须先实现Windows NT的文件系统(NTFS),当然你也可以使用FAT格式,但是并不支持文件级的权限。FAT只在那些相对来讲,对安全要求较低的情况下使用。即使NTFS也不能认为是能完全地保护文件的,这一点在稍后的实验中你将会看到。 一旦已经实施了NTFS的文件系统格式,可通过Windows NT的资源管理器直接来管理文件的安全。使用NT资源管理器你可为设置目录或文件的权限。基于文件级的权限你可以分配下面几种:读取(R),写入(W),执行(X),删除(D),改变(P),取得所有权(O)。详细请参照下表: 为了简化权限的管理,NT有几种有关权限的标准。通常在分配权限的时候,往往是组合使用权限而不是使用单独的权限,这些权限如下表保密 标准权限基于目录基于文件 不可访问无无 列出RX 不适用 读取RX RX 添加WX 不适用 添加和读 RWS RX 取 更改RWXD RWXD

完全控制ALL ALL 在这些权限的基础上,你可以达到根据需要来访问控制。但是确定什么是你需要的最小权限是困难的。回顾一下第一课我们所讲的一个新建立的NTFS分区默认情况下everyone 组对其有完全控制的权限。这种标准是无法接受的,如果你不加选择的删除everyone组或在任何地方都把不可访问的权限赋予给everyone组,那么有可能会损坏你的NT安装。 Everyone组必须可以访问主要的系统目录(比如登陆目录)来使用户能够连接和登陆到服务器上。因为用户在开始登陆的过程中还没有被认证,你必须使用everyone组提供访问以使他们能够被认证。赋予everyone组不可访问其实更危险,因为拒绝访问优先于允许访问,而且所有的用户都是属于everyone组的,这样也就等于完全阻止了对文件系统的访问。 目录的权限分配和文件是一样的。目录的权限影响其目录中新建的文件。换句话说就是任何新建的文件将继承此目录的权限。 磁盘分区 因为操作系统目录的权限是非常严格的,把Windows NT放置自己单独的分区内是个明智的选择。在这个分区上只安装Windows NT而不安装应用程序使管理任务简单很多,一个磁盘分区可能会像下图这样。 操作系统程序文件数据 尽管这种分区需要额外地策划,但它还是很有吸引力,特别是简化了对于目录权限的管理。目录可以根据需要分开。如果你在运行一个设备如WEB服务器,你可能会考虑使用HTML,图像和其它一些静态文件在一个分区上,而你的脚本文件则放到另一个分区上。你可以将脚本设置成只可以执行那些静态文件可允许读取。这种策略的结果就是易于管理文件和目录的权限。 复制和移动文件 最后,你要理解当文件被复制和移动的时候发生了什么。每当一个文件被复制到一个新的目录里时,这个文件将继承目标目录的权限。当文件移动时,过程是很复杂的。如果一个文件从一个目录移动到同一分区下的另一个目录,那么此文件的权限将保留。当文件在相同的分区内移动时,Windows NT对于新目录的位置更新目录分配表。当文件在两个不同的分区间移动时,Windows NT首先把这个文件复制到新位置,在成功地复制之后,Windows NTG再删除掉原始的那个文件。一个新文件被建立后,将继承目标目录的权限。 远程文件访问控制 远程的访问一个文件或目录是通过共享权限来提供的。一个共享就是供远程用户访问文件的网络访问点。当配置这些共享时,你要设置相应的权限。共享权限的应用类似于在NTFS上权限的应用。主要的区别是共享权限缺乏精细地权限设置。你只能分配不可访问、读取、更改和完全控制的权限。参照下表

操作系统安全课设-安全文件系统

中南大学 操作系统安全 课程设计报告 学生姓名代巍 指导教师宋虹 学院信息科学与工程学院 专业班级信安1201班 学号 0909121615 完成时间 2015年1月15日

摘要 本课程设计是实现一个多用户文件系统,通过具体的文件存储空间的管理、文件访问权限控制、目录结构和文件操作的实现。通过加深理解文件系统的内部功能及内部实现,掌握文件存储空间的管理,理解文件的物理结构,掌握目录结构的实现,掌握文件操作的实现,可以基本实现一个界面友好,功能完整的文件系统。 本人在此次课程设计分组中承担了文件或目录操作,复制,粘贴,剪切,重命名加密,解密等任务。

目录 摘要 (2) 1概述 (4) 1.1设计任务 (4) 1.2设计目的 (4) 1.3解决的问题 (4) 1.4实验环境 (4) 2总体设计 (5) 2.1需求分析 (5) 2.2设计思路 (6) 2.3功能设计 (6) 2.3.1剪切,复制,粘贴功能 (6) 2.3.2重命名功能 (7) 2.3.3加密解密功能 (7) 3详细设计 (8) 3.1主要函数 (8) 3.2关键算法 (11) 4使用说明以及完成情况 (13) 4.1简单的使用说明...................................................................... 错误!未定义书签。 4.2存在的问题 (15) 5总结 (16) 5.1作品特色 (16) 5.2经验教训 (16) 5.3心得体会 (16) 参考文献 (17)

1概述 1.1设计任务 采用C或C++编程语言,开发一个多用户安全的文件系统。基本要求如下: 1.能实现对多种不同文件及目录的管理,包括对文件系统(包括文件和目录)读、 写、创建、删除、打开、关闭、命名等操作; 2.对不同的文件和目录能设置访问权限和操作权限; 3.对不同的用户也设置访问权限和操作权限;根据用户和文件的权限来进行文件 系统的操作。 4.文件可以加密存储,可以进行一致性检测; 5.审计日志 6.能完成一种外部存储设备(如USB、移动硬盘)的空间动态添加到该文件系统 中进行管理,存入该设备的文件是有权限用户。 7.采用类似于Windows的窗口界面。 1.2设计目的 作系统安全是整个计算机系统安全的重要基础,主要针对操作系统层面的安全进行剖析,是上层运行的重要保证。与计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立安全系统的概念,理解和巩固操作系统基本理论、原理和方法,掌握安全操作系统开发的基本技能。 1.3解决的问题 在操作系统安全层面上来讲,文件系统的安全是很重要的一环,如何保证用户的文件安全,是操作系统设计者需要考虑的问题。 1.防止入侵者渗透操作系统并窃取或改动用户的文件。 2.对文件系统进行分级管理,让不同级别的用户只能看到自己权限范围内的文件。 3.设置规则对文件进行管理,并实现用户对文件的基本操作。 1.4实验环境 实现环境:Ubuntu Linux操作系统,Linux GCC编译环境,QT Creator编译器 开发语言:C语言

第十章vb6.0 文件管理及操作

第十章文件管理及操作10.1 文件系统的基本操作VB提供了一些用于处理文件系统的语句,使用这些语句可以在VB应用程序中进行更改当前目录、建立或删除目录、删除文件等基本操作。 目录操作 1.获取指定驭动器的当前路径。 要获取某驱动器的当前路径,可以使用CurDir函数,它的语法是: CurDir [drive]. 参数drive是指要获取信息的驱动器名称,如果忽略该参数,则CurDir函数返回当前驱动器的当前路径。 例如,如果驱动器E;的当前路径为“E: \Too1\Qicq”,则如下语句将在窗体上显示 “E:\Too1\Qicq”. Print CurDir(“E”)。 2.更改当前驱动器。 使用ChDrive语句可以更改当前驱动器,其语法为: ChDrive drive. 参数drive为要指定为当前驱动器的名称,例如,将驱动器A:指定为当前驱动器的语句为: ChDrive “A”. 3.更改当前路径。 使用ChDir语句可以更改当前路径,其语法为: ChDir Path. 参数Path为要指定的路径,如果在路径中没有指定驱动器的名称,则表示驱动器为当前驱动器。例如,将路径C: \Windows指定为当前路径的语句为: ChDir “C:\Windows”. 4.建立与删除目录。 使用MkDir语句可以创建一个新的目录,其语法为: MktDir Path. 参数Path用来指定所要创建的目录以及目录所在的路径。Path可以包含驱动器。如果没有指定路径,则MkDir会在当前路径下创建新的目录。 例如: MKDir “C:\aa”在C盘中创建目录aa MKDir “C:\Windows\bb”在C盘windows目录中创建子目录bb MKDir “CC”在当前路径下创建目录cc 使用RmDir语句可以删除某一空目录,其语法为: RmDir Path. 例如: MKDir “C:\aa”删除C盘中目录aa MKDir “C:\Windows\bb”删除C盘windows目录中的子目录bb MKDir “CC”删除当前路径下创建目录cc 注意:RmDir语句只能用来删除空的目录,如果目录中还包含有子目录或文件,则必须先删除子目录和文件。

第十章优化教程文件

第十章优化 知识结构: 概述 基本块的划分 局部优化基本块的DAG表示 DAG的应用 优化程序流图 循环优化 循环优化 数据流分析 第一节概述 一、优化的原则 1、等价原则 经过优化后不应改变程序运行的结果。 2、有效原则 使优化后生成的目标代码运行的时间较短,占用的存储空间较小。 3、合算原则 应尽可能以较低的代价取得较好的优化效果。 二、优化的分类 1、与计算机无关的优化 是在中间代码级上不依赖具体计算机的优化。只注重于程序

的结构,对程序流程进行有效性、等价性的处理。 ⑴局部优化 对只有一个入口和一个出口,并且程序结构是顺序结构的程序段进行优化(基本块内的优化)。采用的技术: ①合并已知量(编译时对常数直接进行运算); ②消除多余运算(公共子表达式); ③消除无用赋值(无用代码)。 ⑵循环优化 对循环语句产生的中间代码进行优化。采用的技术: ①代码外提(循环不变运算的外提); ②强度消弱; ③删除归纳变量(循环控制条件的改变)。 ⑶全局优化 非线性程序段上(包含多个基本块)的优化,需要分析程序控制流、数据流。 2、依赖计算机的优化 依赖具体计算机的硬件环境,在生成目标代码时进行优化。 三、中间代码优化技术的概述 例:求两个数组积的Pascal程序段 PROD := 0; For I:=1 to 20 do PROD := PROD+ A[I]*B[I] 其中:数组元素按字节编写地址;每个元素占4个字节。

⑴数组元素地址为 addr(A)+(I-1)*4=addr(A)-4+4*I 四元式中间代码为: ⑵删除公共子表达式 某些运算在程序段中多次出现,而在相继两次出现之间又没有改变其运算的结果,优化时只是引用结果。 如:⑶T1:=4*I ┆…无对I重新赋值 ⑹T4:=4*I 优化后为T4=T1。 ⑶代码外提 对于运算结果在循环重复执行的过程中是不变的,将其运行代码提到循环体外执行一次。 如:⑷T2:=addr(A)-4 ⑺T5:=addr(B)-4

补充练习第十章文件

补充练习第十章文件 第十章文件 一、单项选择题: 1.C语言把文件看作是一个的序列。 A. 记录 B. 单词 C. 字 D. 字符 2. 语句FILE *fp;定义了一个指向 . A. 某一个文件的变量 B. 某一个文件的结构体变量 C. FILE文件的变量 D. FILE变量的指针 3.标准输入文件由系统分配为。 A. 键盘 B. 显示器 C. 打印机 D. 鼠标 4.语句fp=fopen(“file1”,”r”); 表示。 A. 打开文件file1,可从该文件输入数据 B. 打开文件file1,可向该文件输出数据 C. 打开文件file1,可向该文件添加数据 D. 打开文件file1,可向该文件输入输出数据 5. 如果希望向文本文件末尾添加数据,则应以方式打开文件。 A. “r” B. “w” C. “a” D. “ab” 6.关闭文件函数fclose(fp)的作用是。 A. 不再为fp指向的文件分配内存空间 B. 将fp指向的文件存入磁盘 C. 释放指定文件所占据的内存空间和文件指针 D. 将指定文件封闭在某一内存区域 7. 下面列出四组函数名,其中组为标准文件的输出函数。 A. getchar(),gets(),scanf() B. putchar(),puts(),printf() D. fgetc(),fgets(),fscanf() D. fputc(),fputs(),fprintf() 8. 文件是以为结束符的。 A. NULL B. EOF C. $ D. \n 9.若对文件fp操作出错,则函数ferror(fp)的返回值为。 A. 0 B. –1 C. 1 D. 非零 10. 已知函数fread的调用形式为fread(buffer, size, count, fp),其中buffer代表的

第十章 对流换热教程文件

第十章对流换热

第十章 对流换热 英文习题 1. Finding convection coefficient from drag measurement A 2 m×3 m flat plate is suspended in a room, and is subjected to air flow parallel to its surfaces along its 3-m-long side. The free stream temperature and velocity of air are 20℃ and 7m/s. The total drag force acting on the plate is measured to be 0.86 N. Determine the average convection heat transfer coefficient for the plate (Fig. 10-1). 2. Cooling of a hot block by forced air at high elevation The local atmospheric pressure in Denver, Colorado (elevation 1610 m), is 83.4 kPa. Air at this pressure and 20℃ flows with a velocity of 8 m/s over a 1.5 m×6 m flat plate whose temperature is 140℃ (Fig. 10- 2). Determine the rate of heat transfer from the plate if the air flows parallel to the (a) 6-m-long side and (b) the 1.5-m side. 3. Cooling of a steel ball by forced air A 25-cm-diameter stainless steel ball (ρ=8055 kg/m 3, and C p =480 J/kg.℃) is removed from the oven at a uniform temperature of 300℃. The ball is then subjected to the flow of air at 1 atm pressure and 25℃ with a velocity of 3 m/s. The surface temperature of the ball eventually drops to 200℃. Determine the average convection heat transfer coefficient during this cooling process and estimate how long the process will take. 4. Flow of oil in a pipeline through the icy waters of a lake Consider the flow of oil at 20℃ in a 30-cm-diameter pipeline at an average velocity of 2 m/s (Fig.10-3). A 200-m-long section of the pipeline passes through icy waters of a lake at 0℃. Measurements indicate that the surface temperature of the pipe is very nearly 0℃. disregarding thermal resistance of the pipe material, determine (a) the temperature of the oil when the pipe leaves the lake, (b) the rate of heat transfer from the oil. 5. Heat loss through a double-pane window The vertical 0.8-m-high, 2-m-wide double-pane window shown in Fig.10-3, consists of two sheets of glass separated by a 2-cm air gap at atmospheric pressure. If the glass surface temperatures across the air gap are measured to be 12℃ and 2℃, determine the rate of heat transfer through the window. FIGURE 10-1 FIGURE 10-2 FIGURE 10-3 FIGURE 10-4

10第十章 文件习题

第十章文件 【例1】若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为________。 A) 0 B) 1 C) -1 D) 一个非0值【例2】设fp是指向某个文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是________。 A) EOF B) -1 C) 非零值 D) NULL 【例3】以下程序企图把从终端输入的字符输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。 #include Main() { FILE*fout; char ch; Fout=fopen(ˊabc.txtˊ, ˊwˊ); Ch = fgetc(stdin); While(ch != ˊ#ˊ) { fputc(ch,fout); Ch = fgetc(stdin); } Fclose(fout); } 出错的原因是_______。 A) 函数fopen调用形式错误 B)输入文件没有关闭 C) 函数fgetc调用形式错误 D)文件指针stdin没有定义【例4】若要指定打开c盘上子目录myfile下的二进制文件test.bin,在调用函数fopen时,第一个函数的正确格式是_________。 A)“c:myfile\test.bin” B)“c\:myfile\\test.bin” C)“c\\:myfile\\test.bin” D)“c\:myfile\test.bin” 【例5】若要用fopen函数打开一个新的二进制文件,该文件既要能读也要能

写,则文件方式字符串是________。 A)“ab+” B)“wb+” C)“rb+” D)“ab” 【例6】在C语言中,用于关闭文件的函数是_______。 A)fopen B)fseek C)fclose D)ftell 【例7】正常执行文件关闭操作时,fclose函数的返回值是________。 A)-1 B)TRUE C)0 D)1 【例8】已知函数的调用形式是:fread(buffer,size,count,fp);其中buffer 代表的是__________。 A)一个整型变量,代表要读入的数据总数 B)一个文件指针,只想要读 的文件 C)一个指针,只想要读入数据的存放地址 D)一个存储 区,存放要读的数据项 【例9】在C程序中,把整型数以二进制形式存放到文件中的函数是________。 A)fprintf函数 B)fread函数 C)fwrite函数 D)fputc 函数 【例10】fwrite函数的一般调用形式是_________。 A)fwrite(buffer,count,size,fp); B)fwrite(fp,size,count,buffer); C)fwrite(fp,count,size,buffer); D) fwrite(buffer,size,count,fp); 【例11】在C语言中,用于向文件写入一个字符的函数是________。 A)fputs B)fgetc C)fgets D)fputc 【例12】若调用fputc函数输出字符成功,则其返回值是__________。 A)EOF B)1 C)0 D)输出的字符 【例13】函数调用语句fseek(fp,-20L,2);的含义是__________。 A)将文件位置指针移到距离文件头20个字节处 B)将文件位置指针从当前位置向后移动20个字节

第10章 文件---习题

第10章文件 一、选择题 1.设fp是指向某个文件的指针,且已读到文件尾,则库函数feof(fp)的返回值是___ __。 A) EOF B) -1 C) 非零值D) NULL 2.若要指定打开C盘上子目录myfile下的二进制文件test.bin,在调用函数fopen时,第一个参数的正确格式是___________。 A) “c:myfile\test.bin”B) “c:\myfile\\test.bin” C) “c:\\myfile\\test.bin”D) “c:\myfile\test.bin” 3.若执行fopen函数时发生错误,则函数的返回值是_____________________。 A) 地址值B) 0 C) 1 D) EOF 4.若要用fopen函数打开一个新建立的二进制文件,该文件既要能读也要能写,则文件方式字符串应是_________________。 A) “ab+”B) “wb+”C) “rb+”D) “ab” 5.若以”a+”方式打开一个已存在的文件,则以下叙述正确的是_______________。 A) 文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可做添加和读操作 B) 文件打开时,原有文件内容不被删除,位置指针移到文件开头,可做添加和读操作 C) 文件打开时,原有文件内容被删除,只可作写操作 D) 以上各种说法皆不正确 6.正常执行文件关闭操作时,fclose函数的返回值是____________________。 A) -1 B) TRUE C) 0 D) 1 7.已知函数的调用形式是: fread(buffer,size,count,fp); 其中buffer代表的是_________。 A) 一个整形变量,代表要读入的数据项总数 B) 一个文件指针,指向要读的文件 C) 一个指针,指向要读入数据的存放地址 D) 一个存储区,存放要读的数据项 8.fscanf函数的正确调用形式是________________________。 A) fscanf(fp,格式字符串,输入表列); B) fscanf(格式字符串,输入表列,fp); C) fscanf(格式字符串,文件指针,输入表列); D) fscanf(文件指针,格式字符串,输入表列);

相关主题
文本预览
相关文档 最新文档