rangersly d05beb0f1f MERGE: fix
ADD:
    linux/command.md -> iperf3
FIX:
    program/c_cpp/universal/libs.md -> errno
DEL:
    program/c_cpp/libs/log/
    program/c_cpp/libs/dbtools.h
2025-06-02 09:06:01 +08:00

6.4 KiB
Raw Permalink Blame History

c with cpp IO

INDEX


iostream

  • stdin
  • stdout
  • stderr

c

#include <stdio.h>


format-io

  • scanf 格式化输入函数
  • printf 格式化输出函数
  • fscanf 格式化输入函数(第一个参数是FILE *stream)
  • fprintf 格式化输出函数(第一个参数是FILE *stream)

控制符

  • %d %nd %ld %x %o 整数
  • %f %n.mf %lf 浮点数
  • %c
  • %s
  • %p ptr

char-io

  • IN

    function prototype remark
    int getchar(void) 宏,标准IO
    int getc(FILE *stream) 宏,所有流
    int fgetc(FILE *stream) 真正的函数
    int ungetc(int c,FILE *stream) 将一个字符返回流中
  • OUT

    function prototype remark
    int putchar(int c) 宏,标准IO
    int putc(int c,FILE *stream) 宏,所有流
    int fputc(int c,FILE *stream) 真正的函数

cstring

function prototype remark
char *fgets(char *s,int size,FILE *stream) 到达行尾(包含换行符),EOF,size-1返回
int fputs(const char *restrict s, FILE *restrict stream) 不在后添加换行符

cbin

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

  • size 读写的块大小
  • nmemb 读写的块数量 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

c-file

  • FILE *fp 文件指针
  • FILE *fopen(const char *pathname, const char *mode); 错误返回NULL
  • int fclose(FILE *stream); 关闭文件 返回0为正常关闭
  • FILE *tmpfile(void) 创建一个临时文件,返回一个'wb+'模式的文件指针
  • char *tmpnam(char *name) 创建一个临时文件名,最长L_tmpnam
  • int remove(const char *pathname) 删除一个文件
  • int rename(const char *oldname, const char *newname) 修改文件名字

mode

  • "r" 读
  • "w" 写截0新建
  • "a" 写,尾+,新建
  • "r+" 读写
  • "w+" 读写截0新建
  • "a+" 读写,仅尾+,新建
  • "b" 搭配表二进制仅win

long ftell(FILE *stream); 获取当前文件指针位置 int fseek(FILE *stream, long offset, int whence); 移动文件指针

  • offset 移动字节数
  • whence 参考位置
  • SEEK_SET 文件头
  • SEEK_CUR 当前位置
  • SEEK_END 文件尾

int fflush(FILE *stream); 刷新缓冲区 int setvbuf(FILE *stream, char *buf, int mode, size_t size); 设置缓冲区,return 0

  • buf 设置的缓冲区
  • mode
  • _IOFBF 完全缓冲
  • _IOLBF 行缓冲
  • _IONBF 无缓冲
  • size 指定缓冲区的大小,无缓冲时无效

c-error

  • void perror(const char *message);

    • 打印message并在后面根据errno错误码生成错误信息
    • errno全局变量定义于<errno.h>,仅在发生错误时被设置
  • int ferror(FILE *stream); 流异常时return非0

  • int feof(FILE *stream) 文件尾时返回真

  • void clearerr(FILE *stream) 重置错误位


cpp-stdio

头文件 #include

ios::sync_with_stdio(false);cin.tie(0),cout.tie(0); 关闭缓冲加速

    cin.get(c);        //返回一个流引用
    c = cin.get();    //返回char略快
    cin.get(str, 100, '\n');    //读入字符串
    cin.width(10);    //设置场宽
    std::flush        // 立即刷新缓冲区
    std::endl        // 换行加刷新

cpp-fio

头文件 #include

    //文件流的创建 打开 关闭
    fstream fin;
    fstream fout;

    fin.open("in");
    fout.open("out");

    fin.close();
    fout.close();
/*
    open函数的原型如下
    void open(char const *,int filemode,int =filebuf::openprot);
    它有3个参数第1个是要打开的文件名第2个是文件的打开方式第3个是文件的保护方式一般都使用默认值。
    第2个参数可以取如下所示的值
    打开方式    解释
    ios::in    打开文件进行读操作,这种方式可避免删除现存文件的内容
    ios::out    打开文件进行写操作,这是默认模式
    ios::ate    打开一个已有的输入或输出文件并查找到文件尾开始
    ios::app    在文件尾追加方式写文件
    ios::binary    指定文件以二进制方式打开,默认为文本方式
    ios::trunc    如文件存在,将其长度截断为零并清除原有内容,如果文件存在先删除,再创建
    除ios_base::app方式之外文件刚刚打开时当前读写位置的文件指针都定位于文件的开始位置而ios_base::app使文件当前的写指针定位于文件尾

    函数    功能
    bad()    如果进行非法操作返回true否则返回false
    clear()    设置内部错误状态,如果用缺省参量调用则清除所有错误位
    eof()    如果提取操作已经到达文件尾则返回true否则返回false
    good()    如果没有错误条件和没有设置文件结束标志返回true否则返回false
    fail()    与good相反操作失败返回false否则返回true
    is_open()    判定流对象是否成功地与文件关联若是返回true否则返回false
*/
    
    // 二进制文件读写
    fin.write((char*)&data, sizeof data);
    fin.read((char*)&data, sizeof data);

/*
    随机存取
        seekg(pos,ios::);
        seekg(pos);
        seekp(pos,ios::);
        seekp(pos);
    
        tellg();
        tellp();

    文件位置
        ios::beg
        ios::cur
        ios::end
*/

macro

  • BUFSIZ : 系统级缓冲区大小