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

C 语言文件操作 / C++ 文件操作 / Linux 系统调用文件操作 全部带完整代码、注释、运行说明。

一、C 语言标准文件操作(stdio.h)

基于ANSI C 标准库,跨平台(Windows/Linux/macOS 通用)。

核心函数

  • fopen() 打开文件
  • fclose() 关闭文件
  • fread() 读
  • fwrite() 写
  • fgets() / fputs() 行读写
  • fprintf() / fscanf() 格式化读写
  • ftell() / fseek() 偏移

1. 写入文件

#include<stdio.h>intmain(){// 打开文件:w 写,若不存在则创建,存在则清空FILE*fp=fopen("test_c.txt","w");if(fp==NULL){perror("fopen failed");return1;}// 写入字符串fputs("Hello C file IO\n",fp);// 格式化写入fprintf(fp,"int: %d, float: %.2f\n",100,3.14);// 二进制写入intbuf[]={1,2,3,4};fwrite(buf,sizeof(int),4,fp);fclose(fp);return0;}

2. 读取文件

#include<stdio.h>intmain(){FILE*fp=fopen("test_c.txt","r");if(!fp){perror("fopen");return1;}charline[100];// 按行读while(fgets(line,sizeof(line),fp)){printf("%s",line);}// 移动到文件开头fseek(fp,0,SEEK_SET);// 格式化读inta;floatb;fscanf(fp,"Hello C file IO\nint: %d, float: %f",&a,&b);printf("a=%d, b=%.2f\n",a,b);fclose(fp);return0;}

3. 二进制读写示例

#include<stdio.h>typedefstruct{intid;charname[20];}Student;intmain(){Student s={1,"ZhangSan"};FILE*fp=fopen("student.bin","wb");fwrite(&s,sizeof(Student),1,fp);fclose(fp);Student r;fp=fopen("student.bin","rb");fread(&r,sizeof(Student),1,fp);printf("id=%d, name=%s\n",r.id,r.name);fclose(fp);return0;}
二、C++ 文件操作(fstream)

C++ 面向对象,更安全、更易用。

头文件:

#include<fstream>#include<iostream>#include<string>

1. 文本写入

#include<fstream>#include<iostream>usingnamespacestd;intmain(){ofstreamofs("test_cpp.txt");if(!ofs){cerr<<"open failed"<<endl;return1;}ofs<<"Hello C++ fstream"<<endl;ofs<<100<<" "<<3.14<<endl;ofs.close();return0;}

2. 文本读取

#include<fstream>#include<iostream>#include<string>usingnamespacestd;intmain(){ifstreamifs("test_cpp.txt");string line;while(getline(ifs,line)){cout<<line<<endl;}// 回到开头ifs.clear();ifs.seekg(0);inta;doubleb;ifs>>line>>line>>a>>b;cout<<a<<" "<<b<<endl;ifs.close();return0;}

3. 二进制读写

#include<fstream>usingnamespacestd;structStudent{intid;charname[20];};intmain(){Student s={2,"LiSi"};ofstreamofs("stu_cpp.bin",ios::binary);ofs.write((char*)&s,sizeof(s));ofs.close();Student r;ifstreamifs("stu_cpp.bin",ios::binary);ifs.read((char*)&r,sizeof(r));cout<<r.id<<" "<<r.name<<endl;return0;}

C++ 常用打开模式

  • ios::out 写
  • ios::in 读
  • ios::app 追加
  • ios::binary 二进制
  • ios::trunc 清空
  • ios::ate 打开后定位到末尾
三、Linux 系统级文件操作(系统调用)

基于 Linux 内核 API,非标准 C,只能在 Linux 用。

头文件:

#include<fcntl.h>#include<unistd.h>#include<stdio.h>#include<errno.h>

核心函数:

  • open()
  • close()
  • read()
  • write()
  • lseek()
  • stat()

1. 写入文件

#include<fcntl.h>#include<unistd.h>#include<stdio.h>intmain(){// O_WRONLY 只写 | O_CREAT 创建 | 0644 权限intfd=open("linux_test.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);if(fd==-1){perror("open");return1;}constchar*str="Hello Linux syscall\n";write(fd,str,strlen(str));close(fd);return0;}

2. 读取文件

#include<fcntl.h>#include<unistd.h>#include<stdio.h>intmain(){intfd=open("linux_test.txt",O_RDONLY);if(fd==-1){perror("open");return1;}charbuf[1024];ssize_tn=read(fd,buf,sizeof(buf)-1);if(n>0){buf[n]=0;printf("%s",buf);}close(fd);return0;}

3. lseek 偏移

// 跳到文件开头lseek(fd,0,SEEK_SET);// 跳到文件末尾lseek(fd,0,SEEK_END);// 从当前位置偏移lseek(fd,10,SEEK_CUR);

4. 获取文件大小(常用技巧)

off_tsize=lseek(fd,0,SEEK_END);lseek(fd,0,SEEK_SET);printf("size = %ld\n",size);

四、三者核心区别(超清晰总结)

特性C stdioC++ fstreamLinux 系统调用
依赖stdio.hfstreamfcntl.h,unistd.h(Linux 专用)
跨平台仅 Linux
缓冲带用户态缓冲带缓冲无缓冲 (直接内核)
风格函数式面向对象流系统调用,文件描述符 fd
速度较快较快灵活、底层、可极致优化
安全性需手动检查 NULL异常/状态位必须检查 -1
典型用途通用、跨平台C++ 项目、易用驱动、高性能服务器、系统编程
五、编译运行命令(Linux)

#C
gcc file.c -o file
./file

#C++
g++ file.cpp -o file
./file

#Linux系统调用代码同样用gcc编译
gcc linux.c -o linux
./linux

http://www.jsqmd.com/news/621927/

相关文章:

  • STM32F103C8T6驱动DHT11温湿度传感器,从CubeMX配置到OLED显示(附完整工程)
  • C#怎么使用泛型 C#泛型类泛型方法和泛型约束的定义和使用方法【语法】
  • 基于REX-UniNLU的智能客服系统开发实战
  • 54-CubeMX-STM32F103RC-TMIER2-输出PWM
  • AI原生软件交付提速300%?揭秘美团新一代研发流水线如何重构MLOps与DevOps融合范式
  • Mirage Flow模拟计算机网络环境:辅助教学与协议调试
  • 2026年企业新媒体代运营从“内容发布“到“增长合伙人“的价值跃迁
  • 从零开始:手把手教你用Python脚本创建第一个USD场景(附完整代码)
  • 华为eNSP模拟器综合实验之- WLAN瘦AP配置实战案例详解
  • Qwen3-ASR-1.7B场景应用:会议记录自动化,提升工作效率
  • 为什么92%的AI测试POC项目在2025年Q4失败?——2026奇点大会核心议题深度拆解,含可复用的LLM测试契约模板
  • Mac外接硬盘格式哪种更稳?选NTFS还是ExFAT?
  • Canvas动画实战:用requestAnimationFrame打造会飘动的彩虹云朵
  • 从零到一:基于Rook Operator的Ceph集群云原生部署与Kubernetes存储集成全攻略
  • 千问3.5-9B卷积神经网络(CNN)原理详解与模型调优实战
  • AcousticSense AI使用技巧:如何让音乐流派识别更准确
  • 美胸-年美-造相Z-Turbo多场景应用:游戏公司NPC立绘批量生成与风格统一性保障
  • Claude 从零起步:新手快速上手指南(2026年4月版)
  • 用FastAPI和OpenCV给你的个人照片做个‘魔法变身’:7种特效的Web应用保姆级搭建
  • Qwen-Image-2512-SDNQ MATLAB集成教程:科研图表自动生成
  • Fish Speech 1.5部署教程:CSDN平台GPU实例网络策略与安全组配置
  • 5分钟搞定鱼眼相机畸变校正:OpenCV实战教程(附Python代码)
  • AI万能分类器部署实战:开箱即用,构建智能工单分类系统
  • Qwen2.5-VL-7B-Instruct功能全解析:从图片描述到物体定位,一篇文章讲清楚
  • 零代码玩转HY-Motion 1.0:在Gradio可视化界面中实时预览文字转动作
  • 别再只画静态图了!用Qt QChart实现可交互波形图的5个高级技巧
  • AI Agent 可以操作哪些表单和数据收集工具?MCP 支持情况盘点
  • 2026年口碑佳的餐饮配料企业
  • LLVM新手必看:如何用预编译包快速搭建开发环境(附Hello World Pass示例)
  • 从零开始:基于Fish Speech 1.5的智能家居语音系统完整搭建流程