C输入输出函数标准文件函数
当用标准文件函数对文件进行读写操作时, 首先将所读写的内容放进缓冲区,
即写函数只对输出缓冲区进行操作, 读函数只对输入缓冲区进行操作。例如向一
个文件写入内容, 所写的内容将首先放在输出缓冲区中, 直到输出缓冲区存满或
使用fclose()函数关闭文件时, 缓冲区的内容才会写入文件中。若无fclose()
函数, 则不会向文件中存入所写的内容或写入的文件内容不全。
printf() 和scanf()
这两个函数可以在标准输入输出设备上以各种不同的格式读写数据
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
puts()函数gets()函数
1.puts()函数
puts()函数用来向标准输出设备(屏幕)写字符串并换行。
2.gets()函数
scanf()函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束。但gets() 函数将接收输入的整个字符串直到回车为止。
fopen()函数 fclose()函数
fopen函数用于打开文件, 其调用格式为: FILE *fopen(char *filename, *type);
type选项
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 含义
────────────────────────────
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
fprintf()、fputs()和fputc()
文件的顺序写操作函数,其调用格式如下:
int fprintf(FILE *stream, char *format, );
int fputs(char *string, FILE *steam);
int fputc(int ch, FILE *steam);
fprintf() 函数的返回值为实际写入文件中的字符个数(字节数)。如果写错误, 则返回一个负数,是一个格式化函数和printf()函数格式化相同。
fputs()函数返回0时表明将string指针所指的字符串写入文件中的操作成功, 返回非0时,表明写操作失败。
fputc()函数返回一个向文件所写字符的值, 此时写操作成功,否则返回EOF(文件结束结束其值为-1, 在stdio.h中定义)表示写操作错误。
fscanf()、fgets()和fgetc()函数
文件的顺序读操作函数, 其调用格式
int fscanf(FILE *stream, char *format, );
char fgets(char *string, int n, FILE*steam);
int fgetc(FILE *steam);
fscanf()函数的用法与scanf()函数相似,只是它是从文件中读到信息。返回值为EOF(即-1), 表明读错误, 否则读数据成功。fscanf()函数的用法与scanf()函数相似,只是它是从文件中读到信息。fscanf()函数读到空白符时, 便自动结束。
fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中, 在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针, 失败返回一个空指针。
fgetc()函数返回文件当前位置的一个字符,读错误时返回EOF。
fseek() fread() fwrite() ftell()
int fseek (FILE *stream, long offset,int fromwhere);
int fread(void *buf, int size, int count, FILE *stream);
int fwrite(void *buf, int size, int count, FILE *stream);
long ftell(FILE *stream);
fseek()函数的作用是将文件的位置指针设置到从fromwhere开始的第offset 字节的位置上, 其中fromwhere是下列几个宏定义之一
━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义
───────────────────────────
SEEK_SET 0 从文件开头
SEEK_CUR 1 从文件指针的现行位置
SEEK_END 2 从文件末尾
━━━━━━━━━━━━━━━━━━━━━━━━━━━
offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字节数。它是一个长整型量, 以支持大于64K字节的文件。fseek()函数一般用于对二进制文件进行操作。当fseek()函数返回0时表明操作成功, 返回非0表示失败
fread()函数是从文件中读count个字段, 每个字段长度为size个字节, 并把
它们存放到buf指针所指的缓冲器中。
fwrite()函数是把buf指针所指的缓冲器中, 长度为size个字节的count个字
段写到stream指向的文件中去。
ftell()函数返回文件位置指示器的当前值,这个值是指示器从文件头开始算起的字节数, 返回的数为长整型数, 当返回-1时, 表明出现错误。
fflush()函数
调用格式为:
int fflush(FILE *stream);
该函数将输出缓冲区的内容实际写入文件中, 而将输入缓冲区的内容清除掉。
feof()函数
feof()函数检测文件位置指示器是否到达了文件结尾,若是则返回一个非0
值, 否则返回0。这个函数对二进制文件操作特别有用, 因为二进制文件中,文件结尾标志EOF也是一个合法的二进制数,只简单的检查读入字符的值来判断文件是否结束是不行的。如果那样的话, 可能会造成文件未结尾而被认为结尾, 所
以就必须有feof()函数。
rewind()函数用于把文件位置指示器移到文件的起点处,成功时返回0,否
则, 返回非0值。
C输入输出函数非标准文件函数
open()函数
int open(const char *pathname, int flags);按照flags的要求打开已存在的文件,如果文件不存在则报错。
int open(const char *pathname, int flags,mode_t mode);如果文件已经存在就直接按照flags的要求打开文件。如果文件事先不存在,则按照第三个参数的权限要求创建一个新的文件,然后再按照flags要求打开文件。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
基本模式 含义 修饰符 含 义
────────────────────────────────────────────────────────
O_RDONLY 只读 O_APPEND 文件指针指向末尾
O_WRONLY 只写 O_CREAT 文件不存在时创建文件, 属性按基本模式属性
O_RDWR 读写 O_TRUNC 若文件存在, 将其长度缩为0, 属性不变
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
open()函数打开成功, 返回值就是文件描述字的值(非负值), 否则返回-1。
write()函数和read()函数
ssize_t read(int fd, void *buf, size_t count);
第一个参数int fd:文件描述符
第二个参数void *buf:用户缓存或直接用户数据
第三个参数size_t count:指定读一次块的大小(以字节为单位计算)
ssize_t write(int fd, const void *buf,size_t count);
第一个参数int fd:文件描述符
第二个参数void *buf:用户缓存或直接用户数据
第三个参数size_t count:指定写入一次块的大小(以字节为单位计算)
close()函数
int close(int handle);
该函数关闭文件描述字handle相连的文件。
lseek()函数
off_t lseek(int fd, off_t offset, intwhence);
定位对文件的操作位置,就像在纸上写字时调动笔尖到某处一样。
off_t offset
精确定位,负数代表从现在的位置向前移动offset字节,正数代表从当前位置向后移动offset字节,当对文件的操作位置定位在了文件的起始位置时,那么再向前移动的话没有意义,函数会报错返回。
int whence
粗定位,选项有SEEK_SET:调到文件起始位置,SEEK_CUR:调到文件当前位置,SEEK_END:调到文件末尾的位置。