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

郑州设计公司招聘自动seo系统

郑州设计公司招聘,自动seo系统,做网站需要找什么客户,九亭做网站模拟实现FILE以及认识缓冲区 刷新缓冲逻辑图自定义实现如何强制刷新内核缓冲区例子 刷新缓冲逻辑图 自定义实现 mystdio.h #pragma once #include <stdio.h>#define NUM 1024 #define BUFF_NOME 0x1 #define BUFF_LINE 0x2 #define BUFF_ALL 0x4typedef struct _MY_FIL…

模拟实现FILE以及认识缓冲区

      • 刷新缓冲逻辑图
      • 自定义实现
      • 如何强制刷新内核缓冲区
      • 例子

刷新缓冲逻辑图

在这里插入图片描述

自定义实现

mystdio.h
#pragma once 
#include <stdio.h>#define NUM 1024
#define BUFF_NOME 0x1
#define BUFF_LINE 0x2
#define BUFF_ALL 0x4typedef struct _MY_FILE
{int fd;//接受描述符的值int flags;//用来记录打开方式char outputbuffer[NUM];//缓冲区保存int current;//记录缓冲区有多少字符
}MY_FILE;MY_FILE* my_fopen(const char* path,const char* mode);
size_t my_fwrite(const void* ptr,size_t size,size_t nmemb,MY_FILE* stream);
int my_fclose(MY_FILE* fp);
int my_fflush(MY_FILE* fp);
mystdio.c
#include "mystdio.h"
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>MY_FILE* my_fopen(const char* path,const char* mode)
{//1.识别标志位,打开方式int flag = 0;if(strcmp(mode,"r") == 0) flag |= O_RDONLY;else if(strcmp(mode,"w") == 0) flag |= (O_CREAT | O_WRONLY | O_TRUNC);else if(strcmp(mode,"a") == 0) flag |= (O_CREAT | O_WRONLY | O_APPEND);else if(strcmp(mode,"r+") == 0) flag |= (O_WRONLY | O_RDONLY);else if(strcmp(mode,"w+") == 0) flag |= (O_CREAT | O_WRONLY | O_RDONLY | O_TRUNC);else if(strcmp(mode,"a+") == 0) flag |=(O_CREAT | O_WRONLY | O_RDONLY | O_APPEND);//2.尝试打开文件mode_t m = 0666;int fd = 0;if(flag | O_CREAT){fd = open(path,flag,m);}else {fd = open(path,flag);}if(fd < 0) return NULL;//3.给用户返回MY_FILE对象,需要先进行构建MY_FILE *mf = (MY_FILE*)malloc(sizeof(MY_FILE));if(mf == NULL){close(fd);return NULL;}//4.初始化MY_FILE对象mf->fd = fd;mf->flags = 0;mf->flags |= BUFF_LINE;memset(mf->outputbuffer,'\0',sizeof(mf->outputbuffer));mf->current = 0;//5.返回打开的文件return mf;
}//冲刷缓冲区
int my_fflush(MY_FILE* fp)
{assert(fp);//将用户缓冲区的数据,通过系统调用接口,冲刷给oswrite(fp->fd,fp->outputbuffer,fp->current);fp ->current = 0;//fsync(fp-fd);return 0;
}//这里返回的是字节数,不是模拟实现的输入的、个数nmemb
size_t my_fwrite(const void* ptr,size_t size,size_t nmemb,MY_FILE* stream)
{//1、缓冲区如果已经满了,就直接写入if(stream->current == NUM)my_fflush(stream);//2.根据缓冲区剩余情况,进行数据拷贝即可size_t user_size = size * nmemb;size_t my_size = NUM - stream->current;size_t write = 0;if(my_size >= user_size) {memcpy(stream->outputbuffer + stream->current,ptr,user_size);//3.更新计数器字段stream->current += user_size;write = user_size;}else {//如果缓冲区内存不够存放的话,指挥存放它的最大值memcpy(stream->outputbuffer+stream->current,ptr,my_size);stream->current += my_size;write = my_size;}//4.开始计划刷新,他们高效体现在哪里? --- TODO//不发生刷新的本质,不进行写入,就是不进行IO,不进行调用系统调用,所以my_fwrite函数调用会非常快,数据会暂时保存在缓冲区中//可以在缓冲区中挤压多份数据,统一进行刷新写入,本质:就是一次IO可以IO更多的数据,提高IO效率if(stream->flags & BUFF_ALL){if(stream->current == NUM) my_fflush(stream);}else if(stream->flags & BUFF_LINE){if(stream->outputbuffer[stream->current-1] =='\n'){my_fflush(stream);}}else {//TODO}return write;
}int my_fclose(MY_FILE* fp)
{assert(fp);//1.冲刷缓冲区if(fp->current > 0) my_fflush(fp);//2.关闭文件close(fp->fd);//3.释放堆空间free(fp);//4.指针置NULL --- 可以设置fp = NULL;return 0;
}
main.c
#include "mystdio.h"
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#define MYFILE "log.text"
int main()
{MY_FILE* fp = my_fopen(MYFILE,"w");if(fp == NULL) return 1;const char* str = "hello my my_fwrite";int cnt = 10;//操作文件while(cnt){char buffer[1024];snprintf(buffer,sizeof(buffer),"%s:%d\n",str,cnt--);size_t size = my_fwrite(buffer,strlen(buffer),1,fp);sleep(1);printf("当前成功写入:%lu个字节\n",size);}my_fclose(fp);return 0;
}

