Arm Linux 串口 open 标志引起的问题

news2025/1/10 22:30:42

一、测试环境

硬件:nuc980 开发版
系统:Linux 4.4

二、open 函数描述

函数 open 的介绍
头文件

#include <fcntl.h>

原型

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

标志说明
在这里插入图片描述

       O_CREAT 时,mode 参数如下:
              If pathname does not exist, create it as a regular file.

              The owner (user ID) of the new file is set to the effective user ID of the process.

              The  group  ownership  (group ID) of the new file is set either to the effective group ID of the process (System V semantics) or to the group ID of the parent directory (BSD semantics).
              On Linux, the behavior depends on whether the set-group-ID mode bit is set on the parent directory: if that bit is set, then BSD semantics apply; otherwise, System  V  semantics  apply.
              For some filesystems, the behavior also depends on the bsdgroups and sysvgroups mount options described in mount(8).

              The  mode  argument specifies the file mode bits to be applied when a new file is created.  If neither O_CREAT nor O_TMPFILE is specified in flags, then mode is ignored (and can thus be
              specified as 0, or simply omitted).  The mode argument must be supplied if O_CREAT or O_TMPFILE is specified in flags; if it is not supplied, some arbitrary bytes from the stack will be
              applied as the file mode.

              The effective mode is modified by the process's umask in the usual way: in the absence of a default ACL, the mode of the created file is (mode & ~umask).

              Note that mode applies only to future accesses of the newly created file; the open() call that creates a read-only file may well return a read/write file descriptor.

              The following symbolic constants are provided for mode:

              S_IRWXU  00700 user (file owner) has read, write, and execute permission

              S_IRUSR  00400 user has read permission

              S_IWUSR  00200 user has write permission

              S_IXUSR  00100 user has execute permission

              S_IRWXG  00070 group has read, write, and execute permission

              S_IRGRP  00040 group has read permission

              S_IWGRP  00020 group has write permission

              S_IXGRP  00010 group has execute permission

              S_IRWXO  00007 others have read, write, and execute permission

              S_IROTH  00004 others have read permission

              S_IWOTH  00002 others have write permission

              S_IXOTH  00001 others have execute permission

              According to POSIX, the effect when other bits are set in mode is unspecified.  On Linux, the following bits are also honored in mode:

              S_ISUID  0004000 set-user-ID bit

              S_ISGID  0002000 set-group-ID bit (see inode(7)).

              S_ISVTX  0001000 sticky bit (see inode(7)).

三、问题描述和解决办法

open 原 标志是

O_RDWR | O_NOCTTY

当程序意外关闭并且重新启动后,发现串口不能使用,发送数据失败。
解决办法:
将 标志改为

O_RDWR | O_NOCTTY | O_NDELAY | O_EXCL

或者

O_RDWR | O_NOCTTY | O_NDELAY

测试程序意外关闭后,重新启动程序,串口可正常发送数据。

  O_NDELAY 标志在 Linux 的 open 函数中与 O_NONBLOCK 标志是等价的。这两个标志都用于以非阻塞方式打开文件或设备。当使用这些标志时,如果操作不能立即完成(例如,读操作没有数据可读),则调用会立即返回,而不是等待操作完成。
  具体来说,当以非阻塞方式打开文件或设备时,如果尝试进行读操作但当前没有数据可读,那么读调用会立即返回一个错误(通常是 -EAGAIN 或 -EWOULDBLOCK),而不是阻塞等待数据到达。同样,如果尝试进行写操作但当前无法立即写入数据(例如,因为缓冲区已满),写调用也会立即返回错误。
  这种非阻塞模式特别适用于需要同时处理多个输入/输出操作的应用程序,因为它允许程序在等待操作完成时继续执行其他任务,从而提高了程序的响应性和效率。
  在编写使用 open 函数和 O_NDELAY(或 O_NONBLOCK)标志的程序时,开发者需要准备好处理可能的即时错误返回,并根据应用程序的逻辑采取适当的行动(例如,稍后重试操作、记录错误或通知用户)。
  请注意,虽然 O_NDELAY 和 O_NONBLOCK 在功能上等价,但不同的系统和库可能会倾向于使用其中一个名称。在编写可移植的代码时,最好查阅目标平台的文档以了解具体使用哪个标志。然而,在大多数现代 Linux 系统上,这两个标志是可以互换使用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW开发HVAC总成真空检测及监控系统

在HVAC&#xff08;Heating, Ventilation, and Air Conditioning&#xff0c;供暖、通风与空气调节&#xff09;总成制造过程中&#xff0c;真空检测是确保产品质量的重要环节。真空度是判断HVAC总成密封性能和气密性的关键指标&#xff0c;因此需要一个自动化、精准且可追溯的…

上海泌尿专家来黄山新晨医院义诊,解决患者前列腺等疑难疾病

为满足广大男性对自身健康的关爱、让男性患者不出远门&#xff0c;就能享受到高质量的上海男科诊疗服务&#xff0c;7月28日黄山新晨医院特邀请上海第四人民医院泌尿外科周铁主任团队到院&#xff0c;开展男科疾病义诊活动。 周铁主任为中华医学会泌尿外科分会男科学组委员&…

【docker系列】docker删除指定容器

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

超详细!!!electron-vite-vue开发桌面应用之Electron Forge打包项目(三)

云风网 云风笔记 云风知识库 electronforge可将前端静态页面打包成.exe、.deb和.rpm等&#xff0c;能适配各种平台 一、安装依赖 cd my-app npm install --save-dev electron-forge/cli npm exec --packageelectron-forge/cli -c "electron-forge import"安装后pack…

Prostgresql的Timescaledb插件/扩展部署

背景&#xff1a;研发需求&#xff0c;需要把docker部署得postgresql迁移到新的节点并要求再本地部署&#xff0c;提前查看数据库需要那些插件&#xff0c;并进行安装&#xff0c;docker部署的默认有插件。 版本对比&#xff1a;postgresql版本对应某个Timescaledb版本 我得p…

登录过程记录

过程&#xff1a; 未登录状态打开我的消息页-》调用后端接口查询登录状态->后端接口从cookie里拿lt,判断是否登录-》未登录&#xff0c;携带页面链接(我的消息)跳转passport【单点登录服务】 登录页-》输入验证码提交后-》验证成功-》根据用户信息生成票据-》携带票据和我的…

下载 MC Minecraft Launcher 我的世界 启动器下载

下载地址&#xff1a; https://mc-launcher.com/wp/minecraft/ 我们下期见&#xff0c;拜拜&#xff01;

超详细排序汇总--插入排序类,选择排序类,交换排序类,归并排序,非比较排序

博客中所有代码均在leetcode912. 排序数组中执行 &#xff08;一&#xff09;插入排序类 1、直接插入排序 1&#xff09;思路 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],…,array[i-1]已经排好序&#xff0c;此时用array[i]的排序码与array[i-1],array[…

“论软件体系结构的演化”写作框架,软考高级,系统架构设计师

论文真题 软件体系结构的演化是在构件开发过程中或软件开发完毕投入运行后&#xff0c;由于用户需求发生变化&#xff0c;就必须相应地修改原有软件体系结构&#xff0c;以满足新的变化了的软件需求的过程。体系结构的演化是一个复杂的、难以管理的问题。 请围绕“论软件体系…

【go语言】go-webview2用法(持续更新)

文章目录 背景核心接口和方法扩展接口遗憾的是 背景 目前为止&#xff0c;已经有很多优秀的electron应用。但其特点也很明显&#xff1a;使用htmlcssjs构建的布局很精致&#xff0c;但是体积不容小觑&#xff08;最新版electron-egg打包出来的程序已经300MB&#xff09;。 vs…

