当前位置: 首页 > news >正文

学习记录第二十天

缓冲区

缓冲区的使用旨在减少实际的I/O操作次数,从而提高程序的运行效率。通过在内存中暂存数据,可以在合适的时机一次性将大量数据传输到外部设备,或者从外部设备读取数据,而不是每次只处理一个或几个数据单元。这对于提高硬盘访问效率尤为重要,因为硬盘的读写速度远低于内存速度.

行缓冲适用于标准输入(stdin)和标准输出(stdout),特别是当这些流与交互式设备(如终端)相关联时。行缓冲的特点是,当输入或输出操作遇到换行符('\n')时,会触发实际的I/O操作,即将缓冲区中的内容写入或从文件或设备中读取数据。此外,行缓冲区的大小通常是固定的,一旦缓冲区被填满,即使没有遇到换行符,也会进行刷新操作.
                1.遇到\n刷新
                2.缓存区满刷新
                3.程序结束刷新
                4.fflush刷新  fflush(stdout);

全缓冲是指当输入或输出缓冲区被填满时,才会进行实际的I/O操作。这种缓冲方式通常适用于文件操作,因为文件的读写速度相比内存较慢,通过缓冲可以有效提高效率。在全缓冲模式下,除了缓冲区满以外,程序结束或显式调用刷新函数(如fflush)也会导致缓冲区内容被实际写入或从外部设备读取.
                1.缓存区满刷新
                2.程序结束刷新
                3.fflush来刷新  fflush(fp);

fseek函数

fseek是C语言标准库中的一个函数,用于在文件流中移动文件指针到指定的位置。该函数的原型定义在<stdio.h>头文件中,如下所示:

int fseek(FILE *stream, long offset, int origin);

  1.stream:指向FILE对象的指针,该对象标识了文件流。
  2.offset:要移动的字节数,可以是正数或负数,表示向前或向后移动。
  3.origin:指定起始位置的基准点,可以是以下常量之一:
  4.SEEK_SET:文件开始处。
  5.SEEK_CUR:当前文件指针位置。
  6.SEEK_END:文件末尾处。

ftell函数

ftell函数在C语言中用于获取当前文件指针相对于文件开始位置的偏移量。这个函数通常在使用fseek函数改变文件指针位置后使用,以确定文件指针的当前位置。ftell函数返回的是一个long int类型的值,表示文件偏移量。

rewind函数

在C语言中,rewind函数用于将文件指针重新定位到文件的开头。这个函数不仅改变了文件指针的位置,而且还会清除与文件流相关的错误指示器和文件结束指示器,使得文件流恢复到初始状态。rewind函数的原型定义在<stdio.h>头文件中,其函数签名如下:

void rewind(FILE *stream);

这里的stream参数是一个指向FILE对象的指针,该对象代表了要操作的文件流。使用rewind函数后,可以继续对文件进行从头开始的读写操作,而无需担心文件指针的位置问题。
rewind函数的功能在某些情况下比fseek函数更为方便,尤其是当需要将文件指针重置到文件开头时,因为rewind会自动处理相关的状态标志,而fseek则需要手动设置这些标志.

open函数

在C语言中,open函数用于打开或创建文件。这个函数是POSIX标准的一部分,因此在类Unix系统(包括Linux)和其他兼容系统中广泛使用。open函数的基本原型如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags, mode_t mode);

  1.pathname: 要打开或创建的文件的路径名。
  2.flags: 指定文件打开模式的整数标志,可以是只读(O_RDONLY)、只写(O_WRONLY)或读写(O_RDWR)等多种模式的组合。
  3.mode: 只有在使用O_CREAT标志创建新文件时才需要,指定文件的访问权限。

w           O_WRONLY|O_CREAT|O_TRUNC 
w+          O_RDWR|O_CREAT|O_TRUNC 
r           O_RDONLY 
r+             O_RDWR
a             O_WRONLY|O_CREAT|O_APPEND
a+             O_RDWR|O_CREAT|O_APPEND

read函数

