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

网站设计电脑培训学校如何自己制作网页游戏

网站设计电脑培训学校,如何自己制作网页游戏,福利博客wordpress,新网站必须做301定向吗文章目录 一、实现细节1.需要实现的函数2.fopen的实现3.fclose4.fwrite5.测试6.缓冲区的实现7.FILE中缓冲区的意义 二、完整代码 一、实现细节 1.需要实现的函数 #include mystdio.hint main() {_FILE* fp _fopen(test.txt,w);if(fp N… 文章目录 一、实现细节1.需要实现的函数2.fopen的实现3.fclose4.fwrite5.测试6.缓冲区的实现7.FILE中缓冲区的意义 二、完整代码 一、实现细节 1.需要实现的函数 #include mystdio.hint main() {_FILE* fp _fopen(test.txt,w);if(fp NULL) return 1;const char* msg hell world;_fwrite(fp,msg,strlen(msg));_fclose(fp);return 0; }如上代码所示就是我们需要实现的功能 也就是说我们在头文件中需要写出以下的代码 #ifndef __MYSTDIO_H__ #define __MYSTDIO_H__#include string.h typedef struct IO_FILE {int fileno; }_FILE; _FILE* _fopen(const char* filename, const char* flag); int _fwrite(_FILE* fp, const char* s, int len); void _fclose(_FILE* fp);#endif2.fopen的实现 它的实现逻辑是这样的首先我们要根据对应的flag去选择以什么样的方式去打开某个文件。 当文件成功打开以后我们需要创建这个文件的结构体对象然后将文件描述符写入到文件结构体中。最后返回这个文件的结构体 _FILE* _fopen(const char* filename, const char* flag) {assert(filename);assert(flag);int f 0;int fd -1;if(strcmp(flag, w) 0){f (O_WRONLY|O_CREAT|O_TRUNC);fd open(filename, f, FILE_MODE);}else if(strcmp(flag, a) 0) {f (O_WRONLY|O_CREAT|O_APPEND);fd open(filename, f, FILE_MODE);}else if(strcmp(flag, r) 0) {f O_RDONLY;fd open(filename, f);}else{return NULL;}if(fd -1){return NULL;}_FILE* fp (_FILE*)malloc(sizeof(_FILE));if(fp NULL){return NULL;}fp-fileno fd;return fp; } 3.fclose 对于文件的关闭我们只需要利用close这个系统调用接口关闭对应的文件描述符即可然后释放掉这个文件结构体 void _fclose(_FILE* fp) {if(fp NULL){return;}close(fp-fileno);free(fp); }4.fwrite int _fwrite(_FILE* fp, const char* s, int len) {return write(fp-fileno,s,len); } 对于这个fwrite而言它只需要利用write这个接口直接去调用这个写入的接口即可 5.测试 我们现在可以简单的去跑一下代码 如果我们将代码改为追加模式 那么运行结果为 所以这样我们就不用再去使用系统调用了而是直接使用库函数即可。 这就是一层封装在windows等其他操作系统也是一样我们只需要根据其对应的系统调用写上对应的代码即可。这样就可以实现跨平台性了 像java中的jvm也是一样的它本身就是用C/C写的然后java的代码就是跑在它的上面的 6.缓冲区的实现 在这里我们不去考虑一些异常处理也不考虑一些局部的问题 在C语言中即存在输入缓冲区也有输出缓冲区。 对于输入缓冲区就是我们在输入的时候我们的设备只认识字符即便是123也会将其认为字符1字符2字符3。 即对于上面的这些接口我们也可以看到这些都是void类型也就是说并不关心具体是什么类型。 具体这些数据是什么类型全部交由上层来解释。所以我们的键盘显示器都叫做字符输入输出设备。所以才可以格式化输入输出 总之全部当作字符来出来 我们现在只实现一个输出缓冲区 flag代表着的是刷新的模式有无刷新行刷新全刷新三种策略。我们分别用宏来表示 最终我们的代码改为如下 #include mystdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include unistd.h #include assert.h#define FILE_MODE 0666//w,a,r _FILE* _fopen(const char* filename, const char* flag) {assert(filename);assert(flag);int f 0;int fd -1;if(strcmp(flag, w) 0){f (O_WRONLY|O_CREAT|O_TRUNC);fd open(filename, f, FILE_MODE);}else if(strcmp(flag, a) 0) {f (O_WRONLY|O_CREAT|O_APPEND);fd open(filename, f, FILE_MODE);}else if(strcmp(flag, r) 0) {f O_RDONLY;fd open(filename, f);}else{return NULL;}if(fd -1){return NULL;}_FILE* fp (_FILE*)malloc(sizeof(_FILE));if(fp NULL){return NULL;}fp-fileno fd;fp-flag FLUSH_LINE;fp-out_pos 0;return fp; } int _fwrite(_FILE* fp, const char* s, int len) {memcpy((fp-outbuffer[fp-out_pos]), s, len);fp-out_pos len;if(fp-flagFLUSH_NOW){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;}else if(fp-flagFLUSH_LINE){if(fp-outbuffer[fp-out_pos-1]\n){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;}}else if(fp-flagFLUSH_ALL){if(fp-out_pos SIZE){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;}}return len; } void _fclose(_FILE* fp) {if(fp NULL){return;}close(fp-fileno);free(fp); }对于main.c中代码改为如下 #include mystdio.h #include unistd.h #define Filename test.txtint main() {_FILE* fp _fopen(Filename,w);if(fp NULL) return 1;const char* msg hell world\n;int cnt 10;while(cnt){_fwrite(fp,msg,strlen(msg));sleep(1);cnt--;}_fclose(fp);return 0; }运行结果为 以上是行刷新的策略 我们可以试一下全刷新 其实我们发现结果不对因为即便进程退出了也没有刷新出来 这是因为我们缺少了在进程退出时强制刷新的部分如下所示 7.FILE中缓冲区的意义 因为如果我们写一次就往操作系统写一次这样效率太低不如暂一大批然后再跟操作系统去交互。 即让C语言的接口调用起来变得更快。 二、完整代码 mystdio.h #ifndef __MYSTDIO_H__ #define __MYSTDIO_H__#include string.h #define SIZE 1024#define FLUSH_NOW 1 #define FLUSH_LINE 2 #define FLUSH_ALL 4typedef struct IO_FILE {int fileno; //char inbuffer[SIZE];//int in_pos;char outbuffer[SIZE];int out_pos;int flag; }_FILE; _FILE* _fopen(const char* filename, const char* flag); int _fwrite(_FILE* fp, const char* s, int len); void _fclose(_FILE* fp);#endifmystdio.c #include mystdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include unistd.h #include assert.h#define FILE_MODE 0666//w,a,r _FILE* _fopen(const char* filename, const char* flag) {assert(filename);assert(flag);int f 0;int fd -1;if(strcmp(flag, w) 0){f (O_WRONLY|O_CREAT|O_TRUNC);fd open(filename, f, FILE_MODE);}else if(strcmp(flag, a) 0) {f (O_WRONLY|O_CREAT|O_APPEND);fd open(filename, f, FILE_MODE);}else if(strcmp(flag, r) 0) {f O_RDONLY;fd open(filename, f);}else{return NULL;}if(fd -1){return NULL;}_FILE* fp (_FILE*)malloc(sizeof(_FILE));if(fp NULL){return NULL;}fp-fileno fd;//fp-flag FLUSH_LINE;fp-flag FLUSH_ALL;fp-out_pos 0;return fp; } int _fwrite(_FILE* fp, const char* s, int len) {memcpy((fp-outbuffer[fp-out_pos]), s, len);fp-out_pos len;if(fp-flagFLUSH_NOW){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;}else if(fp-flagFLUSH_LINE){if(fp-outbuffer[fp-out_pos-1]\n){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;}}else if(fp-flagFLUSH_ALL){if(fp-out_pos SIZE){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;}}return len; } void _fflush(_FILE* fp) {if(fp-out_pos 0){write(fp-fileno, fp-outbuffer, fp-out_pos);fp-out_pos 0;} } void _fclose(_FILE* fp) {if(fp NULL){return;}_fflush(fp);close(fp-fileno);free(fp); }main.c #include mystdio.h #include unistd.h #define Filename test.txtint main() {_FILE* fp _fopen(Filename,w);if(fp NULL) return 1;const char* msg hell world\n;int cnt 10;while(cnt){_fwrite(fp,msg,strlen(msg));sleep(1);cnt--;}_fclose(fp);return 0; }
http://www.ihoyoo.com/news/59847.html