如何强制刷新内核缓冲区

根据文件描述符进行强制刷新

main.c
#include "mystdio.h"
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#define MYFILE "log.text"
int main()
{MY_FILE* fp = my_fopen(MYFILE,"w");if(fp == NULL) return 1;const char* str = "hello my my_fwrite";int cnt = 10;//操作文件while(cnt){char buffer[1024];snprintf(buffer,sizeof(buffer),"%s:%d\n",str,cnt--);if(cnt % 5 == 0){//当cnt是五的倍数的时候就会强制刷新一次my_fwrite(buffer,strlen(buffer),1,fp);}}my_fclose(fp);return 0;
}

在这里插入图片描述

例子

像我们进行scanf输入的时候,其实本身我们输入的是一串字符串,将这个字符串读入对应的缓冲区buff后,然后通过分解工作,进一步传入系统,系统,系统在通过一些指令输入输出想要的结果

http://www.mmbaike.com/news/35475.html

相关文章:

  • 网站方案范文南京百度推广优化排名
  • dnf怎么做钓鱼网站关键词点击工具
  • wordpress站长seo标题优化裤子关键词
  • 国内做免费视频网站搜索引擎营销的基本方法
  • 张店区创业孵化中心有做网站的吗镇江百度推广
  • 专门做干果批发的网站hao123网址之家官网
  • 巴士定制网站开发青岛关键词搜索排名
  • wordpress 手机端 广告关键词排名优化易下拉软件
  • 能够做渗透的网站长沙网站seo外包
  • 公司网站建设申请报告怎么制作一个自己的网站
  • 做网站怎么导入地图电脑软件推广平台
  • 东莞网站设计定制开发站长素材音效
  • 怎么打开文件做的网站网络营销师主要做什么
  • 设计个网站需要怎么做福州seo服务
  • 武汉网站设计招聘百度账号安全中心
  • 用别人身份证备案网站seo基础
  • 企业品牌战略新网站应该怎么做seo
  • 做策划有帮助的网站网络优化软件
  • 枣庄网站制作百度seo优化是什么
  • 网站名查询seo自学网视频教程
  • 上海免费网站建站模板百度客户端电脑版下载
  • 孝感网站推广郑州网站建设价格
  • 南昌哪里有网站建设网站设计的基本原则
  • html简单的旅游网页seo优化推广技巧
  • ui设计网站模板推广有什么好方法
  • wordpress 删除 仪表盘搜索引擎排名优化程序
  • 免费空间申请2018seo外包公司一般费用是多少
  • 上海网站建设类岗位seo公司哪家好
  • 充值中心网站怎么做百度公司在哪里
  • 做门户网站用什么模板seo关键词推广话术