
C/C++
文章平均质量分 82
voicialex
此人不懒,什么都不想写
展开
-
C 封装与抽象 面向对象编程
封装与抽象封装性是面向对象编程的三大特性(封装性、继承性、多态性)之一,但也是最重要的特性。封装+抽象相结合就可以对外提供一个低耦合的模块。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。在C语言中,数据封装可以从结构体入手,结构体里可以放数据成员和操作数据的函数指针成员。当然,结构体里也可以只包含着要操作的数据。下面以一个简单的实例作为演示。设计一个软件模块,模块中要操作的对象是长方形,需要对外提供的接口有:1、创建长方形原创 2022-01-07 22:49:17 · 686 阅读 · 0 评论 -
函数调用过程(栈帧的创建和销毁)
函数的调用过程1. 调用 main() 函数:2. Add() 函数的调用在C语言中调用某一函数时,它会跳转过去执行这个函数直到执行完毕后接着执行下一条指令。在执行调用函数的过程中,通过形成一个栈帧来完成。栈帧是编译器用来实现函数调用过程的一种数据结构。以Add() 函数为例来分析调用过程:#include<stdio.h>#include<stdlib.h>...原创 2020-04-12 15:12:05 · 482 阅读 · 0 评论 -
lseek() 函数
每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾.当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置.头文件#include <sys/types.h> #include <unistd.h>函数原型...原创 2020-01-08 15:40:48 · 286 阅读 · 0 评论 -
Dbus
文章目录DBus三层架构:底层接口层总线层应用封装层DBus (Desktop Bus) 是一种 IPC 机制, 由 freedesktop.org 项目提供, 用于进程间通信或进程与内核的通信tips: IPC机制还有 fifo管道, share memory, semaphore, message queue, socket …DBus三层架构:底层接口层 主要通过 libdbus...原创 2019-12-26 14:09:03 · 1482 阅读 · 1 评论 -
IPC的七种方式
文章目录pipeFIFOmessage queuesemaphoreshared memeory共享内存+信号量+消息队列 例子signalsocket实例概念:同步: 一个进程将数据写入, 然后就去睡眠等待, 直到读取进程将数据取走, 在去唤醒; 读进程与之类似互斥: 一个进程对pipe进行I/O操作时,其他进程必须等待pipefeature: 容量有限,只用于父子进程通信...原创 2019-11-29 11:33:19 · 1307 阅读 · 0 评论 -
QNX 基础认知
文章目录QNX微内核介绍Threads run code, Processes own resources1. 进程PID进程API2. 线程TID线程API3. SynchronizationKernelKernel 提供的进程间的通信方式Process ManagerScheduling 调度Resoure ManagerIPC 进程间通信QNX微内核介绍QNX采用微内核结构,也就是说,内...原创 2019-11-25 15:54:45 · 1534 阅读 · 0 评论 -
QNX IPC机制
文章目录QNX微内核介绍Synchronous message passingMessage copyingChannels and connectionsPulses优先级继承与消息Message-passing APIRobust implementations with Send/Receive/ReplyEventsSignalsPOSIX message queuesShared Mem...原创 2019-11-25 14:04:14 · 3548 阅读 · 1 评论 -
C/C++中 getopt() 函数
getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的argc: argument countargv: argument vector//头文件#include <unistd.h>extern char *optarg; //选项的参数指针extern int optind, //再调用get...原创 2019-11-19 16:53:08 · 335 阅读 · 0 评论 -
OSAL中task,event,message区别
OSAL(Operating System Abstraction Layer 操作系统抽象层)(以上为个人见解)在OSAL中,提出了任务,事件,消息三个概念。它们之间的关系如下:event: 事件是当前系统中被触发的动作,例如有按键按下,接收到其他节点发送过来的消息等等。message: 消息是收到的事件和事件内容的一个封装,比如发生了一个事件(收到别的节点发的消息),这时就会把这个事件所...原创 2019-11-19 15:51:19 · 1516 阅读 · 0 评论 -
C++类与对象
概念描述类成员函数类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样类访问修饰符类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行, 构造函数的名称与类的名称是完全相同,并且不会返回任何类型, ...原创 2019-11-17 12:23:02 · 196 阅读 · 0 评论 -
C/C++宏定义
# - 编译预处理#ifdef ... #endif#define MAX 3#define FUNCTION(X,Y) (X)*(Y)## - 标识符//##在宏定义中将两个字符连接起来,构成一个新的标识符#define SETTEST(N) test_ ## Nint SETTEST(1) = 2;//即用SETTEST(1)代替test_1, 相当于int ...原创 2019-11-17 01:13:23 · 196 阅读 · 0 评论 -
Linux的shm共享内存
实现进程间通信最简单也是最直接的方法就是共享内存——为参与通信的多个进程在内存中开辟一个共享区。由于进程可以直接对共享内存进行读写操作,因此这种通信方式效率特别高,但弱点是没有互斥机制,需要信号量之类的手段来配合Linux的共享内存共享内存原理Linux共享内存结构共享内存的使用共享内存原理共享内存,顾名思义,就是两个或多个进程都可以访问的同一块内存空间,一个进程对这块空间内容...原创 2019-11-16 15:13:09 · 1096 阅读 · 0 评论 -
Linux下静态库_库的基本概念
库windows平台和linux平台下都存在着大量的库本质上说库是一种可执行的二进制代码(但不可以独立执行),可以呗操作系统载入内存执行但是由于windows和linux的平台不同(编译器,汇编器,链接器不同),所以两者库的二进制是不同的linuxlinux下库有两种:静态库和共享库(动态库) 区别: 静态库:的代码在编译过程中已经被载入可执行程序,因此生成的可执行程序体积较大。...原创 2019-11-05 21:43:18 · 751 阅读 · 0 评论 -
Linux 命令英文全称
su:Swith user 切换用户,切换到root用户cat: Concatenate 串联uname: Unix name 系统名称df: Disk free 空余硬盘du: Disk usage 硬盘使用率chown: Change owner 改变所有者chgrp: Change group 改变用户组ps:Process Status 进程状态tar:Tape ...原创 2019-11-05 11:26:50 · 354 阅读 · 0 评论 -
gcov测试代码覆盖率
gcov:GCC Coverage,是一个测试代码覆盖率工具,是命令行方式,伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时gcov可以统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码(section code)的耗时(执行时间),因此,gco...原创 2019-11-03 12:38:45 · 1319 阅读 · 0 评论 -
C/C++程序存储区
C/C++编译的程序占用的内存分为以下几个部分:.stack .heap .data. .bss .text栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。全局区(...原创 2019-10-26 18:37:58 · 1757 阅读 · 0 评论 -
Makefile
makefile提供了系统默认的自动化变量$^:代表所有依赖文件$@:代表目标$<:代表第一个依赖文件所以我们可以用gcc $^ -o $@代替刚刚makefile中的gcc a.o b.o main.o -o mainmain : a.o b.o main.o gcc a.o b.o main.o -o main main.o : main.c gcc -c ma...原创 2019-10-26 18:05:20 · 531 阅读 · 0 评论 -
互斥锁
1、互斥锁基本原理:互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。(1)访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定状态,则阻塞当前线程。(2)只有锁定该互斥锁的进程才能释放该互斥锁,其他线程试图释放无效。2、初始化互斥...原创 2019-10-23 20:11:41 · 1599 阅读 · 0 评论 -
C语言编译过程 || 4 stages of compiling a C program
C语言作为编译语言,用来向计算机发出指令,代码会经过4个环节,形成最终的文件预处理编译汇编链接file.cfile.ifile.sfile.oa.out预处理展开头文件/宏替换/去掉注释/条件编译 >> test.i main.i编译检查语法,生成汇编 >> test.s main.s汇编汇编代码转换成机器码 &......原创 2019-10-18 23:35:57 · 245 阅读 · 0 评论