C尺度库参考指南(12)stdio.h(A)
当前位置:以往代写 > C/C++ 教程 >C尺度库参考指南(12)stdio.h(A)
2019-06-13

C尺度库参考指南(12)stdio.h(A)

C尺度库参考指南(12)stdio.h(A)

副标题#e#

12. stdio.h

尺度输入输出面文件提供用于输入和输出的函数。

宏:

NULL

_IOFBF

_IOLBF

_IONBF

BUFSIZ

EOF

FOPEN_MAX

FILENAME_MAX

L_tmpnam

SEEK_CUR

SEEK_END

SEEK_SET

TMP_MAX

stderr

stdin

stdout

函数:

clearerr();

fclose();

feof();

ferror();

fflush();

fgetpos();

fopen();

fread();

freopen();

fseek();

fsetpos();

ftell();

fwrite();

remove();

rename();

rewind();

setbuf();

setvbuf();

tmpfile();

tmpnam();

fprintf();

fscanf();

printf();

scanf();

sprintf();

sscanf();

vfprintf();

vprintf();

vsprintf();

fgetc();

fgets();

fputc();

fputs();

getc();

getchar();

gets();

putc();

putchar();

puts();

ungetc();

perror();


#p#副标题#e#

变量:

typedef size_t

typedef FILE

typedef fpos_t

12.1. 变量和界说

size_t同无标记整型,暗示sizeof的功效。

FILE用于存储文件流信息的范例。

fpos_t用于存储文件中的位置信息的范例。

NULL空指针常量值。

_IOFBF,_IOLBF, 和_IONBF 在setvbuf函数中利用。

BUFSIZ暗示在setbuf函数中利用的buffer的巨细的整型变量。

EOF是负整型变量,暗示文件的末端位置。

FOPEN_MAX同时最多可以打开的文件数。

FILENAME_MAX一个字符数组暗示的文件名的最大长度。假如实现时但愿只管对文件名长度没有限制,则这个值发起配置为最大值。

L_tmpnam由tmpnam函数建设的姑且文件的文件名最大长度。

SEEK_CUR,SEEK_END, 和SEEK_SET 用于函数 fseek。

TMP_MAX函数 tmpnam 可以或许发生的独一文件名的最大数。

stderr,stdin,和 stdout指向响应尺度错误、尺度输入和尺度输出的 FILE范例的指针。

12.2. 流和文件

流促进了实现一个介于措施与IO设备之间的抽象层的方法。流答允在多样的IO设备之间读写数据的操纵。有两种范例的流,别离是文本流和二进制流。

文本流是由行(line)构成的。每行有0或0个以上字符,而且由一个换行符标示一行的竣事。数据的转换产生在文本的输出输出中。文本流由可打印字符、制表符、换行符构成。空格不能在换行符之前呈现,尽量这与详细的实现中读取文本时是否移除空格有关。详细的实现至少要支持每行有254个字符(包罗换行符)的景象。

二进制流输入输出是将数据以 1:1 比例传输的。没有任何转换存在,所有的字符城市被传输。

一个措施一旦启动,就有尺度输入、尺度输出和尺度错误三个可用流。

措施中所利用到的文件,必需先打开然后通过流举办操纵。文件IO中所操纵的点,由文件位置(file position)抉择。当回收追加模式打开一个文件时,file position 指向文件尾,而其他方法打开时,则指向文件头。file position 随读写操纵为变革,始终标示着下一次操纵的位置。

封锁文件后,就不能对它举办任何操纵了。从 main 函数退出时,所有被打开的文件城市被自动封锁。

12.3. 文件函数

12.3.1. clearerr

声明:

void clearerr(FILE *stream);

排除流stream的文件尾指示器和错误指示器。在错误指示器被暗示为有错误发生时,假如不挪用clearerr 可能rewind函数,则任何流操纵城市返回错误。

12.3.2. fclose

声明:

