当前位置: 首页 > news >正文

wordpress照片插件最好seo的wordpress

wordpress照片插件,最好seo的wordpress,网站风格设计要素,定制app开发的流程在我的上一篇博文中已经讲到循环队列的特点作用以及C语言实现#xff0c;当然实现和操作的方式比较简单#xff0c;在实际项目应用中略显粗糙。因此#xff0c;这一篇提供一个进阶篇的实现与操作接口。具体函数作用可以参见我的注释部分#xff0c;使用的时候直接把里面的接…  在我的上一篇博文中已经讲到循环队列的特点作用以及C语言实现当然实现和操作的方式比较简单在实际项目应用中略显粗糙。因此这一篇提供一个进阶篇的实现与操作接口。具体函数作用可以参见我的注释部分使用的时候直接把里面的接口函数放在一个头文件里面直接调用就可以啦十分方便易用但是可以实现的功能不可小觑哦比如我在写高速USB设备驱动(20MB/s)以及网络抓包缓存的时候用到的都是这个看似简单的数据结构所以还没有熟练运用的要加把劲了。需要注意的地方包括 1 不再利用上一篇中 “q-front (q-rear 1) % q-size” 的关系来进行队列空还是满的判断了这次利用 space 剩余缓存空间大小来判断。 2 写缓冲区的时候要进行缓冲区剩余空间大小 space 的判断如果要写入空间小于等于剩余空间那么就可以将数据完全写入缓冲区此时写入长度等于要写入的数据长度否则只能将部分数据写入缓冲区返回长度就等于剩余空间大小了。 3 读缓冲区同理要进行当前缓冲区中可用缓存的大小的判断也即已写入缓存大小的判断。若要读出的数据长度小于已写入缓存那么返回长度为希望读出的数据长度否则为已写入缓存的长度。 4 在写入和读出的时候尤其需要注意到达缓冲区边界的时候数据和读写位置的处理。如果读写到了边界那么就要分两次读取了另外读写位置一定不能超越分配的缓冲区边界所以在循环队列中数据的读写位置前移的时候都要对缓冲区长度取余以保证数据操作的安全性。 下面就是代码部分了若有不明或不妥之处可以直接 send comments to me :-D /** Queue operation API - 1.0** Copyright (C) 2016 SoldierJazz (SoldierJazz163.com)** This program is free software; you can redistribute it and/or* modify it. **/#include stdio.h #include stdlib.h #include string.h/*** Queue - queue structure* buf: queue buffer* read: position of read* write: position of write* size: buffer size* space: writable buffer size*/ typedef struct {char *buf;unsigned int read;unsigned int write;unsigned int size;unsigned int space; } Queue;#define Avail(q) (q-size - q-space)/*** Queue_Init - init a queue* q: pointer of queue* size: size of buffer in queue** Must be called when started. */ void Queue_Init(Queue *q, int size) {q-buf (char *)malloc(sizeof(char) * size);q-read 0;q-write 0;q-size size;q-space size; }/*** Queue_Destroy - destroy a queue* q: pointer of queue*/ void Queue_Destroy(Queue *q) {free(q-buf); }/*** Queue_Empty - tests whether a queue is empty* q: the queue to test*/ bool Queue_Empty(Queue *q) {return (q-space q-size); }/*** Queue_Full - tests whether a queue is full* q: the queue to test*/ bool Queue_Full(Queue *q) {return (q-space 0); }/*** AddQueue - add a byte to queue* q: the queue to add to* val: the char to add*/ bool AddQueue(Queue *q, char val) {if (!Queue_Full(q)) {q-buf[q-write] val;q-write (q-write 1) % q-size;q-space--;return true;} return false; }/*** DelQueue - delete a byte from queue* q: the queue to delete from* val: the char deleted*/ bool DelQueue(Queue *q, char *val) {if (!Queue_Empty(q)) {*val q-buf[q-read];q-read (q-read 1) % q-size;q-space;return true;}return false; }/*** WriteQueue - write buffers to queue* q: the queue to write in* buf: pointer of write buffer* len: length of write buffer*/ static int WriteQueue(Queue *q, char *buf, unsigned int len) {unsigned int ret 0;unsigned int rest q-size - q-write;if (!Queue_Full(q)) {if (q-space len) {ret len;if (rest len) {memcpy(q-buf q-write, buf, len);q-write (q-write len) % q-size;q-space - len;} else {memcpy(q-buf q-write, buf, rest);q-write 0;memcpy(q-buf, buf rest, len - rest);q-write len -rest;q-space - len;}} else {ret q-space;if (rest q-space) {memcpy(q-buf q-write, buf, q-space);q-write (q-write q-space) % q-size;q-space 0;} else {memcpy(q-buf q-write, buf, rest);q-write 0;memcpy(q-buf, buf rest, q-space - rest);q-write q-space -rest;q-space 0;}} } return ret; }/*** ReadQueue - read buffers from queue* q: the queue to read from* buf: pointer of read buffer* len: read length*/ static int ReadQueue(Queue *q, char *buf, unsigned int len) {unsigned int rest q-size - q-read;unsigned int ret 0;if (!Queue_Empty(q)) {if (Avail(q) len) {ret len;if (rest len) {memcpy(buf, q-buf q-read, len);q-read (q-read len) % q-size;q-space len;} else {memcpy(buf, q-buf q-read, rest);q-read 0;memcpy(buf rest, q-buf, len - rest);q-read len -rest;q-space len;}return len;} else {ret Avail(q);if (rest Avail(q)) {memcpy(buf, q-buf q-read, Avail(q));q-read (q-read Avail(q)) % q-size;q-space q-size;} else {memcpy(buf, q-buf q-read, rest);q-read 0;memcpy(buf rest, q-buf, Avail(q) - rest);q-read Avail(q) -rest;q-space q-size;}}} return ret; }void main() {int ret 0;char buf[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};char buf2[10];Queue q;Queue_Init(q, 10);ret WriteQueue(q, buf, 5);printf(writed %d bytes.\n, ret);ret ReadQueue(q, buf2, 2);printf(readed %d bytes.\n, ret);ret WriteQueue(q, buf, 10);printf(writed %d bytes.\n, ret);ret ReadQueue(q, buf2, 7);printf(readed %d bytes.\n, ret);ret ReadQueue(q, buf2, 7);printf(readed %d bytes.\n, ret);Queue_Destroy(q); } 运行结果如下 关于循环队列主题的系列文章可移步至以下链接 1. 《循环队列及C语言实现一》 2. 《循环队列及C语言实现二》 3. 《循环队列及C语言实现三》
http://www.pierceye.com/news/429110/

