2017-03-15 - 今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观。都是字符的界面! 但是如果我们在编译连接时上加了-g命令生成的可执行文件,用gdb -tui -q p2psrv(要debug的命令),就可...
2017-03-15 - 1,需要的头文件和cpp 文件 ==========test.h=========== #ifdef __cplusplus // 注意,这里是双下划线! extern C { #endif class Test{ //有类写类,没有就不写了 public: int hello(int i); }; int helloT(int j); #ifdef __cplusplus } #endif =========...
2017-03-14 - 在windows中,只要将动态库DLL跟可执行程序放在同一个目录,程序在运行时,就能找到DLL。然而,在Linux中,必须指定动态库的路径,程序才能找到动态库,即使可执行程序和动态库在同一个目录。举个例子,编写一个计算库,支持加减乘除,代码如下: calc.h ###...
2017-03-14 - 问题:希望每输入一个字符,终端就能得到,而不需要输入CR或者LF字符。一开始觉得需要设置标准输入为无缓冲模式,但是我使用的是read函数,总之没有成功。然后我把read设置成非阻塞,依然没用。然后我找到了下面的方法: 《Linux高级程序设计》默认方式下,...
2017-03-13 - Linux内核版本linux-3.10.36 在linux内核源码中,红黑树是一个比较独立的模块,很容易将其剥离出来,拿到应用层使用。 结构 linux内核的rb_node结构体 struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_lef...
2017-03-12 - 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务、备份war包、上传新的war包、启动服务。索性就写了一个自动部署的脚本。 脚本如下autoDeploy.sh: #! /bin/sh echo ####################开始自动部署#################### path=`pwd` #当前...
2017-03-12 - 今天,我来为大家解读一幅来自 TurnOff.us 的漫画 InSide The Linux Kernel 。 TurnOff.us 是一个极客漫画网站,作者Daniel Stori 画了一些非常有趣的关于编程语言、Web、云计算、Linux 相关的漫画。今天解读的便是其中的一篇。 在开始,我们先来看看这幅漫...
2017-03-11 - 由于项目需要,这两天在用C++做XML文件解析的工作。在Linux下有个很方便的操作xml文件的库libxml2,它提供了一套创建和查询xml文件的C语言的接口。这篇博客主要介绍如何使用libxml2读取并解析xml文件。 下载并安装libxml2 下载地址:ftp://xmlsoft.org/libxm...
2017-03-11 - 如何获取进程的PID(process ID)? 可以使用: #include unistd.h pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息: find /usr/include -name unistd.h /usr/include/asm/unistd.h /usr/include/bits/unistd.h /usr/include/linux/unistd.h...
2017-03-09 - 通过命令行打开应用很酷的,当删掉快捷方式后,别人拿到你的电脑连应用都打不开。但是这一个简单的脚本还是经过了几代改进。 1代 只是实现打开程序的功能 #!/bin/bash echo 1.eclipse 2.firefox q:quit read -t 40 -p input choice: choice case $choice in...
2017-03-09 - NUMA(Non-uniform memory access)是一个高级玩意,咱先来看看维基上的定义: is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can...
2017-03-08 - Linux下关于关于UART方面的东西,其实很多芯片厂家已经帮我们把内核驱动模块给做好并加载进去了,这个代码是我参考IBM上的应用测试代码: #include sys/types.h #include sys/stat.h #include fcntl.h #include termios.h #include stdio.h #define BAUDRATE...
2017-03-08 - 在使用迅雷下载的时候,查看迅雷新建的文件发现该文件大小和要下载的文件一样大。 其实迅雷事先在本地创建了一个与要下载一样大的临时文件,然后后面通过多线程方式。 从网络上下载这个文件,一点点填入那个临时文件。 创建空洞文件代码如下: #include stdi...
2017-03-07 - 预定义的内核log等级 // include/linux/kern_levels.h #define KERN_SOH \001 /* ASCII Start Of Header */ #define KERN_SOH_ASCII \001 #define KERN_EMERG KERN_SOH 0 /* system is unusable */ #define KERN_ALERT KERN_SOH 1 /* action must be taken i...
2017-03-07 - 一,内核错误码 在调用内核api发生异常时通常会返回一个负数值,不同的出错情况,负数值也不同,这些数值就是内核中预定义的错误码(errno),了解这些错误码的含义可以让我们推测出错的原因,从而提高开发效率。 errno-base.h中定义了内核中常见的错误码: /*...
2017-03-07 - 1.Makefile文件的使用(初学者要特别小心): vim Makefile(创建Makefile文件),内容如下: obj-m := hello.o KDIR := /lib/modules/2.6.32-279.el6.i686/build all: [ tab键 ]make -C $(KDIR) M=$(PWD) modules (这是最简单的Makefile一个例子,但是如果初...
2017-03-07 - 了解inotify 当内核中文件系统发生变化时,inotiy会将监控的事件传递给用户,比如创建、删除、读、写等。 inotify的使用,创建一个文件描述符,添加一个或者监控器watch,然后使用read()方法,从文件描述符中获取事件 信息。read()是以堵塞的方式,进行读取时...
2017-03-06 - 简介 Linux 内核提供了多种睡眠状态,各个状态通过设置系统中的不同部件进入低耗电模式来节约能源。目前总共有四种睡眠状态,分别是:挂起到空闲、加电待机、挂起到内存和挂起到磁盘。这些状态分别对应 ACPI 的 4 种状态:S0,S1,S3 和 S4。挂起到空闲是纯...
2017-03-06 - 一、部署mykernel 系统:Ubuntu 16.04 64位版本 前提条件:Git 以及部分其他原装Ubuntu中未添加的命令(本部署中涉及的命令应均可通过sudo apt-get install + 你想安装的命令) 部署方案及代码地址 按照孟宁老师的部署方案一步步执行即可完成部署。 需要注意...
2017-03-06 - 本实验 代码库 ; 本文将通过一个简单的C语言程序(包含两层简单传值函数调用)分析其对应的汇编代码,从而初窥计算机在汇编指令层面上的执行过程。本文不涉及到编译器翻译C至汇编代码的过程,运行环境为64位linux系统; 一、von Neumann 结构 现代大多数计算...
2017-03-06 - python是一种解释型、面向对象的高级语音。python的库非常多,而且使用起来很方便。 在python中可以引用os包,然后通过os.path.exists和os.path.isfile来判断文件是否存在。 第一种方法、使用os.path.exists 在python脚本中import os后就可以使用os.path.exi...
2017-03-05 - 1.安装 环境是Ubuntu gnome 16.10。可以用如下方式安装: 使用ubuntu-make安装流行IDE。命令为 umake ide visual-studio-code 从微软官网下载deb包(https://code.visualstudio.com/Download),自行安装。 2.配置 安装c/c++插件(微软官方插件)以支持cpp语...
2017-03-05 - 最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项。 关于VS Code在Linux下的安装这里就不提了,不管是CentOS还是Ubuntu,如果不懂且搜Q足够的情况下,你会解决的。 一.前置知识gcc/g++...
2017-03-05 - 安装HBase Hbase是一个构建在HDFS上的分布式列存储系统,主要用于海量结构化数据存储。这里,我们的目标只是为Python访问HBase提供一个基本的环境,故直接下载二进制包,采用单机安装。下载后解压,修改配置文件,然后可以直接启动HBase了。所用系统版本为ub...
2017-03-04 - Linux环境下QT中实现二维码生成有两种方法,这两种方法都需要用到开源的代码--qrencode。第一种方法是下载qrencode源码后,将其移植到目标板子上,然后在程序中包含其路径进行使用;第二种方法是将qrencode源码添加到自己的程序中,直接调用使用。本文使用的...
2017-03-03 - 一个发送窗口已满、接收窗口为空的套接字,收到TCP RST后(未收到TCP FIN),将触发POLLIN、POLLOUT、POLLRDHUP、POLLHUP、POLLERR事件。 相关代码: #include cassert #include cstdio #include siren/ip_endpoint.h #include siren/loop.h #include siren/...
2017-03-03 - Container_of是Linux内核中一个很常用的宏,其作用为:用结构体成员指针获得结构变量本身的指针。这里来分析一下它的实现。 首先,该宏定义在Linux 内核 include/linux/kernel.h 中 /** * container_of - cast a member of a structure out to the containin...
2017-03-02 - 原来简单介绍了一种项目自动编译的工具cmake,不过它基本是针对与c++程序而设计的,我感觉cmake已经很方便了,比写Makefile要舒服多了,最近又看到一个scons,瞬间感觉scons才是真爱...
2017-03-02 - Pengutronix 内核黑客 Jan Lbbe 总结了嵌入式 Linux 中正在不断增长的安全威胁,并在这次欧洲嵌入式 Linux 会议上概述了一个计划,以保持长期设备的安全和功能完整。 安全漏洞只发生在 Windows 上的好日子正在快速过去。恶意软件黑客和拒绝服务老手们正在越...
2017-03-01 - 随着越来越多的人依靠手机进行各种业务,移动应用开发的重要性也在不断增加。虽然他们与桌面应用程序有很多相似之处,但移动应用程序本身也具有一系列挑战和特殊性。因此,希望在当前市场找到有利就业的程序员将需要利用和发展当前需求的技能。当涉及到在Lin...
2017-03-01 - 需要批量下载安装程序的可以参考以下. 实现方法: 1.urls.log中保存需要下载的deb包的URL地址 2.download-install.py从urls.log中解析URL,然后下载到./Downloads目录下,最后逐个安装. 3.执行: $python -i download-install.py 可以看到下载及安装过程 上代码:...
2017-02-28 - 之前自己在写shell脚本的时候,需要自动创建1-100的文本确不知道该如何去创建。百度一翻终于知道了创建的方法。 在shell脚本中创建1-100的方法很多,那我在这里主要就说两种容易理解且方便的方法: 第一种方法: for i in {1..100} do echo $i done 使用{1.....
2017-02-28 - 一般情况下,linux命令执行,会打印相应的日志,基于此,考虑通过对日志文件的监控,确认linux命令执行是否结束。 例子:监控jmeter日志,当jmeter日志不再打印(即为jmeter执行完毕),然后执行ant命令,生成jmeter测试报告 #!/bin/sh #监控jmeter.log日志...
2017-02-27 - 1.通过java.net.URL实现屏幕显示demo1文件的内容 package Hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; public class JarDemo { static{ URL.set...
2017-02-26 - 搜索引擎bing的界面非常简洁,背景图片大气漂亮,非常适合用做桌面背景。于是就参考网上的教程写来一段Python脚本,自动抓取bing的背景图片。代码如下: #!/usr/bin/env python #-*-coding: utf-8 -*- import urllib, re, os def get_bing_wallpaper(): url...
2017-02-25 - 在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接浪费了,Core Dump是Linux仁慈地留下的程序的应用,帮助程序员们解决了一个又一个问题。 有时配置不给力,Lin...
2017-02-23 - 这个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值。 通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。 比较常用的一种方式就是, 匹配命令输出的内容中是否存在某些关键字,选择执行的不...
2017-02-23 - 1、问题 今天看到进程通信通过使用内存共享来实现,看到了((void *)-1),当时一脸不知所云,不知道什么意思。 2、理解 我一开始以为是空指针减1,自己好傻逼 实际意思是((void *)-1)是把-1转换成指针0xFFFFFFFF 3、总结 当一个函数返回指针的时候判断有没有...
2017-02-22 - 实验平台内核版本为4.0-rc1,增加的系统调用仅仅是简单打印一个Hello World,最后我们在用户空间用swi指令验证。涉及到的改动如下: 1.在内核中增加文件arch/arm/kernel/mysyscall.c,这个文件实现新的打印Hello World的系统调用。 #include linux/printk.h...
2017-02-21 - 一、关于atexit函数 atexit函数包含在头文件:#includestdlib.h中 ,功能: 注册终止函数(即main执行结束后调用的函数) ,用法: int atexit(void (*func)(void)),atexit()函数来注册程序正常终止时要被调用的函数,在一个程序中最多可以用atexit()注册32个处...