int fclose(FILE *stream);

封锁流。所有的buffer城市被flush。假如封锁乐成,则返回0,不然返回EOF。

12.3.3. feof

声明:

int feof(FILE *stream);

查抄流stream是否达到文件尾。假如流达到文件尾,则返回非零值;假如流没有达到文件尾,则返回零。(即返回非零暗示到文件尾)

12.3.4. ferror

声明:

int ferror(FILE *stream);

查抄错误指示器。假如有错误发生,则返回非零;假如错误指示器没有被配置,则表白没有错误,返回零。(即返回非零暗示有错误)

#p#副标题#e#

12.3.5. fflush

声明:

int fflush(FILE *stream);

Flush流 stream 的输出 buffer。假如流是空指针,则所有输出buffer 会被 flush。假如乐成,返回零。错误则返回EOF。

12.3.6. fgetpos

声明:

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

获取到文件流的当前位置,将它写到pos 中。假如乐成,则返回0,假如错误则返回非零值,而且将错误码存储到变量errno中。

12.3.7. fopen

声明:

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

开启一个由 filename 变量指定文件名的文件。打开的模式参数mode取值及寄义如下:

r 读取文本文件
w 写入文本文件 (重置文件,可能建设文件)
a 追加文本文件 (打开文件,可能建设文件,且为追加模式)
rb 读取二进制文件
wb 写入二进制文件 (重置文件,可能建设文件)
ab 追加二进制文件 (打开文件,可能建设文件,且为追加模式)
r+ 读取和写入文本文件
w+ 读取和写入文本文件 (重置文件,可能建设文件)
a+ 读取和写入文本文件 (打开文件,可能建设文件,且为追加模式)
r+b可能 rb+ 读取和写入二进制文件
w+b可能 wb+ 读取和写入二进制文件 (重置文件,可能建设文件)
a+b可能 ab+ 读取和写入二进制文件 (打开文件,可能建设文件,且为追加模式)

假如用 r 模式打开了不存在的文件,则 open 失败。

假如用 a 模式打开文件,则无论当前文件位置在那边,所有的写入操纵城市以追加模式举办。

#p#分页标题#e#

假如用+ 更新模式打开文件,因为此模式既可以输入,也可以输出,所以在每次在输入与输出操纵之间切换时,必需利用函数 fseek, fsetpos, rewind,或 fflush。

打开文件乐成,则返回指向文件的指针(按照差异模式,指向差异的位置)。打开失败,则返回空指针。

12.3.8. fread

声明:

size_t fread(void *ptr, size_tsize, size_t nmemb, FILE *stream);

将数据从流 stream 读取到 ptr 所指示的数组。读取nmemb 个 size 巨细的元素。所以,读取的总字节数为 (size*nmemb)。乐成则返回读取的元素个数,错误或达到文件尾则返回今朝乐成读取的元素数(大概为0)。

12.3.9. freopen

声明:

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

用给定的 stream来打开一个新的文件(由 filename 指定文件名)。此前打开的文件会被封锁。假如封锁旧文件而呈现错误,错误会被忽略。模式参数 mode 与函数 fopen 中描写的一样。凡是用来从头毗连 stdin, stdout,可能 stderr。乐成则返回指向文件流的指针,错误则返回空指针。

12.3.10. fseek

声明:

int fseek(FILE *stream, long intoffset, int whence);

配置文件流的file position 为给定的偏移量参数 offset。参数 offset 的偏移起始点,是参数 whence 指定的位置。参数whence 的可选值有:

SEEK_SET 从文件头开始搜索。
SEEK_CUR 从文件当前位置开始搜索。
SEEK_END 从文件尾开始搜索。

在一个文本流中,参数 whence应该是 SEEK_SET,而且参数 offset 应该是0可能由ftell返回的一个值。

文件尾指示器被重置。错误指示器不被重置。

乐成则返回0,错误则返回非零值。

