嵌入式学习 Day 26

news2024/11/18 15:31:49

数组指针和指针数组  (题外话)                   

数组指针:数组指针是一种指针,它指向一个数组的首地址。在C语言中,数组名本身就是一个指向数组首地址的指针,因此数组名可以被赋值给指针变量,也可以作为函数参数传递。

int (*parr)[5]; // 定义一个指向长度为5的整型数组的指针

指针数组:指针数组是一个数组,其中的每个元素都是一个指针。每个指针指向内存中的某个位置,可以是另一个变量、数组或者函数等。在C语言中,指针数组通常用于存储不同类型的数据或者对象。

int *ptrArr[3]; // 声明一个包含3个整型指针的数组

1.进程间的通信:

    1.管道
    2.信号
    3.消息队列
    4.共享内存
    5.信号灯
    6.套接字

1.管道:
    1.无名管道

        无名管道只能用于具有亲缘关系的进程间通信

        pipe
        int pipe(int pipefd[2]);
        功能:
            创建一个无名管道
        参数:
            pipefd[0]:读管道文件描述符
            pipefd[1]:写管道文件描述符
        返回值:
            成功返回0 
            失败返回-1 

无名管道特性:
1.管道中至少有一个写端: 
          读取数据时,如果管道中有数据直接读取,管道中没有数据阻塞等待直到有数据写入读出,继续向后执行
 2.管道中没有写端:
          读取数据时,如果管道中有数据直接读取,管道中没有数据不阻塞等待直接向下执行
 3.管道中至少有一个读端:
           写入数据时,如果管道中没有存满(64k),则直接写入,管道中如果存满,则阻塞等待直到有数据读出,才能继续写入
 4.管道中没有读端:
           写入数据时,会产生管道破裂错误,导致程序崩溃


    2.有名管道

        打开管道文件 -> 读写管道文件 -> 关闭管道文件

        注意:有名管道必须读写两端同时加入才能继续向下执行

        1.mkfifo 
          int mkfifo(const char *pathname, mode_t mode);
          功能:
            创建一个管道文件
          参数:
            pathname:管道文件路径
            mode:权限
          返回值:
            成功返回0 
            失败返回-1 

    练习:
        编写两个进程A B  实现两个进程的全双工通信

进程A

进程B

2.信号:

    信号用来实现内核层和用户层信息的交互,也可以用来实现进程间通信

    1.信号的种类:

        kill -l 

         1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
         6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
        11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
        16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
        21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
        26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
        31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
        38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
        43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
        48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
        53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
        58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
        63) SIGRTMAX-1    64) SIGRTMAX    

    2.信号处理方式:

        1.缺省:
            按照系统默认的方式处理
        2.忽略:
            不响应信号
        3.捕捉:
            按照自定义方式处理信号

        9号信号SIGKILL
        19号信号SIGSTOP 
        这两个信号不能被忽略和捕捉

        以下三个信号可以从键盘输入:
        SIGINT:ctrl + c 
        SIGQUIT:ctrl + \
        SIGTSTP:ctrl + z

    3.signal 

        typedef void (*sighandler_t)(int);
        sighandler_t signal(int signum, sighandler_t handler);
        功能:
            改变信号的处理方式
        参数:
            signum:信号的编号
            handler:信号的处理方式
                SIG_IGN     忽略处理
                SIG_DFL     缺省处理
                函数首地址   捕捉处理
        返回值:
            成功返回之前处理函数的首地址
            失败返回SIG_ERR 

 

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

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

相关文章

07 Qt自绘组件:图片预览小组件ImageViewer

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起:自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起:自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件:令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

使用Jenkins部署前端Vue项目和后端Java服务

Jenkins安装相关插件,供后续使用(Dashboard - Manage Jenkins - Plugins) Maven Integration plugin https://plugins.jenkins.io/maven-plugin CloudBees Docker Build and Publish pluginhttps://plugins.jenkins.io/docker-build-publish…

Unity中的UI系统之GUI

目录 概述工作原理和主要作用基础控件重要参数及文本和按钮多选框和单选框输入框和拖动条图片绘制和框 复合控件工具栏和选择网络滚动视图和分组窗口 自定义整体样式自定义皮肤样式 概述 什么是UI系统 UI是User Interface(用户界面)的简称,用…

【pytorch】函数记录

你好你好! 以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 torch.sum()torch.argmax()torch.nn.Parametertorch.unbindtorch.optim.Adam()[^adam]torch.cattorch.unsqueeze()torch.normalize()[^l2]torch.eyetorch.mmto…

网站https证书申请方式

