首页 > 编程语言 >C++ open()和read()函数使用详解

C++ open()和read()函数使用详解

时间:2025-01-16 16:23:10浏览次数:1  
标签:文件 函数 read C++ fd include open

对于Framework工程师来说,必要C或者C++编程能力是必须的,像对设备节点的操作是最基本的操作,那么我们便会用到open和read函数。open()函数用于打开文件,而read()函数用于从打开的文件中读取数据。

  1. open() 函数

open()函数是C/C++标准库中的一个POSIX标准函数,用于打开一个文件并返回一个文件描述符(File Descriptor),以供后续的读写操作。其函数声明如下:

#include <fcntl.h>
int open(const char* path, int flags, mode_t mode);

path:要打开或创建的目标文件名。
flags:对文件进行多种操作的模式,如O_RDONLY(只读打开)、O_WRONLY(只写打开)、O_RdwR(读写打开)、O_CREAT(若文件不存在,创建文件)等。
mode:新文件的访问权限,通常使用权限掩码如S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH。
如果打开文件成功,open()返回一个文件描述符;如果失败,返回-1,并设置errno以指示错误原因‌12。
  1. read() 函数

read()函数用于从打开的文件描述符中读取数据。其函数声明如下:

#include <unistd.h>
ssize_t read(int fd, void* buf, size_t count);

fd:文件描述符,由open()函数返回。buf:指向用于存储读取数据的缓冲区的指针。
count:要读取的字节数。
如果读取成功,read()返回实际读取的字节数;如果遇到文件结束或发生错误,返回-1,并设置errno以指示错误原因‌23。
示例代码
以下是一个简单的示例,展示如何使用open()和read()函数读取文件:

#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
     const char* filePath = "input.txt";
     int fd = open(filePath, O_RDONLY); // 以只读模式打开文件
     if (fd < 0) {
         perror("Failed to open file");
return -1;
     }
     char buffer[1024]; // 定义一个缓冲区用于存储读取的数据
     ssize_t bytesRead = read(fd, buffer, sizeof(buffer)); // 从文件中读取数据到缓冲区
     if (bytesRead < 0) { // 如果读取失败或遇到文件结束符EOF
         perror("Failed to read file");
         close(fd); // 关闭文件描述符
         return -1;
     }
     printf("Read %ld bytes from file: %s\n", bytesRead, buffer); // 打印读取的内容和字节数
     close(fd); // 关闭文件描述符
     return 0;
}

到此这篇关于C++ open()和read()函数使用的文章就介绍到这了,更多相关C++ open()和read()函数内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持

标签:文件,函数,read,C++,fd,include,open
From: https://www.cnblogs.com/Ryan9399/p/18675199

相关文章

  • 深入理解C++ 空类大小
    在C++中,规定空类(即类中没有任何数据成员、成员函数、虚函数等成员的类)的大小为1字节,这背后主要有以下几方面的原因:保证对象的唯一性和可区分性在C++的面向对象编程模型中,对象是类的实例化结果,每个对象在内存中都需要占据一定的空间,以便程序能够通过地址等方式对其进行操作和区......
  • C++17 Filesystem 实用教程
    C++17标准带来了std::filesystem库,提供了强大的工具来处理文件路径,目录以及其他与文件系统相关的操作.这篇文章适合C++初学者以及希望掌握C++17新特性的开发者,旨在帮助他们高效地完成文件系统相关任务.什么是std::filesystem?std::filesystem是C++标准库的一部......
  • 【浏览器】录音open失败:浏览器禁止不安全页面录音,可开启https解决..
    谷歌浏览器在浏览器地址栏中输入:chrome://flags/#unsafely-treat-insecure-origin-as-secure启动选项,并且添加你本地的开发地址Edgeedge://flags/#unsafely-treat-insecure-origin-as-secure操作同谷歌火狐浏览器在浏览器地址栏输入:about:config勾选(当我尝试修改底层首......
  • Bash和Zsh中read命令的使用区别
    前言:在编写sh脚本的时候,发现使用read命令和预期的效果不一样,,因为shell用的是zsh,查了一下发现bash和zsh中read命令的用法有些区别,这里记录一下。读取字符从标准输入中读取一个或多个字符bash:read-nnuminputzsh:read-knuminput例子:root@hcss-ecs-b5f1~❯read-k......
  • 微信小程序获取openid
    2025年1月15日:注意:其中appid,secret,还有服务器网址都按自己实际的填写1、先在云服务器上安装nodejs,然后写个get接口:constexpress=require('express');constapp=express();app.get('/getOpenid',(req,res)=>{res.send("success");})app.listen(3000,()=>......
  • 【C++】开源:ImGui图形用户界面库配置与使用
    项目介绍项目Github地址:https://github.com/ocornut/imguiDearImGui(ImGui)是一个开源的、用C++编写的图形用户界面(GUI)库。它由OCornut创建,旨在为应用程序和工具提供创建用户界面的简单高效的方式。以下是DearImGui的一些主要特性和特点:1.即时模式GUI:ImGui遵循即......
  • c++基础算法讲解(写了ccf考试中可能出现的各种算法)
    枚举法枚举法是一种基本的问题解决策略,它尝试所有可能的情况以找到解决方案。这种方法通常用于问题规模较小且可以接受一定时间复杂度的情况。例子:找出三个数中最大的数#include<iostream>usingnamespacestd;intfindMax(inta,intb,intc){returnmax(a,......
  • GaussDB云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和
    云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和执行引擎的能力。由于云原生数据库是shareddisk架构,一个事务在一个节点上执行,所以不需要原来分布式根据分布式key进行数据分布,分布式执行和分布式2PC提交的能力。为了支持数据库粒度的异地多活,云原生......
  • OpenGL: VAO和VBO的使用
    一、VAO  1、顶点数组对象,VertexArrayObject。   2、顶点着色器允许开发者指定任何以顶点属性为形式的输入,如:"layout(location=0)invec3aPos;","location=0"即顶点属性指针的序号。   3、VAO并不保存实际数据,而是存放顶点数组结构定义,即指定OpenGL该如何......
  • 编译原理实验四----NFA确定化(附C++代码)
    编译原理实验四----NFA确定化(附C++代码)经验分享算法思路前述知识点输入结构体子集法(确定化)代码1:寻找闭包代码2:自动机运作总流程代码3:重新命名最小化代码本文仅为编译原理课程实验记录开发过程,设计的知识点,以及实现算法的设计过程使用的是Qt开发......