自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿堂的专栏

给自己多点耐心,给自己多点思考,给自己多点激励.

  • 博客(41)
  • 收藏
  • 关注

原创 SIP学习(一)——前序

 SIP协议虽然主要为IP设计的,但是它并不关心承载网络,也可以在ATM、帧中继等承载网络工作。它是应用层协议,可以运行在UDP、TCP、SCTP等传输层之上。SIP用户是通过类似与EMAIL地址的URL表示,例如[email protected],通过这种方式可以用一个统一名字标识不同的终端和通信方式,为网络服务和用户使用提供充分的灵活性。按照逻辑功能划分,可分为四个方面:1、用户代理(Us

2009-11-04 22:25:00 810

原创 条件预处理

预处理功能是C语言特有的功能,它是在对源程序正是编译前由预编译程序进行编译的。我们在写代码的时候可以通过预处理命令来调用预处理功能。在C语言程序中,在每个文件的开头都包含于“#”,这就是预处理的标志。所谓预处理就是在进行编译的第一遍之前(词法扫描和语法分析)所作的工作。当对一个源程序进行编译的时候,系统会自动条用预处理程序对源程序中的部分预处理进行处理,处理完毕后才进行源程序进行编译。预处

2009-02-04 16:32:00 1312

转载 makefile的写法

makefile是一种描述依赖关系的文件,它主要描述的是整个工程编译规则, 同时也给工程的维护提供很大的方便. 这在大型工程中非常实用. 在写好makefile之后,只需要在命令行输入make命令, 工程就按照既定的makefile规则进行"自动化编译".1. 编译(compile)和链接(link):我们通常所说的编译一般来说指的是编译和链接这两个过程的总称. 不管是什么类型

2009-02-04 14:17:00 6597 4

原创 linux多线程学习(七)——实现“生产者和消费者”

在上一篇文章中,利用信号量实现了线程间的互斥,这一篇将要利用信号量的互斥同步机制来实现一个经典实例,就是“生产者和消费者”。1、简单描述生产者和消费者的问题。有一个缓冲区和两个线程:生产者和消费者。生产者把产品放入缓冲区,而消费者从缓冲区中拿走。当缓冲区满时,生产者必须等待;另外,当缓冲区空时,消费者必须等待,并且缓冲区不能同时进行生产者和消费者的操作。#include #in

2009-01-20 14:33:00 4053

原创 linux多线程学习(六)——信号量实现同步。

在上一篇文章中已经用信号量来实现线程间的互斥,达到了互斥锁的效果,今天这篇文章将讲述怎样用信号量去实现同步。信号量的互斥同步都是通过PV原语来操作的,我们可以通过注册两个信号量,让它们在互斥的问题上互动,从而达到同步。通过下面实例就可以很容易理解: #include #include #include #include #include #inc

2009-01-19 10:31:00 5356

原创 taglist安装与应用

之前一直用tags去跳转查找函数,今天也安装了taglist,这个函数的最大好处,除了通过跳转去查找函数,还可以把本文件中的函数罗列出来,但是它也有局限性,它的函数查找不能像tags做的那么出色,所以用tags+taglist对开发人员来说,是一个很不错的选择。1、下载taglist:http://vim.sourceforge.net/scripts/script.php?script_id

2009-01-18 17:51:00 3808

原创 linux多线程学习(五)——信号量线程控制

在上一篇文章中,讲述了线程中互斥锁的使用,达到对共享资源互斥使用。除了使用互斥锁,信号量,也就是操作系统中所提到的PV原语,能达到互斥和同步的效果,这就是今天我们所要讲述的信号量线程控制。PV原语是对整数计数器信号量sem的操作,一次P操作可使sem减一,而一次V操作可是sem加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量的值大于零或等于零的时候,该进程(或线程)

2009-01-18 13:19:00 7891 5

原创 linux多线程学习(四)——互斥锁线程控制

在前面的文章中提及到,一个进程中的多个线程是共享同一段资源的,由于线程对资源的竞争引出了锁。其中mutex是一种简单的加锁方法,这个互斥锁只有两种状态,那就是上锁和解锁,可以把互斥锁看作是某种意义上的全局变量。在某一时刻,只能有一个线程取得这个互斥上的锁,拥有上锁状态的线程可以对共享资源进行操作,而其他线程在该线程未解锁之前,够会被挂起,直到上锁的线程解开锁。可以这么说,互斥锁使得共享资源按序的在

2009-01-17 21:24:00 18136 5

原创 linux多线程学习(三)——线程属性设置。

在上一篇文章中,介绍了线程的创建和退出,以及相关函数的使用。其中pthread_create函数的第二个参数,是关于线程属性的设置,这也是今天所有讲述的。这些属性主要包括邦定属性、分离属性、堆栈地址、堆栈大小、优先级。其中系统默认的是非邦定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。(1)邦定属性。

2009-01-16 22:55:00 10155

原创 linux多线程学习(二)——线程的创建和退出

      在上一篇文章中对线程进行了简单的概述,它在系统中和编程的应用中,扮演的角色是不言而喻的。学习它、掌握它、吃透它是作为一个程序员的必须作为。在接下来的讲述中,所有线程的操作都是用户级的操作。在LINUX中,一般pthread线程库是一套通用的线程库,是由POSIX提出的,因此他的移植性是非常好的。      创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthre

2009-01-15 22:07:00 17181

原创 linux多线程学习(一)

进程是系统中程序执行和资源分配的基本单位。每个进程都有自己的数据段,代码段和堆栈段,这就导致了进程在进行切换等操作起到了现场保护作用。但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程演化中出现了另外一个概念,这就是线程,也被人称为轻量级的进程。它是一个进程内的基本调度单位。线程是在共享的内存空间中并发的多道执行路径,它们共享一个进程的资源,比如文件描述符和信号处理等。因此,

2009-01-13 20:23:00 3481 1

原创 在entry控件中如何设置只能输入数字?

都好久没有写文章了,因为这段时间刚开始负责一个模块,忙得我自己团团转的,不是模块难,而是自己刚开始负责一个模块,很多事情都没有经验,代码的扩展性和健壮性问题,还有一些脚本问题、系统的接口等等,困惑了我不少时间,自己是一点一点的摸石头过河。不过总算告一段落,结果自己还是满意的。今天在修改BUG的时候,有测试人员提到,要entry里面只能输入数字,问了一下元老级的编程人员,这也是一种编程经验和技巧,在

2009-01-08 20:54:00 4604 2

原创 Linux 下的一些解压缩命令

 tar-c: 建立压缩档案    -x:解压    -t:查看内容    -r:向压缩归档文件末尾追加文件    -u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的    -j:有bz2属性的    -Z:有compress属性的    -v:显示所有过程

2008-12-11 23:18:00 857

原创 堆栈详解

 从上一篇>的文章中,文中提了几个问题,都是比较经典的,其实在编程的过程中,有时候会忽略了很多小的方面,可是往往小的方面,就会让你抓不到东西南北.C语言最经典的方面就是指针,对指针的熟悉程度从另外一个角度说明了你对C语言的掌握程度.当我看到>这篇文章的几个错误提问时,我真的有点被稳住了,说明我对C/C++的内存分配存储方式都理解不够,所以今天特意花了时间,看了些资料,作一些笔记,当你对C/C+

2008-11-28 22:51:00 1079

转载 常见内存问题

随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。 而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使是久经沙场的老手,也有时也难免落入陷阱。前事不忘,后世之师,了解这些常见的错误,在编程时就加以注意

2008-11-28 22:31:00 921

原创 重构

*引用本文请注明来自 blog.csdn.net/wtz1985      重构,从字眼看来,是一个比较抽象而且是相当泛的词。对于很多程序员来说,也许对它比较熟悉,看过很多,也听过很多,可是想要给它一个具体的定义,是比较困难的。当然,它的困难不是在于中国的文字难于琢磨,而是在于它的思想。    重构的主要目的,就是为了使代码更加简洁、让框架更加清晰、运行的速度更加快。也就是说,在编写代码了之后,在

2008-11-20 21:03:00 740

原创 命令行参数解析实例

在上篇文章中,已经介绍了关于命令行参数解析,对于getopt和getopt_long的使用是相当熟悉了,今天将是通过一个glib的一个接口:g_spawn_command_line_sync()通过管道产生一个同步运行的子进程,然后通过getopt_long去解析,执行相应的程序。1、写一个getopt_long 的main.c#include #include #include #include

2008-11-13 18:43:00 1341

原创 命令行参数解析(2)

6、改变getopt()对错误命令行参数信息的输出行为不正确的调用程序在所难免,这种错误要么是命令行选项无效,要么是缺少选项参数。正常情况下,getopt()会为这两种情况输出自己的出错信息,并且返回?。为了验证此事,可以修改一下上面的清单2中的代码。清单3:#include  #include  int main (int argc, char **argv){

2008-11-09 00:21:00 1187

原创 命令行参数解析(1)

 今天在看代码的时候,遇到getopt_long函数,然后查了相关资料,它就是命令行的参数解析.今天就做一些笔记.Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理 机制,会使得您的应用程序更好、更有用。不过很多开发人员都将其

2008-11-06 23:25:00 2769

原创 DBus学习(4)---相关接口函数

*引用本文请注明来自 blog.csdn.net/wtz1985        下面是常用的函数接口,使用了glib的数据类型和函数调用规范。可变参数一般是调用的方法的参数列表。     1.获取一个连接(bus).     DBusGConnection* dbus_g_bus_get (DBusBusType type, Gerror **error);       2.获

2008-11-06 22:53:00 5165

原创 DBus学习(3)

*引用本文请注明来自 blog.csdn.net/wtz1985        在前两篇文章中,已经介绍了什么是DBUS和DBUS的组成和原理.这篇文章将简单的对客户端和服务端,消息等.1、客户端。在客户端使用DBUS比较简单,首先,从DBUS_BUS_SESSION类型的DBUS后台获得一个连接,再从这个连接创建得到一个对象的代理,以后对对象的所有操作都将通过这个代理来完成。得到

2008-10-25 22:42:00 1731

原创 DBus学习(2)

*引用本文请注明来自 blog.csdn.net/wtz1985        Dbus组成和原理Dbus由对象、消息、连接、Dbus后台几部分组成。对象是一个独立的处理消息的实体。对象有一个或多个接口,在每个接口有一个或多个的方法,每个方法实现了具体的消息处理。在一对一的通讯中,对象通过一个连接直接和另一个客户端应用程序连接起来。在多对多的通讯中,对象通过一个连接和Dbus后台进程连

2008-10-21 22:20:00 2297

原创 DBus学习(1)

 *引用本文请注明来自 blog.csdn.net/wtz1985        在LINUX系统下写开源代码的程序员,对DBUS应该是不会再陌生了。它的低时延和低消耗等优点吸引了很多人的目光,因为我们现在开发的平台,很多设计到DBUS这个通讯机制,所以我花了比较多的时间去熟悉它。通过这段时间的学习,把笔记也做一下,今天先介绍什么DBUS。什么是DBUS?DBUS是实质上一个适用于桌面

2008-10-18 17:42:00 1850

原创 C语言--迭代器的实现。

*引用本文请注明来自 blog.csdn.net/wtz1985        在上一篇文章中,已经介绍了为什么要实现容器和怎样实现容器,这章将要介绍的是----怎样在容器里把算法分离出来,在容器里,只是实现了基本接口定义,可是对于具体的操作,比如移动到一下结点、比较两个结点的值等,容器并没有实现。从容器中把这些算法分离出来就是所谓的迭代器(iterator)。下面将是一些代码的接口实现:

2008-10-14 23:03:00 7398 2

原创 C语言--容器的实现。

 *引用本文请注明来自 blog.csdn.net/wtz1985        容器(container)这个词眼,相信大家都不陌生了,特别是JAVA或C#的人,应该是比较熟悉了,它只是一个中间接口,也就是一个纯虚类。它的实现可以通过链表或者数组等结构,它的出现就是为了其他函数体可以自由地选择适合自己的实现结构。比如哈希表、堆栈等结构,既可以用链表实现,也可以用动态数组实现,如果没有一个中间

2008-10-10 23:08:00 8010

原创 实现动态链接库

*引用本文请注明来自 blog.csdn.net/wtz1985        在WINDOWS中,动态链接库的实现是通过DLL,对于DLL,大家熟悉得不能再熟悉的.那么在LINUX中,它又是怎样实现动态库链接的,为什么要实现动态库的链接呢?至于为什么要实现动态库的链接,简单的而言,就是为了让节省空间,提高效率,可能在小的程序编译中感觉不出来,但你面对着庞大的程序时,如果不采取动态库链接的

2008-10-08 20:37:00 979

原创 读取带有标记文件的函数接口。

*引用本文请注明来自 blog.csdn.net/wtz1985             g_key_file_new()和g_key_file_load_from_file()这两个接口的含义有些像FILE* fp和fopen(),但是它们有着特别的地方,就是它在读文件的时候,不是什么都读取的。而是根据自己识别的标记读取,然后根据相应的接口函数分离出组(group)、关键字(key)和关键字的值

2008-10-06 18:37:00 2307 1

原创 多线程中递归锁的实现.

*引用本文请注明来自 blog.csdn.net/wtz1985        在上一篇文章中,我已经阐述了多线程中简单锁的实现,可在结束的时候,我就提了那么一个问题,那就是如果在一个链表中进行插入时,要进行查询的操作,如果只是简单的锁,是没法实现的。所以“递归锁”就浮现于世了。可能有些人看到递归这两个字,有点傻了眼,其实也没什么的,简单的介绍,就是进行简单的计数而已。刚开始引用锁的时候,

2008-10-04 22:43:00 7470 3

原创 多线程中锁的实现.

*引用本文请注明来自 blog.csdn.net/wtz1985        所谓"锁",就是为了让自己独自占有空间,在自己没用完之前,不让别人来占用自己的资源.现在的操作系统,无论是WINDOWS,还是UNIX等其他操作系统.都采用多线程的环境.这极大提高了任务的执行速度,而且不会影响其他事务的执行.但是它们的执行是靠时间片的轮转的,如果某一个线程没有执行完,可它的时间片用完了,就会被挂起

2008-10-04 13:51:00 3267

原创 atoi,atol,strtod,strtol,strtoul实现类型转换

  atof(将字符串转换成浮点型数)相关函数atoi,atol,strtod,strtol, stroul表头文件#include 定义函数double atof(const char *nptr);函数说明atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(/0)才结束转换,并将结果返回。参数nptr字符串可包含正

2008-10-02 20:47:00 1661

原创 关于sscanf的用法

 sscanf() - 从一个字符串中读进与指定格式相符的数据.具体用法: 1. 常见用法。char buf[512] = {0};    sscanf("123456 ", "%s", buf);printf("%s/n", buf); 结果为:1234562. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。sscan

2008-10-02 20:33:00 751

原创 对设计模式的理解

     Builder模式实例分析(C语言版) 转载时请注明出处:http://blog.csdn.net/absurd 设计模式、设计模式还是设计模式,设计模式已经被许多高手讲过了无数遍了。本来我无意再去重复被人重复过无数遍的工作,但按照我们的培训计划,现在该讲设计模式了,作为培训计划的制定者,我不能不贡献一点力量,所以最终决定写几篇关于设计模式的BLOG。本文的主题是Buil

2008-09-24 20:53:00 941

原创 C语言中的随机产生函数

         今天因为有需要,要随机产生五百个等长的字符串,要一个一个写出来那是不大现实的问题,也是作为一个程序员觉得比较可耻的问题(这句话不是针对谁,只是我自己个人觉得而已)。所以利用中午休息的时间,查了一下资料,用C语言实现了这个功能。     VB、DELPHI中,都有一个随机函数,C语言虽然用了很长时间,可都没怎么听说过随机接口函数。其实它自己也有的,那就是srand(time(NUL

2008-09-24 20:25:00 1297

原创 通过VB编写UTF-8格式的文本文件

    由于系统的需要,要国际化,但是由于那些字符串和翻译都写在EXCEL表格里面,如果一个一个的复制出来,那是相当麻烦的.所以老大让我写一个转换器,从EXECEL表格中导出数据,然后写到.PO扩展名的文本文件,要求UTF-8的编码格式的.    UTF-8是UNICODE编码格式的一种特殊情况.对于汉字的处理,它是采用了三个字节.对于它的具体情况,在这就不具体介绍,网上有相当多的资料

2008-09-23 21:02:00 4975 1

原创 动态数组

        在数据结构当中,除了链表和树的结构之外,一个重要的角色就是动态数组。它与链表不一样的地方就是内存的分配方式。创建一个链表的时候,在内存方面,是不连续分配的,而动态数组就不一样,它就要求连续分配。而两者的大概功能可以说大同小异吧。它的出现可以就是为了节省内存的使用,进行实时的修改内存的使用,避免冗余。但是如果过于频繁的使用,我个人觉得并不是一件什么好的事。    接触过JAVA的

2008-09-22 22:48:00 753

原创 实现双向链表

    进入公司的第一个培训项目,就是用C语言实现双向链表.这是一个比较基础的,又是很常用的一个结构.在GTK+中,它会给你提供一个现成的.    以前在大学的时候,链表的理论知识经过数据结构的修炼之后,可谓是比较熟悉的,可是没有自己实现过,当老大给我布置这么一个任务的时候,我还是比较茫然的.因为自己太是菜鸟了.今天,我把这个链表写一下,回味和复习.    首先,你要明确链表要实现什么

2008-09-21 01:08:00 1162

原创 GTK、GDK、GLIB三者的关系

什么是GDK?       GDK是标准Xlib函数调用的一个基本封装(wrapper),如果你对Xlib很熟悉,就不需要来重新熟悉绝大多数的GDK函数.所有的函数都是为了提供一个方便直观的风格来访问Xlib函数库.另外,自从GDK使用GLib,在多平台上使用时,GDK变得更加的方便和安全. 什么是GLib?      GLib库提供了一系列函数(functions)和定义(definitions

2008-09-11 19:48:00 24770 7

原创 关于g_object_get_data和g_object_set_data

        在glib结构中,g_object_get_data()和g_object_set_data()这两个接口函数是比较常见的,它的作用也是比较大的,它们的综合作用相当于一个全局变量,通过object对象保存上下文的信息。       g_object_set_data(GObject* object, gchar* key,  gpointer user_data)这个函数是让o

2008-09-11 13:53:00 6577

转载 DirectFB代码导读

转载:作者联系方式:李先静  DirectFB是一个庞大的系统,对它进行彻底分析要花不少时间。幸好多数情况下,只要弄清楚它的基本架构,再重点读一些关键的代码,也就差不多了。前几个月为了完善DFB的窗口管理器,我花了一些时间去研究DFB的架构。把其中一些经验写到这里,供有兴趣的朋友参考。 总的说来,DFB由以下几部分组成:1.         基本库函数。这部分代码在lib目录下

2008-09-10 16:54:00 1421

原创 Gconf系统配置的介绍。

       *引用本文请注明来自 blog.csdn.net/wtz1985              昨天在看代码的时候,遇到了gconf这个陌生的对象,陌生只是相对我而言。然后花了一天的时间对它进行研究,从中学了不少的东西,在这里做一个笔记,好记性不如烂笔头阿。              对于gconf的资料,网上一搜索都有很多,对于一些具体的情况,我就不做详细的介绍。简单的总结一下,gc

2008-09-10 12:33:00 3698

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除