当前位置:首页 » 文件管理 » 缓存c语言

缓存c语言

发布时间: 2023-05-29 21:25:26

1. c语言缓冲如何编写。

这是我的函数,random.txt里面是1到1000随模孝机排列的数,问题是如何加入缓冲,使得缓冲区每回只能进去20个数字,然后出缓冲区,出来50行。
你这个要求翻译成程序可大可小
简单点来说
#define CacheSize 20
typedef struct cacheItem{int value; char 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=1;if(pInput == (Cache+CacheSize))pInput=iCacheArray;else ++Ipnut;
否则停留在当前读取的位置,等答羡待输出线程释放出缓存空间。
释放cache的锁定
如果读取个数达到要求了或者文件末尾,++bIsJobDone;return;
}

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);
}
大意如此,你明白撒?

2. C语言中怎么实现数组的缓存

数组一旦申请了维度是不能更改的。要想改变大小,可以考虑容器,像vector,list等。那可以删除和拼接。

3. C语言缓存问题:

scanf会跳过空白符,除非是%c。所以你getchar遗留下来的换行被scanf跳过

4. C语言中关于键盘缓存区问题

说是 以字符串的格式存储也可以,但不太准确。
实际上 getchar 是执行这样一个操作,fgetc( STDIN ),从标准输入 STDIN 文件中读取一个字符。
这个STDIN是让册以文件形式存在的,而且是带有缓冲的文件。所以准银滑旅确的说你的输入被组织锋凳成一个文件形式。

5. C语言 缓存文件读取代码问题

这里的num表示文件中有效数据的个数。
如果num == -1,那么for循环读取文件数据的条件就不会满足,也就是说,如果过num < 0,for循环就不会执行。

6. C语言缓冲区在哪里

缓冲区具体在哪里是与操作系统、编译器相关的
以VC++为例。察看getchar的源代码(src\fgetchar.c),有:
int __cdecl _fgetchar (void){
return(getc(stdin));
}
#undef getchar
int __cdecl getchar (void){
return _fgetchar();
}
可见getchar()相当于getc(stdin)

继续察看getc(src\fgetc.c),有一段(为便于阅读,有删减):
int __cdecl getc (FILE *stream){
int retval;
_ASSERTE(stream != NULL);
_lock_str(stream);
__try {
retval = _getc_lk(stream);
}
__finally {
_unlock_str(stream);
}
return(retval);
}

这段代码里_lock_str其实是通过Win32 API提供的临街区来锁住文件
接收用户输入发生在_getc_lk,_getc_lk宏调用_filbuf。_filbuf在_filbuf.c中可以查看,这段代码比较长,就不贴出来了
_filbuf主要是调用了_read(_fileno(stream), stream->_base, stream->_bufsiz)

而_read最终则是调用了Win32API ReadFile,以下是用WinDbg输出的getchar的调用栈:
# ChildEBP RetAddr
00 0012fe6c 0040a4e7 kernel32!ReadFile
01 0012fea8 0040a3b9 TestStruct!_read_lk+0x107 [read.c @ 146]
02 0012fec0 00403140 TestStruct!_read+0x69 [read.c @ 75]
03 0012fee8 00401290 TestStruct!_filbuf+0xd0 [_filbuf.c @ 127]
04 0012ff08 004012cc TestStruct!fgetc+0x80 [fgetc.c @ 44]
05 0012ff14 0040103d TestStruct!getc+0xc [fgetc.c @ 56]
06 0012ff20 00401058 TestStruct!_fgetchar+0xd [fgetchar.c @ 37]
07 0012ff28 0040101e TestStruct!getchar+0x8 [fgetchar.c @ 47]
08 0012ff80 0040115c TestStruct!main+0xe [d:\my programs\teststruct\ts.cpp @ 4]
09 0012ffc0 7c816fe7 TestStruct!mainCRTStartup+0xfc [crt0.c @ 206]
0a 0012fff0 00000000 kernel32!BaseProcessStart+0x23

