简单文件 IO 示例:使用系统调用读写文件

这是一个基础的文件 IO 示例,使用 Linux 系统调用处理 "data.txt" 文件。代码基于文件描述符(fd),演示写入和读取操作,包含错误处理宏。read/write 是阻塞的同步 IO,适合理解底层机制。

示例 1: 文件写入程序

程序创建或覆盖文件,写入固定字符串。

复制代码
#include <iostream>
#include <cstdlib>
#include <fcntl.h>
#include <unistd.h>
#include <cstring>

// 错误处理宏
#define error_handling(message) { std::cerr << message << "error!" << strerror(errno) << std::endl; exit(1); }

int main() {
    int fd;
    std::string buf = "hello,world!\n";
    /*
    O_CREAT     必要时创建文件
    O_TRUNC     删除全部现有数据
    O_APPEND    维持现有数据,保存到其后面
    O_RDONLY    只读打开
    O_WRONLY    只写打开
    O_RDWR      读写打开
    */
    fd = open("data.txt", O_CREAT | O_WRONLY | O_TRUNC);  // 创建/覆盖,只写模式
    if (fd == -1) error_handling("open");
    if (write(fd, &buf[0], buf.size()) == -1) error_handling("wrote");  // 写入数据
    close(fd);
    return 0;
}
  • 关键点open 以 O_CREAT|O_WRONLY|O_TRUNC 模式打开文件(创建、清空、只写);write 将字符串数据写入 fd。

示例 2: 文件读取程序

程序读取文件内容并打印。

复制代码
#include <iostream>
#include <cstdlib>
#include <fcntl.h>
#include <unistd.h>
#include <cstring>

// 错误处理宏
#define error_handling(message) { std::cerr << message << "error!" << strerror(errno) << std::endl; exit(1); }

int main() {
    int fd;
    std::string buf;
    buf.resize(BUFSIZ);  // 分配缓冲
    fd = open("data.txt", O_RDONLY);  // 只读模式打开
    if (fd == -1) error_handling("open");
    std::cout << "file descriptor: " << fd << std::endl;
    if (read(fd, &buf[0], buf.size()) == -1) error_handling("read");  // 读取数据
    std::cout << "file data: " << buf << std::endl;
    close(fd);
    return 0;
}
  • 关键点open 以 O_RDONLY 模式打开;read 从 fd 读取到 std::string 缓冲区(BUFSIZ 为标准大小);输出 fd 和内容。

流程概述

  • 写入:open → write → close。
  • 读取:open → read → close。
  • 底层:系统调用确保数据持久化,阻塞式 IO 适用于简单场景。
相关推荐
Ulyanov11 分钟前
AudioVision Pro:基于 PySide6 + sounddevice 的实时音频可视化播放器设计
python·算法·音视频
夜不会漫长14 分钟前
C++:类和对象(2)
java·javascript·c++
ch.ju23 分钟前
Java—idea知识:如何创建新项目
java·开发语言·intellij-idea
土司大王24 分钟前
LeetCode hot100——74.搜索二维矩阵:Java 二分模板
java·算法·leetcode
无小道27 分钟前
C++ 中 `explicit` 关键字详解:彻底理解隐式类型转换
c++·explicit
Evand J34 分钟前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
蒸蒸yyyyzwd36 分钟前
cpp 选手秋招学习笔记 day34
c++·八股
tyler_download36 分钟前
揉扁搓圆transformer架构:NAG优化器算法详解
深度学习·算法·transformer
Tairitsu_H37 分钟前
[C++] C++11类和STL的新特性
开发语言·c++·stl·c++11
weixin1997010801641 分钟前
[特殊字符]《京东POP二手品类对接:B2C订单模型 vs 二手C2C属性的字段转换难题》(附Python源码)
前端·python·算法