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

做精神科医院网站费用网上企业推广

做精神科医院网站费用,网上企业推广,免费源码交易网站源码,dz门户 WordPress文件IO和标准IO的区别 遵循标准#xff1a; 文件IO遵循POSIX标准#xff0c;主要在类UNIX环境下使用。标准IO遵循ANSI标准#xff0c;具有更好的可移植性#xff0c;可以在不同的操作系统上重新编译后运行。可移植性#xff1a; 文件IO的可移植性相对较差#xff0c;因为…文件IO和标准IO的区别 遵循标准 文件IO遵循POSIX标准主要在类UNIX环境下使用。标准IO遵循ANSI标准具有更好的可移植性可以在不同的操作系统上重新编译后运行。可移植性 文件IO的可移植性相对较差因为它与系统底层紧密相关。标准IO的可移植性较好因为它是C语言标准库的一部分可以在不同的操作系统上移植使用。操作方式 文件IO通过系统调用来直接读写文件每次操作都会触发系统调用。标准IO在内部实现了缓冲机制通过文件流指针来操作文件减少了系统调用的次数提高了性能。缓冲机制 文件IO通常不带缓冲每次读写操作都会直接与系统底层交互。标准IO带缓冲先将数据写入缓冲区再选择合适时机将缓冲区中的数据写入文件或从文件中读取数据到缓冲区。访问的文件类型 文件IO可以访问不同类型的文件包括普通文件、设备文件、管道文件和套接字文件等。标准IO主要用于访问普通文件虽然也可以重定向到其他类型的设备但其本质还是通过文件流指针来操作文件。使用的接口 文件IO使用如open、read、write、close等系统调用接口。标准IO使用如fopen、fread、fwrite、fclose等C标准库函数接口。 Linux标准文件描述符 我们使用printf和write都可以输出正常的字符串 当我们给程序加上一条死循环的程序就会发现用printf()不能继续执行而用write可以继续执行。 这个原因就是因为缓存问题见下文 缓存的概念 1.我们的程序中的缓存就是你想从内核读写的缓存数组----用户空间的缓存 2.每打开一个文件内核在内核空间中也会开辟一块缓存这个叫内核空间的缓存 文件IO中的写即是将用户空间中的缓存写到内核空间的缓存中。 文件IO中的读即是将内核空间的缓存写到用户空间中的缓存中。 3.标准IO的库函数中也有一个缓存这个缓存称为----库缓存 C库缓存的特点 1.遇到\n 时会将库缓存的内容写到内核缓存中即调用了系统调用函数。 2.库缓存写满时会调用系统调用函数将库缓存内容写到内核缓存中。当写满时即1024字节 关于上面的问题使用write函数就是文件IO它可以直接将用户空间我们给文件的数据写道内存空间中当我们使用C库printf时他不会直接调用而是等待写满才会系统调用函数将库缓存写道内核缓存中为了使能够输出我们给文件的数据hello world我们可以在输入后面加一个\n使其成功打印还是和正常输出略有不同 三类读写缓存 fputs函数 属于C语言标准库函数用于将一个字符串写入到指的头文件中写入成功后光标会移到写入的最后一个字符 函数原型 int fputs(const char *str, FILE *stream); str指向要写入文件的字符串的指针。stream指向FILE对象的指针该FILE对象标识了要写入数据的文件流。 fputs函数将str指向的字符串写入到stream指定的文件流中但不包括空字符\0。如果写入成功fputs返回一个非负整数如果发生错误则返回EOF。 fgets函数 用于从指定的文件流中读取一行使用 fgets 可以很方便地从文件或者标准输入如键盘读取字符串直到遇到换行符或文件结束符或者达到指定的字符数。 函数原型 char *fgets(char *str, int n, FILE *stream); str指向一个字符数组的指针用来存储读取到的字符串。n指定最多读取的字符数包括最后的空字符\0因此实际上最多能读取 n-1 个字符。stream指定从哪个文件流中读取数据。 返回值 成功时返回 str。失败或到达文件末尾时返回 NULL。 注意文件的权限应该是w可读可写 fflush函数 用于刷新缓冲区 fflush函数用于将给定的输出流或更新流stream的缓冲区中的数据强制写入到对应的文件或设备中。如果stream指向的是一个输出流或者是一个最近一次操作不是输入的更新流则fflush会将缓冲区中未写入的数据写入到流指向的文件或设备中。如果stream是空指针NULL则fflush会对所有打开的文件流执行刷新操作。 函数原型 int fflush(FILE *stream); 返回值 成功时fflush返回0。如果发生错误则返回EOF并且设置相应的错误标识符。 第一种刷新标准输出缓冲区 fflush(stdout)确保printf函数输出的内容立即被写入到标准输出设备通常是屏幕上。 第二种刷新文件流缓冲区 在这个例子中fflush(file)确保通过fprintf函数写入到file指向的文件中的数据被立即写入到磁盘上。注意虽然在这个例子中fflush的调用是可选的因为关闭文件时会自动刷新缓冲区 stderr无缓冲函数 stderr是C语言标准I/O库中的一个特殊文件流代表标准错误输出。与标准输出stdout不同stderr通常是无缓冲的这意味着写入stderr的数据会立即输出而不会被缓存在内存中。 由于stderr是无缓冲的因此它非常适合用于输出错误信息或日志因为这些信息通常需要立即显示在屏幕上以便用户或开发人员能够及时发现并处理问题。 stderr与stdout的区别 stdout是标准输出流它通常是行缓冲或全缓冲的。这意味着写入stdout的数据可能会被缓存在内存中直到遇到换行符或缓冲区满时才真正输出。而stderr则不同它无缓冲的特性确保了数据的即时输出。 在这个例子中我们尝试打开一个不存在的文件。由于文件不存在fopen函数将返回NULL并且我们通过fprintf函数将一条错误信息写入stderr。由于stderr是无缓冲的这条错误信息将立即显示在屏幕上。 stderr作为标准错误输出流其无缓冲的特性使得它非常适合用于输出错误信息或日志。在使用时我们只需要将错误信息或日志写入stderr它们就会立即显示在屏幕上无需担心缓冲导致的问题。 rewind 也属于C语言标准库函数该函数的主要作用是将文件内部的位置指针也称为文件位置指示器重新指向一个文件流数据流/文件的开头。 所以此函数的作用和fseek中的一个作用相同(SEEK_SET) gets函数 函数原型 char *gets(char *s); gets 与fgets的区别 gets()时不能指定缓存的长度这样就可能造成缓存越界如若该行长于缓存长度写到缓存之后的存储空 间中从而产生不可预料的后果 gets()只能从标准输入中读 gets()与fgets()的另一个区别是:gets()并不将新行符存入缓存中, fgets 将新行符存入缓存中; 用gets容易越界写入缓存时不会把换行符\n算进字符长度 fgets会把换行符算进字符长度不会越界 puts函数 函数原型: int puts(const char *str); puts 与fputs的区别 puts()只能向标准输出中写 puts()与fputs()的另一个区别是: puts 输出时会添加一个新行符fputs不会添加 比gets多一个换行操作\n。 fgetc函数 从文件中读取一个字符 int fgetc(FILE *fp) 参数字符流 返回值正确为读取的字符文件结尾或出错返回-1。 fputc函数 功能写一个字符到文件中 参数第一个参数为要写的字符第二个参数为文件流 返回值成功则返回输入的字符出错返回EOF。-1 fputc有缓存但不是行缓存函数 当读到a时已经是最后一位了所以再次读就会按照函数规则返回-1 行缓存函数 fprintf函数 通过文件流指针来控制输出的目标通常用于将信息写入到指定的文件或标准输出流如stdout或stderr中。 fprintf的原型函数为 int fprintf(FILE *stream, const char *format, ...); FILE *stream指向输出流的文件指针决定了数据将被写入哪个文件或输出流。 const char *format格式化字符串用于指定后续参数如何被格式化和输出。 ...可变参数列表包含了一系列将要被格式化和输出的数据。 fprintf函数的返回值是写入的字符数不包括终止的空字符如果发生错误则返回负值。 第一个fprintf是写入一行文本到example.txt这个文件中 第二个fprintf是写入一行文本到标准输出中通常是屏幕。 sprintf函数 sprintf是C语言中的一个字符串格式化函数其函数声明为 int sprintf(char *str, const char *format, ...); char *str指向一个字符数组的指针该数组用于存储格式化后的字符串。const char *format格式化字符串指定了如何将后续参数格式化为字符串。...可变参数列表包含了一系列将要被格式化和插入到str所指向字符串中的数据。 sprintf函数将格式化的数据写入到str指向的字符串中并返回写入的字符数不包括终止的空字符。需要注意的是使用sprintf时需要确保目标字符串str有足够的空间来存储格式化后的结果否则可能会导致缓冲区溢出。 一般情况下sprintf函数和printf函数一起使用sprintf是用来把数据写入到字符串当中并不起到输出作用 cat指令的实现 用fgetc和fputc 通过一个个字符的读写从而使cat查看指令实现 注feof函数用来判断是否已经到文件结束如果文件结束则返回非0没有则返回0 if(argv!2)表示若不是只有一个命令行则操作失败 三个判断函数 int feof(FILE *stream);   功能判断是否已经到文件结束 参数文件流 返回值到文件结束返回为非0没有则返回0 int ferror(FILE *stream);  功能判断是否读写错误 参数文件流 返 回值是读写错误返回为非0不是则返回0 void clearerr(FILE *stream);  功能清除流错误 参数文件流 清除错误标志通常是通过调用clearerr函数对程序的影响主要体现在以下几个方面 恢复文件流状态当文件流如通过FILE *类型表示的文件指针遇到错误如读写错误或到达文件末尾EOF时相应的错误标志或EOF标志会被设置。这些标志会影响后续的输入输出操作。通过清除这些标志clearerr函数将文件流恢复到一种“干净”的状态使得后续操作可以不受之前错误或EOF状态的影响。 允许继续执行在某些情况下文件流错误可能是暂时的或者可以通过某些方式解决例如通过重新定位文件指针、关闭并重新打开文件或修改文件访问模式。清除错误标志后程序可以继续尝试执行之前失败的操作或者执行其他依赖于文件流状态的操作。 错误处理在清除错误标志之前程序可能会根据错误状态执行特定的错误处理代码如打印错误消息、释放资源、尝试恢复等。清除错误标志后这些错误处理代码可能不再适用因为错误状态已经被重置。因此程序需要适当地调整其错误处理逻辑以考虑错误标志被清除后的情况。 文件结束EOF的重新评估如果文件流遇到了EOF并且随后调用了clearerr来清除EOF标志那么程序可能会错误地认为文件尚未结束并尝试继续读取数据。这可能会导致未定义的行为如读取到无效的数据或进入无限循环。因此在清除EOF标志之前程序应该仔细考虑其后果并确保这是期望的行为。 对后续操作的潜在影响清除错误标志可能会影响到依赖于这些标志来检测文件状态变化的后续操作。例如如果程序依赖于feof函数来检测文件是否结束那么在清除EOF标志后feof将不再返回真值直到文件流再次真正到达文件末尾。
http://www.lakalapos1.cn/news/13517/