相关文章:

  • 集团企业网站建设建立网站有哪些步骤
  • 如何做自己的网站整合营销和链路营销
  • 外贸网站的公司介绍响应式布局代码例子
  • 校园网站的意义保定建设厅网站
  • 网站域名注册后怎么打开网站ip安装wordpress
  • 山西太原做网站网站开发上线流程
  • 江门网站建设多少钱网页服务器一年多少钱
  • 网站开发属于什么行业农商网站建设个人总结
  • 网站建设业务开展方案昆明市城市基本建设档案馆网站
  • 湖南网站托管做招聘网站排名
  • 主机屋免费网站空间网站建设安全标准
  • .net cms网站管理系统生态养殖网站模板
  • 国外网站一般公司网站是什么设计师做
  • 备案停止网站网站建设研究课题
  • 个人网站开发是学什么语言网站建设 总体思路
  • 网站怎么留住用户在什么地方可以接到做网站的活
  • jsp页面如何做网站pv统计wordpress4.7.10
  • 澄海网站建设用asp做网站怎么美观
  • 未满18岁能申请网站备案吗网站做qq链接
  • 网络公司网站开发互联网技术专业学什么
  • 校园网站建设详细的设计方案php网站开发实战
  • 网站设计广州量计价格网站可信度建设
  • 门业网站 源码做企业网站必须要座机吗
  • 广东网站开发推荐wordpress快速加载
  • php网站开发外包北京网站建设迈程网络
  • 微信开发者平台取消授权seo资源网站排名
  • 将网站源码下载下来如何使用网站seo链接购买
  • 可信网站认证必须做苏州那里可以建网站
  • 手机网站底部代码有名的网站建设
  • 做一个网站需要多长时间网站制作有哪些种类