共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

【JAVA入门】Day20 - 正则表达式

【JAVA入门】Day20 - 正则表达式 文章目录 【JAVA入门】Day20 - 正则表达式一、正则表达式使用的注意事项1.1 一个 [ ] 匹配一个字符1.2 表示“或者”的表达式可以再用一个 [ ] 括起来1.3 &&表示“而且”1.4 ^表示“非” 二、预定义字符&#xff08;只能匹配一个字符&a…

PCB结构

覆铜板&#xff08;Copper Clad Laminate&#xff0c;CCL&#xff09;是PCB&#xff08;Printed Circuit Board&#xff0c;印制电路板&#xff09;的主体&#xff0c;由基材和覆在其表面上的一层铜箔组成&#xff0c;基材通常是由增强材料&#xff08;如玻璃纤维织物&#xff…

Qt 系统相关 - 事件

目录 1. 事件介绍 2. 事件的处理 示例1&#xff1a;处理鼠标进入和离开 示例2&#xff1a;当鼠标点击时&#xff0c;获取对应的坐标值&#xff1b; 3. 按键事件 3.1 单个按键 3.2 组合按键 4. 鼠标事件 4.1 鼠标单击事件 4.2 鼠标释放事件 4.3 鼠标双击事件 4.4 鼠标…

一篇文章了解上位机软件架构

软件架构 上位机基本软件架构**UI层****业务层&#xff08;承上启下&#xff09;****驱动层** 上位机基本软件架构 基本上所有软件都可以分为三层结构进行设计&#xff0c;ui界面层&#xff0c;中间业务逻辑层&#xff0c;驱动层&#xff0c;各个层级之间相互联系&#xff0c;…

汇编编译环境的安装

目录 1. 下载安装包 1.1 迅雷下载链接 1.2 Gitee下载 2. 安装 1. 下载安装包 1.1 迅雷下载链接 迅雷云盘迅雷云盘https://pan.xunlei.com/s/VO4AFFTT3ls2zGSOvFOLSP_mA1?pwdkmeh# 1.2 Gitee下载 assembler language: assembler languagehttps://gitee.com/Axurea/asse…

软考高级:数据库设计中,属性冲突、命名冲突、结构冲突

在数据库设计中&#xff0c;属性冲突、命名冲突和结构冲突是常见的问题&#xff0c;它们主要涉及不同数据源或表之间的数据整合和管理。下面我们通过通俗易懂的例子和解释来理解这些概念。 通俗示例 想象你有两家书店&#xff0c;它们各自维护一份图书的库存记录。 属性冲突…

高质量翻译对中国开发者提高游戏用户参与度的影响

随着中国游戏开发商继续向全球市场扩张&#xff0c;用户参与度成为其游戏成功的关键因素。在竞争激烈的行业中&#xff0c;玩家有无数选择可供选择&#xff0c;保持用户参与对于维持游戏的流行和增长至关重要。高质量的翻译在这一过程中起着至关重要的作用&#xff0c;确保游戏…

动力电池制造行业RFID产品应用方案

在全球能源转型的大背景下&#xff0c;新能源汽车产业蓬勃发展&#xff0c;动力电池作为其核心部件&#xff0c;其性能和质量至关重要。然而&#xff0c;当前国内上百家动力电池生产企业在自动化和信息化方面存在诸多不足&#xff0c;严重制约了行业的发展。实现动力电池的智能…

邦德创意研发的果皮咖啡,让喝咖啡也能有喝奶茶的满足感

在当下咖啡饮品市场中&#xff0c;果咖早已不是新鲜事物。它们以各式各样的水果与咖啡的融合&#xff0c;为咖啡爱好者带来新鲜的味觉体验。然而&#xff0c;很多果咖饮品虽色彩斑斓、风味独特&#xff0c;却往往止步于水果和咖啡的直接混合&#xff0c;未能触及更深层次的健康…