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

网站开发保障合同浏览器推广怎么收费

网站开发保障合同,浏览器推广怎么收费,做网站什么前端框架方便,asp.net 网站管理工具 遇到错误http://www.shangxueba.com/jingyan/1837313.html2014与文件I/O围绕文件描述符操作不同#xff0c;标准I/O的操作是围绕流进行的。流#xff1a;对于流#xff0c;《C和指针》里有一段解释得很好#xff1a;ANSI C进一步对I/O的概念进行了抽象。就C程序而言#xff0c;所有…http://www.shangxueba.com/jingyan/1837313.html2014与文件I/O围绕文件描述符操作不同标准I/O的操作是围绕流进行的。流对于流《C和指针》里有一段解释得很好ANSI C进一步对I/O的概念进行了抽象。就C程序而言所有的I/O操作只是简单地从程序移进或移出字节的事情。因此毫不惊奇的是这种字节流便被称为流(stream)。程序只需要关心创建正确的输出字节数据以及正确地解释从输入读取的字节数据。特定I/O设备的细节对程序员是隐藏的。TCPL Appendix B.1中这么解释A stream is a source or destination of data that may be associated with a disk or other peripheral.(流是一个可能与硬盘或者其他设备关联的数据的源或者目的地)简单地说流是对信息的一种抽象。C系统在处理文件(文本文件和二进制文件)时并不区分类型都看成是字符流按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。流有最小的信息单元就是二进制位含有最小的信息包就是字节C标准库提供两种类型的流二进制流(binary stream)和文本流(text stream)。二进制流是有未经处理的字节构成的序列文本流是由文本行(每行有0个或多个字符并以\n结束)组成的序列。注意在UNIX中并不区别两种流。当一个程序启动时,标准输入、输出、出错三个流就已经被自动打开并对应到默认的物理终端。这三个标准I/O流通过预定义(stdio.h)文件指针stdin,stdout,stderr加以引用当一个进程正常终止时(直接调用exit()或从main返回)所有打开的标准I/O流都会被关闭所有带未写缓冲数据的I/O流都会被冲洗。PS在main()中return(expr)等价于exit(expr)而exit则调用fclose()关闭每个文件描述符并刷洗对应缓存。在Linux的应用程序中通常用文件描述符012与标准输入标准输出标准出错输出相关联。为符合POSIX规范在中012分别被替换成常量符号STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。缓冲区(详细内容可以参考APUE3.9和5.4本段纯属摘抄)标准I/O提供缓存的目的是尽可能减少使用read和write调用的数量(系统调用比普通函数调用开销大)。它也对每个I/O流自动地进行缓存管理避免了应用程序需要考虑这一点所带来的麻烦。标准I/O提供了三种类型的缓存:(1) 全缓存。在这种情况下当填满标准I/O缓存后才进行实际I/O操作。对于驻在磁盘上的文件通常是由标准I/O库实施全缓存的。(2) 行缓存。在这种情况下当在输入和输出中遇到新行符时标准I/O库执行I/O操作。这允许我们一次输出一个字符(用标准I/O fputc函数)但只有在写了一行之后才进行实际I/O操作。(3) 不带缓存。标准I/O库不对字符进行缓存。如果用标准I/O函数写若干字符到不带缓存的流中则相当于用write系统调用函数将这些字符写至相关联的打开文件上。标准出错流stderr通常是不带缓存的这就使得出错信息可以尽快显示出来而不管它们是否含有一个新行字符。ANSI C要求下列缓存特征(1) 当且仅当标准输入和标准输出并不涉及交互作用设备时它们才是全缓存的。(2) 标准出错决不会是全缓存的但是这并没有告诉我们如果标准输入和输出涉及交互作用设备时它们是不带缓存的还是行缓存的以及标准输出是不带缓存的还是行缓存的。SVR4和4.3 BSD的系统默认使用下列类型的缓存标准出错是不带缓存的。如若是涉及终端设备的其他流则它们是行缓存的否则是全缓存的。可以通过下面的函数改变缓存类型(APUE5.4):void setbuf(FILE *restrict fp, char *restrict buf);int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);这些函数必须在流打开之后、但是未对流做任何操作之前被调用参数buf通常指向一个长度为BUFSIZ的缓冲区BUFSIZ在stdio.h中定义可自行输出查看stdio.h:#ifndef BUFSIZ# define BUFSIZ _IO_BUFSIZlibio.h:#define _IO_BUFSIZ _G_BUFSIZ_G_config.h:#define _G_BUFSIZ 8192如要关闭缓冲将buf置为NULLLiunx上的默认情况是当标准输入输出连接终端时是行缓冲的缓冲区大小1024字节重定向到普通文件时他们变为全缓冲(APUE 5.12 程序5.3提供查看I/O相关信息的方法)强制冲洗一个流int fflush(FILE *fp)使该流所有未写数据传送至内核。如fp为NULL将使所有输出流被清洗。应当注意的是fflush(NULL)并不能有效地清空输入缓存。后面详细讨论常用I/O函数流打开FILE * fopen ( const char * filename, const char * mode );FILE * freopen ( const char * filename, const char * mode, FILE * stream );常用freopen进行输入输出重定向。单字符读写int getc(FILE *fp)int fgetc(FILE *fp)int getchar(void)getchar等价于getc(stdin)。前两个函数区别在于getc可被实现为宏意味着fgetc调用时间略长。不管是出错还是到达文件尾端三个函数都返回-1.在大多数实现中FILE维护了两个标志出错标志和文件结束标志。可用下面三个函数判断流是出错还是结束最后一个函数是清除两标志int ferror(FILE *fp)int foef(FILE *fp)void clearerr(FILE *fp)还有一个神奇的函数可以把字符压送回流中int ungetc(int c, FILE *fp)注意不能回送EOF类似地输出函数:int putc(int c, FILE *fp)int fputc(int c, FILE *fp)int putchar(int c)putchar(c)等价于putc(c,stdout)putc可被实现为宏。通常为了避免过多的函数调用开销putchar和getchar都被实现为宏。行读写函数char * fgets ( char * str, int num, FILE * stream );它会读取不超过num-1个字符然后在末尾加上结束符 \0 或者遇到换行符结束输入同时换行符也被传入。另一个函数char * gets(char* buf);由于存在缓冲区溢出漏洞不推荐使用。相应地输出int fputs(const char * str, FILE * fp);int puts(const char *char);fputs()将一个以NULL终止的字符串写到指定的流终止符NULL不写出。puts()虽然安全但是他的不方便在于每次将换行符写到输出。因此我们贯彻这样的方针坚持使用fgets和fputs并自己处理换行符。各I/O函数的效率对比可参看APUE5.9格式化I/O格式化输出int printf ( const char * format, ... );int fprintf (FILE *fp, const char * format, ... );int snprintf (char *buf, size_t n, const char * format, ... );注意参数转换说明中 %[flags][fldwidth][lenmodifier]convtype宽度和精度字段可被置为*而后用一个整形参数指定其值。printf的实现printf是C中为数不多的变参函数之一主要通过stdarg.h中的一系列宏来对参数列表进行处理。其源码实现可以参看点击打开链接和点击打开链接使用变参函数机制简单模拟printf#include#include#include#includevoid simon_printf(char *fmt, ...){char buf[10];char *p fmt;char c_tmp, *s_tmp;int i_tmp;double f_tmp;va_list ap;va_start(ap, fmt);while (*p){if (*p ! %){putchar(*p);continue;}else {switch (*p){case d:{i_tmp va_arg(ap, int);//sprintf(buf, %d, i_tmp);//write(STDOUT_FILENO, buf, strlen(buf));printf(%d, i_tmp);break;}case f://float在内部被提升为double{f_tmp va_arg(ap, double);printf(%f, f_tmp);break;}case c://char在内部被提升为int{i_tmp va_arg(ap, int);printf(%c, i_tmp);break;}case s:{for(s_tmp va_arg(ap, char*); *s_tmp; s_tmp)printf(%c, *s_tmp);break;}}p;}}va_end(ap);}int main(){int a 1;float b 2.0;char c a;char *str {test};simon_printf(This is a test Message:\n int:%d\n float:%f\n string: %s\n char:%c\n , a, b, str, c);return 0;}格式化输入int scanf(const char *format, ...);int fscanf(FILE *fp, const char *format, ...);int sscanf(const char *buf, const char *format, ...);scanf中*表示抑制不把该输入赋值给对应变量即跳过。scanf()还有一些正则用法[]表示输入字符集可以使用连字符表示范围scanf() 连续吃进集合中的字符并放入对应的字符数组直到发现不在集合中的字符为止。用字符 ^ 可以说明补集。把 ^ 字符放为扫描集的第一字符时构成其它字符组成的命令的补集合。通常并不推荐使用scanf()的正则用法用法复杂, 容易出错。编译器作语法分析时会很困难, 从而影响目标代码的质量和执行效率。关于输入缓冲区清空1)fflush(NULL)fflush的定义说得很清楚了这种用法导致的结果不确定If the given stream was open for writing (or if it was open for updating and the last i/o operation was an output operation) any unwritten data in its output buffer is written to the file.If stream is a null pointer, all such streams are flushed.In all other cases, the behavior. depends on the specific library implementation. In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior).The stream remains open after this call.When a file is closed, either because of a call to fclose or because the program terminates, all the buffers associated with it are automatically flushed.如果stream指向输出流或者更新流(update stream)并且这个更新流最近执行的操作不是输入那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout)。fflush(NULL)清空所有输出流和上面提到的更新流。否则fflush函数的行为是不确定的。取决于编译器某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲而gcc就不支持。2)setbuf(stdin, NULL);setbuf(stdin, NULL);是使stdin输入流由默认缓冲区转为无缓冲区在没有特殊要求的情况下还是适用的3)int c;while((c getchar()) ! \n c ! EOF);由代码知不停地使用getchar()获取缓冲区中字符直到获取的字符c是换行符’\n’或者是文件结尾符EOF为止。这个方法可以完美清除输入缓冲区并且具备可移植性。4)scanf(%[^\n]%*c);这里用到了scanf格式化符中的“*”即赋值屏蔽“%[^集合]”匹配不在集合中的任意字符序列。这也带来个问题缓冲区中的换行符’\n’会留下来需要额外操作来单独丢弃换行符。声明该文章系网友上传分享此内容仅代表网友个人经验或观点不代表本网站立场和观点若未进行原创声明则表明该文章系转载自互联网若该文章内容涉嫌侵权请及时向上学吧网站投诉
http://www.zqtcl.cn/news/131481/

