长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 文件操作

    • Linux文件属性
    • 文件操作
      • 文件的操作的两种方式
        • 系统调用
        • 库函数
      • 打开文件
        • 打开文件函数
        • 文件的打开方式
      • 关闭文件
        • 关闭文件函数
      • 读写文件
        • 读文件函数
        • 写文件函数
      • 获取文件状态
      • 文件定位
        • 文件定位函数
      • 删除文件
        • 删除文件函数
        • 文件改名函数
    • 文件操作举例
    • 目录操作
    • 获得目录列表
    • 内存映射
    • 内存映射举例
  • Linux进程和线程

  • Linux信号

  • 进程间通信

  • Socket

  • C语言
  • 文件操作
DC Wang
2023-02-16
目录

文件操作

# 文件操作

# 文件的操作的两种方式

# 系统调用

  • 系统调用可以直接访问内核提供的丰富功能,是内核的低级接口

  • 系统调用存在于内核空间,使用不当也许会损坏系统

  • 对文件的操作使用文件描述符:整数

# 库函数

  • 库调用属于Linux编程接口中的较高层接口

  • 库函数存在于用户空间,对系统危险较小

  • 对文件的操作使用文件指针:FILE*

实际上很多库函数都是利用系统调用来实现的

# 打开文件

# 打开文件函数

#include <stdio.h>
FILE* fopen(const char* path, const char* mode)
1
2
  • 返回值:指向文件的指针;

    如果出现错误,返回NULL并设置errno变量,如果文件不存在,则以666权限创建此文件

  • path:文件的路径

  • mode:文件的打开方式

# 文件的打开方式

只读 读写 只写 读写 只追加 读、追加
r r+ w w+ a a+

# 关闭文件

# 关闭文件函数

#include <stdio.h>
int fclose(FILE* stream)
1
2

返回值:关闭成功返回0,否则返回EOF

参数:打开文件时返回的指针

说明:一旦文件被关闭,任何对这个文件的访问包括fclose调用都会导致不可预料的错误

# 读写文件

对文件的读写操作使用函数fread和fwrite

函数fread和fwrite允许从文件流读出数据或者向文件流写入数据

# 读文件函数

#include <stdio.h>
size_t fread(void* ptr, size_t size, size_t n, FILE* pf)
1
2
  • ptr指向保存从文件中读到信息的缓冲区
  • size保存读取的每一个“记录”的大小
  • n保存读取的“记录”数
  • pf指针指向要读取的文件流
  • 返回实际读到的“记录”数

# 写文件函数

#include <stdio.h>
size_t fwrite(void* ptr, size_t size, size_t n, FILE* pf)
1
2
  • ptr指向保存要写入到文件中的信息的缓冲区
  • size保存写入的每一个“记录”的大小
  • n保存写入的“记录”数
  • pf指针指向要写入的文件流
  • 返回实际写入的“记录”数

# 获取文件状态

#include <stdio.h>
//检查是否已到文件尾,是则返回非零值
int feof(FILE* s);
//如果文件流出错则返回非零值,但是不设置errno变量
int ferror(FILE* s);
//清除在文件上已经设置的错误位
void clearerr(FILE* s);
//返回与给定文件流相关联的文件描述符
int fileno(FILE* s);
1
2
3
4
5
6
7
8
9

# 文件定位

# 文件定位函数

#include <stdio.h>
int fseek(FILE* s, long offset, int whence);
1
2
  • fseek函数把当前位置设置到s指向的文件的offset处,参数whence可以是

    SEEK_SET、SEEK_CUR、SEEK_END,决定了以文件的起始、文件的当前位置

    或者文件的结尾来计算offset

  • 正常情况返回相对起始位置的偏移,出错返回-1

# 删除文件

# 删除文件函数

#include <stdio.h>
int remove(const char* pathname);
1
2
  • 执行成功返回0,否则-1

# 文件改名函数

#include <stdio.h>
int rename(const char* oldpath, const char* newpath);
1
2
  • 执行成功返回0,否则-1
编辑 (opens new window)
#C#Linux#文件操作
上次更新: 2023/02/18, 10:09:42
Linux文件属性
文件操作举例

← Linux文件属性 文件操作举例→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式