linux系统API,c,c++的标准I/O和文件I/O
- 标准I/O:数据从内存与标准i/o设备(stdio,stdout,stderr)之间的数据流动
- 文件I/O:文件的读写
linux系统API
- open(),read(),write(),close(),lseek()
C
- 头文件<stdio.h>:标准输入输出,从stdio,stdout,stderr的读和写
- scanf和printf:格式化输入输出
- getchar()和putchar():读写一个字符
- gets()和puts():读写一个字符串
- 文件io:
-
打开文件
FILE *fopen( const char * filename, const char * mode );
mode:r/w/a/r+/w+/a+ 或者rb/wb/ab/r+b/w+b/a+b (二进制) -
读写文件
-
fputc和fgetc
int fputc( int c, FILE *fp );
int fgetc( FILE * fp );
-
fputs和fgets 字符串读写函数
int fputs( const char *s, FILE *fp );
char *fgets( char *buf, int n, FILE *fp );
读n个字符进缓冲区,或者读一行,或者读到文章末尾(读到换行符或EOF停止) -
fread fwrite 数据块读写函数(二进制IO)
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
-
fread与系统调用read的区别:fread是c库函数,封装了read,加了缓冲区,效率高。
-
-
关闭文件
int fclose( FILE *fp );
-
读写指针的移动 fseek()
int fseek(FILE *stream, long int offset, int whence)
whence:
SEEK_SET 文件的开头
SEEK_CUR 文件指针的当前位置
SEEK_END 文件的末尾
-
C++
- 两个头文件<iostream>和<fstream>,一个负责标准io一个负责文件io
- <iostream>:该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。其实就是对应着stdin,stdout,stderr。然后用<<,>>流插入运算符来对标准io进行输入输出
- <fstream>:它定义了三个新的数据类型:ofstream,ifstream,fstream
- ofstream:输出文件流,用于创建文件并向文件写入信息。
- ifstream:输入文件流,用于从文件读取信息。
- fstream:文件流,输入和输出
文件流对象定义fstream f;
->打开文件f.open()
->读/写->文件关闭f.close()
- 一个是
cout << buf;
一个是f << buf;
一个是标准io流与内存之间的数据流动,一个是文件流与内存之间的数据流动。不过文件IO需要先声明文件流对象f,f.open()之后才能用. - c++中的文件指针位置
- istream 的 seekg("seek get")
- ostream 的 seekp("seek put")
fileObject.seekg( n );
// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );
// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );
// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );