C语言里如何设置缓冲区,

C语言里如何设置缓冲区,,第1张

将数据以链表形式顺序存放,新数据总是放在表尾,待处理的数据总是在头结点下的第一个结点,处理完毕则释放空间。

缓冲器为暂时置放输出或输入资料的内存。缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。

这是我的函数,random.txt里面是1到1000随机排列的数,问题是如何加入缓冲,使得缓冲区每回只能进去20个数字,然后出缓冲区,出来50行。

你这个要求翻译成程序可大可小

简单点来说

#define CacheSize 20

typedef struct cacheItem{int valuechar bUsed} CacheItem

CacheItem Cache[CacheSize]

CacheItem *pOut=0

CacheItem *pInput=iCacheArray

int iCacheLocker=-1

FILE *fsInputFile = 0

int bIsJobDone=0

void threadInput()

{

读取一个数字

锁定cache

判定当前输入cacheitem是否可写可以的话写入,

如果可写pInput->value,pInput->bUsed=1if(pInput == (Cache+CacheSize))pInput=iCacheArrayelse ++Ipnut

否则停留在当前读取的位置,等待输出线程释放出缓存空间。

释放cache的锁定

如果读取个数达到要求了或者文件末尾,++bIsJobDonereturn

}

void threadOutput()

{

锁定cache

判定当前输入cacheitem是否bUsed,如果可有用,输出pInput->value,pInput->bUsed=0++pOutput

如果不可用 判定读取线程是否结束了bIsJobDone==1?(++bIsJobDone):bIsJobDone

释放cache的锁定

如果bIsJobDone==2,结束输出线程 return

}

void main()

{

open文件

创建输入线程

创建输出线程

while(bIsJobDone!=2);

}

大意如此,你明白撒?

C语言中的缓冲区又称为缓存,它是内存空间的一部分。

也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

C语缓冲区分为三种类型:1、全缓冲 2、行缓冲 3、不带缓冲。

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

举个例子,比如:

从磁盘里取信息,先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的 *** 作大大快于对磁盘的 *** 作,故应用缓冲区可大大提高计算机的运行速度。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11529743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存