网站HTTPS证书,也称为SSL证书或TLS证书,是一种数字证书,用于在用户浏览器与网站服务器之间建立安全的加密连接。当网站安装了HTTPS证书后,用户访问该网站时,浏览器地址栏会显示为"https://"开头,…

NoSQL--虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先,导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作: 1.1.2.1 点击开启虚拟机: 1.1.2.2 默认选择回车CentOS Linux(3.10.0-1127.e17.x86_64) 7 …

微服务架构 SpringCloud

单体应用架构 将项目所有模块(功能)打成jar或者war,然后部署一个进程--医院挂号系统; > 优点: > 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。 > 2:技术单一:项目不需要复杂的技术栈,往往一套熟悉的…

STM32标准库开发—硬件SPI外设

SPI外设简介 SPI1与SPI2所挂载的总线位置不一样,所以时钟频率也不一样,SPI2挂载在APB1时钟频率为36MHZ是SPI1的一半 I2S是一种音频传输协议,适用于STM32大容量产品 一般来说串口发送数据时是低位先行,SPI通信是高位先行 SPI框图 发…

173基于matlab的经典STAP处理机载雷达信号

基于matlab的经典STAP处理机载雷达信号,空时自适应信号处理的典型算法、滤波器和相关参数的仿真,程序已调通,可直接运行。 173 matlab 空时自适应信号处理 STAR (xiaohongshu.com)https://www.xiaohongshu.com/explore/65d9cf11000000000102b…

谷歌seo推广好还是竞价排名好?

事实上seo跟sem竞价并没有任何冲突,也并没有哪个更好的说法,关键在于理解它们各自的优势与局限性,并根据你的业务,预算来配合 Seo推广的优势在于成本,只要你的网站在搜索结果获得高排名,就能有源源不断的点…

GaN建模:强大但富有挑战性

来源:Modeling GaN: Powerful but Challenging(10年) 文章的研究内容 这篇文章主要研究了氮化镓(GaN)高电子迁移率晶体管(HEMTs)的建模问题。GaN HEMTs是微波频段高功率发射器设计中的关键技术…

azure devops工具实践分析

对azure devops此工具的功能深挖,结合jira的使用经验的分析 1、在backlog的功能描述,可理解为需求项,这里包括了bug,从开发的角度修复bug也是个工作项,所以需求的范围是真正的需求(开发接收到的已经确认的…

【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

目录 PodKubernetes 网络模型同一Pod上的容器之间进行通信同一Node上的不同Pod之间进行通信不同Node上的Pod之间进行通信Service参考 Pod 首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并封装一…

Spring 事务传播机制

事务传播机制:多个事务⽅法存在调⽤关系时, 事务是如何在这些⽅法间进⾏传播的。 ⽐如:有两个⽅法A,B都被 Transactional 修饰,,A⽅法调⽤B⽅法 A⽅法运⾏时, 会开启⼀个事务。当A调⽤B时, B⽅法本⾝也有事务&#xf…

Golang Base64 编码:Go语言编码全面指南

在编码和解码数据的领域中,Base64作为一种广泛使用的方案脱颖而出,它提供了二进制数据的紧凑表示形式。Golang凭借其强大的标准库,提供了一种无缝且高效的方式来执行Base64编码。在这篇博客文章中,我们将通过Golang的Base64编码能…

mysql修改字段的长度锁表问题

mysql修改字段的长度锁表问题 背景 MySQL(这里指5.6及其后续版本)修改字段的长度锁表会锁表吗?答案是可能会但不一定会 具体原理 MySQL 5.6 及以后版本扩大字段长度 支持 online ddl in-place 模式,而这将不会锁表。varchar 表示…

链表之“带头双向循环链表”

目录 ​编辑 1.链表的分类 2.带头双向循环链表的实现 1.创建结构体 2.创建返回链表的头节点 3.双向链表销毁 4.双向链表打印 5.双向链表尾插 6.双向链表尾删 7.双向链表头插 8.双向链表头删 9.双向链表查找 10.双向链表在pos的前面进行插入 11.双向链表删除pos位…

Java+SpringBoot+Vue+MySQL:狱内罪犯危险性评估系统全栈开发

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

抖音短视频提取器|视频内容批量提取软件

抖音短视频提取器是一款功能强大的工具,旨在解决用户获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索,实现自动批量抓取视频,并根据需要进行选择性批量下载。基于C#开发的这款工具不仅支持通过关键词…

进程的通信以及信号的学习

一,进程的通信: 种类:1.管道 2.信号 3.消息队列 4.共享内存 5.信号灯 6.套接字 1.管道: 1.无名管道 无名管道只能用于具有亲缘关系的进程间通信 pipe int pipe(int pipefd[2]); 功能: 创建一个无名管道 …