C语言
旭子
但行好事,莫问前程!
展开
-
Window下获取执行文件的目录的路径函数
char* DXGetModulePath(char *path, int nLen){ int nRet = GetModuleFileName(NULL, path, nLen); char *p; if (0 == nRet) return NULL; p = path + nRet; while (1)原创 2012-02-07 16:34:33 · 1220 阅读 · 0 评论 -
C语言实现 vector( 动态数组) 改进版
之所以再写一封邮件缘起于我写的《 C语言实现 vector( 动态数组)》这篇文章http://blog.csdn.net/dengxu11/article/details/5915857。 原来这个是在Linux下写的,多谢troublema的提议,我发现那份代码在windows上存在一些问题,故做了改进,以求在widnows上和Linux上都是OK的。另外非常感谢trou原创 2012-03-02 12:54:04 · 24316 阅读 · 30 评论 -
C语言 trim 函数
实现C语言中用于对字符串的trim处理#include #include void trim(char *s) { char *start; char *end; int len = strlen(s); start = s; end = s + len - 1; while (1) {原创 2012-03-05 09:46:57 · 10166 阅读 · 0 评论 -
Linux下获取本机IP
通过查找网卡信息来获取所有你想要的IP 具体可以通过 ifr->ifr_flags 来做判断操作#include #include #include #include #include int main(void){ int s; struct ifconf conf; struct ifreq *ifr; char buff[BUFSIZ];原创 2012-02-07 16:03:23 · 767 阅读 · 0 评论 -
发送和接受文件的程序
只要知道机器的IP地址 和端口号就可以通过下面的简单程序进行发送文件。下面的程序可以运行在UNIX/Linux 和windows上。后面会陆续更新各个语言的版本。//发送文件#ifdef __gnu_linux__//linux special #include #include #include #include #include #include #includ原创 2012-05-21 10:09:27 · 851 阅读 · 0 评论 -
VC编译器参数介绍
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话原创 2012-06-13 10:43:56 · 1918 阅读 · 0 评论 -
Win32 多线程的创建方法和基本使用
总结Win32提供的创建多线程相关的API接口和基本的使用框架。Ref:MSDN: http://msdn.microsoft.com/zh-cn/library/y6h8hye8(v=VS.100)Win32多线程的创建方法主要有:(1)CreateThread()(2)_beginthread()&&_beginthreadex()(3)AfxB原创 2012-06-19 15:59:57 · 897 阅读 · 0 评论 -
libevent-1.1a源代码分析
原文:http://blog.163.com/ecy_fu/blog/static/444512620094291011129/ 如果想深入理解memcached源代码,那么理解libevent的机制是非常重要的,多线程版的memcached中每个线程都要同1个 event_base,其对libevent的使用复杂度超过了单线程的libevent,所以分析libe原创 2012-07-06 15:43:16 · 1047 阅读 · 0 评论 -
各C/C++编译器对wchar_t字符和字符串的正确支持程度
转自:http://blog.csdn.net/longsong/archive/2007/12/02/1912201.aspx 传统的C风格的字符串是以字符 '/0 '为结尾的一系列字节的集合,其一个单元为char类型,可以保存世界上的几百种不同的字符集,包括ASCII、ISO-8859、GBK、BIG-5、SHIFT-JIS、UTF-8等等。通常这些字符集原创 2012-07-25 11:56:05 · 1652 阅读 · 0 评论 -
JNI-NewStringUTF字串的釋放
str = (*env)->NewStringUTF (env, filelist);if (str == NULL){ /* ... */ return 0; }/* save into array */(*env)->SetObjectArrayElement (env, filearray, i, str);/* delete local reference */原创 2012-09-15 11:35:01 · 18135 阅读 · 2 评论 -
JNI中的常用方法总结
1、 用来获取数组元素的JNI函数集GetBooleanArrayElements, GetByteArrayElements, GetCharArrayElements, GetShortArrayElements, GetIntArrayElements, GetLongArrayElements, GetFloatArrayElements, GetDoubleArrayElemen原创 2012-09-16 01:29:02 · 3771 阅读 · 0 评论 -
JNI中调用第三方提供的so文件
JNI调用第三方so中的c方法一、在根目录下建立Android.mk文件LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := xxxLOCAL_JNI_原创 2012-09-16 01:33:56 · 3917 阅读 · 0 评论 -
深入分析Windows和Linux动态库应用异同
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。原创 2011-11-14 01:00:00 · 969 阅读 · 0 评论 -
Windows中使用DLL在进程间共享数据
在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的,因为所有的进程用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个进程都有了它自己的地址空间,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是进程的虚拟地址空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间。(在原创 2012-10-15 11:30:33 · 1552 阅读 · 0 评论 -
Linux/Ubuntu下C语言开发PHP的.so扩展模块过程
如果你用过PHP,那么你已经使用过扩展了。除了少数的几个例外,每一个用户空间的PHP函数都被归类到一个个的扩展中。这其中很大一部分(总共超过400个)的函数是“标准扩展”的一部分。PHP的源码包附带了大约86个扩展,每一个扩展包含平均30个左右的函数。不难算出,这足有2500个函数。如果这还不够的话,PECL仓库中还提供了超过100个扩展,在因特网上还散布着更多。“所有的函数都包含在了扩展转载 2012-10-24 17:38:33 · 1426 阅读 · 0 评论 -
一个跨WINDOWS LINUX平台的线程类
继Windows下实现一个CThread封装类之后,这里我再实现一个跨WINDOWS LINUX平台的线程类头文件 DXThread.h#ifndef __DXTHREAD_H__#define __DXTHREAD_H__#define DX_WINDOWS //在WINDOWS上就打开它//#define DX_LINUX //在LINUX 上就打开它#ifdef DX原创 2012-02-04 01:20:40 · 2074 阅读 · 8 评论 -
Windows 之临界区
在Windows多线程环境中常常用到临界区去做互斥操作,其类似于Linux 的 pthread_mutex_t 的互斥锁操作。(Linux 就不在这介绍了)在Windows中同进程内实现互斥访问使用临界区互斥是最佳的选择,它比Windows中其他的互斥方法都要快。CRITICAL_SECTION cs; //申明一个互斥对象InitializeCriticalSection(&原创 2012-01-17 15:56:17 · 2573 阅读 · 0 评论 -
字符串切割之strtok
C语言字符串切割是高效的,不过得注意一个问题,strtok在切割的时候不象其他高级语言那样产生自身拷贝,但是会破坏字符串,字符串那部分内存必需是可以写的。# include # include int main(void){ char *p; char原创 2011-07-27 16:12:40 · 677 阅读 · 0 评论 -
自己实现的一些字符串处理的函数
# include # include # define strtok _strtok# define strspn _strspn# define strcspn _strcspn# define strchr _strchr# define strlen _strlens原创 2010-10-13 09:06:00 · 966 阅读 · 0 评论 -
C语言 设置在main 之前运行的函数
我们知道 C++的对象全局对象的构造函数会在main之前运行,例如windows MFC里面,在WinMain 函数前声明了一个theApp对象,其构造函数就在WinMain之前运行,其实在C语言中很早就有了,在gcc中可以使用__attribute__关键字指定如下(注意,这个原创 2011-08-22 16:19:04 · 4935 阅读 · 3 评论 -
优化C语言代码(程序员必读)
转自 http://www.yuanma.org/data/2009/1126/article_4036.htm1、选择合适的算法和数据结构 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用转载 2011-09-26 10:54:18 · 1043 阅读 · 0 评论 -
C语言实现简单文件加密解密
文件加密解密:通过XOR的方式进行简单加密也没什么 主要是为了弥补tar 不能设置密码的不足 哈哈!!好处是第二次XOR数据又回复了,第二次相当于解密,操作简单,哈哈!!# include # include # define NORMAL_SIZ B原创 2011-08-29 10:31:28 · 9033 阅读 · 0 评论 -
GCC系列之 静态库(二)
上面讲述了静态库的加载是按需加载的方式进行的,本篇主要讲多个静态库加载的先后顺序和他们之间的依赖关系有关。还是上面几个文件为例 c1.c为新加入的文件 main.c有所改动://c1.cvoid f1_run1(void);void c1_run1(void){ f1_run1();}//main.c//void f1_run1(void);//void原创 2011-10-20 16:22:28 · 738 阅读 · 0 评论 -
Linux 内核中的 GCC 特性 —— 了解用于 C 语言的 GCC 扩展
本文源于 http://www.ibm.com/developerworks/cn/linux/l-gcc-hacks/关于作者:M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(现在已经是第 2 版)、AI Application转载 2011-10-20 13:55:35 · 980 阅读 · 0 评论 -
GCC系列之 静态库(一)
我们知道当程序链接一个静态库的时候程序不会把所有的函数都加载进来,而是按需加载,最小单位是一个.o文件其实道理很简单,链接本身就是这么做的多余的不会参与进来,不会让可执行文件变得更大!例子(测试环境在Linux下):有如下文件://f1.cvoid f1_run1(void){ }void f1_run2(void){}//f2.cvoid原创 2011-10-20 15:49:59 · 645 阅读 · 0 评论 -
读文件KEY VALUE对的小模块
#include #include #include #include #include #define CHAR_IS_IN_STR(c, s) (NULL != strchr((s), (c)))#define CHAR_ISNOT_IN_STR(c, s) (NULL == strchr((s), (c)))#define ARRAY_SIZE(A) (sizeof (p原创 2011-11-02 16:53:56 · 525 阅读 · 0 评论 -
C语言实现的多态
#include #define METHOD_DECLARE(run) typeof(&run) runvoid run(void) { }void runA(void) { puts(__func__); }void runB(void) { puts(__func__); }typedef struct Base{ METHOD_DECLARE(run);}原创 2011-11-02 17:41:50 · 570 阅读 · 0 评论 -
C语言实现 vector( 动态数组)。
下面是2年前做项目时实现的一个动态数组,先后加入了好几个之后的项目,下面晒下代码。头文件:# ifndef __CVECTOR_H__# define __CVECTOR_H__# define MIN_LEN 256# define CVEFAILED -1# define CVESUCCESS 0# define CVEPUSHBACK 1# define原创 2010-09-30 10:39:00 · 17081 阅读 · 9 评论 -
嵌套函数的蹦床
由于看到OPENGL ES中有这么一段代码:#if defined(ARM) && defined(__gnu_linux__)#define CLEAR_INSN_CACHE(BEG, END) \{原创 2011-11-04 14:45:46 · 1539 阅读 · 0 评论 -
gcc 的visibility 使用
-fvisibility=default|internal|hidden|protectedgcc的visibility是说,如果编译的时候用了这个属性,那么动态库的符号都是hidden的,除非强制声明。1.创建一个c源文件,内容简单#include#include__attribute ((visibility("default"))) void not_原创 2011-11-09 10:32:11 · 9601 阅读 · 3 评论 -
gnu linux 上ARM默认char是不带符号的。微软wince上char又默认是signed。
C标准表示char类型可以带符号也可以不带符号,由具体的编译器、处理器或由它们两者共同决定到底char是带符号合适还是不带符号合适。大部分体系结构上,char默认是带符号的,它可以自-128到127之间取值。而也有一些例外,比如ARM体系结构上,char就是不带符号的,它的取值范围是0~255举例来说,在默认char不带符号,下面的代码实际会把255而不是-1赋予i:原创 2011-11-21 17:45:08 · 1613 阅读 · 0 评论 -
最近看了Java 调用C 和 C/C++反调Java,感叹当年的大牛为什么要这么弄
于是自己模仿他的设计也写了个小程序,晒晒,关键就是C++包裹了一个类 struct JNIEnv_ ,内部又通过组合的方式加入了const struct JNINativeInterface_ 的指针佩服啊,还有那个this 我靠,要是我写我肯定想不到这么写, 我肯定这么写,原创 2011-09-05 16:00:04 · 8797 阅读 · 22 评论