相关文章:

  • 深圳住房和城乡建设局网站阿里云学生免费服务器
  • 如何做的网站手机可以用吗绵阳优化网站排名
  • 营销网站建设大全wordpress wp_register
  • 公司做年审在哪个网站网络seo专员招聘
  • 宿州网站建设费用网站快速建设入门教程
  • 怎么自己做网站加盟网站建设意义模板
  • 网站开发怎样实现上传视频教程内容导购网站模板
  • 济南做网站建设的公司广告公司资质
  • 域名分类网站微擎 wordpress
  • 公司产品营销策划安徽seo
  • 网站 平均加载时间百度搜索竞价推广
  • 赛车网站开发淄博网站建设及托管
  • 过时的网站湖州公司网站建设
  • 环球设计网站网站建设的面试要求
  • 百度公司网站排名怎么做潮阳网站开发
  • 杨和网站建设国内外建筑设计网站
  • 北京知名网站建设公司wordpress4.0.x 下载
  • 锡盟网站建设做网站视频存储
  • 深圳博纳网站建设高端品牌护肤品排行榜
  • 百度爱采购优化排名软件宁波seo搜索平台推广专业
  • 门户网站的建设公司台山网站定制
  • 建设公司网站需要什么群辉nas怎么做网站
  • 广西自治区集约化网站建设要求坂田网站的建设
  • 网站后台不能编辑企业如何申请网站
  • 网站建设网站设计多少钱网站系统开发方式
  • 站长收录wordpress配置好后别人无法访问
  • 我国档案网站建设吉林网站建设制作
  • 手机网站底部导航网站视频链接怎么做
  • 企业门户网站属于什么层seo关键词排行优化教程
  • wordpress 演示站广东省南粤交通投资建设有限公司网站