C读写API
#include <unistd.h>
FILE * : stdin, stdoutfd : STDIN_FILENO STDOUT_FILENO STDERR_FILENO 0 1 2
r 只读,文件必须存在
r+ 读写,文件必须存在
w 只写,存在则清0,不存在,则建立
w+ 读写,存在则清0,不存在,则建立
a 只写,存在则追加,不存在,则建立
a+ 读写,存在则追加,不存在,则建立
b 二进制
SEEK_SET 文件开头
SEEK_CUR 当前位置
SKKE_END 文件结尾
建议用f开头的,可移植性
FILE * fopen(const char * path,const char * mode);
int fclose(FILE * stream);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE * stream);
返回的是nmemb,不是size*nmemb,读取每块大小为size,共nmemeb块
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE * stream);
返回的是nmemb,不是size*nmemb,写每块大小为size,共nmemeb块
int fseek(FILE * stream, long offset, int whence);
void rewind(FILE * stream);
long ftell(FILE * stream);
int fputs(const char * s,FILE * stream);
int fputc(int c, FILE * stream);
char * fgets(char *s,int size,FILE * stream);
int fgetc(FILE * stream);
----------------------------
int fileno(FILE * stream);
----------------------------
int open( const char * pathname, int flags); flag复杂
int close(int fd);
ssize_t read(int fd,void *buf,size_t count);
ssize_t write (int fd,const void *buf,size_t count);
off_t lseek(int fildes,off_t offset,int whence);
int putc(int c,FILE * stream);
int putchar (int c);
int puts(const char *string);
int getc(FILE * stream);
int getchar(void);
char * gets(char *s); 弃用
int dup (int oldfd);
复制参数oldfd,并将它返回,共享除close-on-exec旗标
int dup2(int odlfd,int newfd);
复制参数oldfd到newfd,若原newfd存在则先关闭
可用newfd比较大值,先保存,后还原
C++读写API
std::fstream fs(const char *file, ios_base::openmode mode = ios_base::in | ios_base::out);
mode:
in:没有不会创建,必须存在,即使和out同用,也必须存在文件
out:默认out|trunc,除非手动加app或in,
binary
ate:在末尾
app:不能和truc同用,最好加out,不存在则创建
trunc:必须与out同用
rdstate()
goodbit 无错 good()
eofbit 文件结尾 eof()
failbit 逻辑错误 fail() bad()
badbit 读写错误 bad()
ios_base::beg
ios_base::cur
ios_base::end
对应fopen
fs.open();
fs.close();
fs.good(const char *file, ios_base::openmode mode = ios_base::in | ios_base::out)
才能进行下一步
对应fread
streamsize fs.readsome(char* s, streamsize n); 需要
istream& fs.read(char* s, streamsize n); 需要全部读取n完,否则流标错eofbit and failbit
fs.gcount() 最近读取的数目
istreambuf_iterator<char> rit(file), end;
string buf(rit, end);
对应fwrite
fs.write(const char* s, streamsize n);
对应fseek
fs.seekg(streampos pos)
fs.seekg(streamoff off, ios_base::seekdir way)
对应ftell
fs.tellg()
格式化
std::ios::basefield
std::dec 十进制
std::hex 十六进制
std::oct 八进制
std::ios::adjustfield
std::left 左对齐
std::right 右对齐
std::internal 填充,只对负数
std::ios::floatfield
std::scientific 科学计数
std::float 普通
std::xx用于<<
std::ios::xx用于setf,flag
std::cout<<std::hex<<i;
std::cout.flags(std::ios::hex);
std::cout.setf(std::ios::hex, std::ios::basefield);
std::cout.setf(std::ios::showbase);//显示进制
std::cout.unsetf(std::ios::showbase);
std::cout.width(5);