在C语言中,read函数用于从文件或其他输入流中读取数据。它的原型定义在<unistd.h>头文件中,函数声明如下:

ssize_t read(int fd, void *buf, size_t count);

  1.fd: 文件描述符,表示要从中读取数据的文件或输入流。
  2.buf: 指向缓冲区的指针,用于存储读取到的数据。
  3.count: 请求读取的最大字节数。
read函数返回成功时,返回实际读取的字节数;如果达到文件末尾,返回0;如果发生错误,返回-1。在使用read函数时,需要确保文件描述符是有效的,并且缓冲区有足够的空间来存放读取到的数据.

write函数

write函数用于将数据写入到文件或其他输出流中。它的原型同样定义在<unistd.h>头文件中,函数声明如下:

ssize_t write(int fd, const void *buf, size_t count);

  1.fd: 文件描述符,表示要写入数据的文件或输出流。
  2.buf: 指向包含要写入数据的缓冲区的指针。
  3.count: 要写入的字节数。
write函数返回成功时,返回实际写入的字节数;如果发生错误,返回-1。在写入数据时,需要确保文件描述符是有效的,并且程序有权限写入指定的文件.

lseek函数
lseek函数用于移动文件指针到指定的位置。这个函数是UNIX系统调用之一,用于处理文件描述符,而不是FILE*类型的文件流。lseek函数的原型如下:

#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);

  1.fd: 文件描述符,通过open函数获得。
  2.offset: 相对于whence指定的位置的偏移量。
  3.whence: 指定偏移量的起始点,可以是以下值之一:
  4.SEEK_SET:文件开头。
  5.SEEK_CUR:当前文件位置。
  6.SEEK_END:文件末尾。
lseek函数返回新的文件偏移量

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零搭建xxl-job(四):xxljob进行一些性能优化
  • 每天写两道(数组篇)在排序数组中查找元素的第一个和最后一个位置、x的平方根
  • Linux系统编程 day09 线程同步
  • 学生公寓电费信息管理小程序的设计
  • 毛戈平,在巴黎点亮东方色彩
  • 【合集】自定义结构体 vector priority_queue set map 的构建一网打尽!(C++干货)
  • 理解栈(Stack)及其在 C++ 中的应用【栈、数据结构】
  • 每日算法2024/08/12
  • windows和office微软官方免费激活教程
  • 选择江苏G口大带宽服务器租用的优势有哪些?
  • 简单了解一下 git cherry-pick
  • 2024专业音乐创作必备Guitar Pro8永久破解版激活码
  • 关于android中的各种尺寸与计算
  • javascript逻辑运算符
  • Ecovadis辅导是什么?哪些企业需要做Ecovadis辅导?
  • 时间复杂度分析经典问题——最大子序列和
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Android组件 - 收藏集 - 掘金
  • Docker下部署自己的LNMP工作环境
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTML中设置input等文本框为不可操作
  • httpie使用详解
  • Java比较器对数组,集合排序
  • JS字符串转数字方法总结
  • mongodb--安装和初步使用教程
  • Netty源码解析1-Buffer
  • Spark RDD学习: aggregate函数
  • STAR法则
  • use Google search engine
  • Vim Clutch | 面向脚踏板编程……
  • vue-router的history模式发布配置
  • 读懂package.json -- 依赖管理
  • 浮现式设计
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 计算机常识 - 收藏集 - 掘金
  • 王永庆:技术创新改变教育未来
  • 写给高年级小学生看的《Bash 指南》
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 带你开发类似Pokemon Go的AR游戏
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • #、%和$符号在OGNL表达式中经常出现
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (BFS)hdoj2377-Bus Pass
  • (C#)一个最简单的链表类
  • (done) 两个矩阵 “相似” 是什么意思?
  • (层次遍历)104. 二叉树的最大深度
  • (南京观海微电子)——COF介绍
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转) 深度模型优化性能 调参
  • (转)Scala的“=”符号简介
  • (转)Windows2003安全设置/维护
  • .NET C# 配置 Options
  • .net mvc actionresult 返回字符串_.NET架构师知识普及