Linux系统编程之--文件操作

2023-05-16

前言:Linux系统之下皆文件

1、缓冲区文件操作 -- 普通文件(.TXT .MP3 .MP4...)

        缓冲区:文件的读写并不是直接操作文件的,而是操作缓冲区的(RAM)

        例如:写一个字符Q到某.txt文件中,并不是真正写到了.txt文件中,而是写到了系统的内存里面(RAM---内存条),等待Ctrl+S或者手动保存、程序结束、遇到特殊符号才会把之前写到内存里面的东西一次性写入文件里面。

        优点:提高CPU的利用率。

缓冲区文件API:

      1.1 fopen

       函数的功能:缓冲区操作打开一个普通文件

        函数头文件:<stdio.h>

        函数原型:

                FILE *fopen(const char *pathname, const char *mode);

函数的参数:

    pathname:

        打开文件的路径(可以是绝对路径也可以是相对路径)

    mode:

        r      Open text file for reading.  The stream is positioned at the beginning of
              the file.

       r+     Open for reading and writing.  The stream is positioned at the  beginning
              of the file.

       w      Truncate file to zero length or create text file for writing.  The stream
              is positioned at the beginning of the file.

       w+     Open for reading and writing.  The file is created if it does not  exist,
              otherwise  it is truncated.  The stream is positioned at the beginning of
              the file.

       a      Open for appending (writing at end of file).  The file is created  if  it
              does not exist.  The stream is positioned at the end of the file.

       a+     Open  for  reading  and  appending (writing at end of file).  The file is
              created if it does not exist.  The initial file position for  reading  is
              at the beginning of the file, but output is always appended to the end of
              the file.
The mode string can also include the letter 'b' either as a last character or as a character between the characters in any of the two-character strings described above.  This is strictly for compatibility with C89 and has no effect;  the  'b' is ignored on all POSIX conforming systems, including Linux.  (Other systems may treat text files and binary files differently, and adding the 'b' may be a  good idea  if  you do I/O to a binary file and expect that your program may be ported to non-UNIX environments.)
函数的返回值:FILE *

FILE * 返回的指针内部是由 malloc 开辟的堆空间,由于malloc 开辟必然有 free 释放, fclose 本质就是释放 fopen 开辟的malloc FILE * 指针, FILE * 指针是一个复杂的结构体但是该结构体不需要看  因为FILE 这个指针返回值是给后续函数fclose  fread  fwrite使用。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        1.2 fclose

函数的功能:关闭/释放一个已经打开的缓冲区文件指针

函数头文件:<stdio.h>

函数的原型:

    int fclose(FILE *stream);

函数的参数:

    stream:()

        代表你用 fopen打开文件的返回值

函数的返回值:

    潜规则:

        一般返回值为 int 类型的

        如果没有特殊意义

            返回值为 0 则代表成功

            返回值为 0 代表失败 (-1)

        EOF-->  -1

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的功能:读缓冲区的一个文件

函数头文件:<stdio.h>

函数的原型:

    size_t fread(

            void *ptr,

            size_t size,

            size_t nmemb,

            FILE *stream

        );     

函数的参数:

    ptr:

        void * 在这里面叫做万能指针

                可以是任意类型!

                读写操作支持C语言的所有的类型的数据

        读取内容存放的缓冲区--空间

    size:

        size_t -- long unsigned int

        他就是 一次 读取的内容的字节数

       

    nmemb:

        读几次

   

    stream:

        你要读的文件流指针

函数的返回值

    返回成功读写的次数!

    如果一次都未成功、或者读取内容不足一次返回 0

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的功能:写入内容到缓冲区的文件里面

函数头文件:<stdio.h>

函数的原型:

    size_t fwrite(

            const void *ptr,

            size_t size,

            size_t nmemb,

            FILE *stream

        );

函数的参数:

    ptr:

        const:常量--代表你传入的内容无法修改

        这个就是你要写入的内容是什么

    size:

        你写入一次的大小字节数

    nmemb:

        你写入几次!

    stream:

        写入到哪个文件里面

函数返回值:

    请参考 fread ..

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的功能:偏移读写指针

函数头文件:<stdio.h>

函数的原型:

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

函数的参数:

    stream:

        你现在要对哪个文件的读写指针进行偏移

    offset:

        偏移的数量大小

        10:

            往当前参考位置指针右边偏移10个字节

        -10:

            往当前参考位置指针左边偏移10个字节

        0

            在当前参考位置 不偏移

    whence:

        SEEK_END: 末尾为参考位置

        SEEK_SET:开头为参考位置

        SEEK_CUR:当前原在位置为参考位置

        #define SEEK_SET    0   /* Seek from beginning of file.  */

        #define SEEK_CUR    1   /* Seek from current position.  */

        #define SEEK_END    2   /* Seek from end of file.  */

函数返回值: 

    符合我们之前讲的潜规则

        成功返回 0

        失败返回 -1

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的功能:直接讲读写指针偏移到开头

函数头文件:<stdio>

函数的原型: 

    void rewind(FILE *stream);

函数的参数:

    stream:

        你要把哪个文件的读写指针偏移到开头

函数返回值:

   

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的功能:检查文件是否达到末尾

函数头文件:<stdio.h>

函数的原型:

    long ftell(FILE *stream);

函数的参数:

    stream:

        检查哪个文件

函数的返回值:

    如果达到末尾返回 -1

    否则返回其他

