Linux 应用开发_04 文件流与目录流管理
本课目标
(1)编程目标:
(a)实现磁盘文件的拷贝操作。
(b)缓冲区类型对磁盘真正写入操作的影响。
(2)理解文件流操作以及缓冲区概念。
(3)掌握ansi c 文件流相关操作函数。
(4)理解与掌握目录流操作。
主要知识点
(1)流的基本原理及作用,与文件描述符的关系。标准输入输出流基本概念,文件流结构体。
(2)缓冲区类型以及缓冲区作用。如何修改缓冲区。setbuf,setvbuf
(3)文件流操作。
(4)流的效率与可移植性。
(5)目录流操作与编程。
课程内容
文件流概念
FILE *fp = fopen();
typedef struct _IO_FILE FILE;
struct _IO_FILE {
int _flags; /* High-order word is _IO_MAGIC; rest isflags. */
#define _IO_file_flags _flags
/* The following pointers correspond to the C++ streambufprotocol. */
/* Note: Tk uses the _IO_read_ptr and _IO_read_end fieldsdirectly. */
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 upand undo. */
char *_IO_save_base; /* Pointer to start of non-currentget area. */
char *_IO_backup_base; /* Pointer to first validcharacter of backup area */
char *_IO_save_end; /* Pointer to end of non-current getarea. */
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno; //关联的文件描述符
#if 0
int _blksize;
#else
int _flags2;
#endif
_IO_off_t _old_offset; /* This used to be _offset butit'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];