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

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 open、creat、colse 函数🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、open 函数
    • ✨2.1 函数原型
    • ✨2.2 flags 参数
  • 🎄三、creat 函数
  • 🎄四、close 函数
  • 🎄五、总结


在这里插入图片描述

🎄一、概述

在Linux系统中,大多数文件I/O只需要用到5个函数:open、read、write、lseek、close,本文介绍打开、关闭文件的几个函数。creat函数比较少用,因为它可以被open函数取代,可以大概了解一下。

文件描述符
文件描述符是一个非负整数。当打开(open)或创建(creat)一个文件时,内核会向进程返回一个文件描述符。
Linux系统中,文件描述符0、1、2 分别与标准输入、标准输出、标准出错输出相关联。在POSIX的应用程序中,0、1、2被替换称STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,这些常量定义在<unistd.h>中。

在这里插入图片描述

🎄二、open 函数

open 函数可以打开或创建一个文件。
open 函数返回的文件描述符一定是最小的未用描述符值。

✨2.1 函数原型

#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
返回值:成功返回文件描述符,出错返回-1

仅当创建新文件时才使用第三个参数mode

✨2.2 flags 参数

flags 参数用来说明打开文件的选项,可以使用下面一个或多个常量进行运算构成参数。

必须三选一的标志:

  • O_RDONLY: 只读打开
  • O_WRONLY:只写打开
  • O_RDWR:读写打开
  • O_APPEND:每次写时追加到文件尾端。
  • O_CREAT:若文件不存在,则创建它。使用此选项需要使用第三个参数来指定新文件的访问权限位。
  • O_EXCL:如果与O_CREAT同时指定,而文件已存在,则会出错。这样可以测试一个文件是否存在。
  • O_TRUNC:如果该文件已经存在并且是常规文件,并且打开模式允许写入(即,为O_RDWR或O_WRONLY),则它将被截断为长度0。如果文件是FIFO或终端设备文件,O_TRUNC标志将被忽略。否则,O_TRUNC的效果未指定。
  • O_NOCTTY:如果路径名指的是一个终端设备——参见tty(4)——即使进程没有控制终端,它也不会成为进程的控制终端。
  • O_NONBLOCK:如果可能,文件将以非阻塞模式打开。无论是open()还是对返回的文件描述符的任何后续操作,都不会导致调用进程等待。

同步输入、输出选项

  • O_SYNC:打开文件进行同步I/O。对结果文件描述符的任何写入(2)都将阻止调用过程,直到数据已物理写入底层硬件。

在这里插入图片描述

🎄三、creat 函数

函数原型如下:

#include <fcntl.h>
int creat(const char *pathname, mode_t mode);
返回值:成功返回文件描述符,出错返回-1

此函数等效于:

open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);

crate 函数只能以只写的方式打开所创建的文件,如果想创建一个文件,先写再读,则需要依次调用creat、close,再open。
而使用open函数则可以用下面语句完成:

open(path, O_RDWR | O_CREAT | O_TRUNC, mode);

在这里插入图片描述

🎄四、close 函数

close 函数用于关闭一个文件。
函数原型:

#include <unistd.h>
int close(int fd);

关闭一个文件时,还会释放该进程加在该文件上的所有记录锁。

在这里插入图片描述

🎄五、总结

👉本文简单文件I/O操作的三个函数:open、creat、colse 函数。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

相关文章:

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022

前言 本文分享BEV感知方案中&#xff0c;具有代表性的方法&#xff1a;BEVFormer。 它基于Deformable Attention&#xff0c;实现了一种融合多视角相机空间特征和时序特征的端到端框架&#xff0c;适用于多种自动驾驶感知任务。 主要由3个关键模块组成&#xff1a; BEV Que…...

Amazon Toolkit — CodeWhisperer 使用

tFragment--> 官网&#xff1a;https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具&#xff0c;感慨颇多。下面是安装 和使用的分享。 CodeWhisperer&#xff0c;亚马逊推出的实时 AI 编程助手&#xff0c;是一项基于机器学习…...

Flink SQL填坑记2:Flink和MySQL的Bigdata类型不同导致ClassCastException报错

最近在开发Flink SQL的时候,需要关联Kafka事实表和MySQL维表,得到的数据写入Phoenix表中,但是其中有个字段,Kafka表、MySQL表和Phoenix表都是BigData类型,但是在实现的时候却报“java.math.BigInteger cannot be cast to java.lang.Long”异常,从报错信息来看,是由于Big…...

本地MinIO存储服务如何创建Buckets并实现公网访问上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统&#xff0c;它可以100%的运行在标准硬件上&#xff0c;即X86等…...

通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题

问题描述&#xff1a; 在最近的一个项目中&#xff0c;有一个存在较久&#xff0c;并且只在内部城域网可访问的一个使用Shiro框架进行安全管理的Java应用&#xff0c;该应用部署在Tomcat服务器上。起初&#xff0c;应用程序可以通过HTTP协议访问&#xff0c;一切运行都没…...

Backend - Django 项目创建 运行

目录 一、配置环境 二、创建 Django 项目 &#xff08;一&#xff09;新建文件夹 &#xff08;二&#xff09;打开文件夹 &#xff08;三&#xff09;打开运行终端 &#xff08;四&#xff09;创建基础项目 &#xff08;五&#xff09;创建app 1. 安装Django &#xf…...

C# .Net学习笔记—— Expression 表达式目录树

一、什么是表达式目录树 &#xff08;1&#xff09;Expression我们称为是表达式树&#xff0c;是一种数据结构体&#xff0c;用于存储需要计算&#xff0c;运算的一种结构&#xff0c;这种结构可以只是存储&#xff0c;而不进行运算。通常表达式目录树是配合Lambda一起来使用的…...

《论文阅读28》Unsupervised 3D Shape Completion through GAN Inversion

GAN&#xff0c;全称GenerativeAdversarialNetworks&#xff0c;中文叫生成式对抗网络。顾名思义GAN分为两个模块&#xff0c;生成网络以及判别网络&#xff0c;其中 生成网络负责根据随机向量产生图片、语音等内容&#xff0c;产生的内容是数据集中没有见过的&#xff0c;也可…...

一个正则快速找到在ES中使用profile的时产生慢查询的分片

在es中使用profile分析慢查询的时候&#xff0c;往往因为分片过多&#xff0c;或者因为查询条件太复杂&#xff0c;分析的结果几十万行。在kibana上点半天&#xff0c;也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…...

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中&#xff0c;我们探索了顺序表这一基础的数据结构&#xff0c;它提供了一种有序存储数据的方法&#xff0c;使得数据的访 问和操作变得更加高效。想要进一步了解&#xff0c;大家可以移步于上一篇文章&#xff1a;探索顺序表&#xff1a;数据结构中的秩序之美 今…...

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库&#xff0c;也是最常用的Python GUI库之一&#xff0c;提供了丰富的组件和功能&#xff0c;包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等&#xff0c;方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…...

Axure之中继器的使用(交互动作reperter属性Item属性)

目录 一.中继器的基本使用 二.中继器的动作&#xff08;增删改查&#xff09; 2.1 新增 2.2 删除 2.3 更新行 2.4 效果展示 2.5 模糊查询 三.reperter属性 在Axure中&#xff0c;中继器&#xff08;Repeater&#xff09;是一种功能强大的组件&#xff0c;用于创建重复…...

数字化医疗新篇章:构建智能医保支付购药系统

在迎接数字化医疗时代的挑战和机遇中&#xff0c;智能医保支付购药系统的建设显得尤为重要。本文将深入介绍如何通过先进的技术实现&#xff0c;构建一套智能、高效的医保支付购药系统&#xff0c;为全面建设健康中国贡献力量。 1. 引言 随着医疗科技的飞速发展&#xff0c;…...

11_12-Golang中的运算符

**Golang **中的运算符 主讲教师&#xff1a;&#xff08;大地&#xff09; 合作网站&#xff1a;www.itying.com** **&#xff08;IT 营&#xff09; 我的专栏&#xff1a;https://www.itying.com/category-79-b0.html 1、Golang 内置的运算符 算术运算符关系运算符逻辑运…...

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时&#xff0c;会自动重定向到hostname.html 示例&#xff1a; 测试 版本的升级迭代&#xff0c;之前利用控制器进行滚动更新&#xff0c;在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…...

【redis】redis系统实现发布订阅的标准模板

目录 简介参数配置代码模板 简介 Redis发布订阅功能是Redis的一种消息传递模式&#xff0c;允许多个客户端之间通过消息通道进行实时的消息传递。在发布订阅模式下&#xff0c;消息的发送者被称为发布者&#xff08;publisher&#xff09;&#xff0c;而接收消息的客户端被称为…...

Python 时间日期处理库函数

