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

公司网站开发怎么收费美国最新消息今天 新闻

公司网站开发怎么收费,美国最新消息今天 新闻,网站太原wangz建设,深圳黄页企业名录目录 fseekftellrewindfflushgetline 橙色 当你在文件中写入了10个字符后,又想把这10个字符读出来,该怎么做呢?因为有文件操作符指针的存在,此时该指针已经指在了这10个字符末尾,所以需要把该指针重定向,这…

目录

  • fseek
  • ftell
  • rewind
  • fflush
  • getline

橙色

当你在文件中写入了10个字符后,又想把这10个字符读出来,该怎么做呢?因为有文件操作符指针的存在,此时该指针已经指在了这10个字符末尾,所以需要把该指针重定向,这就用了本文中所介绍的几个函数

fseek

在这里插入图片描述

fseek:设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。

int fseek(FILE *stream, long int offset, int whence)
  • stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
  • offset — 这是相对 whence 的偏移量,以字节为单位。
  • whence — 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
    在这里插入图片描述
  • 如果成功,则该函数返回零,否则返回非零值。

ftell

ftell:返回给定流 stream 的当前文件位置。

long int ftell(FILE *stream)
  • stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
  • 该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。

程序实例——求程序的有效字节

#include <stdio.h>
#include <stdlib.h>int main(int argc, char **argv){FILE *fp;if(argc < 2) {fprintf(stderr, "Usage...\n");exit(1);}fp = fopen(argv[1], "r");if(fp == NULL) {perror("fopen()");exit(1);}// 将指针定位在文件末尾fseek(fp, 0, SEEK_END);printf("%d\n", ftell(fp));exit(0);
}

在这里插入图片描述

rewind

rewind:设置文件位置为给定流 stream 的文件的开头。

void rewind(FILE *stream)

相当于(void) fseek(stream, 0, SEEK_SET);

注意:
fseekftell中偏移offset的修饰类型是long,因此只能对2G左右大小的文件进行操作,否则会超出long的范围;

fseekoftello则将偏移的修饰类型使用typedef定义为offset_t,具体类型交由系统决定,因此不存在文件大小的限制。但是这两个函数不是C标准库函数,而是隶属于POSIX标准(POSIX是标准C库的超集,或者说,C库是普通话,而POSIX是方言)。

fflush

fflush:刷新流 stream 的输出缓冲区。刷新,指的是将缓冲区(内存上的一片区域)的内容写入到磁盘(外存)中,或者输出到终端上显示。

int fflush(FILE *stream)
  • 如果参数为NULL(即没传递参数),则刷新所有的已打开的流
  • 如果成功,该函数返回零值。如果发生错误,则返回 EOF,且设置错误标识符(即 feof)。

代码示例

#include <stdio.h>int main() {printf("Before while(1)");while(1);printf("After while(1)");exit(0);
}

打印结果:

// 什么都不打印

原因:
对于标准输出,输出缓冲区刷新的时机:

  • 输出缓冲区满
  • 或者遇到换行符\n
  • 强制刷新,或者进程结束

因此,可以修改为:

#include <stdio.h>
#include <stdlib.h>
int main() {// 遇到\n刷新printf("Before while(1)\n");while(1);printf("After while(1)\n");exit(0);
}

或者修改为:

#include <stdio.h>
#include <stdlib.h>int main() {printf("Before while(1)");// 强制刷新fflush(stdout);// 或者 fflush(NULL);while(1);printf("After while(1)");exit(0);
}

缓冲区的作用:大多数情况下是好事,合并系统调用,增加程序的吞吐量。

缓冲的分类:

  • 行缓冲line buffered:针对标准输出(终端设备),有换行刷新,缓冲满刷新,强制刷新三种,后两个和全缓冲一致;
  • 全缓冲fully buffered:默认缓冲机制(除标准输出【终端设备】,例如重定向到文件),有缓冲满刷新,强制刷新两种,强制刷新例如调用fflush函数,或者进程结束时也会强制刷新;此时换行符仅仅只是个换行符,没有刷新功能;
  • 无缓冲unbuffered:例如stderr,需要立即输出,数据会立即读入内存或者输出到外存文件和设备上;

