标准IO
标准文件IO函数
-
(标准C库提供)函数的使用
注意:标准C库提供的函数都是调用了内核的函数实现的如(open、write、read、close),经过这些函数封装出来的。
fopen()
函数的作用:用于打开文件(filename),对文件各种操作。
//函数原型
FILE *fopen(const char * restrict filename,const char * restrict mode);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
filename |
文件的路径和文件的名字 |
mode |
文件的权限(字符串“r”) |
mode的选项太多,下面列出选项的作用
| 选项 | 描述 |
|---|---|
r |
以只读文本的方式打开文件,光标在头部 |
w |
以只写文本的方式打开文件,光标在头部。如果文件内有其他的数据,会清除,重新在头部输出。 |
a |
以可读可写文本的方式打开文件,如果有数据,光标会在后面追加,如没有这个文件会创建 |
r+ |
以可读可写文本的方式打开文件 |
w+ |
以可读可写文本的方式打开文件,文件不存在会创建,文件存在并且内部有数据会清空。 |
a+ |
以可读可写文本的方式打开文件,文件不存在会创建,文件存在并且内部有数据会在尾部追加。 |
b |
以上的所有选项都可以加上这个选项如ab+,使用这个选项以二进制的方式打开文件。不加这个选项是以文本的方式打开这个文件,系统会自动对文件进行解释和说明。 |
- 函数的返回值
(FILE *)
这个类型是一个结构体
struct _IO_FILE
{
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
/* The following pointers correspond to the C++ streambuf protocol. */
char *_IO_read_ptr; /* Current read pointer */
char *_IO_read_end; /* End of get area. */
char *_IO_read_base; /* Start of putback+get area. */
char *_IO_write_base; /* Start of put area. */
char *_IO_write_ptr; /* Current put pointer. */
char *_IO_write_end; /* End of put area. */
char *_IO_buf_base; /* Start of reserve area. */
char *_IO_buf_end; /* End of reserve area. */
/* The following fields are used to support backing up and undo. */
char *_IO_save_base; /* Pointer to start of non-current get area. */
char *_IO_backup_base; /* Pointer to first valid character of backup area */
char *_IO_save_end; /* Pointer to end of non-current get area. */
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _flags2;
__off_t _old_offset; /* This used to be _offset but it's too small. */
/* 1+column number of pbase(); 0 is unknown. */
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
_IO_lock_t *_lock;
#ifdef _IO_USE_OLD_IO_FILE
};
这个结构体是一个链表类型,每一个结点都存储着被打开文件的数据。接收这个返回值可以对指导这个文件的信息(系统是从堆内存分配的空间)。
每当文件运行时,系统会首先打开stdio stdout stderr这三个文件。
fclose
函数的作用:用于打开文件(filename),对文件各种操作。
//函数原型
int fclose(FILE *stream);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
stream |
打开文件的信息 |
- 函数的返回值
int
成功关闭返回0,关闭失败返回EOF
//EOF是一个宏定义 值是-1
# define EOF (-1)
fgetc()
函数的作用:从文件中(stream)中获取一个字符,注意读取的是时候光标会跟着推进。
//函数原型
int fgetc(FILE *stream);
//这个函数和fgetc几乎相同
int getc(FILE *stream);
//这个函数和上面两个几乎相同,只不过默认从标准输入(stdin)中获取字符
int getchar(void);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
stream |
打开文件的信息 |
- 函数的返回值
int
返回读取字符的``ASIIC,如果光标到了末尾或者读取出错返回EOF`
//EOF是一个宏定义 值是-1
# define EOF (-1)
fgets()
函数的作用:从文件中(stream)中获取n个字符,放在s中,注意读取的是时候光标会跟着推进。
//函数原型
char *fgets(char * restrict s, int n,FILE * restrict stream);
//这个函数用法差不多相同,只不过默认从标准输入(stdin)中获取字符串,直到结束或者遇到\n
char *gets(char *s);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
s |
把文件读取到这个缓冲区 |
n |
读取n个字符 |
stream |
打开文件的信息 |
- 函数的返回值
char *
读取成功返回s的地址 ,读取出错返回NULL
fread()
函数的作用:从文件中(stream)中获取nmemb块字符串,每一块字符串的大小是size,放在ptr中,注意读取的是时候光标会跟着推进。
//函数原型
size_t fread(void * restrict ptr,size_t size, size_t nmemb,FILE * restrict stream);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
ptr |
把文件读取到这个缓冲区 |
size |
每一块字符串的大小 |
nmemb |
读取nmemb块字符串 |
stream |
打开文件的信息 |
- 函数的返回值
size_t
读取成功返回读取块的个数nmenb,size 和 nmenb为0时,返回值为0,返回小于nmenb时可能是读取出错,或者到了文件末尾。
fputc()
函数的作用:写入文件中(stream)一个字符,注意读取的是时候光标会跟着推进。
//函数原型
int fputc(int c, FILE *stream);
//这个函数和fputc几乎相同
int putc(int c, FILE *stream);
//这个函数和上面两个几乎相同,只不过默认从标准输出(stdout)中输出字符c
int putchar(int c);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
stream |
打开文件的信息 |
- 函数的返回值
int
返回读取字符的``ASIIC,如果读取出错返回EOF`
//EOF是一个宏定义 值是-1
# define EOF (-1)
fputs()
函数的作用:写入文件中(stream)一个字符串s,注意读取的是时候光标会跟着推进。
//函数原型
int fputs(const char * restrict s,FILE * restrict stream);
//这个函数用法差不多相同,只不过默认从标准输出(stdout)中输出字符串,自动会帮你加上\n
int puts(const char *s);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
s |
把s中的字符串写入到文件中 |
stream |
打开文件的信息 |
- 函数的返回值
int
写入成功返回非负值,写入错误返回EOF
fread()。
函数的作用:写入文件中(stream)nmemb块字符串,每一块字符串的大小是size,字符串都在ptr,写入的时候光标会跟着推进。
//函数原型
size_t fread(void * restrict ptr,size_t size, size_t nmemb,FILE * restrict stream);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
ptr |
把这个缓冲区的字符串写入到文件中 |
size |
每一块字符串的大小 |
nmemb |
读取nmemb块字符串 |
stream |
打开文件的信息 |
- 函数的返回值
size_t
写入成功返回写入块的个数nmenb,size 和 nmenb为0时,返回值为0,返回小于nmenb时可能是写入出错,或者到了文件末尾。
fseek()
函数的作用:可以确定文件中光标的位置。
//函数原型
int fseek(FILE *stream, long int offset, int whence);
//需要的头文件
#include <stdio.h>
- 函数参数
| 参数 | 描述 |
|---|---|
offset |
光标的偏移量(负数向左偏移)(正数向右偏移) |
whence |
光标的位置(SEEK_SET起始位置)(SEEK_END文件的末尾)(SEEK_CUR) |
stream |
打开文件的信息 |
- 函数的返回值
int
返回非0数

浙公网安备 33010602011771号