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

C Primer Plus Notes 11

1、

exit( )函数关闭所有打开的文件并结束程序。
exit( )函数原型位于 < stdlib.h > 头文件中。

2、

根据ANSI C的规定,在最初调用的main( )中使用return与调用exit( )的效果相同。
即 return 0; 的作用和  exit(0); 相同。

如果main( )在一个递归程序中,exit( )仍然会终止程序,但是 return 只会把控制权交给上一级递归,直至最初的一级。然后 return 结束程序。另一个区别,即使在其他函数中(除main( )以外)调用exit( )也能结束整个程序。

3、

程序成功打开文件后,fopen( )将返回文件指针(file pointer),其他I/O函数可以使用这个指针指定该文件。文件指针的类型是指向 FILE 的指针,FILE 是一个定义在 stdio.h 中的派生类型。文件指针并不指向实际的文件,它指向一个包含文件信息的数据对象。

4、

FILE *fp;

fp = fopen("file.txt", "r");

ch = getc(fp); // 从 fp 指定的文件中获取一个字符

putc(ch, fp); // 把字符 ch 放入 FILE 指针fp 指定的文件中

注:当 stdout 作为 putc( ) 的第 2 个参数时,putc(ch, stdout); 与 putchar(ch) 的作用相同。

5、

fclose(fp) 函数关闭 fp 指定的文件,必要时刷新缓冲区。如果成功关闭文件函数返回0,否则返回EOF。

6、

rewind( )函数接受一个文件指针作为参数,让程序回到文件开始处。

7、

fgets(buf, STLEN, fp);  // buf 是 char 类型数组的名称。STLEN 是字符串的大小。fp 是指向 FILE 的指针。

注:fgets( )函数读取输入直到第1个换行符的后面,或读到文件结尾,或者读取 STLEN - 1 个字符。然后,fgets( )在末尾添加一个空字符使之成为一个字符串。如果在读到字符上限之前已读完一整行,它会把表示行结尾的换行符放在空字符前面。在遇到 EOF 时将返回 NULL 值。如果未遇到 EOF 则返回之前传给它的第一个参数地址。

8、

fputs(buf, fp);  // 根据传入地址找到的字符串写入指定的文件中。

注:fgets( ) 保留了换行符,fputs( ) 就不会再添加换行符。

9、

fseek( )的第1个参数是 FILE 指针,指向待查找的文件,第2个参数是偏移量(offset)。表示从起点开始要移动的距离(该参数必须是一个long类型的值,可以为正(前移)、负(后移)或0(保持不动))。第3个参数是模式。(偏移量的起始点 SEEK_SET:文件开始处;SEEK_CUR:当前位置;SEEK_END:文件末尾)。

如果一切正常,fseek( )的返回值为0;如果出现错误,其返回值为-1。

10、

ftell( )函数的返回类型是 long,它返回的是参数指向文件的当前位置距文件开始处的字节数。

注: ASNSI C 规定,该定义适用于以二进制模式打开的文件,以文件模式打开文件的情况不同。

11、

使用标准I/O的第1步是调用 fopen( )打开文件。fopen( )函数不仅打开一个文件,还创建了一个缓冲区(在读写模式下会创建两个缓冲区)以及一个包含文件和缓冲区数据的结构。另外,fopen( )返回一个指向该结构的指针,以便其他函数知道如何找到该结构。这个结构通常包含一个指定流(打开模式:文本流或二进制流)中当前位置的文件位置指示器。除此之外,它还包含错误和文件结尾的指示器、一个指向缓冲区开始处的指针、一个文件标识符和一个计数(统计实际拷贝进缓冲区的字节数)。一般调用文件输入函数,文件中的缓冲大小数据块就被拷贝到缓冲区中(缓冲区的大小因现实而异)。最初调用函数,除了填充缓冲区外,还要设置 fp 所指向的结构中的值。尤其要设置流中的当前位置(从0字节开始)和拷贝进缓冲区的字节数。在初始化结构和缓冲区后,输入函数按要求从缓冲区中读取数据。在它读取数据时,文件位置指示器被设置为指向刚读取字符的下一个字符。由于 stdio.h 系列的所有输入函数都使用相同的缓冲区,所以调用任何一个函数都将从上一次函数停止调用的位置开始。当输入函数发现已读完缓冲区中的所有字符时,会请求把下一个缓冲大小的数据块从文件拷贝到该缓冲区中。以这种方式,输入函数可以读取文件中的所有内容,直到文件结尾。函数在读取缓冲区中的最后一个字符后,把结尾指示器设置为真。于是,下一次被调用的输入函数将返回EOF。

输出函数以类似的方式把数据写入缓冲区。当缓冲区被填满时,数据将被拷贝至文件中。

