存档

‘C/C++’ 分类的存档

socketpair,setrlimit,lsof

2011年12月14日 没有评论

socketpair()函数建立一对匿名的已经连接的套接字,其特性由协议族d、类型type、协议protocol决定,建立的两个套接字描述符会放在sv[0]和sv[1]中。

socketpair()函数的原型如下,第1个参数d,表示协议族,只能为AF_LOCAL或者AF_UNIX;第2个参数type,表示类型,只能为0。第3个参数protocol,表示协议,可以是SOCK_STREAM或者SOCK_DGRAM。用SOCK_STREAM建立的套接字对是管道流,与一般的管道相区别的是,套接字对建立的通道是双向的,即每一端都可以进行读写。参数sv,用于保存建立的套接字对。

阅读全文…

pthread的几个有用的函数

2011年7月4日 没有评论

1,int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))

保证init_routine执行且仅执行一次,该函数是线程安全的

example:

static pthread_key_t key;

static pthread_once_t key_once = PTHREAD_ONCE_INIT;

阅读全文…

分类: C/C++, Linux开发 标签: ,

Crypt++的AES加解密使用方法(CFB模式)

2011年6月2日 没有评论
#include <cryptopp/aes.h>
#include <cryptopp/hex.h>
#include <cryptopp/modes.h>
using namespace std;
using namespace CryptoPP;
 <a href="http://blog.globstudio.com/883.html#more-883" class="more-link">阅读全文...</a>
分类: C/C++, Linux开发 标签:

[gcc]undefined reference to `__gxx_personality_v0′

2010年4月7日 1 条评论

当你用gcc编译cpp文件时会出现undefined reference to `__gxx_personality_v0′的错误

解决方法是:

1,把cpp改名为.c如果你写的是c代码

2,如果你是c++代码,那么请使用g++

参见:http://heyunhuan513.blog.163.com/blog/static/16020422009923992100/

分类: C/C++ 标签:

linux下获取当前运行进程的文件路径

2010年3月29日 1 条评论
#include <unistd .h>
int get_bin_pathname( char *pathname )
{
    FILE *fp = NULL;
    char _filename[1024] = {0};
 
    int _pid = getpid();
 
    sprintf(_filename, "dirname `ls -n /proc/%d/exe | awk '{if ($8==\"->\") {print $19} else {if ($9==\"->\") {print $10} else {print $11}}}'`", _pid);
    fp = popen(_filename, "r");
    fgets(_filename, sizeof(_filename), fp);
    fclose(fp);
 
    _filename[strlen(_filename)-1] = '\0';
    strcpy( pathname, _filename );
 
    return 0;
}
</unistd>

阅读全文…

分类: C/C++ 标签: ,

GCC参数-D的使用

2010年3月22日 1 条评论

在编译程序的时候可以使用-D来定义一个宏开关-Dmacro,等同于C中的#define macro
或者定义一个变量,-Dmacro=1,等同于C中的#define macro 1,不过请注意,变量的值只能是数字,不能是字符串

不过对我来说数字就够用了,哈哈

因为最近我重新设计以前的系统,不同的模块连接不同的数据库,我不想在代码中硬编码指定一个数据库连接,总之需求比较特殊,因为是维护以前的系统,也不能全部重新编码,哈哈,有了这个发现我就可以省下很多力气了

分类: C/C++, 开发技术 标签: ,

进程Bin1加载So1、So2,同时So2也加载So1,会有什么样的表现呢?

2010年3月14日 没有评论

我的初衷是这样的,有一个so1模块实现数据库连接池的管理,其他业务实现so2中需要用到连接池so1,又因为连接池只能有一个,所以连接池在进程Bin1中创建并管理,在so2中获取连接池,实际上就是Bin1中调用so1创建的连接池,哈哈,我的问题解决了。

我的想法是,因为在进程Bin1的一个业务中,会用到多个数据库的连接(多个不同的数据库呃),那么Bin1中创建一个session(session的代码中so1中),用当前线程id作为session的标识,在so2中的业务代码中根据线程id获取到session信息,需要获取什么类型的数据库连接由so2的具体业务确定,获取到连接之后注册到当前session,这样当业务取消或失败的时候,可以统一的abort数据库操作。

测试代码很简单,在dll1.so中是一个单例模式的类

在bin1中创建单例对象,并执行一个增加int的函数

dll2.so中只有一个函数,获取单例并返回一个int值

从结果我们可以发现,实际上dll2.so中使用的单例对象就是bin1中创建的单例对象

测试代码:下载

分类: C/C++ 标签: , ,