2、非缓冲区文件操作 -- 系统内部文件(管道文件、套接字文件、块设备文件、 字符设备文件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统编程之--文件操作 的相关文章

随机推荐

  • 假设发生了404错误,都统一跳转到error.html页面,如何在web.xml中配置?

    假设发生了404错误 xff0c 都统一跳转到error html页面 xff0c 如何在web xml中配置 xff1f lt error page gt lt error code gt 404 lt error code gt lt
  • 人工智能研究主要有哪三大学派,其特点是什么?

    人工智能研究主要有哪三大学派 xff0c 其特点是什么 xff1f xff08 1 xff09 符号主义 xff1a 又称为功能模拟学派 xff0c 主要观点认为智能活动的基础是物理符号系统 xff0c 思维过程是符号模式的处理过程 其特点
  • python 绘制graph图——networkx

    span class token keyword import span networkx span class token keyword as span nx span class token keyword import span m
  • MacBookPro M1&M1Pro安装PyQt5

    前言 最近想开发一个GUI图形界面的应用 xff0c 在Mac上面使用Pycharm安装PyQt5怎样都无法安装 xff0c 联想到了可能是当前电脑系统架构导致PyQt5包无法下载或适配 xff0c 所以借鉴了网上大佬的一些方法 xff0c
  • 在普通Maven项目中引入Mybatis

    在普通Maven项目中引入Mybatis 1 引入依赖包 打开项目根目录下的pom xml对dependencies进行配置即引入mybatis和mysql connector java两个依赖包 span class token tag
  • 解决方案|ValueError:The following settings are not supported :{‘username‘: ‘neo4j“}

    此处贴出py2neo官方链接 xff08 2022 06 14 供各位同学参考 https py2neo org 2021 1 问题所在 xff1a 我使用的代码是老版本的 xff0c 而我使用的Neo4j是最新版的 解决方案 xff1a
  • 关于SpringMVC的XML配置步骤

    1 配置前端控制 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt web app xmlns 61 34 http xmlns jcp org xml ns javaee
  • python仿真——猎狗追兔子

    猎狗追兔子问题 有一只猎狗在原点位置发现了一只兔子在正东方距离它20米的地方 xff0c 此时兔子开始以3米 秒的速度向正北方全速跑去 xff0c 假设猎狗在追赶兔子的时候始终朝着兔子的方向以速度4米 秒全速奔跑 xff0c 用计算机仿真法
  • spring框架 快速入门

    Spring是什么 Spring是一款开源的免费框架 xff0c 是分层的javaSE EE 应用full stack轻量级开源框架 xff0c 以IIoc Inverse Of Control 反转控制 和Aop xff08 Aspect
  • new与delete动态分配和释放内存

    xff08 一 xff09 new运算符 xff08 1 xff09 new运算符使用的一般格式 xff1a new 类型 初值 xff1b 用new分配空间 时不指定初值 如果由于内存不足 等原因而无法正常分配空间 xff0c 那么new
  • 抽象类和普通类的区别

    抽象类VS普通类 抽象类不能被实例化 xff0c 抽象类的子类必须实现所有的抽象方法才能被实例化 xff1b 普通类可以实例化 抽象类必须用关键字abstract修饰 xff1b 普通类不使用关键字abstract 抽象类中的抽象方法只被声
  • 一招解决微博视频不能下载的问题

    首先复制所需要的下载的微博视频链接 xff0c 在浏览器中打开 xff08 我所用的浏览器是IE浏览器 xff09 xff0c 然后按下F12打开源码 xff0c 步骤如下图所示 xff1a 1 点击Network 再点击Media 2 刷
  • 快速从B站下载视频到本地(无需安装软件)

    1 复制以下链接Hotbox https www hotbox fun 进入此页面 xff0c 注意 xff1a 第一次进入需注册账号 2 然后复制你想要解析的b站视频链接 xff0c 粘贴到图片中的输入框 3 完成以上步骤后可进入以下界面
  • stm32c8t6+dht11+MQ系列环境检测模块+oled显示屏(基于物联网的家庭环境检测系统设计)

    元件清单 xff1a stm32f103c8t6 mq2 检测烟雾浓度 xff08 模拟量输出 xff09 mq7 检测一氧化碳浓度 mq135 检测空气质量 OLED屏幕 xff08 四引脚仅支持iic协议通信 xff09 dht11检测
  • 本地图片转为网络链接(URL/HTML/Markdown/BBCode...)

    你还在为将图片变为链接而烦恼吗 xff1f 不要慌 xff0c 看这里https www superbed cn signup from id 61 27240 聚合图床你值得拥有 xff01 没有广告 xff0c 没有收费机制 xff01
  • 基于RS485通信的Modbus通信协议

    通信可以分为两个方面 xff1a 硬件层 xff1a RS485解决的是数据传输问题 xff0c 也就是说如何将一个 0 或 1 传输到另外一端 xff08 保证了数据可以转移到另一端 xff09 软件层 xff1a modbus是在硬件基
  • Mysql入门——初识数据库

    初识数据库 DBMS的种类 DBMS 主要通过数据的保存格式 xff08 数据库的种类 xff09 来进行分类 xff0c 现阶段主要有以下 5 种类型 层次数据库 xff08 Hierarchical Database xff0c HDB
  • 【HTTP协议】---HTTP协议详解

    HTTP协议详解 一 HTTP简介 1 HTTP协议 xff0c 即超文本传输协议 Hypertext transfer protocol 是一种详细规定了浏览器和万维网 WWW 61 World Wide Web 服务器 之间互相通信的规
  • Windows将多个TXT文档合并

    1 终端进入多个文档目录 type txt gt gt D hebing1 txt 复制这段命令到终端
  • Linux系统编程之--文件操作

    前言 xff1a Linux系统之下皆文件 1 缓冲区文件操作 普通文件 xff08 TXT MP3 MP4 xff09 缓冲区 xff1a 文件的读写并不是直接操作文件的 xff0c 而是操作缓冲区的 xff08 RAM xff09 例如