首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。 【说明】 本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件
阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。 【说明】 本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件
admin
2009-02-15
39
问题
阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件名、文件长度和在合并文件中的位置(偏移量)。其结构为:
typedef struct {char fname [256] /*原始文件名*/
long length; /*原始文件长度(字节数)*/
long offset; /*原始文件在合并文件中的位置(偏移量)*/
}FileInfo;
在合并文件最后存储如下一个特殊的标志信息作为合并文件的结束标记:
FileInfo EndFlag={"Combined File",0,_offset};
其中_offset是第一个原始文件的控制信息在合并文件中的位置(偏移量)。
启动本程序的命令行的格式是:
程序名 合并文件名 [原始文件名]
如果不指定原始文件名,默认恢复合并文件中的所有原始文件。
程序中涉及的部分文件操作的库函数简要说明如下:
int fread(void * buffer,int size,int count,FILE * fbin):从二进制文件流fbin中读取 count块长度为size字节的数据块到buffer指向的存储区。返回值为实际读取的数据块数。
int fwrite(void * buffer,int size,int count,FILE * fbin):各参数和返回值的意义与fread相同,但对文件进行写操作。
int fseek(FILE * fbin,long offset,int position):将文件流fbin的读/写位置以position为基准移动offset字节。position的值可以是SEEK_SET(文件头),SEEK_CUR(当前位置), SEEK_END(文件尾);offset为正,表示向文件尾方向移动,为负表示向文件头方向移动,为零表示到基准位置。
long ftell(FILE * fbin):返回文件流fbin的当前读/写位置(相对于文件头的偏移量)。上述偏移量均以字节为单位,即偏移字节数。
【程序】
#include <stdio. h>
#include <string. h>
typedef struct { char fname[256];long lengt;long offset;
} Filelnfo;
void copyfile( FILE*fin, FILE * fout,int fsize)
{ char buf[1024];int siz=1024;
while(fsize !=0){ /*每次复制siz个字节,直至复制完fsize个字节*/
if(siz >fsize) (1);
fread(buf,1,siz,fin); fwrite(buf,1,siz,fout);
fsize=(2);}
}
int dofile(FILE * fin,Filelnfo * inp)
{ long offset;
FILE * fout;
if (( fout = fopen ( inp - > fname ,"wb" ))==NULL) {
printf("创建文件错误: %s\n" , inp -> fname);
return 1;
}
offset=(3); /*保留合并文件读/写位置*/
fseek((4)); /*定位于被恢复文件首*/
copyfile ( fin, fout, inp - > length);
fclose(fout);
printf("\n ---文件名: %\n 文件长: %ld. \n",inp -> fname, inp -> length);
(5); /*恢复合并文件读/写位置*/
return 0;
}
int main( int argc, char * argv[ ])
{ Filelnfo finfo;
char fname[256] ;FILE * fcmbn;
if(argc <2) { printf("输入合并文件名:" ) ;scanf("%s" ,fname);
else strcpy(fname,argv[1]);
if((fcmbn = fopen(fname,"rb" )) == NULL) {
printf("文件打开错误: %s\n" ,fname);return 1;
}
fseek(fcmbn, -sizeof(Filelnfo),SEEK_END); /*定位于合并文件末尾的标志信息*/
fread(&finfo,1,sizeof(Filelnfo) ,fcmbn);
if(finfo. length!=0||strcmp(finfo. fnane," CombinedFile" )){
printf("指定的文件不是合法的合并文件\n");
fclose (fcmbn); return 2;
}
fseek(fcmbn,finfo. offset,SEEK_SET); /*定位于首个原始文件的控制信息*/
for(;;){ /*恢复一个(argc>2)或全部(argc=2)原始文件*/
fread ( &finfo,1, sizeof (Fitelnfo), fcmbn);
if(finfo, length ==0) break;
if (argc> 2 && strcmp(finfo. fname,argv[2] )) continue;
if (dofile ( fcmbn, &finfo)!=0) break;
}
fcolse(fcmbn);return 0;
}
选项
答案
(1)siz=fsize (2)fsize-siz (3)ftell(fin) (4)fin,inp->offset,SEEK_SET (5)fseek(fin,offset,SEEK_SET)
解析
(1)copyfile()每次拷贝min(siz,fsize)个单元,并修改fsize以记录已拷贝的字节数,最终完成fsize个字节的拷贝。本题进行siz和fsize最小关系的判断。(2)拷贝完siz个字节后,对fsize进行修改,使其代表当前未拷贝的字节数。(3)dofile()首先创建一个新的文件 fout,用于存储被恢复的文件。然后先保存文件的读写位置(offset= ftell(fin)),再获得被恢复文件在合并文件中的位置(fseek(fin,inp-> offse,SEEK_SET)),再进行拷贝。最后恢复合并文件的读写位置。本句保留合并文件的读写位置。(4)对被恢复文件进行定位。(5)对合并文件的读写位置进行恢复。
转载请注明原文地址:https://jikaoti.com/ti/UrW7FFFM
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
文件abc.docx______。
下列关于Windows7屏幕保护程序的叙述中,不正确的是__________。
点击F.DOC文档窗口的“最小化”按钮后,则______。
某村领导要求信息处理技术员估计该村一池塘中的鱼的大致数量。该技术员想出了一个办法:先从池塘中捕出30条鱼,在每条鱼身上做一记号后,又放回池塘。几天后,再从该池塘中捕出40条鱼,发现其中有2条是有记号的。因此,他估计该池塘鱼的数量大致为(68)条(假设这几天
数据录入工作有两个指标:录入速度和错误率。一般而言,数据录入员在录入大批数据时,录入速度会(65),错误率会(66)。66
计算机每次启动时自动运行的计算机病毒称为______病毒。
在Excel2007中,利用填充柄可以将数据复制到相邻单元格中。若选择含有数值的上下相邻的两个单元格,按住鼠标左键向下拖动填充柄,则数据将以(49)________________填充。
在Word2003中,对当前正在编辑的文档内容进行多次剪切操作后关闭该文档,则剪贴板中的内容为______。
请认真阅读下列有关代理服务器的说明信息,然后根据要求回答问题1至问题6。【说明】某单位通过电信部门提供的ADSL与Internet相连,并通过代理服务器使内部各计算机终端访问Internet,连接方式如图1-1所示。电信部门分配的公网IP地址为2
阅读下列说明,根据网页显示的效果图,回答问题1至问题7。【说明】以下是用ASP实现了一个网络收藏夹网页,用于保存用户感兴趣的Web网页地址。用IE打开网页文件“index.asp”后的效果如图5-1所示。程序中使用的Access数据表结构如表5-1所示。
随机试题
男,40岁,烧伤后3小时入院。疼痛剧烈,感口渴。面色苍白,心率150次/分,BP85/65mmHg,头颈部、躯干部布满大小不等水疱,可见潮红创面。两上肢呈焦黄色,无水疱。该患者的烧伤总面积估计是
恶寒较甚,发热,无汗,头痛身楚,咳嗽,痰白,咳痰无力,平素神疲体弱,气短懒言,反复易感,舌淡苔白,脉浮而无力,宜选用
A.急性胆囊B.急性阑尾炎C.胃十二指肠溃疡穿孔D.急性胰腺炎E.右输尿管结石转移性右下腹痛,常见于
属于器官特异性自身免疫病的一种,最先出现的症状是眼肌无力,进而累及其他部位,常呈进行性加重,抗乙酰胆碱受体抗体检测呈阳性反应,这些症状最符合的疾病是
血虚经行头痛的最佳选方是血虚经行眩晕的最佳选方是
A.高热量、高蛋白、高维生素、易消化饮食B.低动物脂肪、低胆固醇、少糖少盐饮食C.高热量、高维生素、高效价低蛋白饮食D.低盐、高维生素、低蛋白质饮食E.高热量、低脂肪、低盐、忌蛋白质饮食肝性脑病者选用
一般资料:求助者,女性,28岁,中学教师。案例介绍:求助者由于与丈夫发生矛盾,烦躁,失眠三个多月。下面是心理咨询师与求助者之间的一段咨询对话:心理咨询师:您好!请问我能为您提供什么帮助呢?求助者:我最近心情不好,烦躁。心理咨询师:您能谈谈是什么事
针筒:注射器:医疗器械
资本的技术构成是
DearSir,Muchtomyregret,Iwritethislettertocomplainaboutyourcompany’sbaddeliveryservice.Thelaptop(Mode
最新回复
(
0
)