12、

int ungetc(int c, FILE *fp);  // 把c指定的字符放回输入流中。

eg:

初始状态  // whale

ch = getchar(); // 读取了whale中的第一个字符,流中剩下的字符 hale 

ungetc(ch, stdin); // 返回一个字符到流中,则流中的字符为 whale

13、

int fflush(FILE *fp);  // 刷新缓冲区:输出缓冲区中所有的未写入数据被发送到fp指定的输出文件。


14、

size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);

fwrite( )函数把二进制数据写入文件。size_t 是根据标准C类型定义的类型,它是 sizeof 运算符返回的类型,通常是 unsigned int ,但是实现可以选择使用其他类型。指针 ptr 是待写入数据块的地址。size 表示待写入数据块的大小(以字节为单位),nmemb 表示待写入数据块的数量。fp 指定待写入的文件。

eg:

char buffer[256];

fwrite(buffer, 256, 1, fp); // 保存一个大小为256字节的数据对象(如数组)。

double earnings[10];

fwrite(earnings, sizeof(double), 10, fp);

以上调用把 earnings 数组中的数据写入文件,数据被分成10块,每块都是 double 的大小。

fwrite( )函数返回成功写入项的数量。正常情况下,该返回值就是 nmemb,但如果出现写入错误,返回值会比 nmemb 小。

15、

size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);

在 fread( ) 函数中,ptr 是待读取文件数据在内存中的地址,fp 指定待读取的文件。该函数用于读取被 fwrite( )写入文件的数据。

eg:

double earnings[10];

fread(earnings, sizeof(double), 10, fp);

该调用把10个 double 大小的值拷贝进 earnings 数组中。fread( ) 函数返回成功读取项的数量。正常情况下,该返回值就是nmemb, 但如果出现读取错误或读到文件结尾,该返回值就会比nmemb小。

16、

int setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size);

setvbuf( ) 函数创建了一个供标准I/O函数替换使用的缓冲区。在打开文件后且未对流进行其他操作之前,调用该函数。指针 fp 识别待处理的流,buf 指向待使用的存储区。如果 buf 的值不是 NULL,则必须创建一个缓冲区。

例如,声明一个内含1024个字符的数组,并传递该数组的地址。然而,如果把 NULL 作为 buf 的值,该函数会为自己分配一个缓冲区。变量 size 告诉 setvbuf( ) 数组的大小。

mode 的选择如下:

_IOFBF表示完全缓冲(在缓冲区满时刷新);

_IOLBF表示行缓冲(在缓冲区满时或写入一个换行符时);

_IONBF表示无缓冲。

如果操作成功,函数返回0,否则返回一个非零值。

http://www.dtcms.com/a/601484.html

相关文章:

  • LangChain v1.0学习笔记(1)
  • [Linux]学习笔记系列 -- [kernel]ksysfs
  • 庆阳市建设局网站怎么设置iis默认网站
  • 前端安全展示后端纯文本接口数据的实践:不解析、不危险渲染的结构化方案
  • 【2024年莆田市校园创客节(小学组)初赛】泡泡堂
  • 河南省网站建设电脑网页
  • Doc-Researcher: 多模态文档深度研究系统的技术解析
  • E3Docker,一键解锁E3连接酶配体发现新纪元!
  • 【AI智能体】Coze 基于关键词生成古诗词 + 配图智能体操作详解
  • 百日挑战——单词篇(第二十天)
  • Vue 3组合式API中ref与reactive的核心响应式差异及使用最佳实践是什么?
  • 创意网站推荐智能手机网站模板
  • JAVA学习笔记——集合的概念和习题
  • 商城网站开发方案书导购类网站备案
  • leetcode 290. 单词规律 python
  • D037 vue+django三国演义知识图谱可视化系统
  • 连接一个新的服务器时,打开PyCharm时报错:报错内容是服务器磁盘或配额满了
  • 传媒有限公司免费网站武安市精品网站开发
  • 如何从多源业务表对商家进行综合评估?
  • DELMIA Role: RFE - Operations Experience Manager
  • 灭屏使用对讲,概率性出现无声
  • 问答系统网站模板天津建设工程交易信息网
  • GitHub 热榜项目 - 日榜(2025-11-12)
  • 继续访问这个网站字体安装wordpress
  • Java 进阶:反射机制深度解析
  • 如何开发高性能直播美颜sdk?人脸检测、美型算法与渲染优化详解
  • StreamAPI,取出list中的name属性,返回一个新list
  • SSM基于web的佳茗天香茶品销售平台的设计与实现z2m56(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 请别人做网站需要注意什么问题公司做网站怎么做账
  • 茂名网站制作策划如何查看用wordpress建的站点