- 博客(35)
- 收藏
- 关注
原创 007_ipc概述及消息队列
1.接口和命名POSIX消息队列:使用POSIX标准定义的接口,队列通过文件系统中的路径名来标识。System V消息队列:使用System V IPC接口,队列通过一个整数标识符(消息队列ID)来标识。2.持久性POSIX消息队列:通常是持久的,即使没有进程打开队列,队列及其内容也会保留。System V消息队列:也是持久的,但需要显式地删除队列以释放资源。3.权限管理POSIX消息队列:使用文件系统权限模型,通过文件模式位来控制访问权限。System V消息队列。
2025-01-17 10:59:40
999
原创 006_ipc概述及共享内存
共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取。共享内存的使用可以提高多进程应用程序的性能,但同时也需要谨慎处理同步和错误处理,以确保数据的一致性和系统的稳定性。:用于标识共享内存段的唯一键值。:共享内存段具有权限设置,包括读、写和执行权限,以控制不同进程对共享内存段的访问。:共享内存的基本单位,是一个连续的内存区域,可以被多个进程映射到它们的地址空间。:共享内存段的大小可以根据需要设置,但通常受限于系统内存的大小。
2024-12-23 12:22:20
1050
原创 005_ipc概述及信号量
第一个参数key是整数值(唯一非零),不相关的进程可以通过它访问一个信号量,它代表程序可能要使用的某个资源,程序对所有信号量的访问都是间接的,程序先通过调用semget()函数并提供一个键,再由系统生成一个相应的信号标识符(semget()函数的返回值),只有semget()函数才直接使用信号量键,所有其他的信号量函数使用由semget()函数返回的信号量标识符。举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。
2024-11-13 17:56:46
918
原创 004_ipc概述及管道
在 Linux 和其他类 Unix 操作系统中,管道(pipe)是一种用于在进程间进行通信的机制。管道允许在命令之间传递数据,通常用于将一个命令的输出作为另一个命令的输入。管道是 Unix哲学 “一切皆文件” 的一个体现,每个管道都可以被视为一个特殊的文件。
2024-10-29 15:48:09
897
原创 003_ipc概述及信号
程序运行起来后,每个模块都有自己的进程,那么不同的模块如何进行通讯或者数据交换呢?这里不再赘述那么对于linux 下的ipc方法都有哪些呢?如下:Linux下进程间通信的几种主要手段简介:管道(Pipe)及有名管道(named pipe)信号(Signal)报文(Message)队列(消息队列)共享内存信号量(Semaphore)套接口(Socket)进程和线程有时候并不完全区分,而往往根据上下文理解其含义。
2024-10-17 21:31:47
995
原创 004_多重条件编译写法?
#可以看到,这个##运算符是把a,b,c三个字符拼接在一起,组成新的字符穿哦可以看出来,#是把跟在其后的内容和其前面的内容拼接在一起1.#if后面要接宏定义且定义要有值,比如将#define L100 1改为#define L100那么就会编译报错2.实#if类似if语句,他也会判别宏定义值的真假状态,并不是说只要有宏定义就一定是真哦3.#ifdef并不分辨宏定义值的真假,只要你定义了宏,那就走#ifdef分支,否则就走#else分支。
2024-08-19 16:15:42
1518
1
原创 003_c语言中怎么逐个获取一个字符串的字符?
对于上述三个方法,想必大家都比较熟悉和易懂,因为操作的对象都是字符数组,这个很好理解,要么直接遍历字符数字,要么定义一个char* p;p = str;然后p++;去遍历字符数组,也很好去操作和改变,这里不再赘述,那么要是字符指针呢?比如char* tp = "11:22:33:44:55:66^77:88:99:00:aa:bb^cc:dd:ee:ff:gg:hh^ii:jj:kk:ll:mm:nn";我们想提取最后一个mac呢?或者说想遍历这个指针字符串呢?
2024-08-14 13:59:18
2413
1
原创 002_unsigned long数据比较的坑?
unsigned long 类似数据的比较问题,先上一段代码,如下图所示:就是图中框出的部分,眨眼一看,应该没啥问题,而且我也在本地的编译器vs2019上编译了,确实也没有报错,所以就修改上了项目的库,但是库上却编译报错,如下:明显提示的意思大概就是:无符号类型数据和0比较了,所以报错,那么为什么呢?还有,同样是unsigned long类型的数据变量,为什么if(gtxpack>0 && grxpack>0)这个语句不报错呢?
2024-06-25 17:55:04
990
原创 015_表驱动编程思想(c实现)
数据压倒一切。如果选择了正确的并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据结构,而不是算法。——Rob Pike上面是这个名人说过的话,那么c语言之父 丹尼斯·麦卡利斯泰尔·里奇 的《c程序设计》里曾经也有这样一句话:(原文是:program = algorithm + data structure)
2024-05-25 14:51:26
759
原创 013_C标准库函数之<signal.h>
还是说就直接终止了呢?关于信号的应用及扩展,在Linux中有大量的描述,以及sigaction等功能强大的函数,这个有兴趣的可以去看看,后面我们也会在Liunx C模块中去讲解这些,当然了,本人还是觉得先把C的这些搞清楚,因为linux C是在C的基础之上去搞的,切勿好高骛远哦,一步步来,加油,一起共勉。),其实就是准备捕获的信号的参数由sig给出,接收到的指定信号后要调用的函数由参数handle给出,接下来再看外面的函数:我们把signal看作一个整体T,外面的函数形式就是void (*T)(int);
2024-04-18 12:15:08
960
原创 012_C标准库函数之<limits.h> & <float.h>
C标准库中有这样两个头文件limits.h和float.h,这两个头文件主要是干啥的呢?头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如 char、int 和 long)的值。这些限制指定了变量不能存储任何超出这些限制的值,例如一个无符号可以存储的最大值是 255头文件包含了一组与浮点值相关的依赖于平台的常量。这些常量是由 ANSI C 提出的,这让程序更具有可移植性。
2024-04-08 19:49:40
819
原创 011_C标准库函数之<time.h>
头文件中说明了一些用于处理日期和时间的类型和函数。其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同。clock_t和time_t是两个用于表示时间的算术类型,而struct tm则用于存放日历时间的各个成分。tm的各个成员的用途及取值范围如下:int tm_sec;/* 秒,0~61 */int tm_min;/* 分,0~59 *//* 时,0~23 *//* 日,1~31 */int tm_mon;/* 月(从1月开始),0~11 */
2024-04-07 16:26:19
727
原创 009_C标准库函数之<stdarg.h>
1.va_start, va_arg, va_end是宏,是帮助我们实现可变参数函数的工具,缺一不可2.可变参数函数的入参,第一个入参是表明接下来有几个参数哦3.若是入参不够的话,可变参数函数会使用随机值哦。
2024-03-21 21:45:22
615
原创 008_C标准库函数之<assert.h>
这个头文件里,只有一个函数(实际是一个宏函数),那就是void assert(int exp);函数,那么这个函数到底是干什么用的呢?
2024-03-18 21:47:50
302
原创 00_lte->wifi传导测试,空口测试
在做wifi嵌入式开发时(系统是RTOS系统),经常会遇到一个比较重要的问题:性能测试这个可以说是产品的命脉,一切都要给性能让步,那么我们来看下,当性能有问题时,怎么debug?举个例子吧,我们调试的过程遇到的一个问题,如下:(2.4G wifi6(ax))1.lte->usb FDD测试可以跑到145Mbps/s(理论值是150Mbps/s,这个145是pass的)
2024-03-18 21:12:09
1171
原创 007_C标准库函数之<math.h>
头文件中说明了数学函数和宏。宏EDOM和ERANGE(定义在头文件中)是两个非0整常量,用于引发各个数学函数的定义域错误和值域错误;HUGE_VAL是一个double类型的正数。当变量取值在函数的定义域之外时,就会出现定义域错误。在发生定义域错误时,全局变量errno的值被置为EDOM,函数的返回值视具体实现而定。如果函数的结果不能用double类型表示,那么就会发生值域错误。
2024-03-16 17:49:31
1290
原创 006_C标准库函数之<ctype.h>
字符类测试:头文件中说明了一些用于测试字符的函数。每个函数的变量均为int类型,变量的值必须是EOF或可用unsigned char类型表示的字符,函数的返回值为int类型。如果变量满足所指定的条件,那么函数返回非0值(表示真);否则返回值为0(表示假)。这些函数包括2.1~2.11。在7位ASCII字符集中,可打印字符是从0x20(' ')到0x7E('~')之间的字符;控制字符是从0(NUL)到0x1F(US)之间的字符和字符0x7F(DEL)。
2024-02-27 16:19:50
927
原创 005_指针常量与常量指针
1.格式://指针类型 + const + 指针名 (const修饰的是指针名哦)2.本质是一个常量,但是类型是指针类型的,所以就是指针常量,这个指针常量只能固定的指向一个方向,后续不能再被修改指向3.指针指向地址的内容是可以被修改的,可以通过指针解引用赋值修改,也可以通过原来指向的变量赋值进行修改,都是可以的口诀:常量修饰指针名,方向固定是本能,变量内容随便改,敢动方向就不行4.常量指针格式1://格式:类型 const *指针名格式2://格式:const 类型 *指针名。
2024-02-23 12:06:28
1824
原创 004_C标准库函数之<stdlib.h>
在头文件中说明了用于以及的函数。数值转换:字符串和字符串之间的转换内存分支:主要说的是动态内存的申请使用等。
2024-02-22 20:33:45
1013
4
原创 Ubus举例_001_异步查询并返回数据实现
国家码自适应适配:在设置国家码的时候,我们会先读取协议那边的sim卡内容,根据sim卡字符串,然后去匹配出对应的国家,最后设置到/etc/config/wireless文件中去,那么问题是:协议通知sim卡状态的消息在我们ubus订阅成功之前,也就是说当我们订阅成功对应的ubus事件后,人家协议早就通知过了sim卡状态(开机后只通知一次),所以我们必须去invoke查询sim卡状态消息注意:在UBUS中,像这种需要带回返回数据并完成响应操作的状况,我们一般都用同步查询函数,但我开始就选择了异步查询,因为不管
2023-09-01 17:43:38
768
1
原创 000_函数指针和指针函数?
函数指针:实际是一个指针,只不过这个指针指向的是一个函数地址(函数名)罢了格式: int (*funcptr)(int, int);指针函数:实际上是一个函数,只不过返回的值为指针类型罢了格式:int* func(){/*do something...*/return int* data;}
2023-08-31 20:19:43
102
原创 Ubus举例_000
这个是用来构造表和成员的枚举数据这个是用来存储解析后的数据,以备后用,其实可以下面定义:这里我不想再定义了,所以复用了下,AclInfoResp中的其他数据我不关注,所以我在下面的表格构建中,也没有增加对应的定义实现。
2023-08-26 17:20:48
188
原创 001_安全函数_C_safe_library
这里我们对这个返回值一般不关心,因为我们主要是初始化内存块,获得返回值对于我们来说也并没有什么太大的用,是作为返回给系统进行校验的,这个有兴趣的可以去查询下关于size_t,errno_t, rsize_t类型的定义和含义,我们这里主要介绍函数功能和使用。返回一个整数,0表示复制成功,返回非0值代表复制不成功,不同的值表示不同的错误,具体内容可以查阅MSDN手册。返回一个整数,0表示复制成功,返回非0值代表复制不成功,不同的值表示不同的错误,具体内容可以查阅MSDN手册。
2023-08-04 20:49:06
2401
原创 002_ubus操作记录练习
=============uci操作dhcp==========================#=============uci操作==========================###获取solution.termianl下的服务接口列表#########手动ubus call调用method##########修改配置并提交,记得reboot#######修改网络ip#######删除修改的ip#####更新某个节点的值#####获取接口#####重启wifi##
2023-07-25 20:56:00
189
原创 002_[string.h]c标准库函数之<string.h>
话说c中有很多标准库函数,其中最具特色的就是字符串相关的库函数,而这类函数也是最让人头大的,当然,熟悉后就不大了,头就小了,哈哈,以下是自己的温习记录以及心得,拿出来与同行们分享下,希望有错误的地方大家给指出来,3Q,话不多说,我们开始......
2023-07-22 18:26:58
638
原创 Makefile单个及多个文件编译,路径引用,只讲干货不拖拉_00
显然,Makefile就无法搜索到了,这个需求是非常合理的,因为在我们开发中,通常会把头文件和.c文件分开归类,那么我们如何告知Makefile我们的log.h文件放在head目录下了呢?如图,我们要编译008_memset_s.c和memset_s.c两个文件,生成我们的edit,当然还包括了log.h和securecutil.h文件,log.h文件在head目录下,securecutil.h文件在safe_c_library目录下。如下图,我运行make指令,生成了对应的.o文件和edit终极目标。
2023-06-25 14:50:57
2630
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人