/** 标准IO库 */
在标准I/O库中,与底层的文件描述符对应的是流(stream),它被实现为指向结构FILE的指针。
标准IO库的库函数
(1)#include<stdio.h>
FILE *fopen(const char *filename, const char *mode);
mode描述了打开的方式(mode必须给定的是一个字符串,所以必须应该使用双引号)
a)"r"或"rb":只读方式打开
b)"w"或"wb":写方式打开,并把文件长度截断为0
c)"a"或"ab":写方式打开,新的内容被附加到文件尾
d)"r+"或"rb+":更新方式打开(读和写)
e)"w+"或"wb+":更新方式打开,并把文件长度截断为0
f)"a+"或"ab+":更新方式打开,并把新的内容附加到文件尾
Unix将所有的文件都看作为二进制文件,不做文本文件和二进制文件的区分,其中b就是指定二进制文件。
返回:成功返回一个非空的文件指针FILE *
失败返回NULL值
(2)fread函数
#include<stdio.h>
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
作用:从文件流stream中读取数据到ptr指定的数据缓冲区中。读取的数据以size为每个数据记录的长度,总共读取nitems个数据记录。
返回:成功则返回读取到数据缓冲区中的数据记录的个数。
(3)fwrite函数
#include<stdio.h>
struct dirent
{
long d_ino; /* inode number 索引节点号 */
off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen; /* length of this d_name 文件名长 */
unsigned char d_type; /* the type of d_name 文件类型 */
char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}
size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
作用:从指定的数据缓冲区中取出数据记录,并写到stream指定的数据流中。size为每个数据记录的长度,共操作nitems个数据记录。
返回:成功则返回写到数据流中的数据记录的个数。
备注:const修饰缓冲区指针,指针可以变,但是指针指向的缓冲区不能变。
(4)fclose函数
#include<stdio.h>
int fclose(FILE *stream);
作用:关闭指定的文件流,因为stdio库会对数据进行缓冲,所以使用fclose非常重要,它使所有尚未写出的数据都写出。
备注:也是因为stdio对于输入输出缓冲等原因,所以需要对设备进行明确的控制的时候,最好还是直接使用系统调用
(5)fflush函数
#include<stdio.h>
int fflush(FILE *stream);
作用:将文件流中尚未写出的数据都写出。
备注:fclose隐含执行了一次fflush。
#include<stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar();
(6)fseek函数
#include<stdio.h>
int fseek(FILE *stream, long int offser, int whence);
作用:指定文件流里为下一次读写操作指定的位置。
返回:成功返回0,失败返回-1并设置errno。
(7)fgetc、getc、getchar函数
#include<stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();
作用:a)fgetc
从文件流中取出下一个字节,并作为一个字符返回
b)getc
作用同fgetc,但是可以被实现为宏,
c)getchar
相当于getc(stdin),即从标准输入里读取下一个字符,并作为一个字符返回
返回:读取错误返回根据ferror判断,读取文件尾返回根据feof判断
(7)fputc、putc、putchar函数
#include<stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar();
作用:a)fputc
将字符写入文件流,并返回写入的字符
b)putc
作用同fputc,但是可以被实现为宏,
c)putchar
相当于putc(stdout),即向标准输出写一个字符,并返回写入的字符
备注:文件尾(EOF)标识为-1
(8)fgets、gets函数
#include<stdio.h>
char *fgets(char *s, int n, FILE *stream);
char *gets(char *s);
作用:fgets从文件流stream中读取n个字符,并将其写入s指向的字符串。每次最多传输n-1个字符,结尾加上空字节\0结束字符串
遇到换行符,或者读到文件尾自动结束,换行符也会被读到字符串中。
gets函数从标准输入中读取字符组成字符串,遇到换行符结束,并丢弃换行符,在字符串结尾加上\0结束字符串。
返回:成功返回一个指向字符串的指针s,错误返回空指针并设置erron。
在标准I/O库中,与底层的文件描述符对应的是流(stream),它被实现为指向结构FILE的指针。
标准IO库的库函数
(1)#include<stdio.h>
FILE *fopen(const char *filename, const char *mode);
mode描述了打开的方式(mode必须给定的是一个字符串,所以必须应该使用双引号)
a)"r"或"rb":只读方式打开
b)"w"或"wb":写方式打开,并把文件长度截断为0
c)"a"或"ab":写方式打开,新的内容被附加到文件尾
d)"r+"或"rb+":更新方式打开(读和写)
e)"w+"或"wb+":更新方式打开,并把文件长度截断为0
f)"a+"或"ab+":更新方式打开,并把新的内容附加到文件尾
Unix将所有的文件都看作为二进制文件,不做文本文件和二进制文件的区分,其中b就是指定二进制文件。
返回:成功返回一个非空的文件指针FILE *
失败返回NULL值
(2)fread函数
#include<stdio.h>
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
作用:从文件流stream中读取数据到ptr指定的数据缓冲区中。读取的数据以size为每个数据记录的长度,总共读取nitems个数据记录。
返回:成功则返回读取到数据缓冲区中的数据记录的个数。
(3)fwrite函数
#include<stdio.h>
struct dirent
{
long d_ino; /* inode number 索引节点号 */
off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen; /* length of this d_name 文件名长 */
unsigned char d_type; /* the type of d_name 文件类型 */
char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}
size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
作用:从指定的数据缓冲区中取出数据记录,并写到stream指定的数据流中。size为每个数据记录的长度,共操作nitems个数据记录。
返回:成功则返回写到数据流中的数据记录的个数。
备注:const修饰缓冲区指针,指针可以变,但是指针指向的缓冲区不能变。
(4)fclose函数
#include<stdio.h>
int fclose(FILE *stream);
作用:关闭指定的文件流,因为stdio库会对数据进行缓冲,所以使用fclose非常重要,它使所有尚未写出的数据都写出。
备注:也是因为stdio对于输入输出缓冲等原因,所以需要对设备进行明确的控制的时候,最好还是直接使用系统调用
(5)fflush函数
#include<stdio.h>
int fflush(FILE *stream);
作用:将文件流中尚未写出的数据都写出。
备注:fclose隐含执行了一次fflush。
#include<stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar();
(6)fseek函数
#include<stdio.h>
int fseek(FILE *stream, long int offser, int whence);
作用:指定文件流里为下一次读写操作指定的位置。
返回:成功返回0,失败返回-1并设置errno。
(7)fgetc、getc、getchar函数
#include<stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();
作用:a)fgetc
从文件流中取出下一个字节,并作为一个字符返回
b)getc
作用同fgetc,但是可以被实现为宏,
c)getchar
相当于getc(stdin),即从标准输入里读取下一个字符,并作为一个字符返回
返回:读取错误返回根据ferror判断,读取文件尾返回根据feof判断
(7)fputc、putc、putchar函数
#include<stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar();
作用:a)fputc
将字符写入文件流,并返回写入的字符
b)putc
作用同fputc,但是可以被实现为宏,
c)putchar
相当于putc(stdout),即向标准输出写一个字符,并返回写入的字符
备注:文件尾(EOF)标识为-1
(8)fgets、gets函数
#include<stdio.h>
char *fgets(char *s, int n, FILE *stream);
char *gets(char *s);
作用:fgets从文件流stream中读取n个字符,并将其写入s指向的字符串。每次最多传输n-1个字符,结尾加上空字节\0结束字符串
遇到换行符,或者读到文件尾自动结束,换行符也会被读到字符串中。
gets函数从标准输入中读取字符组成字符串,遇到换行符结束,并丢弃换行符,在字符串结尾加上\0结束字符串。
返回:成功返回一个指向字符串的指针s,错误返回空指针并设置erron。