自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 收藏
  • 关注

原创 【Linux系统编程(IPC)】无名管道,命名管道,消息队列,共享内存,信号,信号量,Socket

进程间通信:IPC(InterProcess Communication)微信的聊天也是属于进程间通信,是基于网络的。本篇的进程间通信基于单机的。A进程和B进程之间创建一个通道,A和B都能从中读写数据,这是真正意义上的进程间通信。进程间通信:● 单机版:A和B跑在同一个PC上● 多机版:A和B在不同的PC上(基于网络通信)进程间通信(IPC)的方式有:● 管道(无名管道和命名管道)● 消息队列● 信号量● 共享内存● Socket● Streams。

2024-03-30 23:35:06 920

原创 visual studio报:引发的异常:“System.DllNotFoundException”(位于 ConsoleCAN1.exe 中)

经过修改项目属性,复制过好几次dll,最终的解决是换为64位dll,目标平台改为 x64 ,相关文件复制到bin的Debug下,然后程序就能正常使用。通过以上步骤,您可以轻松地查看当前 Visual Studio 中的 C# 项目是什么平台的,并确定项目是多少位的。最近在重构CAN通信的代码,把论文中的java转为C#实现,由于某种原因,java不能复现,所以转为c#。但是我明明把DLL文件放在项目中了,而且也在代码中引用了,就不明了,所以去问了一下。这个异常通常表示系统找不到特定的 DLL 文件。

2024-03-29 20:11:03 436

原创 Shell脚本基础(一)

Shell是使用C语言编写的,shell既是一种命令语言,又是一种程序设计语言。shell只需要解释器就能够执行。Linux下的shell解释器种类有很多。本篇文章就以Bash为准了,也就是 Bourne Again Shell。由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像,它同样也可以改为。

2024-03-24 10:46:49 641

原创 【Linux系统编程(进程编程)】exec族函数、system、popen

如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。如果 system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。execl函数就是,第一个参数是程序的path,最后一个参数是NULL。调用失败时,会设置errno并返回-1,然后从源程序的调用点接着往下执行。需求:实现功能,当父进程检测到输入为1时,创建子进程把配置文件的字段值修改掉。

2024-03-23 22:14:13 974

原创 【Linux系统编程(进程编程)】进程的退出:父进程等待子进程的退出之僵尸进程与孤儿进程

对于三个终止函数(exit、_exit、_Exit),实现这一点的方法是,将其退出状态传递(exit status)作为参数传递给函数。建议使用exit,是对_exit或_Exit的封装,会对进程的缓冲区做些处理,而_exit或_Exit系统调用是直接退出。父进程不等待子进程退出,在子进程结束之前就结束了自己的“生命”,此时子进程叫做孤儿进程。Linux避免系统存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。这里父进程退出后,新的父进程的进程id为1468而不是1。

2024-03-23 21:57:41 635

原创 【Linux系统编程(进程编程)】创建进程的场景,fork和vfork的使用及区别

