学习笔记第二十天

news/2024/9/23 14:35:18/

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

http://www.ppmy.cn/news/1505508.html

相关文章

Linux安装 Redis

Linux 安装 Redis 1、下载、解压 下载方式为两种:官网、网盘 官网: 我这里下载了:7.0.5 网盘: 链接:https://pan.baidu.com/s/1A_-ZL3x3Xa5YNlcDqyuV_A?pwdg8jh 提取码:g8jh 解压: 将…

常见API(二)

API 应用程序编程接口,提高编程效率。本次学习了Object类,Objects工具类,包装类,StringBuilder,StringBuffer,和StringJoiner。 目录 1.Object 常见方法: 2.Objects 常见方法: 3…

高清无水印视频素材哪里找?分享几个热门的高清无水印素材网站

一个好的短视频离不开精彩的素材,但高清视频素材哪里找?今天小编就跟大家分享五个可以下载高清无水印短视频素材的网站,如果你还不知道从哪里可以下载高清视频素材,赶紧进来看看吧!~ 1、稻虎网 首推的是稻…

基于SSH的医院在线挂号系统设计与实现

点击下载源码 基于SSH的医院在线挂号系统设计与实现 摘 要 互联网技术迅速的发展给我们的生活带来很大的方便,同时也让许多行业迅速的发展起来。互联网技术已走向科技发展的巅峰期,我们要做的就是合理的使用互联网技术让我们的各个行业得到更快速的发展…

如何开始学习Swift编程?

学习Swift编程是一个既富有挑战性又极具成就感的过程。Swift作为苹果公司推出的现代编程语言,以其简洁、快速和安全的特点,迅速成为iOS、macOS、watchOS和tvOS等苹果平台应用开发的首选语言。以下是一份详细的学习Swift编程的指南,旨在帮助你…

装饰器的使用

Python 中的装饰器是一种高阶函数,用于在不修改原始函数代码的情况下,向函数或方法添加额外的功能。装饰器通常用于记录日志、访问控制、性能计数、缓存等场景。 口诀:有嵌套、有引用、有返回 装饰器修饰不带参数的函数装饰器修饰带参数的函数…

使用 Prometheus 和 Grafana 为 DigitalOcean 托管数据库设置监控功能

监控 DigitalOcean 托管数据库对于确保数据库的性能、稳定性和安全性至关重要。通过实施 Prometheus 和 Grafana 等监控解决方案,你可以深入了解数据库集群的健康状况和性能指标,从而实现主动管理和故障排除。 你可以通过指标端点(metrics en…

用uniapp 及socket.io做一个简单聊天app 撤回聊天及保留聊天记录 6

撤回的设计 通过聊天,发送一个信息,界面自动将信息撤回, 当时要有时间的限制。同时也要将撤回记录到数据库中。async sendMessage(message, type text) {this.$refs.popup.close();const messageData {sn: uuidv4(),group_name: this.gro…