
C/C++
文章平均质量分 65
sahusoft
Coding4Fun
展开
-
hiredis发布/订阅示例
代码:#include #include #include #include #include "hiredis.h"#include "async.h"#include "adapters/libevent.h"void subCallback(redisAsyncContext *c, void *r, void *priv) { redisReply *reply =原创 2013-07-23 21:00:44 · 7191 阅读 · 1 评论 -
ubuntu64位系统用32位的交叉工具链
64位系统下GCC静态编译32位程序:gcc -o hello hello.c -static -m3264位系统加-m32编译32位程序的时候,出现错误:/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory。这是缺少库:apt-get install lib32n原创 2013-04-25 22:33:47 · 1712 阅读 · 0 评论 -
C++中指针和引用的区别
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传原创 2012-12-06 22:57:48 · 1887 阅读 · 3 评论 -
gdbserver用法简介
嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。一、编译安装gdb+gdbserver首先下载gdb源码,我下载的是gdb-6.6.tar.gz。$tar xvzf gdb-6.6.tar.gz$mkd原创 2012-05-01 21:54:20 · 4937 阅读 · 0 评论 -
gdb和gdbserver的安装和使用
一、 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准远程串行协议协同工作,实现对目标机上的系统内核和上 层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。 就目前而言,嵌入式 Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monit转载 2012-05-01 21:53:42 · 1571 阅读 · 0 评论 -
gdb+gdbserver调试
gdb+gdbserver 是调试目标板的常用方法. 看了网上的一些资料,加上我自己的一些体会, 写个完整的记录吧:我的环境如下:HOST 192.168.0.33 Target: 192.168.0.34 NFS共享目录: mount -t nfs -o nolock /home/itlanger/work /mnt编译arm-gdb:下载gdb源代码:$ cd do原创 2012-05-01 22:39:43 · 1785 阅读 · 0 评论 -
linux core 配置与调试
当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出 现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们 如何利用core文件找到出现崩溃的地方。何谓core文件当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。co原创 2012-03-28 21:42:02 · 1174 阅读 · 0 评论 -
控制网卡打开和关闭的C代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static int clr_flag原创 2011-10-26 23:14:06 · 2358 阅读 · 0 评论 -
对netlink无法检测到dellink事件和探测网卡是否插网线方法的简单分析
看了一下相关的实现,总结一下,有不对的请各位指正。我看的source是kernel 2.6.27,ifplugd-0.28。问题1:为啥用netlink检测网线插拔只能得到RTM_NEWLINK?问题2:如何能检测到网卡插拔的信息。netlink实现主要是在在net/netlink/af_netlink.c下面,但是rtnetlink.c在net/core下面。还有一个netlin原创 2011-10-26 22:56:42 · 6447 阅读 · 1 评论 -
boa使用中常见的错误
1. 当运行boa程序时出现错误,如下:# ./boa[27/Nov/1990:13:22:25 + 0000]boa.c:266.icky Linux kernel bug!:No such file将 User 0修改成 User nobody2. 打开网页时,网页中的图片无法显示就将存放图片的子目录/var/www/images修改成/var/www/img3. 在测原创 2011-10-22 22:47:44 · 2632 阅读 · 0 评论 -
linux程序调试助手–core,解决段错误!
出现问题,不知道怎么解决,出现段错误,解决不了。那试一下core文件信息吧! 采用core文件的方法 1.core文件在什么位置创建? 在进程当前工作目录的下创建。通常与程序在相同的路径下。但如果程序中调用了chdir函数,则有可能改变了当前工作目录。这时core文件创建在chdir指定的路径下。有好多程序崩溃了,我们却找不到core文件放在什么位置。和chdir函数就有关系。当然程序崩溃原创 2011-06-30 22:40:00 · 1357 阅读 · 0 评论 -
关于/usr/src/linux/include/linux和/usr/include/linux
/usr/src/linux/include/linux是给编译内核用的 /usr/include/linux是给编译应用程序用的 如果你的/usr/src/linux/里的内核源码,与当前运行的内核一致 可以 ln -s /usr/src/linux/include/linux /usr/include/linux ln -s /usr/src/linux/include/asm /usr/in转载 2011-06-16 21:43:00 · 2392 阅读 · 0 评论 -
Linux中signal机制阐述
最近同事的程序设计过程中用到了Linux的signal机制,从而引发了我对Linux中signal机制的思考。Signal机制在Linux中是一个非常常用的进程间通信机制,很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断,因此,在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进转载 2011-06-13 21:08:00 · 1412 阅读 · 1 评论 -
sscanf里用正则表达式
1. 常见用法。 char str[512] = {0}; sscanf("123456 ", "%s", str); printf("str=%s/n", str); 2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。 sscanf("123456 ", "%4s", str); printf("str=%s/n", str); 3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。 sscanf("123456 abcdedf", "%[^ ]",转载 2011-05-23 22:27:00 · 1473 阅读 · 0 评论 -
GATEWAY获取与设置(Linux C)
#include #include #include #include #include #include #include #include #include #include int set_gateway(unsigned long gw) { int skfd; struct rtentry rt; int err; skfd = socket(PF_INET, SOCK_DGRAM, 0); if (skf原创 2011-05-23 22:30:00 · 3473 阅读 · 0 评论 -
Bresenham快速画直线算法
一、 算法原理简介:算法原理的详细描述及部分实现可参考:http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html Fig. 1 假设以(x, y)为绘制起点,一般情况下的直观想法是先求m = dy /dx(即x每增加1, y的增量),然后逐步递增x, 设新的点为x1 = x + j,原创 2013-05-23 21:44:25 · 2105 阅读 · 0 评论 -
配置文件解析函数(C语言)
配置文件解析函数(C语言)// config.hstruct conf_info{ const char *name; void *object;};typedef struct conf_info Cconf_info; /* * the function of removing the free space.原创 2012-05-09 22:44:30 · 2540 阅读 · 0 评论 -
Linux内存点滴 用户进程内存空间
经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code size (kb)原创 2012-05-14 23:19:40 · 1106 阅读 · 0 评论 -
无锁编程:最简单例子
场景 假设存在这样一个情况:需要N个线程对一个全局的变量进行M次递增操作。首先想到的常常是,使用互斥量。当然在“无锁”的世界里,还有其它实现方式。话不多说,看代码:测试代码gcc_sync_test.c#include #include #include #define TEST_ROUND 20000#define THREAD_NUM 10#define SYNC#d原创 2013-06-20 21:46:45 · 3217 阅读 · 0 评论 -
线程分离:pthread_detach
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)但是调用pthread_join(pthread_id)后,如果该线程没有运行结束,调用原创 2013-07-07 21:43:46 · 1953 阅读 · 0 评论 -
pthread_mutex_xx 与 pthread_spin_lock的区别和联系
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机制:(1原创 2013-07-07 21:44:41 · 3801 阅读 · 0 评论 -
Makefile锦集(持续更新中)
1、为每个源文件生成一个可执行程序使用场景:目录下的所有源文件都能生成可执行程序。如在做《C++ Primer》练习时,每个练习都是一个独立的小程序,不必为每个练习编写一个Makefile,也不必为每个练习执行g++编译。CC :=gcc CFLAGS := -g -Wall SOURCES := $(wildcard *.c)TARGETS := $(patsubst %.c,%,$(SO原创 2013-06-15 10:09:54 · 2162 阅读 · 0 评论 -
GCC内建原子操作
参见:http://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.htmlThe following built-in functionsare intended to be compatible with those describedin the Intel Itanium Processor-specific Application B原创 2013-06-05 21:44:14 · 2552 阅读 · 0 评论 -
内存屏障浅析
当你看到“内存屏障”四个字的时候,你的第一反应是什么?寄存器里取出了错误的值?ifence,sfence之类的指令?还是诸如volatile之类的关键字?好吧,我第一次看到这四个字的时候,脑子里浮现出的是魔兽争霸里绿油油的铺满苔藓的岩石屏障- -#,并且,当我搞明白内存屏障具体是什么,而且自认为对其很熟悉之后,我的第一反应依然是那几块绿油油的石头,而且很想上去A一把!言归正传,先解释下什么是内存屏转载 2013-06-12 22:31:53 · 1732 阅读 · 0 评论 -
linux c 信号量编程
信号量当我们在多用户系统,多进程系统,或是两者混合的系统中使用线程操作编写程序时,我们经常会发现我们有段临界代码,在此处我们需要保证一个进程(或是一个线程的执行)需要排他的访问一个资源。信号量有一个复杂的编程接口。幸运的是,我们可以很容易的为自己提供一个对于大多数的信号量编程问题足够高效的简化接口。为了阻止多个程序同时访问一个共享资源所引起的问题,我们需要一种方法生成并且使用一个标记从而保证在临界原创 2013-06-04 23:21:27 · 1975 阅读 · 2 评论 -
linux icotl函数解析
ioctl函数: 网络程序(一般是服务器程序)中ioctl常用于在程序启动时获得主机上所有接口的信息: 接口的地址、接口是否支持广播、是否支持多播等等。#include or #include int ioctl(int fd, int request, …/*void *arg */); 返回:成功返回0,出错返回-1;下表列出了网络相关ioctl 请求的r原创 2011-10-26 22:09:43 · 1741 阅读 · 0 评论 -
教你修改以及重构skb
测试环境: CentOS5.3 2.6.18工具: sendip和wireshark sendip可以发送各种数据包,确实方便.wireshark图形化的显示对于分析整个数据包还是相当不错的... 一:内核态基于Netfilter构造数据包主要有两种方式:1. alloc_skb申请一个skb结构体,然后根据实际的应用填充不同的成员,或者基于当前数据原创 2011-07-13 22:13:32 · 2773 阅读 · 0 评论 -
eclipse + cdt + gdb 进行arm linux 交叉调试
如何使用eclipse进行嵌入式Linux的开发 习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就向大家介绍一个能在Linux上运行,界面和功能与window原创 2012-05-01 21:55:27 · 1444 阅读 · 0 评论 -
inet_ntoa的实现
从一段代码开始:[cpp] view plaincopyprint?int test_ntoa() { struct sockaddr_in recv = {0}; struct sockaddr_in sa = {0}; recv.sin_addr.s_addr = -217732928; //192.168.5.24原创 2012-05-10 23:28:11 · 3759 阅读 · 0 评论 -
C和C++混合编程(__cplusplus使用)
第一种理解比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern"C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码:#ifdef __cplusplusextern "C" {#endif #ifdef __cplusplus }#endif原创 2013-01-15 22:18:22 · 1499 阅读 · 0 评论 -
inet_ntoa问题记录
今天在写代码时遇到一个问题并于在一个函数传递参数时连续调用inet_ntoa时出现的,下面是问题的模拟代码:16 char ip_addr1[]="192.168.1.20";17 char ip_addr2[]="192.168.1.40";1819 int main(int argc,char**argv)20 {21 struct原创 2012-05-10 23:31:38 · 1296 阅读 · 0 评论 -
AT&T的malloc实现--malloc的基础和本质
malloc作为标准c的一个内存分配调用想必每一个搞过C语言的都用过,然而在这个很常用的统一接口下面却有着N种不同的实现,linux的glibc有自己的实现,windows的crt有自己的实现,这些实现都有着自己的策略,特别是glibc的实现让人看的头晕,crt的实现虽然简单但是有着策略感觉很傻,最原始而且最能说明本质的实现我认为还是贝尔实验室的实现,很简单,前后不超过60行代码,让人读后心旷神怡原创 2012-05-11 23:33:36 · 1072 阅读 · 0 评论 -
sscanf函数和正则表达式
<br /><br />此文所有的实验都是基于下面的程序:<br />char str[10];<br />for (int i = 0; i < 10; i++) str[i] = '!';<br />执行完后str的值为<br />str = "!!!!!!!!!!"<br />我们把str的每个字符都初始化为惊叹号,当str的值发生变化时,使用printf打印str的值,对比先前的惊叹号,这样就可以方便的观察str发生了怎样的变化。下面我们做几个小实验,看看使用sscanf和正则表达式格式化输入后,s转载 2011-05-23 22:26:00 · 977 阅读 · 0 评论 -
undefined reference to `curl_easy_init’
<br />gcc libcurl的时候出现这个 原来是没加curl路径 <br /><br />gcc -l curl -o q q.c 就可以了原创 2011-03-25 22:18:00 · 7983 阅读 · 1 评论 -
堆和栈
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)转载 2009-05-23 12:38:00 · 757 阅读 · 0 评论 -
inline
一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2)) 为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这原创 2009-05-22 22:00:00 · 895 阅读 · 0 评论 -
Sizeof() 详解
struct S1{char c;int i;}; 问sizeof(s1)等于多少聪明的你开始思考了,char占1个字节,int占4个字节,那么加起来就应该是5。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是错的!VC6中按默认设置得到的结果为8。Why为什么受伤的总是我 请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对象或者类型所占转载 2009-05-23 12:45:00 · 887 阅读 · 0 评论 -
回车与换行
一直以为回车就是换行,换行就是回车,其实根本不是那回事...... /n是换行,英文是linefeed,ASCII码是0xA。/r是回车,英文是carriage return ,ASCII码是0xD 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正原创 2009-05-23 12:45:00 · 908 阅读 · 0 评论 -
在windows下编译Php_Java_Bridge for php4/apache2
PJB可以实现java+php的无缝整合,所谓鱼翅和熊掌均可兼得。不过,官方的发布的版本中windows版本只有for php 5的,对于我来说,短期内不会迁移到php5上,于是,如何编译就成为一个棘手的问题,以前没有在windows下编译过php4,昨晚摸索了半天终于编译成功了,下面是过程:1. 下载 mingw.exe(http://prdownloads.sourceforge.n ...原创 2009-07-29 18:00:00 · 1487 阅读 · 0 评论 -
Creating a PHP Extension for Windows using Microsoft Visual C++ 2008
IntroductionPHP is built on extensions. For example, BC math, COM and Curl are all extensions to PHP. This article will show you how to create your very own Windows PHP extensions using Microsoft Visu转载 2009-07-28 13:10:00 · 2863 阅读 · 0 评论