再要:
哈喽!这里又是TheBlob 博客。本篇文章是IO编程基础的第一篇,主要讲述标准带缓冲IO编程。其中包括 IO编程概念、标准IO的缓冲、标准IO的输入输出函数以及函数使用的例子。希望能帮助大家!
目录
格式化IO---输入与输出可以控制格式,printf(),scanf()
利用C库中的函数实现文件操作
文件操作的三部曲;
- 打开文件
- 读写文件
- 关闭文件
定义:
文件:一组相关数据的集合
文件名:这个数据集合的名称
Linux中文件分类:
(-)常规文件 ASCII码文件 二进制文件
(d)目录
(c)字符设备
(b)块设备
(p)有名管道
(s)套接口
(l)符号连接
概念
- 不仅在UNIX系统,在很多操作系统上都实现了标准I/O库
- 标准I/O库由ANSI C标准说明
- 标准I/O库处理很多细节,如缓冲分配、以优化长度执行I/O等,这样使用户不必关心如何选择合适的块长度
- 标准I/O在系统调用函数基础上构造的,它便于用户使用
- 标准I/O库及其头文件stdio.h为底层I/O系统调用提供了一个通用的接口。
文件指针
FILE指针:每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息,这些信息是保存在一个结构体类型的变量中,该结构体类型是由系统定义的,取名为FILE。
struct _IO_FILE;
typedef struct _IO_FILE FILE;
struct _IO_FILE {
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
#define _IO_file_flags _flags
/* The following pointers correspond to the C++ streambuf protocol. */
/* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
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;
_IO_off_t _old_offset; /* This used to be _offset but it's too small. */
#define __HAVE_COLUMN /* temporary */
/* 1+column number of pbase(); 0 is unknown. */
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
/* char* _save_gptr; char* _save_egptr; */
_IO_lock_t *_lock;
}
标准I/O库的所有操作都是围绕流(stream)来进行的,在标准I/O中,流用FILE *来描述。
流(stream):
定义:所有的I/O操作仅是简单的从程序移进或者移出,这种字节流,就称为流。
分类:文本流/二进制流。
打开和关闭文件
打开文件:
#include<stdio.h> 头文件
FILE *fopen(const char *pathname, const char *mode);
//参数1 ---- 要打开的文件
//参数2 ---- 打开的操作权限:
r //只读,文件必须存在
r+ //读写,文件必须存在
w //只写,文件不存在,则创建,文件存在,则把文件清空
w+ //写读,文件不存在,则创建,文件存在,则把文件清空
a //只写, 文件不存在,则创建,文件存在,则在文件末尾追加
a+ //写读, 文件不存在,则创建,文件存在,则在文件末尾追加,如果是读,则从