学习笔记第二十天

1.缓冲区

1. 1行缓冲(Line Buffered)

应用场景:主要用于与终端(terminal)的交互,如stdout(标准输出)通常就是行缓冲的。

缓冲区大小:通常不是固定的,但可以通过系统或库函数设置。

刷新条件:

遇到换行符(\n)时刷新。

缓冲区满时刷新(尽管对于行缓冲来说,这个条件通常不会触发,因为换行符会提前触发刷新)。

程序正常或异常结束时刷新。

显式调用fflush(stdout);刷新。

1.2.全缓冲(Fully Buffered)

应用场景:主要用于文件的读写,如通过fopen打开的文件流。

缓冲区大小:通常是4096字节(4K),但也可以通过系统或库函数设置。

刷新条件:

缓冲区满时刷新。

程序正常或异常结束时刷新。

显式调用fflush(fp);(其中fp是指向文件流的指针)刷新。

1.3 无缓冲(Unbuffered)

应用场景:主要用于需要立即输出的情况,如stderr(标准错误输出)通常是无缓冲的,以便及时显示错误信息。

缓冲区大小:0字节,即不进行缓冲,直接输出。

刷新条件:由于不进行缓冲,因此每次输出操作都会直接刷新到目标设备

2. fseek

  • 作用:在文件流中移动文件指针到指定的位置。
  • 原型:int fseek(FILE *stream, long offset, int origin);
  • 参数:
    • stream:指向FILE对象的指针,表示文件流。
    • offset:要移动的字节数,可以是正数或负数。
    • origin:起始位置的基准点(SEEK_SETSEEK_CURSEEK_END)。
  • 返回值:成功时返回0,失败时返回非0值。

3. ftell

  • 作用:获取当前文件指针相对于文件开始位置的偏移量。
  • 原型:long ftell(FILE *stream);
  • 参数:stream,指向FILE对象的指针。
  • 返回值:文件指针的当前偏移量,失败时返回-1L。

4. rewind

  • 作用:将文件指针重新定位到文件的开头,并清除错误和文件结束标志。
  • 原型:void rewind(FILE *stream);
  • 参数:stream,指向FILE对象的指针。
  • 返回值:无返回值。

5. open

  • 作用:打开或创建文件,返回文件描述符。
  • 原型:int open(const char *pathname, int flags, mode_t mode);
  • 参数:
    • pathname:文件路径。
    • flags:文件打开模式(如O_RDONLYO_WRONLYO_RDWR等)。
    • mode:创建新文件时的权限(使用O_CREAT时)。
  • 返回值:成功时返回文件描述符,失败时返回-1。

6. read

  • 作用:从文件描述符指向的文件中读取数据。
  • 原型:ssize_t read(int fd, void *buf, size_t count);
  • 参数:
    • fd:文件描述符。
    • buf:存储读取数据的缓冲区。
    • count:要读取的最大字节数。
  • 返回值:成功时返回读取的字节数,到达文件末尾时返回0,失败时返回-1。

7. write

  • 作用:向文件描述符指向的文件中写入数据。
  • 原型:ssize_t write(int fd, const void *buf, size_t count);
  • 参数:
    • fd:文件描述符。
    • buf:包含要写入数据的缓冲区。
    • count:要写入的字节数。
  • 返回值:成功时返回写入的字节数,失败时返回-1。

8. lseek

  • 作用:移动文件描述符指向的文件中的读写位置。
  • 原型:off_t lseek(int fd, off_t offset, int whence);
  • 参数:
    • fd:文件描述符。
    • offset:偏移量。
    • whence:起始位置的基准点(SEEK_SETSEEK_CURSEEK_END)。
  • 返回值:成功时返回新的文件偏移量,失败时返回(off_t)-1
相关推荐
张哈大19 分钟前
【 Redis | 实战篇 秒杀优化 】
java·数据库·redis·笔记·缓存
笑鸿的学习笔记2 小时前
虚幻引擎5-Unreal Engine笔记之`GameMode`、`关卡(Level)` 和 `关卡蓝图(Level Blueprint)`的关系
笔记·ue5·虚幻
m0_738206543 小时前
嵌入式学习的第二十二天-数据结构-栈+队列
数据结构·学习
向上的车轮8 小时前
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
笔记·学习·matlab
躺着听Jay9 小时前
Oracle-相关笔记
数据库·笔记·oracle
田梓燊9 小时前
数学复习笔记 19
笔记·线性代数·机器学习
前端小崔9 小时前
从零开始学习three.js(18):一文详解three.js中的着色器Shader
前端·javascript·学习·3d·webgl·数据可视化·着色器
逼子格9 小时前
硬件工程师笔记——二极管Multisim电路仿真实验汇总
笔记·嵌入式硬件·硬件工程师·multisim·硬件工程师学习·电子器件·电路图
龙湾开发10 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
c++·笔记·学习·图形渲染·贴图
liang_202610 小时前
【HT周赛】T3.二维平面 题解(分块:矩形chkmax,求矩形和)
数据结构·笔记·学习·算法·平面·总结