(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的——父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。下边模拟一下网络请求,为每个请求创建一个服务进程。(现在还存在select poll epoll等IO多路复用技术,暂不展开)int main()pid_t pid;

2024-03-23 21:05:29 1016

原创 【回忆】本科写的程序被老师拿来展示

3.流程描述:程序运行后,用户根据屏幕显示的提示进行输入,先输入数组元素个数,然后敲击回车键,屏幕显示出结果,进行初始化数组。初始化后敲击回车键,屏幕同时显示出原数组、排序数组、去重数组,和操作菜单,然后可根据显示的菜单进行相关的操作。2.2查询特定元素个数、查询某个元素是否存在、修改元素的值,都用到循环数组元素的方法,找到特定值进行操作。2.5显示数组的操作结果在屏幕上,是遍历数组和printf()函数的结合使用。为什么有上图呢,就是显示的风格太像了,一下勾起我的回忆。该死的回忆压不住的上来了,

2024-03-21 22:07:55 413

原创 x86 32 64 Arm这些听过但不懂,都是什么?是架构还是系统?一文梳理

Window系统的向下兼容性一直非常好,即使一些软件不能在Windows上运行,但这压根不影响Windows系统的向下兼容是是业界楷模,已经达到了变态程度,甚至阻碍其发展。也正是 Windows 系统的兼容性好,软件开发商就省事了,反正我的软件不需要那么多系统资源,甚至一套软件开发完不需要维护就能卖十几年,既然如此为什么还要单独出64位版的?2022 年的 Windows 11 还能运行 90 年代的软件,这在其他操作系统上是很难做到的。

2024-03-20 09:53:37 906

原创 visual studio2019项目中引入头文件失效问题的解决

注:因为是对于特定项目,所以这篇文章记录的解决办法只是解决头文件失效问题的众多解决办法之一。最后,这个问题是编辑器的锅还是我的锅呢?这个错误真气死人了,谁能想到编辑器是这样呢,搞了一天才找到。过程是:在解决方案中来回移动文件、创建文件,还有在资源管理器中尝试来回移动文件、创建文件。在新创建的文件中直接引入自己新创建的头文件是没问题的(没有红色波浪线)这几天把项目整理一下,但在引入头文件过程中非常曲折。所以,引入时,多加层级目录就好了。ok,引入之后,报错问题消失。好在找到原因,也算是经验了。

2024-03-17 11:38:34 493

原创 C语言的面向对象

教材中称,C语言作为底层的面向过程的语言,不是面向对象的。实际上,内核源码中就有的思想,个人觉得就是可以把其作为对象使用,利用结构体和函数指针便能实现,不同于其它高级程序设计语言的OOP三大特性(继承、封装、多态),C语言实现的结构体作为对象来说,具有的是OOP中的两个特性(封装、多态),而不具备继承。多年前大一上刚学习时,也不知道这些专业名词,什么是OO,什么是OOP。后来的经过深入的学习才知道,C语言也可以做到面向对象,只不过没有那么完美罢了。多态特性可以利用结构体中的函数指针的再次赋值实现。

2024-03-14 10:23:49 370

原创 【Linux系统编程(文件编程)】C语言利用标准库实现对文件操作的基本方法

因为还有系统级调用。标准库就是字面意识,更加标准,哪个机器上都能用,可移植性更强。这两个函数值得研究一番,尤其对于不理解参数的同学。

2024-03-05 13:22:37 373

转载 “文件大小”和“占用空间”的区别

今天再拷贝文件的时查看文件属性,发现有“文件大小”和“占用空间”两个内容,而且两者之间的差距很大,见下图:上图可知文件大小是2.54GB,而占用空间是18.2GB,差了不到16个G。Windows会使用NTFS和FAT的文件系统管理磁盘文件,这个大家都知道,而所有文件系统都是基于"簇"的大小,也就是分配单元的大小,说白了,就是分配用来保存文件的最小磁盘空间量。而常用的Windows XP NTFS下最大的默认簇大小为 4 千字节 (KB)。

2024-03-05 13:09:45 155

原创 【系统编程】标准c库的文件操作与unix系统调用的文件操作

由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。使用fopen函数,由于在用户态下就有了缓冲,因此进行文件读写操作的时候就减少了用户态和内核态的切换(切换到内核态调用还是需要调用系统调用API:read,write);非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。

2024-03-05 12:02:07 764

原创 C语言的结构体数据或整型数据写入文件

编码过程中,重点要注意光标位置的变化,否则容易读错数据或不小心覆盖有用数据。只要光标位置正确,读/写时,填入合适的数据长度大小,就能实现功能。区别不大,就是多了一个大小,将数据大小调整为数组的总长度就好了。

2024-03-05 11:35:05 457

原创 Java面向对象的基础知识

Java编程,面向对象的基础知识:数组、三大特性、抽象类和接口、异常类等。

2024-03-01 13:57:59 851

原创 【Linux系统编程(线程编程)】讲讲线程的条件控制实现同步,顺便谈一谈线程死锁

在使用互斥变量、条件变量前都必须进行初始化,可以分别置为常量PTHREAD_MUTEX_INITIALIZER(只对静态分配的互斥量)、PTHREAD_COND_INITIALIZER(只对静态分配的条件变量),也可以通过调用pthread_mutex_init、pthread_cond_init函数进行初始化。这样,两个线程都想拿到对方手里的那把锁,谁都还不能解锁,导致线程死锁。让t1线程 中数据为3时打印信息,如果把下面程序中的条件和互斥量去掉,其实有可能打印不到,因为数据可能在其它线程中变化过去。

2024-02-29 21:52:00 827

原创 Linux使用C语言实现通过互斥锁限制对共享资源的访问

t1刚开始执行到while循环时候,就让它加锁,不让其它线程对共享资源访问【无论是否t2先执行,最终1s后都会轮到t1加锁,因为t2中释放锁后存在sleep函数,而t1没有】,循环一直执行,直到等到3 结束。为获取对共享资源的访问权限,t1线程是不断对全局变量访问,t2是做加法的时候才访问,而且加之后有1秒的延时。所以,t1肯定会先执行到3,即使t2先执行,也就执行一次,加一次就释放锁,t1还会拿到共享资源。运行结果:可以看到,在t1中顺利退出,说明对互斥锁对共享资源的限制起作用了。

2024-02-29 21:16:58 328

原创 Linux系统编程之线程互斥锁的使用方法

Linux系统编程,线程之互斥锁的创建,销毁,加锁,解锁。

2024-02-29 21:01:02 832

原创 Linux上C语言如何获取线程的返回值

Linux 的 C 语言多线程环境中,启动例程通常指的是主线程(Main Thread)中的入口函数。在多线程程序中,主线程是程序的起点,它负责创建和管理其他线程,并在程序执行完成后终止整个进程。在这种情况下,调用 pthread_join 函数将等待指定的线程终止,但并不获得线程的终止状态。在多线程环境中,每个线程都有自己的例程,用于定义线程要执行的任务。总的来说,在 Linux 的 C 语言多线程环境中,启动例程指的是主线程的入口函数。函数是程序的入口点,当程序启动时,操作系统会调用。

2024-02-29 20:02:07 1023

原创 Linux系统上使用C语言创建线程

而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。

2024-02-29 19:26:34 917

原创 npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink

这个错误是由于系统的执行策略(Execution Policy)导致的。Windows系统默认情况下会限制PowerShell脚本的执行,而npm在执行时可能会涉及到PowerShell脚本的操作。运行命令 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned。现在就已经解决问题,回到vscode就可以使用npm命令了。但是cmd中命令好使。:修改执行策略的范围。

2024-02-25 10:27:25 501

原创 lambda表达式是什么?

Lambda 表达式可以代替传统的匿名内部类,使用 Lambda 表达式可以更简洁地实现函数式编程的特性。Lambda 表达式可以用在函数式接口(Functional Interface)上,函数式接口是只包含一个抽象方法的接口。Lambda表达式可以用来创建小型的、临时的、一次性的函数,而不需要给函数命名或定义函数体。在 Java 中,常见的使用 Lambda 表达式的地方包括集合类的。函数式接口是只包含一个抽象方法的接口,Lambda表达式可以用来实现该接口的抽象方法。接口的排序方法、线程的创建等。

2024-02-24 14:24:58 1208

原创 visual studio2019怎么修改字体

Consolas是vscode的默认字体,还挺好用的。点击菜单栏中的“工具”环境 -> 字体和颜色。

2024-02-24 13:08:17 680

原创 Java程序中为什么要使用StringBuilder

其中的题解涉及字符串的操作使用的是StringBuilder,不是String。现在知道了问题的主要原因是StringBuilder可以对字符串内容操作,且效率高。

2024-02-21 13:36:00 365

原创 Java创建栈

在 Java 中,如何创建栈。

2024-02-20 22:17:54 402

原创 Arduino程序怎么使用串口

Arduino Mega 有三个额外的串口:Serial 1使用19(RX)和18(TX),Serial 2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX)。若要用它们来与外部的TTL串口设备进行通信,将TX引脚连接到您的设备的RX引脚,将RX引脚连接到您的设备的TX引脚,将GND连接到您的设备的GND。与计算机进行通信时,可以使用这些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。