相关文章:

  • 上海网站域名备案处杭州vi设计价格
  • jsp小型网站开发代码seo到底是做什么的
  • 网站建设问一问公司苏州网站建设介绍
  • frontpage网站模板下载企业seo如何优化
  • 网站申请注册 免备案个人网站制作
  • 凡科建站怎么做微网站网页设计心得体会结尾
  • 深圳效果好的免费网站建设网址在线生成二维码
  • 建筑工程网上报建网站广州h5网站制作
  • 城市建设鹤岗市网站好姑娘5免费高清观看
  • 景观毕业设计作品网站wordpress 4.1.1漏洞
  • 软件开发 系统开发 网站开发服务做淘客网站 备案
  • 宜春网站开发公司h5制作软件包括
  • 订货网站建设报价小程序制作
  • 电商网站开发的背景及意义win8网站设计
  • 餐饮o2o 网站建设seo网络优化师
  • 什么做电子书下载网站好网站建设制作ppt
  • 网站开发与网页制作难不难可以在手机上编程的软件
  • 个人网站模板素材下载做网站克隆
  • 网站活动模板中文wordpress教程
  • 提供网站建设加工最新建设招聘信息网站
  • 盐城做网站哪家最好做网站 想做成宽屏的
  • 优秀网站h5案例分享专业小程序制作开发平台
  • 青岛网站制作公司排名一个网站有多少g
  • 开发网站公司排行抖音小程序免费制作平台
  • 建设网站需要多少人wordpress 站内搜索 慢
  • 厦门区块链网站开发手机兼职赚钱平台
  • 帝国cms网站名称微信公众平台开发
  • 做外贸建网站需要多少钱网站建设织梦源码
  • 网站建设框架图wordpress标题图片
  • 创建个人网站教案做3d效果在哪个网站