使用Linux环境下C语言编程位视图实现500行500列的实验.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:4 大小:40KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

使用Linux环境下C语言编程位视图实现500行500列的实验.doc

使用Linux环境下C语言编程位视图实现500行500列的实验.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

使用Linux环境下C语言编程,实现随机数的产生和数组的初始化。具体的实例如下。位示图方法模拟磁盘块的分配与回收。题目的描述:要求在LINUX环境用C语言编程假设有一个500行500列的矩阵来表示磁盘块,状态位是1表示已经分配出去,状态位是0表示空闲块给这个矩阵用随机函数初始化,让其布满0和1写程序统计有多少个空闲块?有一个程序文件要申请20个磁盘块,能否分配?如果可以分配,给出分配块的块号地址,块号=字号×500+位号,并修改位示图,块号从0开始编址。要回收第300块和第580块,如何实现?给出位示图修改的程序#include<stdio.h>#include<sys/time.h>#include<fcntl.h>#definerow500#definecol500unsignedintnew_rand(){intfd;unsignedintn=0;fd=open("/dev/urandom",O_RDONLY);if(fd>0){read(fd,&n,sizeof(n));}close(fd);returnn;}intstatistics_free(unsignedintwst[][]){intsum_free=0;//记录空闲块个数,并初始化inti_row=0;inti_col=0;for(;i_row<row;i_row++)for(i_col=0;i_col<col;i_col++){if(wst[i_row][i_col]==0)sum_free++;}returnsum_free;}intmain(){inti_row=0;inti_col=0;//作为循环的变量intrecover_number=30;//要求释放的块号intspace=20;//申请的磁盘块{unsignedintticks;structtimevaltv;intfd;gettimeofday(&tv,NULL);ticks=tv.tv_sec+tv.tv_usec;fd=open("/dev/urandom",O_RDONLY);if(fd>0){unsignedintr;inti;for(i=0;i<512;i++){read(fd,&r,sizeof(r));ticks+=r;}close(fd);}srand(ticks);}unsignedintwst[row][col];//初始化数组为0,1for(;i_row<row;i_row++){for(i_col=0;i_col<col;i_col++){wst[i_row][i_col]=new_rand()%2;printf("%d",wst[i_row][i_col]);}printf("\n");}//统计空闲块个数printf("Therehavefreespace:%d",statistics_free(wst));//申请20个磁盘块,能否分配?如果可以分配,给出分配块的块号地址,块号=字号×500+位号,并修改位示图,块号从0开始编址{inti_row=0;inti_col=0;intt_row=0;intt_col=0;if(ask>statistics_free(wst)){printf("Thespacedon'tenough");return;}printf("Thespaceaddresslikethis:\n");for(;i_row<row;i_row++)for(i_col=0;i_col<col;i_col++){intaddress=0;if(ask>0&&wst[i_row][i_col]==0){wst[i_row][i_col]=1;ask--;//计算当前的分配块号的地址address=i_row*row+i_col;printf("%d",address);}elseif(ask==0){printf("\nTheaskhadrequest,thearrayischanged:\n");for(t_row=0;t_row<row;t_row++){for(t_col=0;t_col<col;t_col++)printf("%d",wst[t_ro