
c&c++
Kaiwii
单调,简单
展开
-
More Effective C++:指针与引用的区别
指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因转载 2012-06-16 10:12:04 · 670 阅读 · 0 评论 -
ndk开发之利用android系统中.so库文件(例:libsqlite.so)
不像liblog.so,android 没有直接开放libsqlite.so给外部使用虽然Android提供了访问 sqlite的Java接口,但现在需要在ndk中使用 c 语言访问sqlite。 方法有二: 第一种:使用源码 sqlite3.h, sqlite3.c。 从android源码网站下载sqlite.git库,找到这两个文件,放到项目源码中去,进行ndk编译转载 2013-01-18 10:41:42 · 6086 阅读 · 0 评论 -
extern用法详解
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案转载 2013-01-17 11:25:49 · 808 阅读 · 0 评论 -
C/C++语言void及void指针深层探索
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从转载 2013-01-16 12:26:44 · 703 阅读 · 0 评论 -
函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
Linux下如何指定调用约定(calling convention) Windows下的调用约定可以是stdcall/cdecl/fastcall,这些标识加在函数名前面,如:int __stdcall funca()但在Linux下,如按照上面写法后,编译程序将导致编译错误,Linux下正确的语法如下:int __attribute__((__stdcall__)) func转载 2013-01-14 13:51:18 · 4901 阅读 · 0 评论 -
socket中read、write、send、recv函数的比较
建立好了TCP连接之后,我们就可以把得到的套接字当做文件描述符来使用,由此,想到了网络程序里面的基本的读写函数read和write函数。Write函数Ssize_t write(int fd,const void *buf,size_t nbytes);Write函数将buf中的nbytes字节内容写入到文件描述符中,成功返回写的字节数,失败返回-1.并设置errno变量。在网络程序中转载 2013-01-25 14:20:12 · 1321 阅读 · 0 评论 -
Java基本类型转byte[],java与c通信数据转换
[html] view plaincopyprint?在进行java编程是有时需要进行 基本类型到byte[]数据的转化。在进行与c和C++的通信时我们有时也需要将float,long,int,char等数据转换成byte通过socket通信等发送到C或C++,然后C和C++再将byte[]转换成float,long,int。 下面这个类是个工具类,除最后两个方法仅能用在jav转载 2013-01-25 07:21:30 · 1771 阅读 · 0 评论 -
native的Socket向Android的LocalSocketServer发送汉字乱码的问题
native的Socket发送字节流默认是GB2312的,所以在Java方面需要指定GB2312byte[] buffer = new byte[50];StringBuffer strBuf = new StringBuffer();InputStream input = receiver.getInputStream();while((len = input.read(buf转载 2013-01-25 07:18:44 · 1616 阅读 · 0 评论 -
android native c java进行本地socket通信
[html] view plaincopyprint?PRE class=html name="code"sizcache="1" sizset="2">方式一:java做服务器端,native做client端1. 建立java应用程序,建立Server 类 PRE class=html name="code">/** Copyright (C) 2009转载 2013-01-25 07:20:00 · 3268 阅读 · 0 评论 -
说说字符集和编码
http://www.javaeye.com/topic/398782很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。转载 2013-01-25 07:12:31 · 840 阅读 · 0 评论 -
互斥锁----pthread_mutex_t,pthread_mutex_init,pthread_mutex_lock,pthread_mutext_unlock,pthread_mutex_des
Posix互斥锁被声明为具有 pthread_mutex_t 数据类型的变量。如果互斥锁变量是静态分配的,那么可以使用PTHREAD_MUTEX_INITIALIZER来进行初始化。如果互斥锁变量是动态分配的,那么就应该用pthread_mutex_init来进行初始化。初始化::#include int pthread_mutex_init(pthread_mutex转载 2013-01-09 14:52:12 · 1793 阅读 · 0 评论 -
守护进程与setid()
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。守护进程的编程本身并不复杂,复杂的是各种版本的U转载 2013-01-09 14:17:14 · 5037 阅读 · 0 评论 -
Binder框架在Framework层的C++中的使用
Kaiwii comment:this post is the best around what i have found in CN from the net.关于Binder在C++层的使用,搜过几篇文章,讲得比较多,也比较复杂,除非是想对OpenBinder这个开源项目深入研究,否则的话,用不了那么多的知识。我因为需要移植Android调些Framework层的Bug,一般跟踪程序时只要转载 2013-01-04 10:24:52 · 717 阅读 · 0 评论 -
pthread_key_t和pthread_key_create()详解
pthread_key_t和pthread_key_create()详解下面说一下线程中特有的线程存储, Thread Specific Data 。线程存储有什么用了?他是什么意思了?大家都知道,在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有转载 2013-01-03 15:11:11 · 1886 阅读 · 2 评论 -
C++基础知识 sizeof运算符应用的总结
C++ sizeof运算符在使用中有许多值得注意的地方,其间涉及的知识也很多。这里我把它的用法总结如下:(一)对基本类型 的操作对于基本类型sizeof返回这种数据类型所占用的内存空间大小。在VC++6.0下运行结果:sizeof(int)=4sizeof(unsigned int)=4sizeof(long)=4sizeof(unsigned long)=4siz转载 2012-12-01 10:15:04 · 1457 阅读 · 0 评论 -
转一些Linux进程间通信的(IPC)的一些文章(来源于IBM developerworks)
最近要用到Linux进程间通信,从网上看到一个绝好的资料,是郑彦兴博士发表在IBM developerworks上的一系列文章,讲述了管道、信号、消息队列、共享内存几种通信方式。IBM developerworks上的文章向来都是精品,值得认真的去品读。深刻理解Linux进程间通信: 深刻理解Linux进程间通信Linux环境进程间通信(一): 管道及有名管道Linux转载 2012-06-21 08:54:12 · 1573 阅读 · 0 评论 -
pthread_kill和pthread_cancel
pthread_kill和pthread_cancel为了讲述标题两个函数,必须先介绍一下pthread线程库。pthread线程库是遵循POSIX标准开发的,工作非常稳定,性能也不差,所以在Linux下是最常用的线程库。但从调用上看,pthread线程应该仍然属于用户级的线程库,其实用户级还是内核级的关键区别只在于线程的调度是由内核还是用户库来完成,用户级对于一般的服务器工作转载 2012-07-05 16:05:48 · 23745 阅读 · 5 评论 -
C中#if 0 和#if 1
当注释掉大块代码时,使用"#if 0"比使用"/**/"要好,因为用"/**/"做大段的注释要防止被注释掉的代码中有嵌套的"/**/",这会导致注释掉的代码区域不是你想要的范围, 当被注释掉的代码很大时容易出现这种情况,特别是过一段时间后又修改该处代码时更是如此。 在这里顺便对条件编译(#ifdef, #else, #endif, #if等)进行说明。以下分3种情况: 1. 情转载 2012-07-05 15:15:30 · 1081 阅读 · 0 评论 -
c/c++中#include <>与#include""区别
而""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。 When writing your C program, you can include files in two ways. The first way is to surround the file you want to include wit转载 2013-01-21 08:52:31 · 870 阅读 · 0 评论