2024-02-19 16:25:42 952

原创 Arduino程序的运算符

在选择变量的数据类型时,一定要保证变量类型的范围要足够大,以至于能容纳下你的运算结果。要知道你的变量在哪个点会”翻身”,两个方向上都得注意.如: (0 - 1) 或 (0 - - 32768)一些数学上的分数处理,要用浮点数,但其缺点是:占用字节长度大,运算速度慢。使用类型转换符,例如 (int)myFloat 将一个变量强制转换为int类型。

2024-02-18 11:25:34 938

原创 Arduino程序简单入门

在编译时编译器会用事先定义的值来取代这些常量。然而这样做会产生一些副作用,例如,一个已被定义的常量名已经包含在了其他常量名或者变量名中。在这种情况下,文本将被#defined 定义的数字或文本所取代。通常情况下,优先考虑使用 const 关键字替代 #define 来定义常量。Arduino 拥有和 C 相同的语法规范。语法#define 常量名 常量值 注意,#是必须的。例子。

2024-02-17 22:24:15 1501

原创 Unity如何修改预制体(预制件)?

这个时候,修改原来的预制件只会改变原有四个游戏对象,不能改变新的戴帽子的。如果选择【预制件变体】,修改原来预制件的组件属性,新的游戏对象也会发生对应的改变。预制件与预制件变体的修改是单方向的,预制件能改变预制件变体,反过来修改变体不能改变预制件。预制件变体:从hierarchy拖拽到project生成的预制件,是一个依赖原本预设体的,修改四个绿色的物体高度能够影响新的。原始预制件:从hierarchy拖拽到project生成的预制件,是一个新的单独的文件,修改四个绿色的物体高度不会影响新的。

2024-02-16 01:15:00 1028

