Linux文件编程——open函数
在 Linux 系统中,文件操作不仅仅通过高级语言的标准库进行,底层的文件操作是通过 系统调用 来实现的。系统调用 是用户空间与操作系统内核之间的接口,允许程序请求操作系统提供的服务,包括文件读写、内存管理、进程控制等。本文将重点介绍 Linux 中与文件操作相关的系统调用,并帮助你理解它们如何与高层库函数(如 fopen()
)协作进行文件编程。
什么是系统调用?
系统调用(System Call)是应用程序与操作系统内核之间的交互方式。用户程序通过系统调用请求操作系统的服务,这些服务通常涉及硬件资源的访问,如文件读写、网络通信、进程控制等。操作系统会提供一个封装好的接口供程序员使用,从而使得程序能够在不直接操作硬件的情况下,依然能够进行诸如文件操作等任务。
文件系统相关的系统调用
在 Linux 中,文件操作常见的系统调用包括 open()
、read()
、write()
、close()
等,它们是进行文件操作的底层函数。与标准库函数(如 fopen()
、fread()
)相比,系统调用提供了更低层次的文件操作方式。
在Linux系统文件编程中,open
函数是用于打开或创建文件的核心系统调用,属于文件I/O操作的基础。以下从函数用法、参数说明、返回值、示例代码以及注意事项几个方面详细介绍。
1. 函数原型
open
函数有两种主要形式,定义在头文件 <fcntl.h>
中:
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>// 形式1:打开已存在的文件
int open(const char *pathname, int flags);// 形式2:打开文件(可创建),并指定权限
int open(const char *pathname, int flags, mode_t mode);
2. 参数说明
-
pathname
要打开的文件路径(绝对路径或相对路径)。
-
flags
文件打开标志,通过按位或(|
)组合使用。常用标志如下:- 访问模式:
O_RDONLY
:只读打开。O_WRONLY
:只写打开。O_RDWR
:读写打开。
- 创建与截断:
O_CREAT
:若文件不存在则创建(需配合mode
参数)。O_EXCL
:与O_CREAT
一起使用,若文件已存在则返回错误(避免竞争条件)。O_TRUNC
:若文件存在且以写模式打开,则清空文件内容。
- 其他行为:
O_APPEND
:追加模式,所有写操作发生在文件末尾。O_NONBLOCK
:非阻塞模式(对设备文件或管道有用)。O_SYNC
:同步I/O,确保数据写入磁盘后再返回。O_DIRECTORY
:仅当路径为目录时才成功。O_NOFOLLOW
:若路径为符号链接,则打开失败。
- 访问模式:
-
mode
文件权限(仅在创建文件时使用),由以下宏组合(定义在<sys/stat.h>
中):- 用户权限:
S_IRUSR
(0400):读权限。S_IWUSR
(0200):写权限。S_IXUSR
(0100):执行权限。
- 组权限:
S_IRGRP
(0040):读权限。S_IWGRP
(0020):写权限。S_IXGRP
(0010):执行权限。
- 其他用户权限:
S_IROTH
(0004):读权限。S_IWOTH
(0002):写权限。S_IXOTH
(0001):执行权限。
- 常用组合:
0644
:用户读写,组和其他只读。0755
:用户读写执行,组和其他读执行。
- 用户权限:
3. 关于mode文件权限
3.1三类用户的定义
- 用户(Owner)
文件的拥有者,通常是创建文件的用户。- 示例:用户
alice
创建了文件test.txt
,则alice
是该文件的用户。
- 示例:用户
- 组(Group)
文件所属的用户组,组内所有成员共享相同的组权限。- 示例:文件
test.txt
的组为developers
,则developers
组内的所有用户(如bob
和charlie
)具有相同的组权限。
- 示例:文件
- 其他用户(Others)
既不是文件拥有者,也不属于文件所属组的用户。- 示例:用户
dave
既不是alice
,也不属于developers
组,则dave
属于“其他用户”。
- 示例:用户
3.2权限的分类
每类用户均可独立设置以下三种权限:
- 读(Read, r)
允许读取文件内容或列出目录内容。 - 写(Write, w)
允许修改文件内容或删除/创建目录中的文件。 - 执行(Execute, x)
- 对文件:允许作为程序执行。
- 对目录:允许进入目录(
cd
)或访问目录下的文件(需结合读权限)。
3.3. 权限的表示方式
(1)数字形式(八进制)
权限通过三位八进制数表示,从高位到低位依次对应用户、组、其他用户的权限。
- 示例:
0644
6
(用户):4
(读) +2
(写) =rw-
4
(组):4
(读) =r--
4
(其他用户):4
(读) =r--
- 实际效果:
- 用户:可读写。
- 组和其他用户:仅可读。
(2)符号形式(ls -l
输出)
- 示例:
-rw-r--r--
- 第一个字符:文件类型(
-
表示普通文件,d
表示目录)。 - 后续三组字符分别对应用户、组、其他用户的权限(
r
、w
、x
或-,r--表示只有读权限
)。
- 第一个字符:文件类型(
3.4. 权限的继承与修改
-
创建文件时的默认权限
通过umask
设置默认权限掩码,实际权限为mode & ~umask
。- 示例:
umask 022
,创建文件时默认权限为0666 & ~022 = 0644
(用户读写,组和其他用户只读)。
- 示例:
-
修改权限
使用chmod
命令或fchmod
系统调用:
chmod 0755 file.txt # 用户:rwx,组和其他用户:r-x
修改用户和组
使用chown
和chgrp
命令:
chown alice file.txt # 修改用户为alice
chgrp developers file.txt # 修改组为developers
3.5注意事项
-
权限的严格性
权限是“最小权限原则”的体现,应避免过度授权(如给其他用户写权限)。 -
目录权限的特殊性
目录的x
权限决定用户能否进入目录或访问其内容(需结合r
权限)。- 示例:目录权限
0750
表示用户可读写执行,组可读执行,其他用户无权限。
- 示例:目录权限
-
符号链接的权限
符号链接的权限位通常无实际意义,实际权限由目标文件决定。
用户类型 | 权限位 | 示例权限(八进制) | 示例权限(符号) | 典型用途 |
---|---|---|---|---|
用户(Owner) | 第1位 | 6 (rw- ) | rw- | 私密文件、可执行程序 |
组(Group) | 第2位 | 4 (r-- ) | r-- | 组内共享文件 |
其他用户(Others) | 第3位 | 4 (r-- ) | r-- | 公共可读文件 |
4. 返回值
- 成功时返回文件描述符(非负整数)。
- 失败时返回
-1
,并设置全局变量errno
表示错误类型。
5. 示例代码
示例1:只读打开文件
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {int fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("Error opening file");return 1;}// 操作文件...close(fd);return 0;
}
示例2:创建文件并写入
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {int fd = open("newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);if (fd == -1) {perror("Error creating file");return 1;}const char *text = "Hello, world!\n";write(fd, text, 13);close(fd);return 0;
}
示例3:追加模式打开文件
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {int fd = open("logfile.txt", O_WRONLY | O_APPEND | O_CREAT, 0644);if (fd == -1) {perror("Error opening log file");return 1;}const char *log = "New log entry\n";write(fd, log, 14);close(fd);return 0;
}
6. 注意事项
- 错误处理
- 始终检查
open
的返回值,失败时通过perror
或strerror(errno)
输出错误信息。 - 常见错误:
EACCES
:权限不足。ENOENT
:文件不存在且未指定O_CREAT
。EISDIR
:路径为目录但尝试以写模式打开。EMFILE
:进程已打开的文件数达到上限。ENFILE
:系统文件表已满。
- 始终检查
- 资源管理
- 打开文件后务必调用
close
释放文件描述符,避免资源泄漏。 - 文件描述符是有限的系统资源(默认上限通常为1024)。
- 打开文件后务必调用
- 并发与竞争条件
- 使用
O_CREAT | O_EXCL
组合可确保文件由当前进程创建,避免多进程竞争。
- 使用
- 权限与umask
- 实际文件权限为
mode & ~umask
,若需精确控制权限,可在程序开始时调用umask(0)
。
- 实际文件权限为
- 非阻塞模式
- 对设备文件或管道使用
O_NONBLOCK
时,需注意read
或write
可能立即返回-1
并设置errno
为EAGAIN
或EWOULDBLOCK
。
- 对设备文件或管道使用
- 符号链接
- 若需避免解析符号链接,使用
O_NOFOLLOW
标志。
- 若需避免解析符号链接,使用
- 大文件支持
- 对大于2GB的文件,需使用
O_LARGEFILE
标志(现代Linux内核默认支持大文件,通常无需显式指定)。
- 对大于2GB的文件,需使用
7. 总结
open
函数是Linux文件编程的基础,通过灵活组合flags
和mode
参数,可实现各种文件操作需求。正确处理错误、管理资源以及注意并发和权限问题是编写健壮程序的关键。
相关文章:
Linux文件编程——open函数
在 Linux 系统中,文件操作不仅仅通过高级语言的标准库进行,底层的文件操作是通过 系统调用 来实现的。系统调用 是用户空间与操作系统内核之间的接口,允许程序请求操作系统提供的服务,包括文件读写、内存管理、进程控制等。本文将…...
Linux-Ext系列文件系统
1.理解硬件 1.1磁盘 机械磁盘是计算机中唯⼀的⼀个机械设备 磁盘---外设 慢 容量⼤,价格便宜 1.2磁盘的物理结构 1.3磁盘的存储结构 扇区:是磁盘存储数据的基本单位,512字节,块设备 如何定位⼀个扇区呢? 可以先定…...
Multisim14使用教程详尽版--(2025最新版)
一、Multisim14前言 1.1、主流电路仿真软件 1. Multisim:NI开发的SPICE标准仿真工具,支持模拟/数字电路混合仿真,内置丰富的元件库和虚拟仪器(示波器、频谱仪等),适合教学和竞赛设计。官网:艾…...
C——猜数字游戏
前面我们已经学习了C语言常见概念,数据类型和变量以及分置于循环的内容,现在我们可以将这些内容结合起来写一个有趣的小游戏。下面正式开始我们今天的主题——猜数字游戏的实现。 猜数字游戏的要求: 1.电脑自动生成1~100的随机数。 2.玩家…...
【iOS】SDWebImage源码学习
SDWebImage源码学习 文章目录 SDWebImage源码学习前言SDWebImage缓存流程sd_setImageWithURL(UIImageViewWebCache层)sd_internalSetImageWithURL(UIViewWebCache层)loadImageWithURL(SDWebManger层)queryCacheOperationForKey(SDImageCache层)删除缓存 callDownloadProcessFor…...
.Net HttpClient 处理响应数据
HttpClient 处理响应数据 1、初始化及全局设置 //初始化:必须先执行一次 #!import ./ini.ipynb2、处理响应状态 //判断响应码:正常 {var response await SharedClient.GetAsync("api/Normal/GetAccount?id1");if(response.StatusCode Sy…...
【心海资源】【最新话费盗u】【未测】提币对方官方波场+没有任何加密+无后门+前端VUE
提笔接口请使用官方提笔,第三方提笔都有风险 后门你们也扫扫,这种源码风险大,自己玩玩学习进行了 重要的事情说三遍 !!!!!!!!!&…...
Python中的标识、相等性与别名:深入理解对象引用机制
在Python编程中,理解变量如何引用对象以及对象之间的比较方式是至关重要的基础概念。本文将通过Lewis Carroll的笔名示例,深入探讨Python中的对象标识、相等性判断以及别名机制。 别名现象:变量共享同一对象 >>> charles {name: …...
Java 1.8(也称为Java 8)
Java 1.8(也称为Java 8)是Oracle于2014年发布的一个重要版本,引入了许多新特性和改进,极大地提升了Java语言的表达力和开发效率。以下是Java 1.8的主要新特性: ### 1. Lambda表达式 Lambda表达式是Java 1.8最具革命性…...
LVGL简易计算器实战
文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…...
Linux | Uboot-Logo 修改文档(第十七天)
01 Uboot 修改 首先我们在 home 目录下新建一个文件夹 imx6ull,然后打开 i.MX6ULL 终结者光盘资料\05_uboot linux源码,在 window 下解压下图箭头所指的压缩包,解压后分别得到 linux-imx-rel_imx_4.1.15_2.1.0_ga_20200323.tar.gz 和 uboot-imx-rel_imx_4.1.15_2.1.0_…...
数字孪生概念
数字孪生(Digital Twin) 是指通过数字技术对物理实体(如设备、系统、流程或环境)进行高保真建模和实时动态映射,实现虚实交互、仿真预测和优化决策的技术体系。它是工业4.0、智慧城市和数字化转型的核心技术之一。 1. …...
c++STL-string的使用
这里写自定义目录标题 string的使用string写成类模板的原因string的版本举例构造、析构函数和赋值重载构造函数和析构函数operator Iterators迭代器begin和endrbegin和rendcbegin和cend,crbegin和crend(c11) capacity容量有关函数不同编译器下…...
总结C/C++中程序内存区域划分
C/C程序内存分配的⼏个区域 1..栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,…...
C# 方法(方法重载)
本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 方法重载 一个类中可以有多个…...
Dockerfile 完全指南:从入门到最佳实践
Dockerfile 完全指南:从入门到最佳实践 1. Dockerfile 简介与作用 Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。它允许开发者通过简单的指令定义镜像的构建过程,实现自动化、可重复的镜像构建。 主要作用…...
DEEPPOLAR:通过深度学习发明非线性大核极坐标码(2)
目录 2.问题的提出和背景 2.1 信道编码 2.2.极化码 极坐标编码 极坐标解码 原文:《DEEPPOLAR: Inventing Nonlinear Large-Kernel Polar Codes via Deep Learning》 2.问题的提出和背景 2.1 信道编码 信道编码是一种为传输添加冗余的技术,使其对…...
ESP32-S3 学习笔记(1)
ESP32-S3 学习笔记(1) 背景环境添加工程文件材料准备轻触开关的正负极 背景 闲来无事,看到立创论坛上有许多大佬开源的项目,甚是厉害,于是决定自己也来搞一搞,同时可以做一些技术积累,看了很…...
Python Cookbook-7.9 访问 MySQL 数据库
任务 想访问一个 MySQL 数据库。 解决方案 MySQLdb 模块正是为这种任务而设计的: import MySQLdb #创建一个连接对象,再用它创建游标 con = MySQLdb.connect(host = "127.0.0.1", port = 3306, user = "joe",<...
docker安装superset实践
1、拉取docker镜像 docker pull apache/superset:latest 2、安装superset容器 mkdir /usr/local/develop/docker/superset/ -p touch /usr/local/develop/docker/superset/superset_config.py superset_config.py配置文件如下: SQLALCHEMY_DATABASE_URI mysql:…...
Web开发—Vue工程化
文章目录 前言 Vue工程化 一、介绍 二、环境准备 1.介绍create-vue 2.NodeJS安装 3.npm介绍 三,Vue项目创建 四,项目结构 五,启动项目 六,Vue项目开发流程 七,API风格 前言 Vue工程化 前面我们在介绍Vue的时候&#…...
什么是硬件中断请求号?什么是中断向量号?
一、硬件中断请求号(IRQ,Interrupt Request Number) 定义: 硬件中断请求号(IRQ)是硬件设备向CPU发送中断请求时使用的唯一标识符,用于区分不同的中断源。例如,键盘、硬盘等外设…...
[Java实战]Spring Boot 定时任务(十五)
[Java实战]Spring Boot 定时任务(十五) 一、定时任务的应用场景 数据同步:每日凌晨同步第三方数据状态检查:每5分钟扫描订单超时未支付资源清理:每小时清理临时文件报表生成:每月1号生成财务统计报表通知…...
OpenWrt开发第7篇:OpenWrt配置支持Web界面
文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 OpenWrt的luci是一个基于Web的图形化管理界面,为用户提供了直观的操作方式,无需命令行即可完成大部分功能的配置。 1.在终端输入ma…...
【多模态】IMAGEBIND论文阅读
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 IMAGEBIND 多模态论文梗概 IMAGEBIND是一种夸模态的神经网络,以图片为中心,联合六中模态的网络(图片、文…...
【C语言干货】二维数组传参本质
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、二维数组的内存布局 1.二维数组的实质2.二维数组的地址关系 二、二维数组传参的本质 1.参数传递的退化机制2.三种等效的函数声明方式 总结 前言 提示&#…...
基于SpringBoot的抽奖系统测试报告
一、编写目的 本报告为抽奖系统测试报告,本项目可用于团体抽奖活动,包括了用户注册,用户登录,修改奖项以及抽奖等功能。 二、项目背景 抽奖系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据&…...
Go语言从零构建SQL数据库(9)-数据库优化器的双剑客
数据库优化器的双剑客:谓词下推与列裁剪 在数据库查询优化的世界里,有两位特别重要的"超级英雄":谓词下推和列裁剪。这两种优化技术虽然简单,却能带来惊人的性能提升。今天,我们就来揭开它们的神秘面纱&…...
C++中什么是函数指针?
在C中,函数指针是一个指向函数的指针变量。通过函数指针,我们可以像使用函数一样调用它所指向的函数,常用于实现回调函数、函数指针数组等功能。 以下是一个简单的C代码示例,展示了函数指针的使用: cpp #include <…...
Python工具链UV整合环境管理
Python工具链UV整合环境管理 终极Python工具链UV:从依赖管理到项目开发的全维度解析一、引言:重新定义Python开发的大一统时代二、深度安装指南:多场景适配方案1. 官方独立安装器(推荐方案)2. 进阶安装方式3. 安装验证…...
RuoYi-v4.7.8 jar/war部署
准备条件 jdk-8u73-windows-x64.exe mysql5.7 apache-tomcat-9.0.60 apache-maven-3.8.1 RuoYi-v4.7.8.zip (官网 RuoYi) 登录gitee,选择标签要下载的版本好,点击克隆下载zip压缩文件 安装maven Apache Archive Distribution Directory…...
基于SpringBoot的小区停车位管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
张量并行优质博客
必读图解系列1 比较全面的相关文献总结博客,可以重点看一下其中的行列切分算子2 # 图解大模型训练之:张量模型并行(TP),Megatron-LM ↩︎ # 大规模分布式 AI 模型训练系列——张量并行 ↩︎...
汽车诊断简介
历史 20世纪80年代,由于美国西海岸严重的雾霾问题,CARB(加州空气资源委员会)通过了一项法律,要求对机动车辆进行车载监测诊断。这推动了OBD-I的引入,并在1990年代被OBD II取代。与此同时,欧洲也…...
suricata之规则去重
一、环境和背景 1.1 环境 OS: Ubuntu 22.04.5 LTS IDE: vscode suricata: suricata 7.0.5 1.2 背景 在添加规则时,为了给规则分类,将不同类别的规则写入不同的文件。 在规则加载时两条不同的规则却被认为是重复的,因此记录一下去重逻辑。…...
接口在函数参数和对象类型中的应用
在 TypeScript 中,接口(interface)是一种强大的工具,用于定义和约束对象的结构。它不仅可以用于描述对象类型,还能够用于定义函数的参数和返回类型。接口可以提高代码的可读性、可维护性,并帮助捕捉潜在的错…...
Javascript:数组和函数
数组 创建数组 使用new创建 let arrnew array(数组大小); 直接赋值创建 let Arr2[];let Arr3[1,A,"HELLLO"]; 这里JS的数组里面的元素属性可以各不相同 演示代码 <script>let Arr1new Array(5);let Arr2[];let Arr3[1,A,"HELLLO"];console.…...
Vue Router
Vue Router:前端路由跳转的魔法 什么是Vue Router Vue Router是Vue官方的路由管理器,它允许我们在不重新加载页面的情况下更改浏览器中显示的内容,实现单页应用(SPA)的无缝导航体验。 📊 Vue Router工作流程图 #mermaid-svg-xNtkA0qYMjB0lvUt {font-family:"trebu…...
谷歌与微软的AI战争:搜索、云服务与生态布局
谷歌与微软的AI战争:搜索、云服务与生态布局 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 谷歌与微软的AI战争:搜索、云服务与生态布局摘要引言技术路线对比1. AI基础设施:算力…...
robomaster机甲大师--电调电机
文章目录 C620电调ID设置速率 电调发送报文电调接收报文cubemx程序初始化发送接收 C620电调 ID设置 速率 1Mbps 电调发送报文 发送的数据为控制电机的输出电流,需要将can数据帧的ID设置为0x200 电调接收报文 机械角度:电机的0到360度映射到0到几千转…...
菜鸟之路day31一一MySQL之多表设计
菜鸟之路day31一一MySQL之多表设计 作者:blue 时间:2025.5.9 文章目录 菜鸟之路day31一一MySQL之多表设计0.概述一.多表设计1.1一对多1.2一对一1.3多对多 0.概述 内容学习自黑马程序员BV1m84y1w7Tb 一.多表设计 1.1一对多 一对多关系实现ÿ…...
害怕和别人发生冲突怎么办? --deepseek
害怕与他人发生冲突是一种常见的心理状态,可能源于对关系破裂、被否定或情绪失控的担忧。但这种恐惧长期存在会影响自我表达和人际关系。以下是分步骤的应对策略,帮助你逐步建立应对冲突的自信: 第一步:理解你的恐惧根源 自我提问…...
Go语言——kratos微服务框架使用
文章目录 一、安装依赖二、创建项目三、初始化项目四、使用git_bash命令终端运行命令五、创建自己的项目1、修改app.proto3、internal/service/app.go4、修改internal/service/service.go文件5、创建internal/biz/content.go文件6、修改internal/biz/biz.go文件7、创建internal…...
无人机飞控算法开发实战:从零到一构建企业级飞控系统
简介 无人机飞控算法是实现稳定飞行和精确控制的核心技术,涉及飞行动力学建模、传感器数据处理、状态估计和控制策略等多个环节。本实战指南将系统讲解四旋翼无人机飞控算法的开发流程,包括飞行动力学模型建立、传感器校准与数据融合、主流控制算法实现(PID、ADRC、EKF)以…...
MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构
大家好,我是此林。 目录 1. 前言 2. minimind模型源码解读 1. MiniMind Config部分 1.1. 基础参数 1.2. MOE配置 2. MiniMind Model 部分 2.1. MiniMindForCausalLM: 用于语言建模任务 2.2. 主干模型 MiniMindModel 2.3. MiniMindBlock: 模型的基本构建块…...
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
5.LC 零矩阵(中等) 面试题 01.08. 零矩阵 - 力扣(LeetCode) 思想: 法一: 利用两个集合分别储存要清0的行和列索引 另外两种原地优化空间的做法暂时不是目前刷题目标,故不考虑 代码 c: class Solution { public:void setZeroes(vector&l…...
POSIX信号量
目录 一、相关概念回顾 1.信号量 2.多线程使用资源的两种情况 3.P操作和V操作 二、CP && 基于环形队列的生产者消费者模型 1.环形队列的介绍 编辑 2.基于环形队列的生产者消费者模型的默认规则(通过信号量实现规则的成立) 3.相关的结论…...
前端Web开发HTML5+CSS3+移动web(基础-flex)
网页设计套路:从上到下,从整体到局部 1:HTML定义: (1)超文本是点击可以页面来回切换的链接 (2)标记就是标签语言 2:标签的语法 (1&…...
Java 原生异步编程与Spring 异步编程 详解
简介 Java 异步编程是现代高性能应用开发的核心技术之一,它允许程序在执行耗时操作(如网络请求、文件 IO)时不必阻塞主线程,从而提高系统吞吐量和响应性。 异步 vs 同步 同步:任务按顺序执行,后续任务需…...
AUTOSAR图解==>AUTOSAR_TR_HWTestManagementIntegrationGuide
AUTOSAR硬件测试管理集成指南 启动和关闭阶段硬件测试管理的规范与集成 目录 文档概述 1.1 文档范围 1.2 局限性目标与动机 2.1 目标 2.2 动机 2.3 用例约束与假设缩略语与术语相关文档HTMSS AUTOSAR集成方法HTMSS功能描述AUTOSAR架构解决方案 8.1 HTMSS系统架构 8.2 HTMSS启动…...