Linux
文章平均质量分 50
勤勉之
码字中.....。
展开
-
【嵌入式linux】进程间通信的几种方式
管道:无名管道PIPO 只能用于亲缘关系的进程间通信 半双工的通信模式。 有名管道 FIFO 可以用于互不相关的两个进程间通信 先进先出规则 信号内核产生信号,用户注册信号处理函数,来进行信号事件的处理共享内存最高效的进程间通信方式,进程可以直接读写内存,不需要任何数据的拷贝 多进程通信过程中。内核分配有共同的内存区,需要访问的进程可以将其映射到自己的私有地址空间。 但是需要依靠互斥锁或者信号量来保证同步性。防止阻塞。共享内存实现:(1)、创建共享内存 ...原创 2021-05-06 23:24:46 · 846 阅读 · 0 评论 -
【C语言】关于c语言中检查内存泄漏的办法
关于c语言中检查内存泄漏的办法从一开始设计之初 就应该有单独分层。将底层的malloc和free等函数 加一层自己的系统函数层。这样有助于后期的移植和检查内存泄漏。例如test_malloc test_free 假如发现了内存泄漏。并且是已知的某个流程。那么我们即可重构一下我们的test_free和test_malloc。 思路如下:首先做一个list或者数组,最好是结构体的,元素为 地址和大小 时间等。有能力的可以增加函数名,更方便。在test_malloc中,每次调用都将本次申请成功的内存地址和原创 2021-04-15 18:12:38 · 1746 阅读 · 0 评论 -
C++中关于virtual关键字的本质意义
当一个方法声明包含virtual修饰符,这个方法就是虚方法。如果没有virtual修饰符,那么就不是虚方法。对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。非虚方法的实现是不变的:不管该方法是被声明该方法的类的实例调用,还是该类的子类所调用,实现的结果都是一样。相比之下,虚方法会在子类中被取代。取代继承的虚方法的过程就...原创 2018-07-02 18:46:27 · 1327 阅读 · 0 评论 -
linux驱动的并发控制
1、原子操作(atomic)2、自旋锁(spin_lock)3、信号量(semaphore)4、互斥体(mutex)5、中断屏蔽 并发控制:并发:指的是多个执行单元同时、并行被执行竞态:而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态 竞态发生的情况:1, 多cpu, 2, 单cpu , 支持多任务的调度, ...原创 2018-08-09 11:33:32 · 232 阅读 · 0 评论 -
ARM中LDR伪指令与LDR加载指令
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。COUNT EQU 0x40003100……LDR R1,=COUNTMOV R0,#0STR R0,[R1]COUNT是我们定义的一个变量,地址为0x40003100。这中定义方...转载 2018-07-31 20:00:37 · 348 阅读 · 0 评论 -
Linux下C语言的Gdb调试
首先是用gcc对test.c 进行编译,注意一定要加上选项 "-g" 例如: gcc -g test.c -o test (-o 是生成目标文件的名字) gdb test GDB 调试流程 设置断点 (gdb) b 6 //6 代表的是行号 也可以写成 (gdb) b main...原创 2018-07-31 20:21:43 · 315 阅读 · 0 评论 -
Linux 解压tar.xz文件
某次下载内核准备编译 结果tar.xz 这个后缀还真难住的了。通过百度以后找到了解决方法,在此给大家分享先把问间转换成tar格式的然后进行解压$xz -d ***.tar.xz$tar -xvf ***.tar 可以看到这个压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。...原创 2018-08-01 19:14:33 · 2619 阅读 · 0 评论 -
字符设备驱动 --静态/动态申请设备号
静态设备号申请: 申请设备号, from --- 要申请的设备号, count --- 申请几个设备, name --- 设备名字int register_chrdev_region(dev_t from, unsigned count, const char *name) 注销设备号, from --- 要注销的设备号, count--- 注销几个设备...原创 2018-08-07 19:39:48 · 1030 阅读 · 0 评论 -
Linux 根文件系统的主要目录
/bin 可执行程序/dev 块/字符设备结点文件/etc 主要配置文件和初始化执行文件/lib 基本的库文件,如:C库 和内核模块/mnt 挂载点、临时挂在文件系统用/opt 附加的软件包/proc 虚拟文件系统,用于内核和进程通信/sbin ...原创 2018-08-03 11:26:02 · 1008 阅读 · 0 评论 -
Uboot 移植步骤
Uboot 移植步骤:Vi Makefile 注意修改交叉编译工具链 Vi boards.cfg 查看uboot 已支持的板子, 哪款板子跟我们要移植的板子更接近 如果origen 板子跟 我们的板子接近, 参考origen 板子移植我们的uboot 拷贝origne 板子的所有文件到fs4412 ,Cp -rf board/samsung/origen ...原创 2018-08-03 15:19:21 · 3314 阅读 · 0 评论 -
Linux 内核移植步骤
Vi Makefile 修改arch, 修改cross_compile = arm-none-linux-gnueabi- 移植linux内核, 首先需要一个基本的配置(哪些模块有, 哪些功能有) 怎么得到基本配置 : arch/arm/configs 目录下有很多arm 处理器的默认配置 Make exynos_defconfig 等同于 ...原创 2018-08-03 15:20:42 · 1143 阅读 · 0 评论 -
Linux 系统的开机启动顺序(板子的启动顺序)
加载BIOS - > 读取MBR -> boot loader - > 加载内核 - > 启动init进程 ->启动内核模块 - >执行不同级别运行的脚本程序 - > 执行/etc/rc.d/rc.local(本地运行服务) ->执行/bin/login 就可以登陆了。...原创 2018-08-13 17:04:42 · 1040 阅读 · 1 评论 -
C语言中volatile关键字详解
volatile关键字详解,以及在嵌入式中的应用volatile 关键字的作用是作为指令关键字,确保本条指令不会因为编译器的优化而省略,且要求每次直接读值。关键字 volatile 是与 const 绝对对立的。二、在嵌入式中使用volatile变量如果加了 volatile 修饰,则会从内存重新装载内容,而不是直接从寄存器拷贝内容。 volatile应用比较多的场合,在中断服务程序和cp...转载 2018-08-20 19:40:09 · 806 阅读 · 0 评论 -
排序算法---快速排序详解
最近面试遇到技术面 有问道快排的算法,回来以后我总结了一下,如下。算法介绍: 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟...原创 2018-10-13 22:05:21 · 311 阅读 · 0 评论 -
C语言回调函数详解
回调函数 在C语言编程中,我们经常听到回调函数(callback function)一说。对于C语言新手而言,回调函数可能是一个比较难于理解的东西。今天我将通过一个实际例子,来讲解什么是回调函数,为什么要用回调函数。回调函数究竟有什么作用呢? 说到这里,就有了用户和开发者之间的概念,假设,用户是实现add_ret这个函数,而开发者是实现add这个函数,现在的需求是,用户将a...转载 2018-12-29 14:38:33 · 6268 阅读 · 2 评论 -
linux动态库的初始化和清理(init()函数和fini()函数)
a. Windows 中有 DllMain 入口函数, 而 Linux 中则没有。 b. Linux 中有特殊函数 _init 和 _fini, 主要是分别用来初始化动态库和关闭的时候 做一些必要的处理, 我们可以把自己认为需要的代码放到这两个函数里面, 它们分别 在动态库被加载和释放的时候被执行。具体说, 如果一个动态库里面有一个名字为 "_init"...转载 2019-08-07 13:45:22 · 4334 阅读 · 0 评论 -
Linux下sqlite3 的基础代码
/** filename : main.c* path: ./* version : 1.0* note : main function */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h> #include "sqlite3....原创 2018-06-20 16:39:28 · 328 阅读 · 0 评论 -
信号signal()函数有关代码
/************************************************************************* > File Name: signal.c > Author: > Mail: > Created Time: 2018年06月08日 星期五 20时10分00秒 ************************...原创 2018-06-08 20:25:19 · 752 阅读 · 0 评论 -
守护进程的创建 --详细解答
守护进程 先说概念吧: 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 然后说 特点吧 : 守护进程最重要的特点是...原创 2018-06-08 19:10:56 · 269 阅读 · 0 评论 -
【Linux 基础(二)】 shell 命令
ls -- 查看目录下的内容例如: ls -l -rw-rw-r-- 1 farsight farsight 91 Mar 7 15:31 1.c drw-rw-r-- 1 farsight farsight 28 Jun 27 2017 1 说明:rw-代表权限 r:read w:write x:excute(执行)二. 修改相关的命令rm : 删除某个文件 例如:rm 1....原创 2018-03-16 16:48:56 · 266 阅读 · 0 评论 -
linux 中VIM的安装和配置
转载自:https://www.cnblogs.com/tankblog/p/6814137.html1.vim的安装#yum search vim //查看vim相关软件信息#yum install -y vim* //在线安装vim2.vim的配置(1)~/.viminfo 在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。这样为了方便下次处理,如:...转载 2018-04-11 21:22:50 · 724 阅读 · 0 评论 -
数据的存储形式 --- 补码
1、数据的存储形式 数据都是以补码形式存储 正数的补码是正数的本身 负数的补码 符号位不变 其它位数取反+1; 【例1】+9的补码是00001001。 【例2】求-5的补码。-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)所以-5的补码是11111011。...原创 2018-05-09 09:41:49 · 1314 阅读 · 0 评论 -
【Linux】--vim(vi) 使用方法
看不懂的请看下面的笔记 笔记比较通俗编辑器(viàvim) 默认模式 vim 1.txt 命令模式 ———i,a———> 插入模式 插入模式按ESC转换到命令模式 再按: 进入末行模式 再保存退出wq (保存退出)w(只保存不退出)q(只退出不保存)wq!(强制保存退出)/字符串(查找该字符串所处的行)在命令模式下进行复制 按YY复...原创 2018-05-08 09:26:16 · 208 阅读 · 0 评论 -
linux下的C语言的 Makefile 的书写方法
该文章是对陈皓老师文章的转载,并添加一些自己的看法。https://blog.csdn.net/haoel/article/details/2886Makefile 介绍什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HT...转载 2018-05-16 15:32:45 · 5078 阅读 · 1 评论 -
【C语言】指针函数
指针函数详解 指针函数是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。指针函数定义 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 就是说指针函...原创 2018-05-16 17:18:15 · 212 阅读 · 0 评论 -
C语言递归方法和非递归写斐波那契数列
#include<stdio.h>int fib1(int);int main(void){ int n; printf("please input the index of fib:"); scanf("%d",&n); printf("the %d fib1 number is %d\n",n,fib1(n)); return 0;}int ...原创 2018-05-28 18:25:38 · 2553 阅读 · 0 评论 -
线性表的链式存储结构从建表插入到 删除销毁
文件1 list.c#include<stdio.h>#include"list.h"#include<stdlib.h>#include<string.h>/* 函数名 creatList; 功能 创建链表 申请空间 返回值 无 定义一个指针函数返回的就是个函数*/LIST *creatList(void){ LIST * pLi...原创 2018-06-05 08:44:21 · 1516 阅读 · 0 评论 -
进程信号量和线程信号量
信号灯/信号量 (semephore) 三种 1、posix 有名信号灯 2、posix 基于内存的信号灯(无名信号灯 ) //这个是线程用的信号量 因为无名管道就是在父子线程之间的 它也一样 3、System V信号灯(IPC对象)进程间使用的信号灯: 1、posix 有名信号灯 使用频率不高,不做介绍 ...原创 2018-06-12 17:38:27 · 2177 阅读 · 0 评论 -
【嵌入式linux】父子进程通过共享内存进行通信的进程间通信
题目 父子进程通过共享内存进行通信。 比如:父进程收到信号SIGUSR1,写共享内存。 子进程收到信号SIGUSR2,读共享内存 流程如下: 1、先求key的值 2、创建并打开共享内存 3、映射 4、创建 父子子进程...原创 2018-06-12 19:13:24 · 4767 阅读 · 0 评论 -
C语言文件I/O 读取一个文件并输出出来 和 输出到另一个文件里面
#include<unistd.h>#include<stdio.h>#include<fcntl.h>#include<sys/types.h>#define SIZE 50int main(void){ char buf[SIZE]={0}; //接收读取的东西的盒子 int ret = 0; // re...原创 2018-06-06 14:22:54 · 6652 阅读 · 0 评论 -
【计算机基础】 fork函数 创建进程
进程 : 进程是个抽象的东西,它是程序执行的过程。 它也是操作系统分配资源(实际上就是分配内存)的最小单位。 pid_t fork()函数 是用来创建进程的函数, 返回值 >0的时候是父进程,=0的时候是子进程 <0的时候出错 也可以这样理解:成功,在父进程地址空间返回子进程的ID,在子进程地址空间返回0;失败返回-1。 下面就用for...原创 2018-06-07 20:26:46 · 544 阅读 · 0 评论 -
TCP协议中的三次握手和四次挥手
为什么要进行三次握手?(是为了建立连接) 答:三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送和接收,而三次握手的主要目标就是双方确认自己与对方的发送和接收都正常。 第一次握手:客户端给服务器发送请求沟通的信息,服务器接收到信息(就类似于拨电话给服务器) 第二次握手:服务器给客户端发送接收到信息的确认信息,(类似于服务器接通电话了,...原创 2018-06-14 19:25:37 · 250 阅读 · 0 评论 -
二叉树的遍历和面试题
typedef int data_t typedef struct node_t { data_t data; struct node_t *lchild, *rchild; }bitree; bitree_t *root; /*先序遍历 若二叉树为空树,则空操作,否则 访问根结点, 先序遍历左子树 先序遍历右子树 */...原创 2018-06-01 14:37:00 · 1946 阅读 · 3 评论 -
【Linux 基础(一)】--ubuntu 的安装 基础命令
一。添加虚拟机把Ubuntu拷贝到本机,并且解压缩打开VMware Workstation选项卡--主页--打开虚拟机--找到刚才的解压缩后的文件*.vmx--打开Ubuntu的用户名和密码是自己设置的。二。linux命令1。shell:命令解释器2。linux命令格式 命令 [选项] [参数1] [参数2] 。。。3。一些常用的命令 ls 列写指定目录下的文件例: ls /home...原创 2018-03-16 16:46:15 · 529 阅读 · 0 评论