可见,getchar最终调用了ReadFile。关于ReadFile的原理以及缓冲区在哪里,请你再提一个问我再回答

7. c语言传文件清空缓存

scanf("%*[^\n]");
^取反或者“非”,[^\n]就是除了回车什么都可以被scanf读到。*表示被读到了但是不把读到值或者字符赋值给任何变量。
%*[^\n]就是读取来自键盘的出去回车外的任意字符,并不赋值给变量。
scanf("%*c");
就一个*,和上边表示一样就是读到了不赋值给任何变量。

再看,scanf("%[^\n]%*c",str)读入一行字符,赋值给str变量。如果c前面没有*,那么就需要str后面再写一个char类型的ch。这就告诉*表示读到了但是不赋值给任何变量。
那么scanf("%*[^\n]%*c")这句话,应该能理解了,两个格式控制符里面都有*,就是都读到了都不赋值变量。

读到这里应该差不多理解了,就是题中的两句scanf(相当于scanf("%*[^\n]%*c"))读到了输入的abc,但是没有赋值给任何变量。然后到了gets(str4);读到了def赋值给str4,然后printf("%s\n", str4);后必然显示def。

清空缓存区用fflush(stdin);这句代码。
键盘输入的东西都是放在缓冲区的这款区域,有变量过来了就带走,没有变量就在那里呆着等待一个变量来带它走。但是这个时候缓冲区里面偶尔会有一些垃圾的字符,而影响了正常的输入,有的时候用getchar()带走一个两个的字符,但是如果还是不见效一句fflush(stdin);就可以了。

8. C语言中如何将结构体中的值赋给BYTE类型的缓存

C语言中将结构体给BYTE缓存赋值时,直接进行拷贝即可。
结配扮构体在内存中是一段连续的内存空间,BYTE缓存(即BYTE数组)也纳陆是一段连续的内存空间,直接进行内存拷贝就可以完成赋值操作。

例如:
struct A {
int a;
short b;
} dataStruct;
BYTE dataBuffer[20];
memcpy(dataBuffer, dataStruct, sizeof(struct A)); //对Byte缓存赋值
memcpy(dataStruct, dataBuffer, sizeof(struct A)); //对结构体赋洞卖顷值

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

很简单的定义一个数组,用两个变量下标来指向头和尾,新数据来尾++ 老数据处理完头++ 两个下标超过界限时从头开始循环利用 中间要考虑缓存数据空和数据满的情况

或者你动态分配空间,来一个信号分配空间,插入队列链表,处理完一个出队列,释放空间

10. C语言的输入缓冲怎么回事,哪里有详细介绍啊

缓冲是标准C中的标准I/O里的机制,标准库里的I/O语句为了提高读写的效率,在实际读写之前将数据保存到一段内存中,这段内存就叫缓冲,分全缓冲,行缓冲两种,全缓冲在缓冲的内存满了之后做实际的读写,行缓冲在遇到换行符之后做实际的读写,unix高级环境编程里第五章里有详细的说明,或者网络也有

热点内容
html5移动端源码下载 发布:2025-02-08 06:20:45 浏览:147
外网访问黑群晖 发布:2025-02-08 05:45:59 浏览:559
中央存储服务器公司地址 发布:2025-02-08 05:38:48 浏览:821
服务器如何查询表空间的文件路径 发布:2025-02-08 05:38:00 浏览:162
宏基4741g哪个配置好 发布:2025-02-08 05:37:56 浏览:810
混合料运输车的配置是如何计算的 发布:2025-02-08 05:31:35 浏览:293
android红包插件 发布:2025-02-08 05:31:34 浏览:365
ea服务器怎么连接 发布:2025-02-08 05:16:45 浏览:463
更加密更改 发布:2025-02-08 05:15:20 浏览:786
仓储资源配置都需要开展哪些任务 发布:2025-02-08 05:13:51 浏览:676