#p#副标题#e#

12.3.11. fsetpos

声明:

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

配置流stream 的 file position为给定的 pos 。参数pos 是由函数 fgetpos给定的。文件尾指示器会被 clear 。乐成则返回0。失败则返回一个非零值,而且errno会被配置。

12.3.12. ftell

声明:

long int ftell(FILE *stream);

返回文件流中当前的 file position。假如是一个二进制流,则值为从文件开始处到当前位置的字节数。假如是一个文本流,则值为 fseek函数利用的用来返回当前的文件位置的值。

乐成则返回当前的 file position。错误则返回-1L,而且 errno被配置。

12.3.13. fwrite

声明:

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

将数据从ptr 指示的数组,写入到流 stream 中。写入 nmemb 个size 巨细的元素。所以,总的写入字节数为 (size*nmemb)。乐成则返回写入的元素个数。错误则返回乐成写入的元素个数(大概为0)。

12.3.14. remove

声明:

int remove(const char *filename);

#p#分页标题#e#

删除文件(硬盘删除),之后该文件无法在被会见(清除到文件的毗连)。假如当前文件是打开状态,则功效由实现抉择。乐成则返回0。错误则返回非零值。

12.3.15. rename

声明:

int rename(const char *old_filename, const char *new_filename);

将名为old_filename 文件,改名为 new_filename文件。假如由 new_filename 指定的文件名存在,则功效是由实现所确定的。乐成则返回0。错误则返回一个非零值,而且仍可以通过旧文件名(old_filename)来会见。

12.3.16. rewind

声明:

void rewind(FILE *stream);

配置 file position为给定文件流的开始处。错误指示器和文件尾指示器会被重置。

12.3.17. setbuf

声明:

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

界说流如何被缓冲(buffer)。这个函数要在打开流之后、任何操纵还没有举办之前被挪用。输入和输出是全缓冲的(fully buffered)。默认值BUFSIZ是缓冲区的巨细。参数 buffer 指向用作缓冲区的数组变量。假如 buffer 是一个空指针,则流被当做无缓冲的。

12.3.18. setvbuf

声明:

int setvbuf(FILE *stream, char *buffer, int mode, size_tsize);

这个函数与 12.3.17 中的 setvbuf 函数成果沟通,只是参数差异。参数mode 界说了流采纳的缓冲方法,可以配置为如下值:

_IOFBF 输入和输出全缓冲(fully buffered)。假如缓冲区为空,一个输入操纵可以填充 buffer。On output the buffer will be completely filled至于输出的环境,缓冲区在任何信息被写入文件之前(可能流封锁)会被完全填满.
_IOLBF 输入和输出行缓冲(line buffered)。假如缓冲区为空,一个输入操纵可以填充 buffer。当向缓冲区写入一个换行符时,缓冲区会被 flush。
_IONBF 输入和输出不缓冲(not buffered)。输入和输出都不缓冲。

参数buffer 指向当做缓冲区的数组。假如 buffer 为空指针,则setvbuf挪用 malloc建设一个它本身的 buffer。

参数size 是 buffer 所指定的数组的巨细。

乐成则返回0。错误则返回非零值。

12.3.19. tmpfile

声明:

FILE *tmpfile(void);

以二进制更新模式(wb+)建设姑且文件。当措施竣事可能流被封锁时,tempfile会被移除。

乐成则返回指向文件流的FILE指针,错误则返回空。

12.3.20. tmpnam

声明:

char *tmpnam(char *str);

发生并返回一个当前不存在的可用文件名。最多发生TMP_MAX个差异的文件名。

假如参数str 是空指针,则函数返回一个指向可用文件名的指针。假如参数 str 是一个指向字符数组的有效指针,则发生的文件名会被写入到这个数组,而且返回指向这个数组的指针。文件名长度的字节数最多为L_tmpnam。

该系列译文在一连更新中

    关键字:

在线提交作业