
Linux
文章平均质量分 71
ZalGGboy
这个作者很懒,什么都没留下…
展开
-
理解静态库与动态库(浅谈静态动态库的区别)
理解静态库与动态库静态库概念静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库特点可执行文件中包含了库代码的一份完整拷贝静态库的代码是在编译过程中被载入程序中缺点就是被多次使用就会有多份冗余拷贝动态库(动态链接库)概念动态链接提供了一种方法,使进...转载 2019-12-04 14:35:59 · 983 阅读 · 0 评论 -
重载new和delete来检测内存泄漏
1. 简述 内存泄漏属于资源泄漏的一种,百度百科将内存泄漏分为四种:常发性内存泄漏、偶发性内存泄漏、一次性内存泄漏和隐式内存泄漏。 常发性指:内存泄漏的代码会被多次执行到。偶发性指:内存泄漏的代码只有在特定的条件下才会执行到。一次性指:内存泄漏的代码只会被执行到一次。隐式指:程序在运行中不断的开辟内存,知道程序结束时才释放内存,本质上虽然没有内存泄漏,但是如果这个程序在连续运行很...原创 2019-02-28 14:39:07 · 1002 阅读 · 0 评论 -
log4cpp 详解及使用操作
Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和远程syslog服务器中。1、Log4cpp简介 Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。...原创 2019-02-12 14:27:25 · 6931 阅读 · 0 评论 -
Android.mk详解
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 一、Android.mk文件的用途 一个android子项目中会存在一个或多个Android.mk文件 1、单一的Android.mk文件 直接参考NDK的sampl...原创 2019-02-15 09:53:44 · 444 阅读 · 0 评论 -
linux添加自定义命令
首先使用命令 type 自定义命令 ,查看自定义的命令是否被系统占用其中ML命令是使用 命令 alias自定义的命令 一次性 直接在命令行中输入 例如:输入 alias d=’cd ~/Desktop’ 此时该命令别可以使用,不过仅在当前的命令行界面下,一旦退出之后将无法使用 写入bashrc中 在 computer/etc 的文件夹下可...原创 2019-01-23 10:25:27 · 2523 阅读 · 0 评论 -
statfs结构体和函数详解——例程
因为要读取SD卡的大小和使用情况,所以用到statfs这个函数,功能类似于df命令。需要的头文件:#include <sys/vfs.h> int statfs(const char *path, struct statfs *buf);功能:获取当前文件系统下磁盘空间使用情况。struct statfs {long f_type; /* 文件系统类型 */lon...原创 2019-01-22 17:51:50 · 7178 阅读 · 0 评论 -
参考df源码写的一个简单的df命令的源代码
df命令可以列出加载的磁盘或各种文件的信息: 下面给出一个简单的df的命令的源码,这个源码根据df的源码进行改写,很简单,就一个主文件 :)#include <stdio.h>#include <mntent.h>#include <string.h>#include <sys/vfs.h>static const unsigne...原创 2019-01-22 14:18:12 · 2286 阅读 · 2 评论 -
ubuntu下top命令源码实现分析
在分析top命令代码实现前,先啰嗦几句。最近的一个linux项目要获取cpu和内存使用率。由于linux并未提供相关的api,因此,只能通过其他手段来获取;最开始使用的方式可简单描述如下:1.构造一个命令字符串,该字符串的功能是通过top命令获取cpu的空闲率;2.使用popen执行该命令;3.使用getline等io函数从管道中读取cpu的空闲率;4.将字符串的空闲率转换...原创 2019-01-22 13:41:09 · 2395 阅读 · 0 评论 -
Linux下C语言实现线程池例程
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。 p...原创 2019-01-22 13:00:21 · 508 阅读 · 0 评论 -
ubuntu下top命令源码位置及分析
示例:查找top命令的源代码第一步:使用 which命令查找 top所在的目录$ which top/bin/ps/top第二步:使用 sudo dpkg -S /bin/ps/top 查找该命令包含在哪个源文件中$ sudo dpkg -S /bin/ps/topprocps: /bin/ps/top第三步:在第二步中,我们得知ps的命令包含在源文件procps中,那么 我们现在就开始下...原创 2019-01-22 12:58:22 · 3173 阅读 · 0 评论 -
Android Tombstone/Crash的log分析和定位(墓碑文件)
=====项目中遇到进程挂掉的问题,需要分析Tombstone,本文帮了大忙http://blog.youkuaiyun.com/helldevil/article/details/6682211 9楼 adits 2013-04-22 16:20发表 [回复] [引用] [举报]命令使用有误:原文: addr2line -e -f libc.so 0001173c 应该是addr...转载 2019-02-19 16:26:41 · 5448 阅读 · 1 评论 -
Linux 下cmake生成SO库的使用实例
1、创建我的共享库:MySharedLibCMakeLists.txt cmake_minimum_required(VERSION 2.8) project(MySharedLib) # C++11 编译 set(CMAKE_CXX_STANDARD 11) #创建共享库 add_library(MySharedLib SHARED libr...转载 2019-02-13 17:07:42 · 3700 阅读 · 1 评论 -
access()函数的用法
1.函数功能:检查调用进程是否可以对指定的文件执行某种操作。2.函数原型:1)函数头文件 #include <stdio.h> #include <unistd.h>2)函数int access(const char * pathname, int mode)3)形参pathname:需要检测的文件路劲名mode:需要测...原创 2019-02-26 16:25:33 · 7627 阅读 · 0 评论 -
CMake自带变量
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/ljp341621/article/details/81979758———————————————— 转载地址:https://blog.youkuaiyun.com/ljp341621/article/details/81979758...转载 2019-08-20 15:05:39 · 483 阅读 · 0 评论 -
linux 16.04更新gcc版本(切换版本)
将版本更新至gcc-81.下载gcc-8、g++-8sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo sudo apt-get updatesudo apt-get install -y g++-82.切换版本cd /usr/bin #进入/usr/bin文件夹下sudo rm -r gcc...原创 2019-07-16 10:46:59 · 2315 阅读 · 0 评论 -
backtrace和backtrace_symbols函数原理解析
backtrace()是glibc(>=2.1)提供的函数,用于跟踪函数的调用关系。以下对backtrace()函数的说明以及实例,都来自其man page。函数定义 #include <execinfo.h> int backtrace(void **buffer, int size); char **backtrace_...原创 2019-04-02 10:48:27 · 11015 阅读 · 2 评论 -
Linux Signal信号详解
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。一、信号的基本概念本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和...原创 2019-04-02 10:17:33 · 393 阅读 · 0 评论 -
Linux下top命令底层源码Demo
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <dirent.h>#include <sys/types.h>#include <ctype.h>#include <unistd.h>#include <grp...原创 2019-03-27 14:25:01 · 2879 阅读 · 0 评论 -
pip install 和 apt-get install 用法与区别
在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢?1.区别pip用来安装来自PyPI(https://www.python.org/)的python所有的依赖包,并且可以选择安装任何在PyPI上已上传的先前版本的依赖包,个人认为是python相关的包和第三方包以及各种版本;apt...原创 2019-03-19 14:19:12 · 6104 阅读 · 0 评论 -
Android Tombstone(墓碑日志)解决步骤
最近在学习通过墓碑文件定位bug所在位置,网上浏览了很多的博客,大多数只能做到利用addr2line定位到行号但是对于大型项目,尤其是C++代码较多的情况下,很难去准确定位到内存越界、内存溢出等问题(全球性难题,没办法)。在这里整理一下,尽量给自己和大家提供一些路径:1. https://blog.youkuaiyun.com/Zhanganliu/article/details/87715961...原创 2019-03-07 11:32:28 · 5856 阅读 · 0 评论 -
如何在进程崩溃后打印堆栈并防止数据丢失
进程在运行过程中遇到逻辑错误, 比如除零, 空指针等等, 系统会触发一个软件中断.这个中断会以信号的方式通知进程, 这些信号的默认处理方式是结束进程.发生这种情况, 我们就认为进程崩溃了.进程崩溃后, 我们会希望知道它是为何崩溃的, 是哪个函数, 哪行代码引起的错误.另外, 在进程退出前, 我们还希望做一些善后处理, 比如把某些数据存入数据库, 等等.下面, 我会介绍一些技术来达成这...原创 2019-03-06 10:00:12 · 1608 阅读 · 0 评论 -
E: 您必须在 sources.list 中指定代码源(deb-src) URI 解决办法
上一篇文章运行$ apt-get source procps这个时候遇到了正在读取软件包列表... 完成E: 您必须在 sources.list 中指定代码源(deb-src) URI这个问题原因是我们的文件/etc/apt/source.list里的deb-src都被注释掉了,而现在我们需要,找到问题了就好解决了,可以直接vim修改该文件把deb-src的注释去掉,也可以运行“...原创 2019-01-22 12:17:56 · 21232 阅读 · 4 评论 -
CMake——进阶编写
假定有vegagis工程,工程的目录结构如下:#--vegagis# |--src 源文件目录# |--gui 界面工程,输出类型:dll,依赖于QT的QtCore、QtGui、QtXml# |--pending 工程中的源文件,不希望加入到工程中# ## 为了实现跨平台运行,win32和linux目录下实现的是同一套接口,win32不编译linu...原创 2019-01-25 17:05:49 · 766 阅读 · 0 评论 -
C语言项目(二)——基于Linux系统下的带有GUI界面的即时通信软件
一.项目设计知识点——接上一篇5.为什么选择库函数?什么时候用库函数操作文件? 通过库函数我们可以更好地使用其功能,节省了我们自己写函数的过程,并且对于已经运用成熟的库函数,我们很难写出更加高效的新算法。库函数对文件的操作1.文件分类:通过流进行输入输出:文本文件(存放ASCII码) 和 二进制文件(二进制编码方式)从用户角度: 普通文件 和 设备文件...原创 2018-07-25 16:18:39 · 3216 阅读 · 1 评论 -
C语言项目(一)——基于Linux系统下的带有GUI界面的即时通信软件
一.项目设计知识点1.Makefile的作用 makefile的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,ma...原创 2018-07-25 15:05:15 · 3881 阅读 · 0 评论 -
Ncurses学习经历(十三)菜单系统的核心
如你在上面的例子中所看到的,menu_driver 在更新菜单时有着举足轻重的作用。所以了解它的各个选项和它们的作用就很有必要了。前面已经解释过,menu_driver()的第二个参数可以是一个导航请求。一个可打印的字符(ASCII 码)或KEY_MOUSE 键值。我们来剖析一下各个导航请求:REQ_LEFT_ITEM 和REQ_RIGHT_ITEM一个菜单可以用多列的方式显示菜单...原创 2018-06-05 21:23:28 · 1691 阅读 · 0 评论 -
Ncurses学习经历(十二)菜单库
菜单库对cureses 基础库进行了很好的扩展。你可以通过这个库所提供的函数方便的创建菜单。如果你想让它更美观,可以定制它的显示效果。下面我们就来看看这个库。菜单是一个用来帮助用户选择子菜单项的屏幕。简而言之,菜单就是一个菜单项的集合,使你可以方便的从中选择相应的菜单命令。curses 菜单库还提供编制多选菜单的功能。有些读者可能不了解多选菜单。这个我们稍后讨论,我们先来了解一下菜单库...原创 2018-06-05 21:21:09 · 2915 阅读 · 0 评论 -
Ncurses学习经历(十一)面板库——用户指针
1. 使用用户指针 在上面例子中,使用用户指针在循环里查找下一个要显示的面板。我们可以通过指定一个用户指针给面板添加自定义信息,这个指针可以指向你想要存储的任何信息。在这个例子中,我们用指针存储了循环中下一个要显示的面板。其中,用户指针可以用set_panel_userptr()函数设定。要想访问某个面板的用户指针,就必须以该面板作为panel_userprt()函数的参数,函数就会返回该面...原创 2018-05-15 20:18:55 · 1095 阅读 · 0 评论 -
Ncurses学习经历(十)面板库详解
在精通curses 库后,你可能会想尝试着做一些更大的项目。为了让界面看起来更专业,你可能会创建许多重叠的窗口,但不幸的是,你很快会发现它们变得难以管理,多次的更新窗口使开发变得异常困难。如果你没有按照适当的顺序刷新那些窗口的话,它们就会给你带来很多麻烦。 不过别失望,面板库(Panel Library)提供了一个很好的解决方案。用ncureses 的开发者的话来说就是: 如果...原创 2018-05-15 20:16:19 · 2085 阅读 · 0 评论 -
Linux makefile 教程 非常详细,且易懂 ——亲身实践,转载
最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。 于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。 后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解。能...转载 2018-05-04 20:57:47 · 836 阅读 · 0 评论 -
Linux虚拟机出现read only问题—解决方法
问题原因:系统没有正常关机,导致虚拟磁盘出现文件系统错误。解决方法:使用fsck手动修复,具体操作如下:重启系统后使用root进入单用户模式,运行fsck.ext3 -y /dev/vda3说明:ext3的文件系统使用fsck.ext3,ext4文件系统使用fsck.etx4。/dev/vda3是系统/根分区。运行完毕后,reboot重启系统就恢复正常。20多台出问题的都是这样修复的,无失败案例。...原创 2018-04-09 17:42:13 · 5082 阅读 · 0 评论 -
Linux—常用命令简介
嵌入式:以应用为中心,计算机技术为基础,软硬件可裁剪,专用计算机系统。一,目录简介/bin:常用二进制文件; /sbin:管理员使用的二进制文件;/boot:Linux启动文件;/dev:设备文件(Linux里面一切皆为文件。比如硬盘在里面也是文件,而不是设备);/etc:配置文件;/home:默认用户目录,存放用户数据;/root:管理员目录,存放管理员数据;/tmp:临时文件存放目录。二,常用...原创 2018-04-09 17:37:58 · 509 阅读 · 0 评论 -
Linux 下的KILL函数的用法及信号中文含义
[ KILL ]功能描述:用于向任何进程组或进程发送信号。头文件用法:#include <sys/types.h> #include <signal.h>int kill(pid_t pid, int sig); 参数: pid:可能选择有以下四种1. pid大于零时,pid是信号欲送往的进程的标识。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个...原创 2018-07-14 17:24:27 · 2758 阅读 · 0 评论 -
疑难点精选:linux下 j = ++i + ++i + ++i的结果?
#include <stdio.h>int main(int argc, char **argv){ int i = 1,j; j = ++ i + ++ i + ++ i; printf("%d\n",j); return 0;}在linux下进行编译,最终表达式结果只能这样,其余形式无法通过编译,左值无效;运行结果为10;...原创 2018-07-20 22:53:10 · 1303 阅读 · 0 评论 -
Top命令实现代码解析(CPU、进程CPU使用率)
1、获取总的cpu信息# cat /proc/statcpu 161911 2406 35826 1860803 14982 685 3810 0cpu0 161911 2406 35826 1860803 14982 685 381 0 0intr 3304665 0 0 0 0 0 0 0 0 0 0 0 1102551 181196 0 0 0 0 0 0 0 0 14306...原创 2019-01-25 15:13:07 · 2706 阅读 · 0 评论 -
深入理解互斥锁的实现
在实际的软件编程中,经常会遇到资源的争用,比如下面的例子:[cpp] view plaincopy class Counter { private: int value; public: Counter(int c) { value = c; } int GetAndIncrement() { int temp = val...原创 2019-01-08 16:08:14 · 3979 阅读 · 1 评论 -
CMake常用变量和常量环境变量查表手册——整理
一,cmake 变量引用的方式:前面我们已经提到了,使用${}进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${}取值二,cmake 自定义变量的方式:主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DI...原创 2018-12-26 10:15:03 · 2327 阅读 · 0 评论 -
CMake的使用——详细整理
一、 基本使用安装:下载二进制包后可直接解压使用从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败使用:cmake dir_path,生成工程文件或makefile文件二、 概念out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录...原创 2018-12-26 10:13:33 · 449 阅读 · 0 评论 -
UBUNTU16.04 NDK 安装与配置
1、下载Android NDK自解压包,官方地址:https://developer.android.com/ndk/downloads/index.html#download下载:$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin2、解压,将Android NDK压缩包解压到你想要...原创 2018-12-28 14:30:27 · 3133 阅读 · 0 评论 -
synergy软件win10和ubuntu16.04局域网下使用一套键盘鼠标系统
这两天公司给了一台win10和Linux(Ubuntu16.04)的机器,两套键鼠太麻烦,就自己搞了一下,一套键鼠操作主要通过软件:Synergy 实现(目前比较方便且稳定且便宜且快速安装的)1.下载软件 下载地址:https://download.youkuaiyun.com/download/zhanganliu/108617412.安装2.1 Ubuntu下安装解压对应的文件,安...原创 2018-12-19 15:40:36 · 709 阅读 · 0 评论