- 博客(28)
- 收藏
- 关注
原创 进程间通信 共享内存
共享内存什么是共享内存共享内存操作流程共享内存什么是共享内存共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。共享存储允许两个或多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,直接在内存上操作,所以共享内存的速度也就提高了。所以这是最快的一种IPC。共享内存操作流程①进程间通信标识KEY值的生成:ftok函数生成键值②shmget函数创建共享内存空间③shmat函数获取第一个可用共享
2021-08-11 17:17:04
202
原创 基于树莓派实现简易-智能家居
1.实现功能介绍语音灯控、远程灯控的实现(LD3320、APP远程控制)火灾报警功能实现(火灾传感器模块、蜂鸣器实现)人脸识别开锁温湿度采集(未实现)2.设计模式------------工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。在C语言中,因为没有接口、类这一说法,所以这
2021-07-27 14:02:31
2611
8
原创 IPC 进程通信:信号量
信号量什么是信号量信号量工作信号量接口函数1.semget函数2.semop函数3.semctl函数信号量操作代码步骤什么是信号量它是一个计数器,用 于为多个进程提供对共享数据对象的访问,它是为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题而产生的。信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。信号量工作为了获得共享资源,进程需要执行下列操作。(1)测试控制该资源的信号量(2)若此信号量的值为正,则
2021-03-18 11:09:01
414
原创 进程通信 —— 信号
信号什么是信号信号来源如何使用信号signalsigaction发送信号sigqueue最后什么是信号信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。在Linux中,每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO”、“SIGCHLD”等等。信号定义在signal.h头
2021-03-18 10:50:18
385
原创 关于MCI播放音乐测试(不能跨线程操作)
媒体控制接口(MCI)MCI大致介绍1、mciSendCommand函数2.mciSendString函数。3.MMSYSTEM.H头文件中还定义了MCI命令所需要的数据结构类型。以下是MCI命令常用的数据结构。MCI_OPEN_PARMSMCI_PLAY_PARMSMCI_RECORD_PARMSMCI大致介绍媒体控制接口(Media Control Interface,缩写MCI)是由微软和IBM开发的一个高级应用程序接口(API),功能是控制连接到一台Microsoft Windows或OS/2
2021-03-16 16:43:16
453
原创 C语言strtok函数,分割字符串函数
函数原型char *strtok(char *str, const char *delim);str为要分解的字符delim为分隔符字符函数功能将一个字符串分解为一个由零或多个非空标记组成的序列。第一次使用strtok(),要分解的字符串应该在str中指定。在后续的每个调用函数中,分解的都是相同的字符串,str必须为NULL。即在第一次之后的调用,都需要将str改为NULL。注意:1.在第一次之后的调用,都需要将str改为NULL。2.没有生成新串,只是在s所指向的内容首次出现分界符
2021-03-04 15:03:43
458
2
原创 C语言人脸识别——翔云平台调用(含wget安装)
人脸识别准备安装的东西使用mjpg—streamer获得人脸识别比对照片用处功能准备安装的东西1.安装mjpg-streamer链接: 树莓派3代 B型 Cortex-A53安装实现MJPG-streamer.2.安装curl、openssl链接: 树莓派学习:ARM-Linux搭建https的访问环境(curl、openssl).3.安装wgetsudo apt-get updatesudo apt-get install wgetwget --version使用mjpg—st
2021-03-03 14:30:11
787
原创 树莓派-串口通信(问题记录):serial->Open: Permission denied
serial->Open: Permission denied1.问题描述2.解决办法3.树莓派串口了解1.问题描述首先,给出我的部分代码,int voiceInit(struct InputCommander *voicer,char *ipAdress,char *port){ int fd; if((fd = serialOpen(voicer->deviceName,9600))== -1) { printf("%d\n",fd); perror("seria
2021-02-24 20:14:41
2515
原创 Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH的区别
这里写目录标题1. PATH2. LIBRARY_PATH3. LD_LIBRARY_PATH1. PATHPATH是可执行文件路径 命令行中的命令,如ls等等,都是系统通过PATH找到了这个命令执行文件的所在位置,再run这个命令(可执行文件)。所以,PATH 配置的路径下的文件可以在任何位置执行,并且可以通过which 可执行文件 命令来找到该文件的位置查看PATHpi@raspberrypi:~ $ echo $PATH/usr/local/sbin:/usr/local/bin:/u
2021-02-23 15:37:10
38466
3
原创 Linux gcc编译程序时,-I(大写 i )、-L (大写 L)、-I(小写 L )的作用与区别
gcc编译程序时,-I(大写 i )、-L (大写 I)、-I(小写 I )的作用与区别1.问题描述2. -I (大写i)3. -L(大写 l)4.-l(小写l)1.问题描述在进行程序编译,有时稍微复杂一点的程序就会使用到库,并且就会去配置一些环境变量,这段时间这点学得有点混乱,所以做个总结区分这三个标志。2. -I (大写i)include头文件非标准库中存在的也不是在当前文件夹下的,需要将地址用-i(大写)包含例如:gcc -o face baidu_http.c -I /home/
2021-02-23 13:50:04
5568
原创 树莓派开发:下载安装镜像、树莓派串行口登录以及ssh方式登录
树莓派开发1.树莓派镜像安装2.串口登录树莓派3.ssh登录4.更新VIM1.树莓派镜像安装1.下载镜像树莓派官方镜像下载地址:https://www.raspberrypi.org/downloads/raspbian/官方拥有三种镜像:1.带图形桌面和推荐软件:Raspbian Stretch with desktop and recommended software2.带图形桌面:Raspbian Stretch with desktop3.最简版:Raspbian Stretch L
2021-02-23 00:19:22
727
原创 树莓派学习:ARM-Linux搭建https的访问环境(curl、openssl)
树莓派 ARM搭建https访问环境1.开发环境2.开发准备源3.编译openssl4.编译curl5.环境变量配置6.程序文件的编译7.问题记录1.开发环境1.树莓派3 Linux version 4.14.98-v7+(Linux-arm)2.开发准备源1.openssl-1.1.1j.tar.gz2.curl-7.71.1.tar.bz23.编译openssl1. tar -xzf openssl-1.1.1j.tar.gz2. cd openssl-1.1.1j/3. ./
2021-02-22 23:13:33
1344
1
原创 感应垃圾桶加入模块LD3320实现语音交互
1.基于ESP-8266EX2. ARDUIN兼容,使用 RDUINO DE来编程3.11位I/O引脚4.1位ADC引腳(输入范围O-3.3V)5.板载5V1A开关电源(高输入电压24V)工作中和sTM32模块开发类似,集成度高STM32方案也更经济便宜
2020-11-18 19:44:31
1962
3
原创 简简易易贪吃蛇的一些注释和对这些天学习的一些总结(2020.10.24)
#include<ncurses.h>#include<stdlib.h>#include<pthread.h>/*线程的头文件*/#include <unistd.h>/*运用sleep()*/struct she{ int hang; int lie; struct she *next;};struct she *head=NULL;struct she *tall=NULL;struct she food;int key;
2020-11-05 22:05:28
113
原创 Ubuntu编写C语言之前所需要做的一些准备工作
Ubuntu默认是不包含编辑器vim和编译器gcc。之前在陈哥的那个镜像没有中文版本,所以自己下了一个版本,但是没想到陈哥之前版本以及是给我们下好了需要的库和编译器和编辑器。所以兜了一个大圈,终于在百度找到了答案。1.准备工作1.1 打开控制台:使用快捷键 Ctrl + Alt + T;1.2 安装vim:输入 sudo apt-get install vim;1.3 安装gcc:输入 sudo apt-get install g++。...
2020-10-09 20:24:24
183
原创 当指针指向NULL
Null 是一特殊指针值(或是一种 对象引用)表示这个指针并不指向任何的对象。这样的指针称之为 Null指针[1]。 有许多实现上是以0 (全位为0) 代表null指针,多数的CPU以此作为存储器空间的底 (虽有些系统会使用有符号地址空间(signed address space),并允许为负值)。当指针head初始化为NULL时,作为参数调用时,和以往是不一样的,必须得给指针指向一个非NULL.如果不指向其他则依旧为NULL,返回值head,也依然是NULL.必须如上图一个,给其一个指向:tep=n
2020-08-11 12:09:34
3001
原创 scanf(%c,&xx)时,输入字符串
若循环执行scanf语句,在这时输入字符串(%c只获得单个字符),其余的执行顺序时从左到右,如:#include <stdio.h>#include <stdlib.h>int main(){ char str; while(1) { scanf("%c",&str); printf("输出的字符:%c\n",str); } system("pause"); return 0;}程序运行结果:可
2020-08-05 11:31:04
561
原创 字符串的赋值
我们可以知道:char*p="helo"这种字符串的赋值方式是完全没有问题的。要理解这种赋值方式,我们首先得理解双引号(特別注意:这个是双引号,不要赋值的时候给弄了个单引号)在这个语句中做了什么工作。双引号主要做了3个工作,分别(1)申请了空间(在常量区),存放了字符串。(2)在字符串尾加上了^0”。(3)返回地下面是转载:学了这么多年的C语言,突然发现连字符串赋值都出错char a[10];怎么给这个数组赋值呢?1、定义的时候直接用字符串赋值char a[10]=“hello”;注意:
2020-08-05 11:17:25
13724
3
原创 无类型指针malloc
#include <stdio.h>#include <stdlib.h>int main(){ int num; int i; int choice; printf("请输入元素个数:\n"); scanf("%d",&num); if(num>6) { printf("我们没有这么多姑娘,你没礼貌,相亲单方面终止!!!\n"); system("pause"); exit(-1); } i
2020-07-30 19:04:11
261
原创 函数指针
函数指针1,如何表示指针:指针标识符2.如何知道是函数:()3.函数指针是专用的,格式要求很强(参数类型,个数,返回值),就像数组指针一样#include <stdio.h>#include <stdlib.h>int ansa(int salary,int month){ int total; total=salary*month; printf("这位员工应发:%d\n",total); return total;}int main(){
2020-07-30 16:51:28
115
原创 数组的指针
数组指针强调类型,数组的个数,偏移值是偏移了整个数组的大小。如:int (*p)[3];偏移了12个字节。int (*p)[5];偏移了20个字节。
2020-07-30 16:34:48
86
原创 C语言m++与++m
#include <stdio.h>#include <stdlib.h>int main(){ int m=5; int p=5; int x; x=++m; printf("X为:%d\n",x); printf("m为:%d\n",m); x=p++; printf("X为:%d\n",x); printf("m为:%d\n",p); system("pause"); return 0;}
2020-07-30 09:48:47
7781
2
原创 指针初学,总结及学习代码 2020.7.29
#include <stdio.h>#include <stdlib.h>int main(){int juhuashang=9;int doutingshang=10;/*变量的访问:1.变量名2.地址 */printf(“juhua=%d\n”,juhuashang); printf("douting=%d\n",doutingshang);//变量名获取// /*比如一个一个房间的寻找,找到了房中的人*/ putchar('\n\n.
2020-07-29 20:19:27
117
原创 计算数组的大小、数组的传参、数组的形参
#include <stdio.h>#include <stdlib.h>void arrayprint(int datas[],int ele)/重点2:1.形式参数中,写的数组是数组样子,但中括号中数组的大小是无效的2.括号中无论写多少,都不能代表形参数组有多大!3.中括号的作用仅仅用来表示该参数是一个地址(在windows啊哈C之类的软件编译器中,整型用四个字节表示地址;在Linux64位中用8个字节表示)/{ int i;printf(“数组的大小:%d\n”,
2020-07-29 20:08:37
630
原创 学生成绩简易查询最高分、最低分、平均分(封装)2020.7.29
#include <stdio.h>#include <stdlib.h>void initprogram(int datas[],int num){int i;for(i=0;i<num;i++){printf(“请输入第%d个学生成绩:”,i+1);scanf("%d",&datas[i]);if(datas[i]>100||datas[i]<0){ printf(“第%d位学生成绩输入错误!\n”,i+1);while(data
2020-07-29 19:52:52
816
原创 C语言老陈计算器
C语言简易计算器 ![while和do while 、for循环需要区别](https://img-blog.csdnimg.cn/20200728172138273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODg1OTY...
2020-07-29 19:47:53
207
原创 代码中整体代码移动
代码如何往左与往右整体移动?代码整体往右移动:选中需要移动的代码:按tab键代码整体往左移动:选中需要移动的代码:按 shift + tab键
2020-07-29 19:47:29
848
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人