学习笔记第二十天

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_SET、SEEK_CUR、SEEK_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_RDONLY、O_WRONLY、O_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_SET、SEEK_CUR、SEEK_END)。
  • 返回值:成功时返回新的文件偏移量,失败时返回(off_t)-1。
相关推荐
小lu飞33 分钟前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
无心水4 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd4 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
Zhao-Jichao7 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李8 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga9 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd9 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白10 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李11 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao13 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记