
Linux
xiaohuima_dong
这个作者很懒,什么都没留下…
展开
-
程序单例运行--文件锁
遇到的问题在运行程序时,为了防止可执行程序被多次运行,导致运行异常,需要想办法使得程序单例运行。即一个可执行程序,只有实例处于运行状态。实现方法首先,出发点是进程间的排他性,对多个进程可共享的资源加排他性的锁。凡是进程间可共享的资源理论上都可以作为载体。例如:设置共享内存中的信号量 设置文件锁 某个文件中的具体内容同一个可执行程序,如果启动两次,两次中访问的锁肯定是同一个锁,所以使用排他性的锁,在第二个实例启动过程中,获取这个锁时就会报错。就起到了单例保护的作用。附一个简单的文件锁原创 2021-03-16 19:48:55 · 466 阅读 · 0 评论 -
守护进程
守护进程是什么守护进程是一类运行在系统后台,不受任何终端、上下文影响的特殊后台进程。从运行开始,直到系统关闭时才会结束。通常写一个服务程序,或者程序从设备开机起到设备关机一直都在运行,就适合做成守护进程形式。为什么要守护进程简单来说,就是为了使程序运行起来后,不受一些外部因素的干扰而异常退出。linux系统运行起来后,pid为1的进程是init进程,负责启动linux系统,其他的进程都是在他创建出来的。我们在某个终端上通过命令./a.out的形式来运行一个程序,这种终端程序就是我们所运行原创 2021-03-16 16:45:31 · 234 阅读 · 0 评论 -
ffmpeg支持MP3编码的方法
问题近期一个项目中mp3文件较大,需要转成占用存储空间较小的文件。首先想到的是“格式工厂”,非常便捷,但是此工具每次批量转换数量上限是1000,而我要转上万个。所以考虑用ffmpeg。但在转换时报错,按照提示信息来看,应该是没有选择编码工具。也就是说ffmpeg工具安装时有些功能没选上。解决办法在ffmpeg安装包目录下 ,通过./configure --list-encoders 和./configure --list-decoders命令可以看到,ffmpeg只支持mp3解码,但..原创 2020-12-07 13:57:19 · 4069 阅读 · 0 评论 -
C语言--奇怪错误整理
leetcode报错之:member access within misaligned address 在leetcode上做一个道体,报错如下:Line 70: Char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct ListNode', which requires 8 byte alignment (ListNode.c)0xbebebebeb..原创 2020-10-28 11:06:11 · 2191 阅读 · 0 评论 -
sqlite3数据库操作
API接口介绍增删改查查询接口SQLITE_API int sqlite3_get_table( sqlite3 *db, /* An open database, 数据库句柄 */ const char *zSql, /* SQL to be evaluated, sql语句 */ char ***pazResult, /* Results of the query, 结果指针(需要调用sqlite3_free_table释放) */原创 2020-09-24 13:58:51 · 190 阅读 · 0 评论 -
Valgrind使用记录
下载地址:https://www.valgrind.org/downloads/current.html编译安装x86平台:./configure --prefix=<安装目录> ,make ,make installarm平台:./configure --prefix=<安装目录> CC=<工具链> AR=<工具链> --host=<运行平台>, make make install在x86平台编译时遇到问题:解决方法:进入原创 2020-09-14 16:39:22 · 591 阅读 · 0 评论 -
解决 Linux系统上编译时出现:asm/types.h: No such file or directory
在linxu系统上编译valgrind工具时,报错:实际去/usr/include目录下看,发现没有asr这个目录,而有一个asm-generic目录。手动创建软链接asm,重新编译即可。原创 2020-09-11 17:02:55 · 24454 阅读 · 8 评论 -
记录一个因头文件引发的错误
项目中有一个接口是在外部实现,大致调用结构如下图四个文件。share.h中的结构体中有一个成员,其结构在另外一个头文件中定义。main函数中调用share.c中实现的接口,获取到struct student类型的成员,只要一访问结构体中的成员就直接报段错误,通过gdb也看不出什么信息。但是如果在share.c中访问,就没有问题。(在x86平台这样写,然后运行,发现没问题)针对这个现象,当时就觉得有点像C++中的成员访问权限引发的问题一样。但是这是C代码,从根本上来说就是访问一段内存而已。原创 2020-08-20 16:50:30 · 266 阅读 · 0 评论 -
记录一次内存错误排查过程
问题现象一个播放器的实现代码,在多次播放后,出现异常挂死,gdb显示如下图通过bt命令查看函数调用栈,只有一条有效消息,就是 “#3 0xa0” 这个地址明显是错误的。所有怀疑是栈被破坏了。直接报错内容也是多种多样。以下这些错误都出现过。double free or corruption (!prev)corrupted size vs. prev_sizedouble free or corruption (out)malloc(): memory corruption ...原创 2020-08-14 14:14:22 · 2550 阅读 · 1 评论 -
Makefile中添加shell脚本
Makefile中可以加入shell脚本语言,但是编写形式不一样,Makefile中都是以行为单位的,所以必须将Makefile中的shell脚本通过\ 连接成一行。例如:if [ -d $(HISI_HOME)/src/sdk_modify/hidrv_v0A1/source/osdrv/kernel/linux-2.6.35 ]; then \cp -rf $(HISI_HOME)原创 2017-06-12 10:39:48 · 3120 阅读 · 0 评论 -
Makefile中命令前的@和-符号
如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止,不再执行后续命令,但如果命令前面加了-号,即使这条命令出错,make也会继续执行后续命令。通常rm命令和mkdir命令前面要加-号,因为rm要删除的文件可能不存在,mkdir要创建的目录可能已转载 2017-06-08 14:04:51 · 1401 阅读 · 0 评论 -
Makefile 中:= ?= += =的区别
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(OPT),define) VRE ?= “Hello World! First!”endifif转载 2017-06-08 09:47:03 · 242 阅读 · 0 评论 -
使用FileZilla Server软件快速搭建ftp服务器
1. 下载软件: 下载软件,名称为FileZilla Server2. 按照常规套路安装3. 设置1)双击运行,以本机为ftp服务器的话,此界面基本不用修改,passwd可以设置,也可以不用设置。2)添加一个用户,配置ftp根目录可以看到,在General中点击Add用来添加用户,可以配置密码,也可以不配置密码。然后点击Shared folders选项卡,在里面点击Add添加ftp的根目录。...原创 2018-04-12 17:17:35 · 2031 阅读 · 0 评论 -
虚拟机登陆桌面失败
1. 问题: 虚拟机登陆桌面时,输入密码后,又回到了登陆界面,密码是正确的。 解决办法:删除掉对应账户下的 ~/.xauthority 文件原创 2017-06-18 17:41:14 · 2169 阅读 · 0 评论 -
linux 下 svn操作
转载自博客:http://blog.youkuaiyun.com/chun_1959/article/details/428707571、将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co2、往版本库中添加新的文件转载 2017-10-16 17:27:20 · 1521 阅读 · 0 评论 -
获取系统时间相关
获取系统时间 头文件: #include 函数名:time_t time(time_t * t) 描述:函数返回值和参数分别是获取时间的方式,最小单位是秒数。 返回值:成功:时间值; 失败:-1; 将获得的时间转化的各种函数 c原创 2015-11-11 11:19:23 · 473 阅读 · 0 评论 -
同步笔记
1. http://developer.51cto.com/art/201001/180468.htm 2. http://droidyue.com/blog/2015/07/04/six-books-every-programer-must-read/3. 安卓系列博客 http://blog.youkuaiyun.com/jscese/article/details/42739197原创 2017-06-09 13:49:01 · 518 阅读 · 0 评论 -
getopt--参数选项处理
在写一些可执行程序时,常常会传递一些参数。getopt函数就是专门用来处理选项参数的。#include <unistd.h>extern char *optarg;extern int optind, opterr, optopt;int getopt(int argc, char * const argv[], const char *optstring);arg...原创 2019-01-07 16:32:00 · 2083 阅读 · 0 评论 -
vi/vim中替换大全
vi/vim 中可以使用 :s 命令来替换字符串:s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所有 vivian 为 sky:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每转载 2015-10-23 08:42:31 · 453 阅读 · 0 评论 -
vim 快捷操作
1. 在vim中显示文件路径:f 或者Ctrl+g 显示全路径 先按1 ,然后Ctrl+g2. 鼠标可以移动光标 set mouse=a原创 2017-06-06 17:05:45 · 269 阅读 · 0 评论 -
Linux 设备驱动篇之I2c设备驱动
原文地址:http://blog.youkuaiyun.com/fulinus/article/details/9008191#t16Linux 设备驱动篇之I2c设备驱动fulinux一、I2C驱动体系虽然I2C硬件体系结构和协议都很容易理解,但是Linux I2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设备驱动、I2C总线驱动和I2C核心。1.I2C核心I2C转载 2016-10-05 11:44:38 · 2355 阅读 · 0 评论 -
Linux下删除包含或不含有某字符的行
1、利用vi删除不包含有某字符xxx的行(具体可以man ed参考):v/xxx/d2、利用vi删除包含有某字符xxx的行(具体可以man ed参考):g/xxx/d2、利用sed删除包含某字符xxx的行sed -i -e '/string/d' filename转载 2015-10-14 09:14:05 · 10720 阅读 · 0 评论 -
花式秀之Hello world
在初学一门编程语言的时候,写一个“Hello world!”程序是最常见的入门方法。通过写一个成功的“Hello world!”,可以实践这门语言最基本的语法特性,还可以带给自己成就感,真是一举两得。C/C++语言本身有很多特性,如果能够将这些技术分解出来变成一个个的“Hello world!”,并且将这些技术点到为止,貌似也算是一件善事。这里,列举了10个“Hello world!”程序,大家雅转载 2015-10-24 08:49:30 · 1184 阅读 · 0 评论 -
Linux 下安装windows软件:例如Source Insight
1、先装一个软件:wine 安装完成后在终端中可以看到如下信息说明按装成功: [root@localhost /]# wineUsage: wine PROGRAM [ARGUMENTS...] Run the specified program wine --help Display this help and原创 2015-09-12 21:44:30 · 391 阅读 · 0 评论 -
Linux下文件字符集编码转换
Linux下文件字符集编码转换 查看文件编码file命令file ip.txt查看文件编码file命令file ip.txtip.txt: UTF-8 Unicode text, with escape sequences一、利用iconv命令进行编码转换文件内容编码转换iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件。用法: ic转载 2015-08-28 22:20:20 · 402 阅读 · 0 评论 -
ARM中程序状态寄存器CPSR结构
1、条件码标志 N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。条件码标志各位的具体含义如下表所示:2 控制位 CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行于特权模式时,这些位也可以由程序修改。 ·中断禁止位I、F:置1时,禁止IRQ中断和FIQ中断。 ·T转载 2015-08-28 23:03:48 · 1911 阅读 · 0 评论 -
汇编中定义变量的形式
类型(TYPE):变量的类型属性指变量中每个单元所包含的字节数,类型有:字节变量(BYTE)、字变量(WORD)、双字变量(DOUBLE WORD)定义变量的形式:ldr r1, _rWTCON _rWTCON: .word 0x15300000 这种定义方式中_rWTCON就是一个标号,是代表一个.word大小的内存空间(这个内存空间中存原创 2015-08-28 22:42:50 · 5416 阅读 · 0 评论 -
内核中__builtin_constant_p 函数
在追踪GPIO 操作时遇到 __builtin_constant_p这个函数,在内核源码中找不到相关定义,网络查得: __builtin_constant_p 是编译器gcc内置函数,用于判断一个值是否为编译时常量,如果是常数,函数返回1 ,否则返回0。此内置函数的典型用法是在宏中用于手动编译时优化。原创 2015-10-15 11:33:37 · 5112 阅读 · 0 评论 -
巧用do while(0)
linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错转载 2015-10-15 13:57:05 · 324 阅读 · 0 评论 -
Linux ELF文件
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]elf格式ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省转载 2016-10-01 11:20:10 · 3578 阅读 · 0 评论 -
Linux设备模型——设备驱动模型和sysfs文件系统解读
原文地址:http://blog.youkuaiyun.com/yj4231/article/details/7799245本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解。其实,platform机制是基于driver转载 2016-10-13 23:18:10 · 802 阅读 · 0 评论 -
生产者消费者模型
文本Tag: 软件架构【IT168 分析评论】 ★简介 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。 单单抽象出生产者和消费者,还够不上是生产者/消费者模式。该模式还需要有一个转载 2016-03-03 15:35:24 · 1729 阅读 · 0 评论 -
我的vim个性配置
"2015年 10月 15日 星期四 15:04:20 EDTset shiftwidth=8set tabstop=8set autoindent"2015.2.1 creat Makefile Templateautocmd BufNewFile Makefile 0r /home/dd/Template/Makefile"2015.2.1 光标移动到buff原创 2015-11-17 14:23:06 · 353 阅读 · 0 评论 -
linux下零拷贝技术
传统的数据传输方式 很长一段时间内,数据拷贝的认识仅仅停留在应用程序层,实际上隐藏在背后的数据拷贝行为比想象的要多的多。在传输数据的时候,用户应用程序需要分配一块合适大小的缓冲区来存放需要传输的数据。用户从应用程序中读取数据,然后发送出去,只需要两个系统调用read,write即可完成数据传输工作,应用程序并不知道这个数据传输过程中操作系统进行了多少次拷贝操作。某些情况下,这些数据转载 2015-12-10 23:55:02 · 885 阅读 · 0 评论 -
为sourceinsight添加makefile、kconfig、*.S文件支持
大家用source insight看linux源码的时候都遇到这么一个麻烦,makefile和kconfig中的文字在搜索的时候不能找到,这是因为source insight默认是不选makefile的,也没有konfig这种类型的文件。下面就讲一下 如何添加makefile:打开Source Insight,在新建工程之前,进入Options -> Document Option转载 2015-11-17 14:39:58 · 381 阅读 · 0 评论 -
linux关于readlink函数获取运行路径的小程序
相关函数: stat, lstat, symlink表头文件: #include 定义函数:int readlink(const char *path, char *buf, size_t bufsiz);函数说明:readlink()会将参数path的符号连接内容到参数buf所指的内存空间,返回的内容不是以NULL作字符串结尾,但会将字符串的字符数返回。若参数bufsiz小于转载 2015-11-17 13:28:45 · 899 阅读 · 0 评论 -
linux中inittab文件详解
init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序。init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。理解Runlevel: runlevel用来表示在init进程结束之后的系统状态,在系统的硬件中没转载 2015-11-17 10:36:48 · 460 阅读 · 0 评论 -
汇编指令状态寄存器访问指令(MRS,MSR)
原文地址:freesoftman.iteye.com/blog/1827249ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图: 分成了4部分:1,条件标志位N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可转载 2015-08-27 23:41:30 · 957 阅读 · 0 评论