嵌入式学习——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资源进行读取、写入和其他操作。

        文件描述符范围:0 - 8191,共8192个

         0        标准输入
         1        标准输出
         2        标准出错

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是有缓存的,文件是没有缓存

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值