嵌入式学习——Linux高级编程复习(文件IO)——day37

1. 文件IO——(无缓存、文件描述符)

1.1 定义

        文件IO是指文件输入/输出,是计算机程序中用于读取和写入文件的操作。通过文件IO,程序可以从文件中读取数据到内存中,或者将内存中的数据写入文件中,文件可以是磁盘上的普通文件、设备文件(如打印机、磁盘驱动器)、管道、套接字等。文件IO是与外部存储介质(如硬盘、固态硬盘、闪存驱动器等)交互的主要方式,它允许程序与文件系统进行通信,实现数据的持久化存储和读取。

        文件IO是一种没有缓存的IO形式(即刻交给linux内核,及时性)

        文件IO是系统调用,系统调用是Linux内核中的函数接口,只能在Linux内核中使用

1.2 主要操作步骤

        1. 打开文件

        使用如open(在POSIX系统中)或fopen(在C标准库中)这样的函数,为文件创建一个文件描述符或文件指针,以便后续读写操作。

        2. 读取和写入数据

        通过文件描述符或文件指针,使用如read/write(POSIX)或fread/fwritefscanf/fprintf(C标准库)等函数来读取或写入数据。

        3. 定位文件指针

        在需要时,可以使用如lseek(POSIX)或fseek(C标准库)来移动文件内部的读写位置。

        4. 关闭文件

        完成所有操作后,通过close(POSIX)或fclose(C标准库)函数关闭文件,释放系统资源。

1.3 文件描述符

        文件描述符是操作系统中用于标识一个文件或者其他I/O资源的整数。在Unix-like系统中,每个打开的文件、套接字、管道等都会分配一个唯一的文件描述符。文件描述符通常是非负整数,其中0、1和2分别预留给标准输入、标准输出和标准错误。通过文件描述符,程序可以对文件或其他I/O资源进行读取、写入和其他操作。

2. 文件IO的函数接口总结

    1.open/close
    2.read/write 
    3.lseek 

2.1 open

        1. 定义

            int open(const char *pathname, int flags);

        2. 功能

                打开文件并获得操作文件的文件描述符

        3. 参数

                pathname:要打开的文件路径对应字符串的首地址
                flags:
                    O_RDONLY        只读
                    O_WRONLY        只写
                    O_RDWR            读写
            
                    O_CREAT                文件不存在创建(需要open传入第三个参数)
                    O_TRUNC               文件存在截断成0(清0)
                    O_APPEND              追加打开
                    O_ASYNC                异步IO
                    O_NONBLOCK        非阻塞IO
                    O_EXCL                    检测文件是否存在 

        4. 返回值

                成功返回新文件描述符
                失败返回-1 

        5. 示例程序

        6. 注意

2.2 close

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.3 write

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.4 read

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.5 lseek

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3. Linux系统中获取时间的函数接口

3.1 time

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3.2 localtime 

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3.3  mktime

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4. 文件流指针和文件描述符的相互转化函数

4.1 fileno

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.2 fdopen

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.3 feof

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.4 ferror

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

5. 文件描述符和流指针的区别和联系

5.1 文件描述符

  • 概念:文件描述符是操作系统级别的概念,用于唯一标识已打开的文件或者其他I/O资源的整数。在Unix-like系统中,每个打开的文件、套接字、管道等都会被分配一个文件描述符。
  • 作用:文件描述符用于在系统级别跟踪和管理文件和I/O资源,允许程序与这些资源进行交互。
  • 使用:在C语言中,文件描述符是整数形式表示,通过系统调用函数(如open()read()write())对文件描述符进行读写操作。

5.2 流指针

  • 概念:流指针是高级语言(如C++、Java、Python)中的概念,用于标识当前文件操作位置的指针。
  • 作用:流指针用于记录文件读写的当前位置,允许程序在文件中定位、读取和写入数据。
  • 使用:在C++中,流指针是通过iostream库提供的std::ifstream(文件输入流)、std::ofstream(文件输出流)等对象来操作文件,通过操作符<<>>对文件进行读写。

5.3 联系和区别

  • 文件描述符是操作系统级别的概念,而流指针是高级语言中的概念。
  • 文件描述符是整数用于系统级别的文件和I/O资源管理,而流指针是指向文件操作位置的指针,用于文件读写操作。
  • 在低级别编程中(如C语言),可能需要直接操作文件描述符;而在高级别编程中,通常使用流指针来进行文件操作,而这些流指针会管理文件描述符。

6. 标准IO和文件IO的区别

    1.标准IO是库函数,是针对于系统调用的封装
    2.文件IO是系统调用,是Linux内核中的函数接口
    3.标准IO是有缓存的,文件是没有缓存

相关推荐

  1. 嵌入学习——网络编程(UDP)——day30

    2024-06-09 06:34:02       9 阅读
  2. 嵌入学习——网络编程(TCP)——day31

    2024-06-09 06:34:02       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 06:34:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 06:34:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 06:34:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 06:34:02       20 阅读

热门阅读

  1. Sony前端连接功放:深度解析与实用指南

    2024-06-09 06:34:02       13 阅读
  2. Linux服务器配置一个简单的DNS

    2024-06-09 06:34:02       8 阅读
  3. 【 k8s 标签与选择器 】

    2024-06-09 06:34:02       11 阅读
  4. adb 删除文件或文件夹

    2024-06-09 06:34:02       7 阅读
  5. 字母异位词分组(charyw)

    2024-06-09 06:34:02       12 阅读
  6. Docker面试整理-什么是Docker Compose?

    2024-06-09 06:34:02       11 阅读
  7. 数据查询深分页优化方案

    2024-06-09 06:34:02       10 阅读
  8. 《非暴力沟通》:值得所有人阅读

    2024-06-09 06:34:02       10 阅读
  9. 【含项目亮点】小免鲜项目总结

    2024-06-09 06:34:02       9 阅读