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

响应设网站多少钱可以做微信对接网站群

响应设网站多少钱可以做,微信对接网站群,企业网站app,yy直播4. 标准 IO 库 1. 标准 IO 简介2. FILE 指针3. 标准输入、标准输出和标准错误4. fopen() 和 flose()5. fread() 和 fwrite()6. fseek 定位7. 检查或复位状态7.1 feof()7.2 ferrof()7.3 clearerr() 8. 格式化 IO8.1 格式化输出8. 2 格式化输入 9. IO 缓冲9.1 文件 IO 的内核缓冲… 4. 标准 IO 库 1. 标准 IO 简介2. FILE 指针3. 标准输入、标准输出和标准错误4. fopen() 和 flose()5. fread() 和 fwrite()6. fseek 定位7. 检查或复位状态7.1 feof()7.2 ferrof()7.3 clearerr() 8. 格式化 IO8.1 格式化输出8. 2 格式化输入 9. IO 缓冲9.1 文件 IO 的内核缓冲9.2 刷新文件 IO 的内核缓冲区9.2.1 控制文件 IO 内核缓冲的系统调用9.2.1 控制文件 IO 内核缓冲的标志 9.3 直接 IO绕过内核缓冲9.3.1 直接 IO 的对齐限制9.3.2 直接 IO 与普通 IO 对比 9.4 stdio 缓冲9.4.1 设置 stdio 缓冲9.4.1.1 setvbuf()9.4.1.2 setbuf()9.4.1.3 setbuffer() 9.4.2 缓冲模式9.4.3 刷新 stdio 缓冲区 10. 文件描述符和FILE指针互转 1. 标准 IO 简介 标准 IO 库指的式标准 C 库中用于文件 IO 操作相关的一系列库函数的集合底层是用系统 IO 实现的。但是标准 IO 比系统 IO 具有更好的可移植性因为不同的操作系统内核提供的系统调用都是不一样的其次标准 IO 具有更高的效率因为标准 IO 提供了自己的缓冲区但是系统 IO 不具备缓冲区。 2. FILE 指针 FILE 指针就类似于系统 IO 的文件描述符FILE 指针是一个结构体类型包含了标准 IO 为管理文件所需要的所有信息包括文件描述符、指向文件缓冲区的指针、缓冲区的长度当前缓冲区中的字节数以及出错标志等。该类型定义在stdio.h中 3. 标准输入、标准输出和标准错误 标准输入和标准输出通常指的就是键盘和显示器标准错误也是通过显示器显示的。 通过标准输入设备与系统进行交互时进程将从标准输入 (stdin) 文件中获取数据将正常输出数据输出到标准输出 (stdout) 文件将错误信息输出到标准错误 (stderr) 文件中。标准输出文件和标准错误文件都对应终端的屏幕而标准输入文件则对应于键盘。 4. fopen() 和 flose() #include stdio.h int flose(FILE *stream);// 成功返回0失败返回-1 FILE *fopen(const char *path, const cchar *mode);// 成功返回FILE文件指针失败返回NULL /* 参数* path: 文件路径可以是相对路径也可以是绝对路径* mode: 文件权限是一个字符串* r:只读* r:可读可写* w:只写如果文件存在就将文件截断为0否则就创建文件* w:可读可写方式打开文件如果存在就截断为0否则就创建文件* a:只写默认是追加式写入如果文件不存在就创建文件* a:可读可写以追加的方式写入如果文件不存在就创建文件* / // 如果文件不存在就会创建文件新文件的默认权限是06665. fread() 和 fwrite() #include stdio.h size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream); /* 参数:* ptr:存放读取到的数据或者需要写入的数据的缓冲区* size:读取或写入的数据大小的单位那么总共数据的大小是size*nmemb* nmemb:读取或写入的数据个数* stream:FILE指针*/6. fseek 定位 #include stdio.h int fseek(FILE *stream, long offset, int whence); // 这里的后两个参数和lseek相同成功返回0失败返回-1 long ftell(FILE *stream); // 获取当前读写位置偏移量7. 检查或复位状态 fread() 读取数据时如果返回值小于 nmemb表示发生了错误或者已经读到了文件末尾但是不能具体确定是哪种情况可以通过判断错误标志或 end-of-file 标志来确定具体情况 7.1 feof() 用于测试文件的 end-of-file 标志如果被设置了则调用 feof() 函数将返回一个非零值如果没有被设置就返回0. #include stdio.h int feof(FILE *stream); // 当文件的读写位置到结尾时end-of-file 会被设置7.2 ferrof() 用于测试文件的错误标志如果错误标注被设置返回非零值否则返回 0. #include stdio.h int ferror(FILE *stream);7.3 clearerr() 用于清除 end-of-file 或错误标志当调用上面两个函数校验完之后通常需要清除这些标志避免下次校验时使用到的是上一次的值。对于 end-of-file除了显示清除外调用 fseek 会自动清除 #include stdio.h void clearerr(FILE *stream);8. 格式化 IO 8.1 格式化输出 #include stdio.h int print(const char *format,...); int fprintf(FILE *stream, const char *format,...); int dprintf(int fd, const char *format,...); int sprintf(char *buf, const char *format,...); int snprintf(char *buf, size_t size, const char *format,...); // format:格式化控制字符串用于指定后续的参数如何进行格式转换fprintf(stderr,hello world\n); fprintf(stderr,%d\n,5);dprintf(STDERR_FILENO,hello world\n); dprintf(STDERR_FILENO,%d\n,5);char buf[100]; sprintf(buf,hello world\n); sprintf(buf,%d,100);// 将整形转换为字符串并且自动在末尾加上一个终止符// 因为sprinf可能会发生缓冲区溢出就引入了snprintf // size规定了缓冲区的大小如果写入到缓冲区的字节数大于size超出的部分就会丢弃format%[flags][width][.precision][length]type 8. 2 格式化输入 #include stdio.h int scanf(const char *format,...); int fscanf(FILE *stream, const char *format,...); int sscanf(const char *str, const char *format,...);int a,b,c; scanf(%d%d%d, abc); // 使用该函数时进程会被阻塞直到键盘有数据输入int a2,b2,c2; fscanf(stdin,%d%d%d,a2,b2,c2);char *str5454 hello; char buf[10]; int a3; sscanf(str, %d%s,a,buf);format%[*][width][ength]type或%[m][width][ength]type 如果添加了 *格式化输入函数会按照转换说明的指示读取输入但是丢弃输入意味着不需要对转换后的结果进行存储所以也就不需要提供相应的指针参数。如果添加了 m就只能与%s、 %c 以及%[一起使用调用者无需分配相应的缓冲区来保存格式转换后的数据原因在于添加了 m这些格式化输入函数内部会自动分配足够大小的缓冲区并将缓冲区的地址值通过与该格式转换相对应的指针参数返回出来该指针参数应该是指向 char*变量的指针。随后当不再需要此缓冲区时调用者应调用 free() 函数来释放此缓冲区。 9. IO 缓冲 9.1 文件 IO 的内核缓冲 文件 IO 在进行文件读写操作时并不会直接访问磁盘设备而是仅仅在用户空间缓冲区和内核缓冲区之间复制数据也就是说系统调用和磁盘操作不是同步的。当多个线程同时向文件写入数据时就会将文件存放在缓冲区中然后只进行依次和磁盘的 IO 操作。 9.2 刷新文件 IO 的内核缓冲区 强制将文件 IO 的内核缓冲区中缓存的数据刷新到磁盘设备中 9.2.1 控制文件 IO 内核缓冲的系统调用 #include unistd.h int fsync(int fd); int fdatasync(int fd); void sync(void);// 不是对某个指定的文件数据进行更新而是刷新所有文件 IO 内核缓冲区9.2.1 控制文件 IO 内核缓冲的标志 fdopen(filepath,O_WRONLY|O_DSYNC); // 类似在每个write后调用fdatasync函数 fdofen(filepath,O_WRONLY|O_SYNC); // 每个write都会自动将文件内容数据和元数据刷新9.3 直接 IO绕过内核缓冲 fdopen(filepath,O_WRONLY|O_DIRECT);9.3.1 直接 IO 的对齐限制 应用程序中用于存放数据的缓冲区其内存起始地址必须以块大小的整数倍进行对齐写文件时文件的位置偏移量必须是块大小的整数倍写入到文件的数据大小必须是块大小的整数倍 确认块大小指令df -h查看 Ubuntu 系统的跟文件系统所挂载的磁盘分区接着sudo tune2fs -l /dev/sda1 | grep Block size 9.3.2 直接 IO 与普通 IO 对比 直接 IO 每次都是直接对磁盘发起操作而普通方式只是将用户空间下的数据拷贝到文件 IO 内核缓冲区中。直接 IO 效率、性能低只有一些特殊场合用到 9.4 stdio 缓冲 标准 IO 效率比 文件 IO 高的根本就是它维护了自己的缓冲区减少了和磁盘的交互 9.4.1 设置 stdio 缓冲 9.4.1.1 setvbuf() #include stdio.h int setvbuf(FILE *stream, char *buf, int mode, size_t size); // 如果 buf 不为 NULL那么buf指向size大小的内存区域将作为该文件的stdio缓冲区所以buf应该以动态分配或静态的方式在堆上开辟空间而不是在栈上的函数内分配局部变量。如果buf为NULL那么stdio库会自动分配一块空间作为该文件的stdio缓冲区除非mode配置为非缓冲区模式 /* mode:指定缓冲区的缓冲类型* _IONBF:不对 IO 进行缓冲。每个标准IO函数将立即调用write或read并且忽略buf和size参数可以指定为NULL和0stderr就是这类* _IOLBF:采用行缓冲遇到换行符才会执行文件IO操作。对于输出流在输出一个换行符前将数据缓存除非缓冲区已经被填满 当输出换行符时再将这一行数据通过文件 I/O write()函数刷入到内核缓冲区中对于输入流 每次读取一行数据。 对于终端设备默认采用的就是行缓冲模式譬如标准输入和标准输出。* _IOFBF 采用全缓冲 I/O。 在这种情况下在填满 stdio 缓冲区后才进行文件 I/O 操作read、 write。对于输出流当 fwrite 写入文件的数据填满缓冲区时才调用 write()将 stdio 缓冲区中的数据刷入内核缓冲区对于输入流 每次读取 stdio 缓冲区大小个字节数据。 默认普通磁盘上的常规文件默认常用这种缓冲模式*/ // size指定缓冲区大小当 stdio 缓冲区中的数据被刷入到内核缓冲区或被读取之后这些数据就不会存在于缓冲区中了数据被刷入了内核缓冲区或被读走了 9.4.1.2 setbuf() #include stdio.h void setbuf(FILE *stream, char *buf);执行和 setvbuf 类似的任务 9.4.1.3 setbuffer() #include stdio.h void setbuffer(FILE *stream, char *buf, size_t size);和setbuf类似但是可以指定缓冲的大小 9.4.2 缓冲模式 #include stdio.h #include stdlib.h #include unistd.h int main(void) {// setvbuf(stdout, NULL, _IONBF, 0);// 将stdout设置为无缓冲printf(Hello World!\n);printf(Hello World!);for ( ; ; )sleep(1); }上面的代码只能看到第一个打印信息第二个看不到因为第一个是行缓冲而第二个是全缓冲只有当程序结束会刷新缓冲区。如果去掉注释那么两个都可以打印出来。 9.4.3 刷新 stdio 缓冲区 #include stdio.h int fflush(FILE *stream); // 刷新缓冲区 int fclose(FILE *stream); // 关闭缓冲区强制刷新缓冲区如果 stream 为 NULL就表示刷新所有 stdio 缓冲区。 #include stdio.h #include stdlib.h #include unistd.h int main(void) {printf(Hello World!\n);printf(Hello World!);fflush(stdout);// fclose(stdout);for ( ; ; )sleep(1); }上面代码一样可以看到两个打印信息。同样关闭文件也可以刷新缓冲区 10. 文件描述符和FILE指针互转 有时需要将文件 IO 和标准 IO 混合使用 #include stdio.h int fileno(FILE *stream); FILE *fdopen(int fd, const char *mode);当混合使用时需要注意缓冲的问题文件 IO 会直接将数据写入到内核缓冲区进行高速缓存而标准 IO 会将数据写入到 stdio 缓冲区之后再调用 write() 将 stdio 缓冲区中的数据写入到内核缓冲区。比如 #include stdio.h #include stdlib.h #include unistd.hint main() {printf(print);write(STDOUT_FILENO,write\n,6);exit(0); } // 这里先输出了write的内容然后再输出print的内容因为print没有遇到换行符也就是清除缓冲区只有等到运行结束之后才清理
http://www.w-s-a.com/news/101662/

