《C程序设计语言》笔记 (十五) 参考手册7

标准库

ANSI定义的标准函数库

标准库不是C语言本身的构成部分

但是支持标准C的实现会提供该函数库中的函数声明、类型以及宏定义

标准库中的函数 类型以及宏分别在下面的标准头文件中定义:

<assert.h>

<ctype.h>

<errno.h>

<float.h>

<limits.h>

<locale.h>

<math.h>

<setjmp.h>

<signal.h>

<stdarg.h>

<stddef.h>

<stdio.h>

<stdlib.h>

<string.h>

<time.h>

可以通过下列方式访问头文件

#include <头文件>

头文件的包含顺序是任意的,并可以包含任意多次

头文件必须包含在任何外部声明或定义之外

必须在使用头文件中的任意声明之前包含头文件

头文件不一定是源文件

以下划线开头的外部标识符保留给标准库使用

  

输入输出<stdio.h>

 

头文件<stdio.h>中定义的输入输出函数、类型以及宏的数目几乎占整个标准库的三分之一

流是与磁盘或其他外围设备关联的数据的源或目的地

尽管在某些系统中(如UNIX),文本流和二进制流是相同的,但标准库任然提供了这两种类型的流

文本流是由文本行组成的序列,每一行包含0个或多个字符并以'\n'结尾

二进制流是由未经处理的字节构成的序列,这些字节记录着内部数据

如果在同一系统中写入二进制流,然后再读取二进制流,则读出和写入的内容完全相同

打开一个流,将把该流和一个文件或设备连接起来,关闭流将断开连接

打开一个文件将返回一个指向FILE类型的对象的指针,该指针记录了控制该流的所有必要信息

程序开始执行时,stdin stdout 和stderr这3个流已经处于打开状态

 

文件操作

 

FILE *fopen(const char *filename,const char *mode);

fopen函数打开filename指定的文件,并返回一个与之关联的流

如果打开失败,则返回NULL

访问模式:

"r"  读

"w" 写,并删除已存在的内容

"a"  追加

"r+"  打开文本文件用于更新

"w+"  创建文本用于更新

"a+"  打开或创建文件用于更新,写文件时追加到文件末尾

 

 

FILE *freopen(const char *filename,const char *mode,FILE *stream);

以mode指定的模式打开filename指定的文件,并将该文件关联到stream指定的流


成功返回stream,出错返回NULL 

freopen 函数一般用于改变与stdin stdout stderr相关联的文件


int fflush(FILE *stream);

对输出流来说,fflush函数将已写到缓冲区但尚未写入文件的所有数据写入文件

对输入流来说,其结果是未定义的

如果在写的过程中方式错误,则返回EOF 否则返回0

fflush(NULL)  将清洗所有的输出流


int flose(FILE *stream);
将所有未写入的数据写入stream中,丢弃缓冲区的所有未读输入数据,释放自动分配的全部缓冲区,最后关闭流

若出错返回EOF,否则返回0

  

int remove(const char *filename);

删除指定的文件,如果删除失败,返回一个非0值.


int rename(const char *oldname,const char *newname);
修改文件名,失败返回非0;

FILE *tmpfile(void);

tmpfile函数以模式"wb+"创建一个临时文件,该文件在被关闭或程序正常结束时自动删除


char *tmenam(char s[L_tmpname]);

tmpnam(NULL) 函数创建一个与现有文件名不同的字符串,并返回一个指向一内部静态数组的指针


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

setvbuf函数控制流stream的缓冲.

在执行读写以及其他任何操作之前必须调用此函数


void setbuf(FILE *stream,char *buf);

如果buf值为NULL,则关闭stream的缓冲

  

格式化输出

 

printf函数提供格式化输出转换

int fprintf(FILE *stream,const char *format,...);

fprintf函数按照format说明的格式对输出进行转换,并写到stream中。

返回实际写入的字符数,错误返回负值


int sprintf(char *s,const char *format,...);

sprintf函数和printf函数基本相同,但其输出将被写入到字符串 s中,并以'\0'结束


vprintf

vfprintf

vsprintf

函数分别对应printf的函数等价

 

  

 

格式化输入

 

scanf函数处理格式化输入转换

int fscanf(FILE *stream,const char *format,...);

fscanf函数根据格式字符串format从流stream中读取输入,并把转换后的值赋值给后续参数,其中每个参数必须是一个指针

int sscanf(const char *s,const char *format,...);

sscanf函数scanf等价,所不同的是,前者的输入字符来源于字符串s

  

字符输入/输出函数

 

int fgetc(FILE *stream);

函数返回stream流的下一个字符,返回类型unsigned char

如果达到文件末尾或发生错误,返回EOF


char *fgets(char *s,int n,FILE *stream);

fgets 函数最多将n-1个字符读入到数组s中

当遇到换行符时,把换行符读入到数组s中,读取过程终止

数组以'\0'结尾

到达文件尾或发生错误,返回EOF


int fputc(int c,FILE *stream);

fputc函数把字符c输出到stream中

返回写入的字符,出错返回EOF

int fputs(const char *s,FILE *stream);

fputs函数把字符串s输出到stream中,出错返回EOF


int getc(FILE *stream);
getc函数等价于fgetc,所不同的是,当getc函数定义为宏时,它可能多次计算stream的值


int getchar(void);
等价于getc(stdin);

char *gets(char *s);
把下一个输入行读入的数组中

int putc(int c ,FILE *stream);


int putchar(int c);

等价于 putc(c,stdout);


int puts(const char *s);

int ungetc(int c,FILE *stream);

 

  

 

直接输入/输出函数

 

size_t fread(void *ptr,size_t size,size_t nobj,FILE *stream);


size_t fwrite(const void *ptr,size_t size,size_t nobj,FILE *stream);

 

  

 

文件定位函数

 

int fseek(FILE *stream,long offset,int origin);

long ftell(FILE *stream);


void rewind(FILE *stream);

int fgetpos(FILE *stream,fpos_t *ptr);

int fsetpos(FILE *stream,const fpos_t *ptr);

 

  

 

错误处理函数

 

当发生错误或到达文件末尾时,标准库中的许多函数都会设置状态指示符

这些状态指示符可被显式的设置和测试

另外,整型表达式errno可以包含一个错误编号,据此可以进一步了解最近一次出错信息

void clearerr(FILE *stream);

clearerr函数清除与流stream相关的文件结束符合错误指示符

int feof(FILE *stream);

如果设置了与stream流相关的文件结束符,feof函数将返回非0值

int ferror(FILE *stream);

void perror(const char *s);



fprintf(stderr,"%s,:%s\n",s"error message");

 

  

 

posted @ 2017-11-17 13:57  大福笔记  阅读(244)  评论(0编辑  收藏  举报