跳至主要内容

博文

目前显示的是 十二月 21, 2008的博文

【转】iconv函数编码转换

一、利用iconv函数族进行编码转换 在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。 iconv函数族的头文件是iconv.h,使用前需包含之。 #include <iconv.h> iconv函数族有三个函数,原型如下: (1) iconv_t iconv_open(const char *tocode, const char *fromcode); 此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。 (2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft); 此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。 (3) int iconv_close(iconv_t cd); 此函数用于关闭转换句柄,释放资源。 例子1: 用C语言实现的转换示例程序 /* f.c : 代码转换示例C程序 */ #include <iconv.h> #define OUTLEN 255 main() { char *in_utf8 = "姝e?ㄥ??瑁?"; char *in_gb2312 = "正在安装"; char out[OUTLEN]; //unicode码转为gb2312码 rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN); printf("unicode-->gb2312 out=%sn",out); //gb2312码转为unicode码 rc = g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN); printf("gb2312-->unicode out=%sn",out); } //代码转换:从一种编码转为另一种编码 int cod

【转】串口通信基本概念

串口通信的基本概念 主要软件: Driver Software>>NI-Serial 主要软件版本: 1.7 主要软件修正版本: N/A 次要软件: N/A 硬件: Serial     问题: 我从那里能够学到串口通信的基本知识 解答: 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两 个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也 可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线 发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不 得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口 能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据 位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到 时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为 4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用 于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如 何设置取决于你想传送的信息。比如,标准的ASCII码是

【转】什么是总线

什么是总线接口 任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接, 那么连线将会错综复杂,甚至难以实现。为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电路,与各部 件和外围设备连接,这组共用的连接线路被称为总线。采用总线结构便于部件和设备的扩充,尤其制定了统一的总线标准则容易使 不同设备间实现互连。 ----微机中总线一般有内部总线、系统总线和外部总线。内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互 连;而系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连;外部总线则是微机和外部设备之间的总线,微机 作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备一级的互连。 ----另外,从广义上说,计算机通信方式可以分为并行通信和串行通信,相应的通信总线被称为并行总线和串行总线。并行通信速 度快、实时性好,但由于占用的口线多,不适于小型化产品;而串行通信速率虽低,但在数据通信吞吐量不是很大的微处理电路中 则显得更加简易、方便、灵活。串行通信一般可分为异步模式和同步模式。 ----随着微电子技术和计算机技术的发展,总线技术也在不断地发展和完善,而使计算机总线技术种类繁多,各具特色。下面仅对 微机各类总线中目前比较流行的总线技术分别加以介绍。 一、内部总线 ----1.I2C总线 ----I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步 通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总 线器件同时接到I2C总线上,通过地址来识别通信对象。 ----2.SPI总线 ----串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生 产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI总线是一种三线同步总线,因其硬件功能很强,所以,与 SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。 ----3.SCI总线 ----串行通信接口SC

【转帖】berkeleyDB安装

我们以redhat9为例开始介绍其安装过程: 从其sleepycat公司官网的下载页 http://dev.sleepycat.com/downloads/releasehistorybdb.html 获得其安装包,现在已经更新到4.4.20.   #tar zxfv db-4.x.tgz   #cd db-4.x/build_unix   1. 如果以gcc编译的话,进行以下操作:   #vi /dist/configure 在最前面添加:CC gcc   #../dist/configure   #make   #make install   默认状态,berkeleyDB的lib和include将被安装到/usr/local/BerkeleyDB/下,需要更改这个路径的话,可以将 #../dist/configure一步加上选项--prefix,例如:#../dist/configure --prefix=/opt/BerkeleyDB.   #vi /etc/ld.so.conf 并将berkeleyDB的lib路径加到该文件的最后一行,这样才能找到并加载它的库文件.ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被LINUX共享的动态链接库所在目录的名字(系统目录/lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。   #ldconfig   2. 如果以armgcc编译的话,进行以下操作:   先安装armgcc,对我说就是在/mnt/setup/program/FFT/FFT-2410光盘-V3.0/linux开发/linux交叉编译器/tool或者在gmail中附件里armgcc目录下(除了cross-armv4l-qtE-custom-1.5-3mz.i386.rpm,其他都装)   #cp /mnt/setup/program/FFT/FFT-2410光盘-V3.0/linux开发/linux交叉编译器/tool /usr/tmp/   #cd /usr/tmp/tool   #rpm -ivh *   #ldconfig   这一系列的工具将默认被装到/opt/host/arm41下.   安装db-4.4.20.tgz,你甚至可以直接修改configure文件.而