相关文章:

  • 做网站搭建需要什么人vs2017移动网站开发
  • 购物网站开发需要什么技术怎么查看网站是否备案
  • 学做电商那个网站好网站建设投票主题
  • 中卫网站推广网络营销毕业设计做网站大小有什么要求
  • 做问卷网站义乌网站建设推广专家
  • 不会编程怎样建设网站昆明做网站哪家
  • 直播网站模板新营销平台电商网站
  • 建设部指定招标网站免费的企业查询软件
  • 做前端常用的网站及软件下载平台优化是什么意思
  • 企石镇仿做网站wordpress 网站白屏
  • 班级网站建设规划书专业定制网红变色杯
  • 上海网站设计公司电话甘肃路桥建设集团有限公司官方网站
  • 哈尔滨网站建设网站开发陕西省建设监理工程协会网站
  • 微信公众号电商网站开发wordpress增加论坛
  • 网站建设视频百度网盘下载免费wordpress搭建
  • 哈尔滨市网站建设公司汕头市公司网站建设平台
  • 东莞网站建设方案外包甘肃两学一做网站
  • 网站建设优化排名推广平面设计职业学校
  • 网后台的网站怎么做网站代理商
  • 网站如何转移到新的空间服务器上手机无人区离线地图app
  • 网站建设模板的买域名做网站的坏处
  • 长春做网站qianceyun做景观素材有哪几个网站
  • 自己建的网站也要注册域名吗邯郸市做网站
  • 天津网站建设制作软件潍坊个人做网站
  • 重庆城市建设集团官方网站php用什么做网站服务器
  • 深圳坪山站重庆市园林建设有限公司网站
  • 网站建设图片教程如何用自己的电脑建网站
  • 《网页设计与网站建设》A卷答案广东新闻联播
  • 海南专业网站运营托管wordpress 去掉主题
  • 企业品牌网站制作甜品制作网站