博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

文章分类 -  linux

linux系统相关或者C/C++编程
摘要:linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ... }while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个宏:#define DOSOMETHING()\ foo1();\ foo2();这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2(... 阅读全文

posted @ 2012-10-22 10:36 刘乐 阅读(108) 评论(0) 推荐(0)

摘要:#include<iostream>#include<curl/curl.h>usingnamespacestd;intmain(intargc,char**argv){//初始化curl_global_init(CURL_GLOBAL_WIN32);CURLM*multi_handle=NULL;CURL*easy_handle1=NULL;CURL*easy_handle2=NULL;externsize_tsave_sina_page(void*buffer,size_tsize,size_tcount,void*user_p);externsize_tsave_ 阅读全文

posted @ 2012-09-04 17:56 刘乐 阅读(1852) 评论(1) 推荐(0)

摘要:Bochs 是一个免费的、开源的、32位的x86模拟器。Bochs 是用 C++ 开发的可移植的 IA-32 (x86) PC 模拟器,几乎可以运行在所有流行的平台上。它包括对 Intel x86 CPU 、通用 I/O 设备和可定制的 BIOS 的模拟。目前, Bochs 可以模拟 386, 486, Pentium Pro 或者 AMD64 CPU ,包括可选的 MMX, SSE, SSE2 和 3DNow 指令。Bochs 的模拟环境中可以运行大部分的操作系统,包括 Linux, Windows 95, DOS, Windows NT 4, FreeBSD, MINIX 等。Bochs是 阅读全文

posted @ 2012-08-30 11:31 刘乐 阅读(182) 评论(0) 推荐(0)

摘要:unsignedintRSHash(char*str){unsignedintb=378551;unsignedinta=63689;unsignedinthash=0;while(*str){hash=hash*a+(*str++);a*=b;}return(hash&0x7FFFFFFF);}//JSHashFunctionunsignedintJSHash(char*str){unsignedinthash=1315423911;while(*str){hash^=((hash<<5)+(*str++)+(hash>>2));}return(hash&am 阅读全文

posted @ 2012-08-30 11:30 刘乐 阅读(209) 评论(0) 推荐(0)

摘要:wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。wget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接 阅读全文

posted @ 2012-08-30 11:29 刘乐 阅读(626) 评论(0) 推荐(1)

摘要:我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。第1步:编辑得到举例的程序--hello.h、hello.c和main.c;hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello 阅读全文

posted @ 2012-08-30 11:29 刘乐 阅读(108) 评论(0) 推荐(0)

摘要:Jabber 是著名的Linux即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。Jabber最有优势的就是其通信协议,可以和多种即时通讯对接。jabber客户端可以连接MSN,GTalk,YahooMessage等。1、开源的jabber服务器很多,相如Openfire,ejabber等,由于都不是用C开发的,所以选用了jabberd2,安装文件可以到https://launchpad.net/jabberd2/+download?start=20下载,最好是用2.1.*,之后的版本有远程内存错误,网上有说明如果打补丁 阅读全文

posted @ 2012-08-30 11:28 刘乐 阅读(472) 评论(0) 推荐(0)

摘要:在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variablevoid msg(){ printf("Hello\n");}下面是main.c的内容int main(void){extern char a;// extern variable m 阅读全文

posted @ 2012-08-30 11:28 刘乐 阅读(86) 评论(0) 推荐(0)

摘要:每一个进程都有自己的一组资源限制,在(*)inux系统中我们可以通过#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);int setrlimit(int resource, const struct rlimit *rlim);这2个API来取得和设置资源getrlimit用来取得setrlimit用来设置 这二个参数都需要一个要控制的资源 比如控制CPU、内存、文件描述符个数等等的控制,作为第一个参数传入,第二个参数是一个rlimit的结构体地址(指针),他的结构如下定义:定义放在头 阅读全文

posted @ 2012-08-30 11:23 刘乐 阅读(98) 评论(0) 推荐(0)

摘要:Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。Valgrind的主要功能Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分别介绍个工具的作用:Memcheck 工具主要检 阅读全文

posted @ 2012-08-30 11:21 刘乐 阅读(107) 评论(0) 推荐(0)

摘要:va_list、va_start、va_arg、va_end的原理与使用 1. 概述 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论. 2. 定义 大家先看几宏. 在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义: #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) #define va_start(ap,v 阅读全文

posted @ 2012-08-30 11:20 刘乐 阅读(126) 评论(0) 推荐(0)

摘要:static 声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。Tips: A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重... 阅读全文

posted @ 2012-08-30 11:17 刘乐 阅读(85) 评论(0) 推荐(0)

摘要:1.程序的链接程序链接的核心是找“符号”,即函数或者变量定义的位置。“符号”可能位于其它程序文件,静态库,动态库,如果没找到,编译器可能报错,还可能帮你生成一个。1.1窥豹一斑c++的extern关键字c++编写的so,希望在c中使用。因为某种原因,c中只能用gcc编译器。$cate.ccconstchar*ecc(constchar*x){returnx;}$gcc-olibecc.so-shared-fPIC-Walle.cc注意这里,我用了gcc编译,而不是g++,它的影响在1.2中可以看到。$catmain.ccintmain(){ecc("HelloWorld") 阅读全文

posted @ 2012-08-30 11:14 刘乐 阅读(218) 评论(0) 推荐(0)