原创 unity的重中之重:组件

检查器(Hierarchy)面板中的所有东西都是组件。日后多数工作都是和组件打交道,包括调参、自定义脚本组件。本文内容:创建组件、unity组件生命周期、unity组件执行顺序、物体标记。

2024-02-15 20:51:31 1278

原创 刚刚下载!unity应该怎么操作?来看看基操

unity基操,unity菜单栏介绍、unity物体创建、unity坐标系、unity对物体操作、unity模型导入、unity地形的创建

2024-02-15 20:22:02 997

转载 寄存器名称中文和英文

DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.IP(Instruction Pointer):指令指针寄存器。SP(Stack Pointer):堆栈指针寄存器。BP(Base Pointer):基址指针寄存器。

2024-02-15 17:44:22 24

原创 netstat命令

命令来获取所需的网络信息,例如当前的网络连接状态、监听的端口、路由表信息、网络接口信息等。这些信息对于网络故障排除、网络性能优化以及安全审计等方面都非常有用。命令可以在各种操作系统上使用,包括 Windows、Linux 和 macOS 等。是一个计算机网络命令行工具,用于显示网络连接、路由表和网络接口等网络相关信息。命令时,可以提供不同的选项来显示不同类型的网络信息。通过结合上述选项,可以在命令行中使用。

2024-02-13 22:43:34 522

原创 侧信道攻击是什么

侧信道攻击是一种利用系统的物理实现或实现的特定属性来获取信息的攻击方式。这些攻击利用了系统在执行特定操作时产生的信息泄漏,而不是直接攻击系统的计算或加密算法。侧信道攻击通常利用系统的功耗、电磁辐射、时间延迟等物理特性进行攻击,从而获取系统内部的敏感信息。在密码学中,侧信道攻击通常被用于破解密码算法。例如,通过监测设备的电源使用情况或者电磁辐射,攻击者可以分析密码算法的执行过程,从而推断出密钥或者明文信息。

2024-02-13 12:28:29 1014

原创 【论文代码】基于隐蔽带宽的汽车控制网路鲁棒认证-到达时间间隔通道的Java实现(二)

此篇文章是对原有代码的注释进行翻译,尝试对其架构和实现方式进行理解。如图UML类图:从图中明显可见,其代码组织方式,各个代码文件的继承和实现的关系。以下内容围绕UML类图,分别进行阐述。

2024-01-22 21:50:55 1020

原创 【论文代码】基于隐蔽带宽的汽车控制网路鲁棒认证-到达时间间隔通道的Java实现(一)

此篇文章是对原有代码的注释进行翻译,尝试对其架构和实现方式进行理解。如图UML类图:从图中明显可见,其代码组织方式,各个代码文件的继承和实现的关系。以下内容围绕UML类图,分别进行阐述。

2024-01-22 21:44:40 1240

原创 关于计算机如何执行编译好的程序

这种芯片只能用来读取而不能写入,所以叫做只读存储器,简称ROM,ROM的内容是用特殊手段预先写入的,如下图,是几种不同的ROM芯片。和内存条(DRAM)不同,只读存储器不需要刷新,它的内容是预先写入的,即使掉电也不会消失,但是也很难改变。有些ROM的内容在写入后永远无法擦除和重写,但是有些ROM可以用紫外线和加电来擦除和重写。ROM的内容可以预先写入,即使是关掉电源也不会消失,这个特点非常重要,比如可以将一些指令和数据固化在ROM中。

2024-01-20 20:44:00 913

原创 Windows系统 tree命令查看目录文件夹结构

Windows系统 tree命令查看目录文件夹结构。

2024-01-17 14:59:16 462

原创 【unity】Obi插件架构组成(参数详细解释)——解算器四面板设置、三种更新器、参与者介绍

由于项目遇到相关问题,固参考Obi官网做了较为详尽的翻译。此文章描述了Obi的架构(解算器ObiSolver、更新器ObiUpdater、参与者ObiActor)之间的关系,并且对解算器组件做了详尽的参数说明,也对列举了三种更新器(Obi Fixed Updater, Obi Late Fixed Updater, Obi Late Updater)进行说明。

2024-01-05 19:55:21 1342

原创 运算符(自增、逗号、赋值)优先级与求值顺序

选项中是关于逗号运算符与自增运算符组成的混合表达式,请运用运算符优先级及求值顺序相关知识,选择合适的选项填在(1)处,使得程序的输出结果为 2,3,1。为什么写这篇文章呢?刚开始做这道题的时候,没有考虑好。小知识:C语言运算符优先级与结合性。表格从上到下,优先级逐步递减。这里的答案是第四个选项。

2024-01-05 14:50:16 388

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除