常用的读写API

C读写API

#include <unistd.h>

FILE * : stdin, stdout
fd : 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);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值