标准库 datetime >>> import datetime >>> date datetime.date(2023, 12, 20) >>> print(date) 2023-12-20 >>> date datetime.datetime(2023, 12, 20) >>> print(date) 2023-12-20 00:00:00 >>> print(date.strfti…...

第二十二章 : Spring Boot 集成定时任务(一)

第二十二章 &#xff1a; Spring Boot 集成定时任务&#xff08;一&#xff09; 前言 本章知识点&#xff1a; 介绍使用Spring Boot内置的Scheduled注解来实现定时任务-单线程和多线程&#xff1b;以及介绍Quartz定时任务调度框架&#xff1a;简单定时调度器&#xff08;Simp…...

关于“Python”的核心知识点整理大全32

目录 12.6.4 调整飞船的速度 settings.py ship.py alien_invasion.py 12.6.5 限制飞船的活动范围 ship.py 12.6.6 重构 check_events() game_functions.py 12.7 简单回顾 12.7.1 alien_invasion.py 12.7.2 settings.py 12.7.3 game_functions.py 12.7.4 ship.py …...

EVA-01部署教程:Qwen2.5-VL-7B模型服务API封装+NERV风格响应协议

EVA-01部署教程&#xff1a;Qwen2.5-VL-7B模型服务API封装NERV风格响应协议 1. 引言&#xff1a;欢迎来到NERV指挥中心 想象一下&#xff0c;你面前有一个能“看懂”图片的智能助手&#xff0c;但它不是普通的聊天窗口&#xff0c;而是一个充满未来感的机甲驾驶舱。紫色的装甲…...

龙芯2K0300智能车开发避坑指南:从引脚复用冲突到龙邱库完美适配的全流程记录

龙芯2K0300智能车开发实战&#xff1a;引脚复用冲突与龙邱库适配深度解析 第一次将龙芯2K0300处理器应用于智能车开发时&#xff0c;我对着原理图反复确认了三次引脚分配——直到电机突然不受控地高速旋转&#xff0c;才意识到自己掉进了GPIO复用功能的陷阱。这不是普通的嵌入式…...

用DeerFlow做竞品分析:5分钟自动生成全面竞品研究报告

用DeerFlow做竞品分析&#xff1a;5分钟自动生成全面竞品研究报告 1. DeerFlow简介&#xff1a;您的智能研究助手 DeerFlow是一款由字节跳动开源的深度研究自动化工具&#xff0c;它整合了语言模型、网络搜索和代码执行能力&#xff0c;能够快速完成复杂的研究任务。这个工具…...

MoMask:文本驱动3D运动生成技术全解析

MoMask&#xff1a;文本驱动3D运动生成技术全解析 【免费下载链接】momask-codes Official implementation of "MoMask: Generative Masked Modeling of 3D Human Motions (CVPR2024)" 项目地址: https://gitcode.com/gh_mirrors/mo/momask-codes 价值定位&am…...

旧电脑秒变云服务器:用Proxmox VE打造家庭虚拟化实验室(ZFS配置优化版)

旧电脑秒变云服务器&#xff1a;用Proxmox VE打造家庭虚拟化实验室&#xff08;ZFS配置优化版&#xff09; 1. 为什么选择Proxmox VE搭建家庭实验室&#xff1f; 对于个人开发者和技术爱好者来说&#xff0c;拥有一套完整的虚拟化环境是提升技术能力的绝佳途径。Proxmox VE作为…...

PDF-Parser-1.0智能办公:告别手动复制粘贴的PDF处理方案

PDF-Parser-1.0智能办公&#xff1a;告别手动复制粘贴的PDF处理方案 1. 为什么需要智能PDF解析工具 在日常办公场景中&#xff0c;PDF文档处理是一个高频且痛苦的工作环节。根据统计&#xff0c;职场人士平均每周需要处理15-20份PDF文件&#xff0c;包括合同、报告、发票等各…...

GBase 8a云数仓存算分离,“柔性搭建数仓”

传统分析型MPP数据库的搭建&#xff0c;就像装修一套毛坯房&#xff0c;从规划格局到水电改造&#xff0c;从墙面处理到家具进场&#xff0c;每一步都离不开专业师傅&#xff0c;稍有不慎就得返工重来。南大通用&#xff08;gbase database)GBase 8a云数仓&#xff08;GCDW&…...

基于CATIA有限元的焊装夹具Base板应力分析与优化设计

1. 为什么焊装夹具Base板需要应力分析&#xff1f; 在汽车制造领域&#xff0c;焊装夹具是确保车身焊接精度的关键设备。其中Base板作为夹具的支撑基础&#xff0c;承受着来自机器人抓手和工件的全部载荷。很多新手工程师常犯的错误是直接套用经验公式设计&#xff0c;结果要么…...

提升开发效率与编码体验:开源字体LxgwWenKai跨平台配置全指南

提升开发效率与编码体验&#xff1a;开源字体LxgwWenKai跨平台配置全指南 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目&#xff0c;提供了多种版本的字体文件&#xff0c;适用于不同的使用场景&#xff0c;包括屏幕阅读、轻便版、GB规范字形和TC旧字形…...

AceCommon:Arduino嵌入式零堆分配轻量C++工具库

1. AceCommon 库概述&#xff1a;面向嵌入式 Arduino 的轻量级底层工具集AceCommon 是一个专为资源受限的微控制器平台&#xff08;尤其是 Arduino 生态&#xff09;设计的零依赖、低开销 C 工具库。其核心设计哲学是“小而精、无侵入、可复用”。与常见的功能臃肿、依赖繁杂的…...