编程小技巧

宏中的# 和 ##号运用

struct setting_plugin {
    const char *name;
    int (*init)();
    void (*exit)();
    void (*show)();
}

//这样定义,可以使得函数向前兼容。
#define SETTING_PLUGIN_DEFINE(name, init, exit, a...) \
    struct setting_plugin setting_plugin = { \
            #name, init, exit, ##a\
    }

安装lib文件到指定目录

./configure --prefix=/usr/ --libdir=/usr/lib/desktop/plugins/

打开关闭动态库注意事项

/*  在使用dlopen,dlclose打开关闭动态库时。一定要注意。在调用dlclose之前,必须将动态库中所有的资源全部清空掉,才能正常关闭. 否则可能会造成段错误。 */
如:  我在程序中有如下操作
(1)  pthread_create
(2)  g_timeout_add();
(3)  dbus_add_signal_filter();
将上面的操作清空后,才可以执行dlclose();
稳妥的结束线程方法:
   pthread_cancel(threadid);
   int r = pthread_join(news_priv.pthread, &ret);/*注:这里会阻塞在这里。*/
   if (r != 0) {
       /* r is the error number *
   }
    原理:调用dlopen之后,将动态库加载到内存中,当我们设定好一些回调函数,或执行一下线程。当我们执行
dlclose(),并且没有其他的应用打开该动态库,将会把它从内存中卸载。而如果回调还会继续执行,这是回调指针(野指针)指
向的地址就不知道是哪里了!

spec

/**setup 参数***************************
%setup 不加任何选项,仅将软件包打开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%patch 最简单的补丁方式,自动指定patch level。
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除。
*************************************/

socket细节:read 收包,判断是否一个接收已经完成了。

/* 文件,socket 同理,read返回0时,才表示文件尾/数据包尾 */
while(read(sock, buf, sizeof(buf)-1))
{
  //数据放入缓冲区
}
/***********************************
同时有如下内部逻辑
TCP协议是面向流的,read和write调用的返回值往往小于参数指定的字节数。对于read调用,
如果接收缓冲区中有20字节,请求读100个字节,就会返回20。对于write调用,如果请求写100个字节,
而发送缓冲区中只有20个字节的空闲位置,那么write会阻塞,直到把100个字节全部交给发送缓冲区才返回,
但如果socket文件描述符有O_NONBLOCK标志,则write不阻塞,直接返回20 **********************************
*/

linux自定义启动项

/*******************************
/etc/rc.d/rc.sysinit
*******************************/

 

/*****************************************
rpmbuild 中,cmake 时,可以增加如下命令。看清详细的编译选项。
make VERBOSE=1 %{?_smp_mflags}
*****************************************/

malloc宏

#define toy_new(type) (type *)malloc(sizeof(type))

 

posted on 2012-07-25 11:18  cfox  阅读(186)  评论(0)    收藏  举报

导航