【转贴】"35岁"IT人的一道坎

作者:  来源:   发布日期:2008-08-14       机遇与挑战并存,知难而退还是坚守着不抛弃不放弃?2008年,那些三十而立的IT人,在前途与钱途之间如何抉择? 0和1的世界,并不单调,虽不能像电影中的IT英雄那样依靠机器拯救世界,但是每个人手中都掌握着自己的职场罗盘。     据一份调查报告指出,目前国内软件开发人员中,年龄在20 ~30岁的人群占53.76%,30~45岁占34.71%.有人认为,开发先进的技术理念需要应聘者具备相应的工作经验,创新能力和研发能力,因此,一般在30~35岁的候选人是较合适的选择;还有人认为,程序员接受新知识的能力随着年龄的增长会有所下降,通常集中在35岁以后,因此,一个以技术为核心价值的企业当然会顾虑聘用35岁以上的员工。      "前途or钱途" 35岁真是软件工程师的一道坎吗?     ――访联想网络(深圳)有限公司 研发总监 彭兆华       难道35岁真是软件工程师的一道坎吗?对于这个IT人经常思考的问题,彭兆华也许并不这样认为,他从一名普通的程序员做到研发部管理层的职位,他也经历过35岁这道坎,他的经历也许并不辉煌,但绝不平庸。     彭兆华,联想网络(深圳)有限公司研发总监,99年硕士毕业于武汉华中理工大学(现华中科技大学),毕业后进入中兴通讯。当时电信行业不景气,最终在公司的安排下被派到南京研究所做程控交换机的维护。在中兴一年多后回到深圳,来到另一家香港东强公司做电子行业。当时彭兆华对网络非常感兴趣,2001年就来到了刚成立的一家网络公司做路由器、交换机等产品,03年该公司被联想集团收购。     记者来到彭兆华的办公室,他正在面试一位软件开发人员,借此机会,我们采访了彭总(以下是访谈实录):     记者:你参与公司招聘吗?你在招聘的时候会看应聘者哪方面的条件?     彭兆华:是的,一般来说在社会上招聘和校园招聘是不一样的。社会招聘一般来说还是看他的经历,比如说在相关行业工作过,做过什么项目,跟我们的项目是否能衔接上等,这样来说上手会比较快。另外一个就是看他的个人能力,一般通过面谈了解他在做项目时的经历。     记者:面试时会面向哪些问题呢?     彭兆华:我们会有一个笔试,比如说C语言的代码改错等一些题目,还有一些

远程过程调用(RPC)简介

一、概述 在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实际需求。总而言之,传统过程调用模式无法充分利用网络上其他主机的资源(如CPU、Memory等),也无法提高代码在实体间的共享程度,使得主机资源大量浪费。 而本文要介绍的RPC编程,正是很好地解决了传统过程所存在的一系列弊端。通过RPC我们可以充分利用非共享内存的多处理器环境(例如通过局域网连接的多台工作站),这样可以简便地将你的应用分布在多台工作站上,应用程序就像运行在一个多处理器的计算机上一样。你可以方便的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。 二、RPC的结构原理及其调用机制 如前所述RPC其实也是一种C/S的编程模式,有点类似C/S Socket 编程模式,但要比它更高一层。当我们在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以是UDP,也可以是TCP(也即TI-RPC―无关性传输),并根据传输前所提供的目的地址及RPC上层应用程序号转至相应的RPC Application Porgramme Server ,且此时的客户端处于等待状态,直至收到应答或Time Out超时信号。具体的流程图如图1。当服务器端获得了请求消息,则会根据注册RPC时告诉RPC系统的例程入口地址,执行相应的操作,并将结果返回至客户端。 图1 当一次RPC调用结束后,相应线程发送相应的信号,客户端程序才会继续运行。 当然,一台服务主机上可以有多个远程过程提供服务,那么如何来表示一个唯一存在的远程过程呢?一个远程过程是有三个要素来唯一确定的:程序号、版本号和过程号。程序号是用来区别一组相关的并且具有唯一过程号的远程过程。一个程序可以有一个或几个不同的版本,而每个版本的程序都包含一系列能被远程调用的过程,通过版本的引入,使得不同版本下的RPC能同时提供服务。每个版本都包含有许多可供远程调用的过程,每个过程则有其唯一标示的过程号。 三、基于RPC的应用系统开发 通过以上对RPC原理的简介后,我们再来继续讨论如何来开发基于RPC的应用系统。一般而言在开发RPC时,我们通常分为三个步骤: a、定义说明客户