setvbuf:定义流 stream 应如何缓冲。理解即可。

int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
  • stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了一个打开的流。
  • buffer — 这是分配给用户的缓冲。如果设置为 NULL,该函数会自动分配一个指定大小的缓冲。
  • mode — 这指定了文件缓冲的模式:
    在这里插入图片描述

getline

之前介绍的函数,都不能获得完整的一整行(有缓冲区大小的限制),而下面介绍的getline函数则可以动态分配内存,当装不下完整一行时,又会申请额外的内存来存储。

getline是C++标准库函数,但不是C标准库函数,而是POSIX所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准出来之前,则只是GNU扩展库里的函数)。在gcc编译器中,对标准库stdio进行了扩展,加入了一个getline函数。

getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束:

  • 到文件结束
  • 遇到函数的定界符
  • 输入达到最大限度

函数原型:

#include <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
  • lineptr:指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放。该参数是一个二级指针,因此传参需要一级指针的地址。即函数会把读取到的字符串的首地址存放在一级指针中。
// 传参:
char *ptr;
// 函数内的实际操作:
// 假设读取到的字符串Hello的首地址为0x000
&ptr = 0x000; // 此时ptr就指向了Hello
  • n:如果是由系统malloc的指针填0;

  • stream:函数需要读取的FILE流

  • 返回值:成功返回读取的字节数,失败或读完返回-1。

代码示例:

int main(int argc, char **argv) {FILE *fp;// 一定要初始化,否则指针会指向内存中的随机位置char *linebuf = NULL;size_t linesize = 0;if(argc < 2) {fprintf(stderr, "Usage...\n");}fp = fopen(argv[1], "r");if(fp == NULL) {perror("fopen()");exit(1);}while(1) {// 当返回-1时则读完if(getline(&linebuf, &linesize, fp) < 0)break;printf("%d\n", strlen(linebuf));}fclose(fp);exit(0);
}
http://www.tj-hxxt.cn/news/68722.html

相关文章:

  • wordpress主题开发网站网站建站设计
  • 天翼云主机 网站服务器温州seo推广外包
  • 怎么夸客户网站做的好百度如何发布作品
  • 山西做网站费用百度搜索风云榜游戏
  • 外贸seo建站宁波网站制作优化服务
  • 物流公司做网站需求网站规划与设计
  • 如何做外卖网站自媒体seo优化
  • cms管理手机网站模板下载网络营销的成功案例有哪些
  • 沈阳公司做网站的新闻头条最新消息10条
  • 网站开发必学书籍宁波网站建设推广公司价格
  • jquery网站发展历史时间轴怎么写软文推广
  • 医院网站建设方案大全最新网站查询
  • dz论坛识别手机网站自动跳转汕头seo代理
  • seo佛山百度seo在哪里
  • 民法典建设工程施工合同情感网站seo
  • 贵阳市 网站建设打开百度网站首页
  • 做团建活动网站泉州百度搜索推广
  • 网站开发语言都有什么百度最新收录方法
  • 论坛网站怎么做跳转seo推广的特点
  • app分销系统开发哈尔滨seo服务
  • 天津 公司网站建设seo研究协会网是干什么的
  • 手机记事本做网站东莞seo网络优化
  • 网站门户建设流程软文广告发稿
  • 正规网站建设网站制作在线外链推广
  • 江门专业网站建设系统2021百度模拟点击工具
  • 代码实现wordpress百度地图网址seo优化排名
  • 如何查询网站注册信息设计一个简单的网页
  • 网站建设售后培训今日热点新闻头条排行榜
  • 中铁二局被降级优化清理大师
  • 网站策划书包括哪几个步骤上海网站快速排名优化