操作系统
文章平均质量分 75
ZalGGboy
这个作者很懒,什么都没留下…
展开
-
理解静态库与动态库(浅谈静态动态库的区别)
理解静态库与动态库静态库概念静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库特点可执行文件中包含了库代码的一份完整拷贝静态库的代码是在编译过程中被载入程序中缺点就是被多次使用就会有多份冗余拷贝动态库(动态链接库)概念动态链接提供了一种方法,使进...转载 2019-12-04 14:35:59 · 949 阅读 · 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 · 431 阅读 · 0 评论 -
log4cpp 详解及使用操作
Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和远程syslog服务器中。1、Log4cpp简介 Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。...原创 2019-02-12 14:27:25 · 6856 阅读 · 0 评论 -
Android Tombstone/Crash的log分析和定位(墓碑文件)
=====项目中遇到进程挂掉的问题,需要分析Tombstone,本文帮了大忙http://blog.csdn.net/helldevil/article/details/6682211 9楼 adits 2013-04-22 16:20发表 [回复] [引用] [举报]命令使用有误:原文: addr2line -e -f libc.so 0001173c 应该是addr...转载 2019-02-19 16:26:41 · 5237 阅读 · 1 评论 -
内存泄漏详解
简介内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的...原创 2019-02-26 12:00:02 · 735 阅读 · 0 评论 -
内存越界详解
内存越界是软件系统主要错误之一,其后果往往不可预料且非常严重。更麻烦的是,它出现的时机是随机的,表现出来的症状是随机的,而且造成的后果也是随机的,这会使程序员很难找出这些 Bug 的现象和本质之间的联系,从而给 Bug 的定位带来极大的困难。一般情况下,内存越界访问可分如下两种:读越界,即读了不属于自己的数据。如果所读的内存地址是无效的,程序立刻崩溃;如果所读内存地址是有效的,在读的时候不会马...原创 2019-02-26 12:01:33 · 6520 阅读 · 1 评论 -
如何在进程崩溃后打印堆栈并防止数据丢失
进程在运行过程中遇到逻辑错误, 比如除零, 空指针等等, 系统会触发一个软件中断.这个中断会以信号的方式通知进程, 这些信号的默认处理方式是结束进程.发生这种情况, 我们就认为进程崩溃了.进程崩溃后, 我们会希望知道它是为何崩溃的, 是哪个函数, 哪行代码引起的错误.另外, 在进程退出前, 我们还希望做一些善后处理, 比如把某些数据存入数据库, 等等.下面, 我会介绍一些技术来达成这...原创 2019-03-06 10:00:12 · 1528 阅读 · 0 评论 -
Android Tombstone(墓碑日志)解决步骤
最近在学习通过墓碑文件定位bug所在位置,网上浏览了很多的博客,大多数只能做到利用addr2line定位到行号但是对于大型项目,尤其是C++代码较多的情况下,很难去准确定位到内存越界、内存溢出等问题(全球性难题,没办法)。在这里整理一下,尽量给自己和大家提供一些路径:1. https://blog.csdn.net/Zhanganliu/article/details/87715961...原创 2019-03-07 11:32:28 · 5663 阅读 · 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 · 5886 阅读 · 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 · 2764 阅读 · 0 评论 -
Linux Signal信号详解
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。一、信号的基本概念本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和...原创 2019-04-02 10:17:33 · 377 阅读 · 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 · 10887 阅读 · 2 评论 -
linux添加自定义命令
首先使用命令 type 自定义命令 ,查看自定义的命令是否被系统占用其中ML命令是使用 命令 alias自定义的命令 一次性 直接在命令行中输入 例如:输入 alias d=’cd ~/Desktop’ 此时该命令别可以使用,不过仅在当前的命令行界面下,一旦退出之后将无法使用 写入bashrc中 在 computer/etc 的文件夹下可...原创 2019-01-23 10:25:27 · 2513 阅读 · 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 · 6980 阅读 · 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 · 2254 阅读 · 2 评论 -
C语言学习历程(二十)网络编程-客户端创建到发送
#include #include #include #include #include #include #include #include #define portnumber 3333int main(int argc, char *argv[]) { int sockfd; char buffer[1024];原创 2018-02-01 11:42:36 · 476 阅读 · 0 评论 -
C语言学习历程(二十一) 网络编程-服务器端创建到接收
#include #include #include #include #include #include #include #include #define portnumber 3333int main(int argc, char *argv[]) { int sockfd,new_fd; struct sock原创 2018-02-01 11:43:23 · 530 阅读 · 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 · 2690 阅读 · 0 评论 -
synergy软件win10和ubuntu16.04局域网下使用一套键盘鼠标系统
这两天公司给了一台win10和Linux(Ubuntu16.04)的机器,两套键鼠太麻烦,就自己搞了一下,一套键鼠操作主要通过软件:Synergy 实现(目前比较方便且稳定且便宜且快速安装的)1.下载软件 下载地址:https://download.csdn.net/download/zhanganliu/108617412.安装2.1 Ubuntu下安装解压对应的文件,安...原创 2018-12-19 15:40:36 · 697 阅读 · 0 评论 -
自旋锁和互斥锁区别
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机制:...原创 2019-01-08 16:07:01 · 1493 阅读 · 1 评论 -
深入理解互斥锁的实现
在实际的软件编程中,经常会遇到资源的争用,比如下面的例子:[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 · 3961 阅读 · 1 评论 -
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 · 2660 阅读 · 0 评论 -
sublime常用快捷键
安装Sublime Text 3官网 http://www.sublimetext.com/3选择对应的版本安装。完事后,要安装一个基础的、必备的包管理:Package Control,用来以后安装插件用的。安装指导 https://sublime.wbond.net/installation import urllib.request,os,hashlib; h = '71...原创 2019-01-15 14:58:08 · 344 阅读 · 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 · 20573 阅读 · 4 评论 -
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 · 3096 阅读 · 0 评论 -
ubuntu下top命令源码实现分析
在分析top命令代码实现前,先啰嗦几句。最近的一个linux项目要获取cpu和内存使用率。由于linux并未提供相关的api,因此,只能通过其他手段来获取;最开始使用的方式可简单描述如下:1.构造一个命令字符串,该字符串的功能是通过top命令获取cpu的空闲率;2.使用popen执行该命令;3.使用getline等io函数从管道中读取cpu的空闲率;4.将字符串的空闲率转换...原创 2019-01-22 13:41:09 · 2334 阅读 · 0 评论 -
笔试训练-库函数与系统调用的联系与区别
一. 概念系统调用(英语:system call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好转载 2018-02-01 11:36:50 · 405 阅读 · 0 评论