相关文章:

  • 广东手机网站建设报价表wordpress用户后台
  • 自己公司网站设计网站标题改不了
  • 北京市保障性住建设投资中心网站地图制作网站
  • 做翻译 网站吗怎样安全做黑色彩票网站
  • 网站经常修改好不好江西建设监督网新网站
  • 网站正能量专业的网站建设宝安西乡
  • 灌南网站建设购物网站制作教程
  • 中建海峡建设发展有限公司网站电子商务网站建设课设网站
  • 河南网站建设推广公司长沙企业建站在线咨询
  • 昆明网站建设排名时代创信网站建设
  • 西安哪家公司做网站好广告网页设计培训轻松学
  • 立水桥网站建设wordpress访客插件
  • 做网站的 深圳万网网站备案证书
  • 帮人做淘宝美工的网站wordpress插件整合到主题
  • 怀宁县住房和城乡建设局网站环球资源网官方网站
  • 百度网站排名 查询免费查企业信息软件
  • 设计专业招聘网站用哪个程序做网站收录好
  • 安徽观元建设有限公司网站转运网站建设
  • 国税网站页面申报撤销怎么做红花岗区建设局网站
  • 哪里做网站最好网站开发工具的选择
  • 网络组建与配置 2018版清华大学出版社搜索引擎优化技术
  • 高清品牌网站设计建设高级搜索
  • 机票什么网站建设上街网络推广
  • 网站 前端 后端大数据推广公司
  • 中山企业建网站提升学历的重要性与意义
  • 成都网站怎么推广广西网站建设营销公司
  • 汕头seo网站管理东莞网络关键词排名
  • 怎么把做网站发给别人微信网站主题
  • 论坛网站如何建设海南省
  • 做个网站超详细wordpress常用函数