05 2011 档案

摘要:我把网页挂载到nfs下面的文件中(需要新建一个文件www),不过这样很方便!安装过程==========================================================1)在www.boa.org下载boa-0.94.13.tar.gz并解压# tar -zxvf boa-0.94.13.tar.gz2)在src目录下运行./configure3)生成Makefile文件,修改CC = arm-linux-gccCPP = arm-linux-gcc–E(1)将boa.c文件中以下几行判断去掉即可。if(setuid(0)!=-1){DIE("icky 阅读全文
posted @ 2011-05-31 18:09 hnrainll 阅读(12373) 评论(0) 推荐(2)
摘要:boa服务器移植:一> 编译boa程序1. www.boa.org下载boa-0.94.13.tar.gz2. 解压3. ./configure4. make编译时用2.95.3以上的版本会出错:util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1解决方法:方法1>. 修改compat.h中的#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFF 阅读全文
posted @ 2011-05-31 17:24 hnrainll 阅读(6500) 评论(0) 推荐(0)
摘要:CC2430是一颗真正的系统芯片(SoC)CMOS解决方案。这种解决方案能够提高性能并满足以ZigBee为基础的2.4GHz ISM波段应用对低成本,低功耗的要求。它结合一个高性能2.4GHz DSSS(直接序列扩频)射频收发器核心和一颗工业级小巧高效的8051控制器。 CC2430的设计结合了8Kbyte的RAM及强大的外围模块,并且有3种不同的版本,他们是根据不同的闪存空间32,64和128kByte来优化复杂度与成本的组合。 CC2430的尺寸只有7×7mm 48-pin的封装,采用具有内嵌闪存的0.18µm CMOS标准技术。这可实现数字基带处理器,RF、 阅读全文
posted @ 2011-05-31 11:20 hnrainll 阅读(1965) 评论(0) 推荐(0)
摘要:使用CC系列的芯片,很多时候面对各种型号,还是很难下手的,下面讲讲各个型号的参数与区别,很多芯片在不同领域会发挥出更好的效能.转帖请加上原帖地址http://blog.ednchina.com/jikeppq163/CC1101/CC1100使用的是433M频率,当然对中国而言,CC1101本身支持300-348M,387-467M,779-928M.亚种支持的400M和2.4G.香港支持900M.CC1101是CC1100的升级版,对无线部分进行了优化,改善了杂散响应(spuriousresponse),输入兼容1100的程序.本身不带MCU,一个纯粹的无线发送芯片,使用SPI控制.可工作范 阅读全文
posted @ 2011-05-31 11:17 hnrainll 阅读(4062) 评论(0) 推荐(0)
摘要:相信大家很多都用上了“触”屏手机,那么,大家对自已手机的屏幕又了解多少呢?这里为大家简单讲解一下。 目前的TOUCH屏主流是分两种屏幕,一种是“电容屏” 一种是“电阻屏” 电容屏欲称“硬屏”像主流的几款手机如 摩托罗拉MS 苹果IPHONE,GOOGLE的G1,G2.HERO 黑莓的9500 国产强机 魅族M8等 电阻屏欲称“软屏”像使用Windows Mobile系统各系例品牌手机,如HT... 阅读全文
posted @ 2011-05-30 19:15 hnrainll 阅读(1327) 评论(0) 推荐(1)
摘要:1、AT+ECHO 回应取消控制 2、AT+SIDET 改变声道 3、AT+CPOWD 关机 4、AT+CPIC 输入SIM PIN的保持时间 5、AT+CMIC 改变MIC信噪比 6、AT+CALARM 设置警报 7、AT+CADC 读ADC 8、AT+CSNS 单号码方案 9、AT+CDSCB 重启小区广播 10、AT+CMOD 配置交替模式呼叫 11、AT+CFGRI 用URC时通知RI 1... 阅读全文
posted @ 2011-05-30 18:00 hnrainll 阅读(601) 评论(0) 推荐(0)
摘要:1.首先得让内核支持PPP,进入Linux 内核目录(kernel-2.6 或 以上内核版本),执行 #make menuconfig 添加如下内核选项: Device Drivers ---> Network device support ---> <*> PPP (point-to-point protocol) support [*] PPP multilink support <*> PP... 阅读全文
posted @ 2011-05-30 17:59 hnrainll 阅读(627) 评论(0) 推荐(0)
摘要:使用GPRS首先需要打开串口,设置好串口的各项参数。 一、AT+CMGL 读取所有短信 A、读取所有的信息: 第一步:at+cmgf=1 如果返回ok则继续。 说明:AT+CMGF SELECT SMS MESSAGE FORMAT 第二步:at+cmgl=”all” 成功返回OK否则ERROR +CMGL: 1,"REC READ","+8613702936376",,"05/12/16,09:... 阅读全文
posted @ 2011-05-30 17:58 hnrainll 阅读(1127) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/feisky/archive/2010/05/24/1743073.html AT+CFUN=1,1 //此命令可以开启simcom模块的大部分功能,一般在初始化模块的时候都要写上; AT&F //设置缺省制造商当前所有参数 测试网络情况 AT+CSQ //+CSQ: 28,0 返回信号强度,10以上就可以 AT+CREG? //+CREG: 0... 阅读全文
posted @ 2011-05-30 17:57 hnrainll 阅读(781) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/feisky/archive/2010/05/25/1743732.html通过SIM300发送中文短信息只要三步:1. at+cscs="GSM" 采用GSM方式2. at+cmgf=0 设置PDU模式,发送中文短信需要这个3. at+cmgs=<长度> 发送PDU短信1) If text mode (+CMGF=1): +CMGS=<da>[,<toda>]<CR> text is entered <ctrl-Z/ESC> ESC quits without 阅读全文
posted @ 2011-05-30 17:56 hnrainll 阅读(1179) 评论(0) 推荐(1)
摘要:转自:http://www.cnblogs.com/feisky/archive/2010/05/21/1740967.html GPRS模块 GPRS/GSM概述 SIM300 是小体积即插即用模组中完善的三频/四频* GSM/GPRS 解决方案。使用工业标准界面,使得具备 GSM/GPRS 900/1800/1900MHz 功能的 SIM300C 以小尺寸和低功耗实现语音、SMS、数据和传真信... 阅读全文
posted @ 2011-05-30 17:53 hnrainll 阅读(1215) 评论(0) 推荐(1)
摘要:源代码:http://files.cnblogs.com/hnrainll/event.zip 阅读全文
posted @ 2011-05-30 11:45 hnrainll 阅读(2141) 评论(0) 推荐(0)
摘要:源代码下载:http://files.cnblogs.com/hnrainll/doodle.zip 阅读全文
posted @ 2011-05-30 11:40 hnrainll 阅读(709) 评论(0) 推荐(0)
摘要:http://files.cnblogs.com/hnrainll/dialog.zip源代码下载 阅读全文
posted @ 2011-05-30 11:38 hnrainll 阅读(419) 评论(0) 推荐(0)
摘要:写的不是很好.功能可以实现.有时间再去完善.源代码:http://files.cnblogs.com/hnrainll/%E9%BB%91%E7%99%BD%E6%A3%8B.zip或:http://files.cnblogs.com/hnrainll/黑白棋.zip 阅读全文
posted @ 2011-05-30 11:05 hnrainll 阅读(1217) 评论(0) 推荐(1)
摘要:本小游戏有3个重点.1.信号与槽的使用2.定时函数的使用3.gif图片的显示下面是布局:当点击START后,数码管倒计时显示.其中可以按下stop来暂停时间减少.如下是widget.h代码#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTimer>#include <QLabel>namespace Ui { class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *par 阅读全文
posted @ 2011-05-30 10:41 hnrainll 阅读(1691) 评论(0) 推荐(0)
摘要:#ifndef MYWIDGET_H#define MYWIDGET_H#include <QtGui/QWidget>#include <QLabel>#include <QPushButton>class myWidget : public QWidget{ Q_OBJECTpublic: myWidget(QWidget *parent = 0); ~myWidget();private: QLabel *myLabel; //声明Label部件 QPushButton *myButton; //声明Button部件};#endif // MYWIDG 阅读全文
posted @ 2011-05-30 10:27 hnrainll 阅读(8541) 评论(0) 推荐(0)
摘要:位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向... 阅读全文
posted @ 2011-05-27 09:10 hnrainll 阅读(51347) 评论(0) 推荐(0)
摘要:以前我要建立一个二维数组,总是使用 int N=5, M=6; vector<vector<int> > Matrix(N); for(int i =0; i< Matrix.size(); i++){ Matrix[i].resize(M); } 上面多写了三行,就是为了指定 Matrix 的烈数。 今天才发现,可以用更简单的方法完成上面的工作 下面的一行就可以代替上面的四行 vector<v... 阅读全文
posted @ 2011-05-26 11:47 hnrainll 阅读(13430) 评论(2) 推荐(0)
摘要:vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.变量声明: 2.1 例:声明一个int向... 阅读全文
posted @ 2011-05-26 11:46 hnrainll 阅读(552) 评论(1) 推荐(0)
摘要:转自:http://hi.baidu.com/edfa/blog/item/ae64ea133663f7075aaf53a3.html 参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 1、枚举enum的用途浅例 写程序时,我们常常需要为某个对象关... 阅读全文
posted @ 2011-05-26 10:33 hnrainll 阅读(440) 评论(0) 推荐(0)
摘要:void QWidget::update ()分析重绘事件激活 1看看手册中这段话 void QWidget::update () [slot] Updates the widget unless updates are disabled or the widget is hidden. This function does not cause an immediate repaint; inst... 阅读全文
posted @ 2011-05-26 08:56 hnrainll 阅读(5709) 评论(0) 推荐(0)
摘要:经过一个星期的项目初步开发,写此文就开发时遇到的一些常见问题,给出些资料和自己的观点,希望能给其他的初学者或者参赛的选手一点帮助,当然,也算是一种抛砖引玉,大家有什么好的技巧经验什么的,也能多多分享,借助这次比赛,我们共同进步~ 如果大家都是跟我一样,刚刚开始接触QT,开始开发QT的程序,肯定也会有很多不习惯的地方,今天我重点想谈的就是这么一个不习惯的地方——QT中窗口刷新事件。 对于窗体刷新... 阅读全文
posted @ 2011-05-26 08:53 hnrainll 阅读(25222) 评论(0) 推荐(1)
摘要:一.主要理解一下几个方法和属性: 1.QWidget * QScrollView::viewport () const 2.void QWidget::paintEvent ( QPaintEvent * ) [虚 保护] 3.void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽] 4.void QWi... 阅读全文
posted @ 2011-05-26 08:48 hnrainll 阅读(41990) 评论(1) 推荐(1)
摘要:QT Free Applicationhttp://qt-apps.org/index.php 阅读全文
posted @ 2011-05-25 15:41 hnrainll 阅读(2071) 评论(0) 推荐(1)
摘要:转自:http://www.360doc.com/content/11/0512/15/2775766_116202042.shtmlQt中的每个类,都有一个对应的同名头文件,其中包含其类定义。例如要使用QApplication类,则需要在程序中添加" #include <QApplication>" QApplication类用于管理应用程序范围内的资源。其构造函数需要main函数的argc和argv作为参数。widget被创建时都是不可见的(always created hidden)。widget中可容纳其它widget。Qt中的widget在有用户行为或 阅读全文
posted @ 2011-05-25 08:38 hnrainll 阅读(5462) 评论(0) 推荐(0)
摘要:转自:http://hi.baidu.com/operationsystem/blog/item/69461bfbe24c8a9f58ee9042.html带缓存的文件操作是标准C 库的实现,第一次调用带缓存的文件操作函数时标准库会自动分配内存并且读出一段固定大小的内容存储在缓存中。所以以后每次的读写操作并不是针对硬盘上的文件直接进行的,而是针对内存中的缓存的。何时从硬盘中读取文件或者向硬盘中写入文件有标准库的机制控制。 不带缓存的文件操作通常都是系统提供的系统调用,更加低级,直接从硬盘中读取和写入文件,由于IO瓶颈的原因,速度并不如意,而且原子操作需要程序员自己保证,但使用得当的话效率并不差 阅读全文
posted @ 2011-05-24 21:21 hnrainll 阅读(1527) 评论(0) 推荐(0)
摘要:文件操作篇closecreatdupdup2fcntlflockfsynclseekmkstempopenreadsyncwriteclose(关闭文件) 相关函数 open,fcntl,shutdown,unlink,fclose表头文件 #include<unistd.h>定义函数 int close(int fd);函数说明 当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件描述词。返回值 若文件顺利关闭则返回0,发生错误时返回-1。错误代码 EBAD 阅读全文
posted @ 2011-05-24 21:16 hnrainll 阅读(6103) 评论(0) 推荐(1)
摘要:#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char *argv[]){ FILE *fp; char ch; fp=fopen("test","r");//fopen产生一个文件指针 while((ch=fgetc(fp))!=EOF) //以文件流方式读取文件,以EOF结尾 { sleep(1); putc(ch,stdout); fflush(stdout);//刷新缓冲区,让输出显示 } fclose(fp 阅读全文
posted @ 2011-05-24 21:13 hnrainll 阅读(1573) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <time.h>int main(void){ time_t t; time(&t); printf("Today's date and time: %s", ctime(&t)); return 0;}time()函数作用:取得当前时间头文件:#include <time.h>函数原型:time_t time(time_t *t);函数说明:此函数会返回从分元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数.如果t是一个非空指针的话,此函数会 阅读全文
posted @ 2011-05-24 20:38 hnrainll 阅读(8141) 评论(0) 推荐(0)
摘要://1:定义一个utmp结构体。保存读到的数据。//2:只读方式打开 /var/run/utmp 文件。//3:循环调用(read) 读取数据,直到读完位置。 //4:每次读完数据后判断是普通用户的话, //打印登陆用户名,终端号,登陆时间//5:注意:打印时间的时候用ctime去转换。//if(A.ut_type==USER_PROCESS) #include <stdio.h>#include <unistd.h>#include <utmp.h>#include <fcntl.h>#include <time.h>int mai 阅读全文
posted @ 2011-05-24 20:25 hnrainll 阅读(2793) 评论(0) 推荐(1)
摘要:转自:https://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/唐新华 (xhsmart@263.net), 软件工程师简介:信号与槽作为 QT 的核心机制在 QT 编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念、元对象工具以及在实际使用过程中应注意的一些问题。本文的标签: 图形标记本文!发布日期:2010 年 9 月 20 日 级别:初级 访问情况9337 次浏览 建议:0(添加评论) 平均分 (共 26 个评分 )QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象、 阅读全文
posted @ 2011-05-24 17:58 hnrainll 阅读(614) 评论(0) 推荐(0)
摘要:本文章原创于www.yafeilinux.com 转载请注明出处。现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲。这里我们是利用QPixmap类来实现图片显示的。一、利用QPixmap显示图片。1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(以前已经说过,经常备份工程目录,是个很好的习惯)2.在工程文件夹的debug文件夹中新建文件夹,我这里命名为images,用来存放要用的图片。我这里放了一张linux.jpg的图片。如下图所示。3.在Qt Creator中打开工程。(即打开工程文件夹中的.pro文件),如图。4.将dialog 阅读全文
posted @ 2011-05-24 17:27 hnrainll 阅读(24182) 评论(0) 推荐(1)
摘要:什么是自发事件?哪些类型的事件可以被propagated 或compressed? posting and sending 事件之间有何不同?什么时候应该调用 accept() 或是ignore() ? 如果这些问题你还不是很了解,那么继续看下去。事件起源:基于事件如何被产生与分发,可以把事件分为三类:* Spontaneous 事件,由窗口系统产生,它们被放到系统队列中,通过事件循环逐个处理。* Posted 事件,由Qt或是应用程序产生,它们被Qt组成队列,再通过事件循环处理。* Sent 事件,由Qt或是应用程序产生,但它们被直接发送到目标对象。当我们在main()函数的末尾调用QApp 阅读全文
posted @ 2011-05-24 15:04 hnrainll 阅读(848) 评论(0) 推荐(0)
摘要:转自:http://www.yafeilinux.com/?page_id=9声明:我们网站的资源可以自由下载,转载,但是不能用作商业用途。如有问题请联系我们www.yafeilinux.com 。———————————————————————————————————————————–QtCreator系列教程合集下载:下载(前四十八章;文件较大,打开可能需要较长时间)———————————————————————————————————————————–Qt开源系列软件:多文档编辑器:下载 源码:下载音乐播放器:下载 源码:下载(20110430更新)局域网聊天工具:下载 源码:下载Winc 阅读全文
posted @ 2011-05-24 09:15 hnrainll 阅读(4071) 评论(0) 推荐(0)
摘要:看过了简单的Hello, world! 之后,下面来看看Qt最引以为豪的信号槽机制!所谓信号槽,简单来说,就像是插销一样:一个插头和一个插座。怎么说呢?当某种事件发生之后,比如,点击了一下鼠标,或者按了某个按键,这时,这个组件就会发出一个信号。就像是广播一样,如果有了事件,它就漫天发声。这时,如果有一个槽,正好对应上这个信号,那么,这个槽的函数就会执行,也就是回调。就像广播发出了,如果你感兴趣,那么你就会对这个广播有反应。干巴巴的解释很无力,还是看代码:#include <QtGui/QApplication> #include <QtGui/QPushButton> 阅读全文
posted @ 2011-05-23 15:24 hnrainll 阅读(1760) 评论(0) 推荐(0)
摘要:在QT中要显示GIF图片,不能通过单单的添加部件来完成.还需要手动的编写程序.工具:QT Creator新建一个工程,我们先在designer中,添加一个QLabel部件.如下图:将QLabel拉成适当大小.在类cpp函数中添加如下程序:#include "widget.h"#include "ui_widget.h"#include <QLabel>#include <QMovie>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui- 阅读全文
posted @ 2011-05-22 17:42 hnrainll 阅读(21095) 评论(2) 推荐(1)
摘要:分为3个文件:finddialog.h:#ifndef FINDDIALOG_H#define FINDDIALOG_H#include <QDialog>class QCheckBox;class QLabel;class QLineEdit;class QPushButton;//自定义类,继承于QDialogclass FindDialog:public QDialog{ Q_OBJECTpublic: FindDialog(QWidget *parent=0);//构造函数signals: void findNext(const QString &str,bool 阅读全文
posted @ 2011-05-22 15:13 hnrainll 阅读(1090) 评论(0) 推荐(0)
摘要:#include <QApplication>#include <QPushButton>#include <QHBoxLayout>#include <QSlider>#include <QSpinBox>#include <QWidget>#include <QFont>class MyWidget:public QWidget{public: MyWidget(QWidget *parent = 0);};MyWidget::MyWidget(QWidget *parent):QWidget(parent 阅读全文
posted @ 2011-05-22 11:57 hnrainll 阅读(2521) 评论(0) 推荐(0)
摘要:#include <QApplication>#include <QPushButton>#include <QFont>int main(int argc, char *argv[]){ QApplication app(argc,argv); QPushButton quit("Quit"); quit.resize(75,30); quit.setFont(QFont("Times",18,QFont::Bold)); QObject::connect(&quit,SIGNAL(clicked()),&a 阅读全文
posted @ 2011-05-21 18:52 hnrainll 阅读(15756) 评论(0) 推荐(0)
摘要:#include <QApplication>#include <QLabel>int main(int argc, char *argv[]){ QApplication app(argc,argv); QLabel hello("<h2><i>hello</i> <font color=red>QT!</font></h2>",0); hello.show(); return app.exec();}效果如下: 阅读全文
posted @ 2011-05-21 18:31 hnrainll 阅读(1061) 评论(1) 推荐(0)
摘要:此篇主要对http://blog.csdn.net/dos5gw/archive/2010/08/11/5804587.aspx中的错误做修正和分析,(1) s3c2440平台关于nand flash部分的代码, " 在你弄清楚移植代码的每一个步骤是为什么之前,不要去做所谓的移植,那是毫无意义的"*****/arch/arm/plat-s3c24xx/common-smdk.c*****view plaincopy to clipboardprint?staticstructmtd_partitionsmdk_default_nand_part[]={[0]={.name= 阅读全文
posted @ 2011-05-21 17:29 hnrainll 阅读(1064) 评论(0) 推荐(0)
摘要:板子用的友善的mini2440, 起初按照光盘提供的手册, 照猫画虎,,,,,,,,,但是遇到各种问题, 很多未解决.....原因是还没理解每层目录的Makefile和Kconfig的关系, 以及在Kernel Configure菜单树中对应的选项, 以及对nand_flash设备的结构体的意义没搞清楚,~ so~在http://www.kernel.org/ 下载2.6.32的源代码. 编译器用的arm-linux-gcc 4.1.2 .1 内核代码/uboot代码中中机器码的定义位置,在/root/linux-2.6.32/arch/arm/tools/mach-types 和 uboot 阅读全文
posted @ 2011-05-21 17:28 hnrainll 阅读(1531) 评论(0) 推荐(0)
摘要:Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。 uCLinux即“微控制器领域中的Linux系统”。 uClinux从Linux 2.0/2.4内核派生而来,沿袭了Linux的绝大部分特性。它是专门针对没有MMU 阅读全文
posted @ 2011-05-21 17:22 hnrainll 阅读(783) 评论(0) 推荐(0)
摘要:转自:http://hi.baidu.com/cyclone/blog/item/d299af511bed309f8c5430c3.html看qtcn论坛中经常有人忘记 QT+=network 等语句。随便写写吧,或许对他人有帮助。写来写去,发现越写越乱,就这样吧,反正主要的内容很简单。 dbzhang800 20101116从哪儿开始呢?不妨先看个例子吧:#include <QtCore/QCoreApplication>#include <QtCore/QDebug>int main(int argc, char** argv){ QCoreApplication 阅读全文
posted @ 2011-05-20 21:08 hnrainll 阅读(7577) 评论(0) 推荐(1)
摘要:QApplication 应用程序类 管理图形用户界面应用程序的控制流和主要设置QLabel 标签类 提供文本或者图像的显示QPushButton 按钮类 提供了命令按钮 按钮的一种QButtonGroup 按钮组合类 按钮组 相关按钮的组合QGroupBox 群组类 一个有标题的组合框QDateTimeEdit 日期时间编辑框类 QLineEdit 行编辑框类 单行文本编辑器QTextEdit 文本编辑框类 单页面多信息编辑器对象QComboBox 组合框类QProgressBar 进度条类QLCDNumber 数字显示框类QScrollBar 滚动条类QSpinBox 微调框类QSlide 阅读全文
posted @ 2011-05-20 19:30 hnrainll 阅读(1055) 评论(0) 推荐(0)
摘要:01QT入门---LINUX环境下"hello qt"在LINUX下安装QT工具这里不说.从第一个程序开始讲:用VI写入程序hello.cpp:#include <QApplication>#include <QWidget>#include <QLabel>int main(int argc, char *argv[]){ QApplication app(argc,argv); QWidget s; QLabel label("hello qt",&s); s.show(); return app.exec 阅读全文
posted @ 2011-05-20 17:55 hnrainll 阅读(1427) 评论(0) 推荐(0)
摘要:QWidget类是所有用户界面对象的基类。QWidget ( QWidget*parent = 0, constchar*name = 0, WFlagsf = 0 ); 窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。 QDialog是最普通的顶级窗口。不被嵌入到一个父窗口部件的窗口部件被叫做顶级窗口部件。通常情况下,顶级窗口部件是有框架和标题栏的窗口(尽管如果使用了一定的窗口部件标记,创建顶级窗口部件时也可能没有这些装饰。)在Qt 阅读全文
posted @ 2011-05-20 17:40 hnrainll 阅读(1024) 评论(0) 推荐(0)
摘要:QApplication类管理图形用户界面应用程序的控制流和主要设置。 它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。 QApplication对象是可以通过全局变量qApp访问。它的负责的主要范围有: 它使用用户的桌面设置,例如palette()、font()和doubleClickInterval()来初始化应用程序。如果 阅读全文
posted @ 2011-05-20 17:08 hnrainll 阅读(1668) 评论(0) 推荐(1)
摘要:this指针的含义及其用法:1. this指针是一个隐含于每一个成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。 4. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值; 在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种 阅读全文
posted @ 2011-05-20 14:03 hnrainll 阅读(27663) 评论(1) 推荐(2)
摘要:信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念、元对象工具以及在实际使用过程中应注意的一些问题。QT 是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的KDE桌面环境 就是建立在QT库的基础之上。QT支持下列平台:MS/WINDOWS-95、98、NT和2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;EMBEDDED-支持framebuffer的Linux平台。伴随着 阅读全文
posted @ 2011-05-20 13:30 hnrainll 阅读(821) 评论(0) 推荐(0)
摘要:原文: http://doc.trolltech.com/4.0/signalsandslots.html**********************************************************************信号与槽信号与槽是用于对象之间通信的。信号-槽机制是Qt的核心特征,可能也是与其它编程架构的特性最不同的地方。介绍 在GUI编程里,我们改变一个widget时,常常希望另外一个widget得到通知。更一般的,我们希望任何类型的对象都可以彼此之间通信。比如,用户点击按钮Close的时候,我们可能希望窗口的close()函数被调用。 之前的工具包通过回调( 阅读全文
posted @ 2011-05-20 13:29 hnrainll 阅读(6998) 评论(0) 推荐(0)
摘要:派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。因此,构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化。派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增对象成员的构造函数,来初始化它们各自的数据成员,然后再加入新的语句对新增普通数据成员进行初始化。 派生类构造函数的一般格式如下: <派生类名>::<派生类名>(<参数表>) : <基类名1>(<参数表1>), ……, 阅读全文
posted @ 2011-05-20 13:18 hnrainll 阅读(1056) 评论(0) 推荐(1)
摘要:◆由于构造函数不能被继承,因此,派生类的构造函数中除了对派生类中数据成员进行初始化外,还必须通过调用直接基类的构造函数来对基类中数据成员初始化,一般地将,对派生类中数据成员初始化放在该派生类构造函数的函数体内,而调用基类构造函数的基类中数据成员初始化放在该构造函数的成员初始化表中。派生类构造函数的格式如下表示:<派生类构造函数名>(<参数表>):<成员初始化表>{<派生类构造函数的函数体>}其中,<派生类构造函数名>同该派生类的类名。<成员初始化表>中包含如下的初始化项:①基类的构造函数,用来给基类中数据成员初始化;②子对 阅读全文
posted @ 2011-05-20 12:18 hnrainll 阅读(2929) 评论(0) 推荐(0)
摘要://动态联编和虚函数的简单应用#include <iostream>using namespace std;class Base{public:#if 1 //if 1则fun()为虚函数virtual #endifvoid fun()//成员函数 { cout<<"in base class"<<endl; }};//继承于基类的子类class subClass:public Base{public: void fun()//和基类中的fun函数形参,返回类型都一样 { cout<<"in Subclass&quo 阅读全文
posted @ 2011-05-20 08:52 hnrainll 阅读(340) 评论(0) 推荐(0)
摘要:1 static inline void mem_mapping_linear(void) 2 { 3 unsigned long pageoffset, sectionNumber; 4 putstr_hex("MMU table base address = 0x", (unsigned long) mmu_tlb_base); 5 /* 4G 虚拟地址映射到相同的物理地址. not caca... 阅读全文
posted @ 2011-05-18 23:59 hnrainll 阅读(328) 评论(0) 推荐(0)
摘要:首先在移植前应该熟悉了解vivi的架构,启动过程,了解了原理性的东西之后,再去做移植比较好吧,我也新手进来公司的第1件事就是弄VIVI, 不过我是剪裁,移植主要部分是改bootload分区和kernel MTD分区,保证一致,其他的记不得了,GOOGLE里有非常丰富的关于vivi -0.1.4到s3c2410移植或者启动过程分析的资料. S3C2410 bootloader ----VIVI阅读笔... 阅读全文
posted @ 2011-05-18 23:58 hnrainll 阅读(561) 评论(0) 推荐(0)
摘要:Nand Flash如果出现坏块,可以使用vivi的bon工具格式化Nand Flash分区 FriendlyARM>part show mtdpart info. (4 partitions) nameoffsetsizeflag ------------------------------------------------ vivi: 0x000000000x00020000 0 128k param : 0x000200000x00010000 0 64k kernel: 0x000300000x00200000 02M root: 0x002300000x03dd0000 0 阅读全文
posted @ 2011-05-18 21:39 hnrainll 阅读(594) 评论(0) 推荐(0)
摘要:#include <iostream>#include <cstring>using namespace std;class boy;//向前引用class girl{//声明类1private: char name[25]; int age;public: void init(char N[],int A);//声明成员函数 friend void prdata(const girl plg,const boy plb);//友元函数};void girl::init(char N[],int A)//实现成员函数{ strcpy(name,N); age = A;} 阅读全文
posted @ 2011-05-18 16:33 hnrainll 阅读(329) 评论(0) 推荐(0)
摘要:#include <iostream>#include <cstring>using namespace std;class NameString{//声明类namestringprivate: char *str;public: //声明构造函数,不能有返回类型 NameString(char *s="...") { str = new char[strlen(s)+1]; strcpy(str,s);// cout<<"构造 NameString OK!"<<endl; } //声明成员函数 void 阅读全文
posted @ 2011-05-18 16:11 hnrainll 阅读(383) 评论(0) 推荐(0)
摘要:#include <iostream>using namespace std;class tr{ private: int i; public: tr(int n) { i = n; } void set(int n) { i = n; } int get() { return i; }};//以引用方式传递#if 1void sqr(tr &ob){ ob.set(ob.get()*ob.get()); cout<<"ob.i="<<ob.get()<<endl;}#endif//以值方式传递#if 0void sq 阅读全文
posted @ 2011-05-18 14:40 hnrainll 阅读(474) 评论(0) 推荐(0)
摘要:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://lihuan-dianxian.blogbus.com/logs/42102230.html同学拿了个很简单的小程序过来问我,重载了个运算符,如果作为成员函数,一点问题没有;如果作为友元函数重载,就会出现下面的编译出错提示:-------------------Configuration: money - Win32 Debug--------------------Compiling...money.cppF:\c++workspaces\money\money.cpp(12) : fatal error C100 阅读全文
posted @ 2011-05-18 14:19 hnrainll 阅读(7319) 评论(0) 推荐(0)
摘要:转自:http://blogold.chinaunix.net/u3/119151/showart_2366179.html主机:UBUNTU10.04LTS,交叉工具链为:arm-linux-gcc 2.95,安装目录:/usr/local/arm/2.95.3/bin目标板:Edukit-III,S3c2410子板问题描述:由于英蓓特公司的Edukit-III实验箱自带的LINUX为2.4版本,鉴于现在LINUX2.6的内核比较流行,因此想在Edukit-III上面移植LINUX2.6.18,在移植LINUX内核之前,首先应该移植VIVI,移植后的VIVI支持在NAND FLASH中启动L 阅读全文
posted @ 2011-05-18 00:15 hnrainll 阅读(1089) 评论(0) 推荐(0)
摘要:文章说明:calmarrow(lqm)原创文章引自:http://piaoxiang.cublog.cn2007-07-21 今天把vivi编译了一下,顺便解决了几个问题。算是初步工作吧,下一步打算读vivi的源代码,然后改造一下,最后争取自己完成一个小的bootloader。准备工作(这些都是基于EDUKIT-III教学平台,虽然开发工具上有些不同,但是原理和流程上是相同的。相信理解了嵌入式系统开发流程之后,对这些就会有很清晰的认识):1)下载Nand_Prog.ide.bin到nor flash。这步工作是为烧写nand flash做准备的。为什么不利用仿真器直接烧写nand flash呢 阅读全文
posted @ 2011-05-17 23:57 hnrainll 阅读(569) 评论(0) 推荐(0)
摘要:引言 与Linux2.4内核相比,Linux2.6内核在性能、模块支持、可用性、可测量性等方面有大幅度的提高。Linux2.6内核取代2.4内核是大势所趋。 ARM9 S3C2410微处理器是一款由SAMSUNG公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T核的微处理器。它与Linux的结合越来越紧密,逐渐在嵌入式领域得到广阔的应用。目前,在PDA、移动通信、路由器、工业控制等领域都可以看到S3C2410与Linux相结合的身影。 当前市场上基于S3C2410微处理器的开发板绝大部分都是用Nand Flash作为主存储器。Nand Flash是一种可在系统上进行电擦写,掉电后信 阅读全文
posted @ 2011-05-17 23:37 hnrainll 阅读(1725) 评论(1) 推荐(2)
摘要:目标板要更新成2.6的内核,以前板子vivi上的flash分区不合理,kernel分区只有1M的空间,而2.6的核编译出来一不小心就会超过1M,因此还是研究下vivi的flash分区,增大kernel分区. 这里先转发一下网络上看到的有关vivi分区问题分析,然后整理出自己的分区过程.问题:##################################################################################您好: 看了你blog上的一篇文章,我是刚接触NAND flash分区的问题,所以请教与你. flash分区一般分为5个: bootloader 阅读全文
posted @ 2011-05-17 23:17 hnrainll 阅读(922) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/pengluer/archive/2010/04/02/5445445.aspx今天主要学习了vivi,当然,这是个入门级别的bootloader,但通过分析vivi来学习uboot是一个非常好的选择,vivi的配置仿照kernel的配置,所以也可以作为配置kernel的入门材料,至于vivi的一些启动过程这里就不做详细的解释了,这里只对vivi的配置中的一些选项做一下解析。make menuconfig 出现的菜单主要有以下一些选项:System Type ---> 【系统配置:主要设置芯片、平台类型底层启动选项等】 General se 阅读全文
posted @ 2011-05-17 21:08 hnrainll 阅读(2260) 评论(0) 推荐(0)
摘要:#include <iostream>#include <cstring>using namespace std;class NameString{private: char *str;public: NameString(char *s="...") { str = new char[strlen(s)+1]; strcpy(str,s);// cout<<"构造 NameString OK!"<<endl; } void print() { cout<<str; } ~NameString( 阅读全文
posted @ 2011-05-17 19:17 hnrainll 阅读(229) 评论(0) 推荐(0)
摘要://对象作为类的数据成员#include <iostream>#include <cstring>using namespace std;class stringa{ //声明一个类private: char *str;public: stringa(char *s ="...")//构造函数,默认初始化 { str=new char[strlen(s)+1]; strcpy(str,s); cout<<"构造string\n"; } void print()//成员函数 { cout<<str<&l 阅读全文
posted @ 2011-05-17 17:00 hnrainll 阅读(690) 评论(0) 推荐(0)
摘要:转自:http://www.vckbase.com/document/viewdoc/?id=584在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种:第一种方法: CMYClass::CSomeClass(){ x=0; y=1;}第二种方法:CSomeClass::CSomeClass() : x(0), y(1){}本文将要探讨这两种方法的异同以及如何使用这两种方法。 从技术上说,第二种方法比较好,但是在大多数情况下,两者实际上没有什么区别。第二种语法被称为成员初始化列表,之所以要使用这种语法有两个原因:一个原因是必须这么做,另一个原因是出于效率考虑。 让我们先看一 阅读全文
posted @ 2011-05-17 16:47 hnrainll 阅读(678) 评论(0) 推荐(0)
摘要:1当用类的一个对象初始化该类的另一个对象时.例如:C/C++ code int main(){ point A(1,2); point B(A);//用对象A初始化对象B,拷贝构造函数被调用.}2 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时. C/C++ code void f(point p){}main(){ point A(1,2); f(A);//函数的形参为类的对象时,当调用函数时,拷贝构造函数被调用.}3 如果函数的返回值是类的对象,函数执行完成返回调用者时. C/C++ code point g(){ point A(1,2); return A;//函数的返回值 阅读全文
posted @ 2011-05-17 10:58 hnrainll 阅读(17760) 评论(0) 推荐(4)
摘要:转载自http://hi.baidu.com/xiaomeng008/blog/item/9b7706b0e39d785e08230226.html动态内存分配1.堆内存分配 :C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)。堆的概念:通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根 阅读全文
posted @ 2011-05-17 10:12 hnrainll 阅读(8189) 评论(0) 推荐(0)
摘要:前段时间看arm的汇编,发现很多有一个小点,但是借来的书上的语法却没有,问同学也不知道,于是在网上查了一番才发现我书上看到的是arm的标准汇编,而有小点的gnu的汇编,于是将收集到的资料整理后放到这里来。GNU汇编语言结构 主要包括三个常用的段: data 数据段 声明带有初始值的元素 bss 数据段 声明使用0或者null初始化的元素 text 正文段 包含的指令, 每个汇编程序都必须包含此段 使用.section 指令定义段, 如: .section .data .section .bss .section .text 起始点: gnu汇编器使用_start标签表示默认的起始点, 此外如果 阅读全文
posted @ 2011-05-17 05:30 hnrainll 阅读(4191) 评论(0) 推荐(1)
摘要:NOR和NAND是现在市场上两种主要的非易失闪存技术。 Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理 阅读全文
posted @ 2011-05-17 00:20 hnrainll 阅读(10926) 评论(0) 推荐(0)
摘要:#include <iostream>#include <string>using namespace std;class myclass1{public: char name[10]; int no; myclass1(char *s,int n= 90) { cout<<"in myclass1 ===="<<s<<endl; strcpy(name,s); no = n; } myclass1() { char s[] = "sss"; cout<<"in mycla 阅读全文
posted @ 2011-05-16 17:43 hnrainll 阅读(300) 评论(0) 推荐(0)
摘要://#include <stdafx.h>#include <cstdlib>#include <iostream>using namespace std;namespace anamespace{ int x; void SetX(int xvalue) { x = xvalue; cout<<x<<endl; }};namespace anothernamespace{ int x; void SetX(int xvalue) { x = xvalue; cout<<x<<endl; }};int main 阅读全文
posted @ 2011-05-16 17:12 hnrainll 阅读(436) 评论(0) 推荐(0)
摘要://函数返回值为引用#include <iostream.h>int a[]={1,3,5,7,9};int &index(int); //声明返回引用的函数void main(){ cout<<index(2)<<endl; index(2)=25; //a[2] = 25; cout<<index(2)<<endl;}//引用就是变量的别名,这里是返回一个别名,一个变量的别名int &index(int i){ return a[i]; }//引用举例#include <iostream>using n 阅读全文
posted @ 2011-05-16 14:59 hnrainll 阅读(337) 评论(0) 推荐(0)
摘要:面向对象的思想:封装,继承,多态性.1.作用域运算符"::"作用域:变量在程序中的起作用范围简单分为:全局作用域,局部作用域,语句作用域作用域优先级:范围越小优先级越高作用域运算符:"::" 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上"::","::"称为作用域运算符.//作用域#include <iostream>using namespace std;int avar=10; //全局变量avarint main(){ int avar=20; //局部变量avar cout 阅读全文
posted @ 2011-05-16 13:11 hnrainll 阅读(400) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/cytbox/archive/2005/01/18/258591.aspx“从程序员的角度来看,STL是有一些可适应不同需求的群集类别(collection classes),和一些能够在这些数据群集上运行的算法构成。”“当然,如此灵活性并非免费午餐,代价总是有的。首要的一点是,STL并不好懂。”(这是一场持久仗啊)“若干精心勾画的组件共同合作,构筑起STL的基础。这些组件中最关键的是容器、迭代器和算法。”“容器 Container,用来管理某类对象的集合。”“迭代器Iterators,用来在一个对象群集的元素上进心遍历动作。”“算法 Algor 阅读全文
posted @ 2011-05-16 08:34 hnrainll 阅读(762) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>int myatoi( const char *str ){ if (str == 0 ) return 0; char c; int nRet = -1; for (;;) { c = *(str++); if ( c >= '0' && c <= '9') { if (nRet==0 || nRet==-1) {nRet = c - '0';}// 正数第一个数字 el 阅读全文
posted @ 2011-05-15 15:53 hnrainll 阅读(1429) 评论(1) 推荐(1)
摘要:这需要进行位操作,必较麻烦的, 在学习程序语言和进行程序设计的时候,交换两个变量的值是经常要使用的。通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15; int t; t=a; a=b; b=t; 这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。 上面的算法最大的缺点就是需要借助一个临时变量。那么不借助临时变量可以实现交换吗?答案是肯定的!这里我们可以用 阅读全文
posted @ 2011-05-15 13:57 hnrainll 阅读(6380) 评论(1) 推荐(2)
摘要:转自:http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量:1、直接用export命令:#export PATH=$PATH:/opt/au1200_rm/build_tools/bin查看是否已经设好,可用命令export查看:[root@localhost 阅读全文
posted @ 2011-05-15 12:21 hnrainll 阅读(743) 评论(0) 推荐(0)
摘要:转自:http://bbs.chinaunix.net/viewthread.php?tid=1602387关键字: FreeBSD 安装 安装方法 图文教程 图形 图形界面安装 安装教程为了不被一直 BS, 本人特将截图转移了一份.欢迎指正.欢迎使用 FreeBSD!BSD 的手册相当丰富,细致,极大的扫清了我们在使用 BSD时的障碍.然而,实践往往与理论有距离,或许在阅读了一大堆资料后,开始着手安装系统,克服"重重困难"之后,终于安装成功,在欢庆的同时发现,居然没有安装 gcc, 常用命令的 man 一个都查不出来.天哪,这样一个绝对纯净的裸机让我如何是从呢?于是笔者根 阅读全文
posted @ 2011-05-13 08:55 hnrainll 阅读(661) 评论(0) 推荐(0)
摘要:我们经常在题目中有要求,输入一个整数,然后以这个整数作为数组的元素个数,下面的程序代码是错误的。intn,array[n];scanf(%d,&n);在TurboC中,不允许出现动态数组。那么如果必须需要这样时,就只能使用链表了。一、堆堆是一种动态存储结构,实际上就是数据段中的自由存储区,它是C语言中使用的一种名称,常常用于动态数据的存储分配。堆中存入一数据,总是以2字节的整数倍进行分配,地址向增加方向变动。堆可以不断进行分配直到没有堆空间为止,也可以随时进行释放、再分配,不存在次序问题。所谓动态数组是指在程序运行期间确定其大小的,如常用到的动态数组,它们是在程序执行过程中动态进行变化 阅读全文
posted @ 2011-05-12 18:09 hnrainll 阅读(823) 评论(0) 推荐(0)
摘要:假设链表节点的数据结构为:struct node {int data;struct node* next;};创建单链表的程序为:struct node* create(unsigned int n){//创建长度为n的单链表assert(n > 0);node* head;head = new node;head->next = NULL;cout << "请输入head节点的值(int型):";cin >> head->data;if (n == 1){ return head;}node* p = head;for (unsi 阅读全文
posted @ 2011-05-12 15:08 hnrainll 阅读(778) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: exit.c * Description: * Version: 1.0 * Created: 2011年05月11日 17时18分52秒 * Revision: none * Compiler: gcc * Author: wenhao (wh), hnrain1004@gmail.com * Company: sunplusapp * ***************************************** 阅读全文
posted @ 2011-05-11 18:19 hnrainll 阅读(756) 评论(0) 推荐(0)
摘要:知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是这些东西的 *拷贝*,不是它们本身。 由子进程自父进程继承到: 进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))环境(environment)堆栈内存打开文件的描述符(注意对应的文件的位置由父子进程共享, 这会引起含糊情况)执行时关闭(close-on-exec) 标志 (译者注:close-on-exec标志可通过fnctl()对文件描 述符设置,POSIX.1要求所有目录流都必须 阅读全文
posted @ 2011-05-11 17:58 hnrainll 阅读(10154) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: stat2.c * Description: * Version: 1.0 * Created: 2011年05月11日 16时03分23秒 * Revision: none * Compiler: gcc * Author: wenhao (wh), hnrain1004@gmail.com * Company: sunplusapp * **************************************** 阅读全文
posted @ 2011-05-11 16:29 hnrainll 阅读(3042) 评论(0) 推荐(1)
摘要:stat函数讲解表头文件: #include <sys/stat.h> #include <unistd.h>定义函数: int stat(const char *file_name, struct stat *buf);函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败返回-1,错误代码存于errno错误代码: ENOENT 参数file_name指定的文件不存在 ENOTDIR 路径中的目录存在但却非真正的目录 ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接 EFAULT 参数bu 阅读全文
posted @ 2011-05-11 16:26 hnrainll 阅读(165192) 评论(1) 推荐(5)
摘要:转自:http://coolshell.cn/articles/945.html这几天,本站推出了几篇关于C语言的很多文章如下所示:语言的歧义 [酷壳链接] [CSDN链接]谁说C语言很简单? [酷壳链接] [CSDN链接]6个变态的C语言Hello World程序 [酷壳链接] [CSDN链接]如何加密/弄乱C源代码 [酷壳链接] [CSDN链接]C语言的谜题 [酷壳链接] [CSDN链接]我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》则通过一些看似你从来不可能写出的代码来告诉大家C语言并不是一件容易 阅读全文
posted @ 2011-05-11 12:21 hnrainll 阅读(491) 评论(0) 推荐(0)
摘要:转自:http://coolshell.cn/articles/4102.html我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。大量的封装好的类库也屏蔽了很多实现细节。一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员 阅读全文
posted @ 2011-05-11 12:14 hnrainll 阅读(302) 评论(0) 推荐(0)
摘要:转自:http://coolshell.cn/articles/222.html在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer)。经过一段时间后,这些人也许能够成为一个优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作。但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需要注意,如果你能让下面十个条目成为你的习惯,那么你才能真正算得上是优秀程序员。1. 学无止境。就算是你有了10年以上的程序员经历,你也得要使劲地学习,因为你在计 阅读全文
posted @ 2011-05-11 11:25 hnrainll 阅读(284) 评论(0) 推荐(0)
摘要:转自:http://coolshell.cn/articles/914.html/下面的六个程序片段主要完成这些事情:输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。hello1.c1234567891011#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ ______ _(0x48)_(0x65)_(0x6 阅读全文
posted @ 2011-05-11 08:57 hnrainll 阅读(296) 评论(0) 推荐(0)
摘要:转自:http://java-mzd.iteye.com/blog/1007577你所不知道的传输层题记:23页的文档上,满满当当的写满了笔记,纸质的东西,始终害怕丢失,还是选择把它总结到博客上来。PS.老规矩,列出可能遇到的20个问题,如果您是都能回答的高手,请您绕道,我是小菜,只做自己的学习笔记。1.传输层的主要功能是什么?2.传输层如何区分不同应用程序的数据流?3.传输层有哪些协议?4.什么是UDP协议?5.为什么有了UDP,还需要TCP?6.什么是TCP协议?7.怎么理解协议和程序?8.TCP是否真的有链接?9.链接是如何建立的(逻辑上)?10.所谓的建立TCP链接开销很大,具体是指什 阅读全文
posted @ 2011-05-09 06:24 hnrainll 阅读(1191) 评论(0) 推荐(0)
摘要:总是出现 The capture session could not be initiated (failed to set hardware filter to promiscuous mode).解决办法:Wireshark->Capture->Interfaces->Options on your atheros->Capture packets in promiscuous mode - SET IT OFF. 阅读全文
posted @ 2011-05-08 23:56 hnrainll 阅读(6598) 评论(0) 推荐(1)
摘要:1.使用TCP/UDP端口(默认端口为2425),消息的收发使用UDP协议,文件(文件夹)的收发使用TCP协议。 2.有一点可以确定.命令字和选项位可以唯一的确定一个编码.应该还是以命令字为主. 3.使用IPMSG_SENDMSG命令发送消息,消息内容添加在附加信息中;在接收消息时,如果对方要求回信确认(IPMSG_SENDCHECKOPT位打开),则需 发送IPMSG_RECVMSG命令并将对方发送的数据包的编号放在附加信息中一同发送至发送消息方. 4.带有IPMSG_FILEATTACHOPT位的IPMSG_SENDMSG命令可用来传输文件,文件属性及内容添加在附加信息中,文件内容添加在. 阅读全文
posted @ 2011-05-08 17:02 hnrainll 阅读(1811) 评论(0) 推荐(0)
摘要:转自:http://www.iteye.com/topic/810507我们常在局域网内用飞鸽进行沟通、文件传输。有天突发奇想,要是我能冒充某给人给另外一个人发送飞鸽消息,该多有趣?有了想法,就该去实现,不然就是空想了。。不过还真空想了段时间,但最后还是写出了个小程序,和大家分享下。 阅读全文
posted @ 2011-05-08 15:01 hnrainll 阅读(3415) 评论(0) 推荐(0)
摘要://大小端测试程序#include <stdio.h>#include <stdlib.h>void checkCPUendian();int main(){ checkCPUendian(); return 0;}void checkCPUendian(){ union{ unsigned int i; unsigned char s[4]; }c; c.i = 0x12345678; printf("%s\n", (0x12 == c.s[0]) ? "大端模式" : "小端模式");} 阅读全文
posted @ 2011-05-08 13:52 hnrainll 阅读(3090) 评论(0) 推荐(0)
摘要:Proxy是什么呢,是代理。普通的因特网访问是一个典型的客户机与服务器结构:用户利用计算机上的客户端程序,如浏览器发出请求,远端WWW服务器程序响应请求并提供相应的数据。而Proxy处于客户机与服务器之间,对于服务器来说,Proxy是客户机,Proxy提出请求,服务器响应;对于客户机来说,Proxy是服务器,它接受客户机的请求,并将服务器上传来的数据转给客户机。它的作用很象现实生活中的代理服务商。因此Proxy Server的中文名称就是代理服务器。 Proxy Server的工作原理是:当客户在浏览器中设置好Proxy Server后,你使用浏览器访问所有WWW站点的请求都不会直接发给目的. 阅读全文
posted @ 2011-05-08 12:58 hnrainll 阅读(2725) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>//功能:将输入的数据中的开头,结束的空字符去掉,并将大写字符转换成小写//用途:用于规范输入void transfStr(char *dest, int flag){ char *ptr; int len; ptr = dest;//将一个数组的首地址给它 while (isspace(*ptr))//这里是用来去掉开头的空格 ptr++;//只是改变了ptr的指向 len = strlen(ptr 阅读全文
posted @ 2011-05-07 18:12 hnrainll 阅读(626) 评论(0) 推荐(0)
摘要:转自:http://zyxhome.org/wp/cc-prog-lang/c-stdlib-setlocale-usage-note/ [在此向原文作者说声谢谢!若有读者看到文章转载时请写该转载地址,不要写我的BLOG地址。尊重他人的劳动成果 ^_^ ]C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法。这篇是我自己的 setlocale() 使用总结。Linux的glibc中的setlocale()具体参考:man 3 setlocale头文件与 阅读全文
posted @ 2011-05-07 12:52 hnrainll 阅读(52494) 评论(1) 推荐(1)
摘要:如果知道一个用户的用户ID或者登录名,可以通过getpwuid或getpwnam函数获得用户的登录信息.函数原型为: #include <pwd.h> #include <sys/types.h> struct passwd *getpwnam(const char *name); struct passwd *getpwuid(uid_t uid); The passwd structure is defined in <pwd.h> as follows: struct passwd { char *pw_name; /* user name */ ch 阅读全文
posted @ 2011-05-07 12:47 hnrainll 阅读(4821) 评论(0) 推荐(0)
摘要:【uname系统调用】功能描述:获取当前内核名称和其它信息。用法:#include <sys/utsname.h>extern int uname (struct utsname *__name) __THROW;参数:__name:指向存放系统信息的缓冲区,原型如下struct utsname { char sysname[_UTSNAME_SYSNAME_LENGTH];//当前操作系统名 char nodename[_UTSNAME_NODENAME_LENGTH];//网络上的名称 char release[_UTSNAME_RELEASE_LENGTH];//当前发布级别 阅读全文
posted @ 2011-05-07 12:40 hnrainll 阅读(11837) 评论(0) 推荐(0)
摘要:一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来:1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单 阅读全文
posted @ 2011-05-07 11:49 hnrainll 阅读(11335) 评论(0) 推荐(1)
摘要:和头文件中用#ifndef A_H#define A_H...//Here is code.#endif效果类似.包含pragma once语句的文件只会被编译一次。表示在编译的时候,这个文件只被包含(include)一次,这样,可以减少整个编译过程中打开这个文件的次数. 阅读全文
posted @ 2011-05-07 11:33 hnrainll 阅读(3391) 评论(0) 推荐(0)
摘要:协议声明: 本协议是由日本人Shirouzu Hiroaki (白水 启章)先生编写。 wanpengcoder翻译于Mr.Kanazawa英文文档,转载请注明出处。http://www.cnblogs.com/wanpeng/ 如有翻译不当之处望提出,以便改进,衷心感谢您。IP信使传输协议(第9版草案) 1996/02/21 2003/01/14 修订 H.Shirouzu shirouzu@h.email.ne.jpOriginal ipmsg protocol specification is written in Japanese.最初的飞鸽传书协议说明书是日文书写。Thisdocu. 阅读全文
posted @ 2011-05-07 08:07 hnrainll 阅读(8216) 评论(0) 推荐(1)
摘要:Original ipmsg protocol specification is written in Japanese.This document was translated by Mr.Kanazawa.This document is not verified yet.---------------------------------------------------------------------- IP Messenger communication protocol (Draft-9) 1996/02/21 Modified 2003/01/14 H.Shirouzu sh 阅读全文
posted @ 2011-05-07 08:02 hnrainll 阅读(1188) 评论(0) 推荐(0)
摘要:Linux下飞鸽传书设计实现1.系统功能根据飞鸽传书协议在linux下实现飞鸽传输程序,并且与windows下飞鸽兼容。具体功能模块包括用户上线,下线,刷新查看在线用户,收发消息,传送文件/文件夹功能模块。2.具体实现2.1关键数据结构/*命令的结构*/typedef struct _command{int version;/*命令的版本*/int seq;/*包编号*/char srcName[100];/*发送者姓名*/char srcHost[100];/*发送者主机名*/int flag;/*命令*/char addtion[100];/*附加字段*/}command;/*在线用户信息 阅读全文
posted @ 2011-05-07 07:43 hnrainll 阅读(2707) 评论(0) 推荐(0)
摘要:颜色特效控制:printf("\033[1;33mHello World. \033[0m\n");颜色如下:none = "\033[0m"black = "\033[0;30m"dark_gray = "\033[1;30m"blue = "\033[0;34m"light_blue = "\033[1;34m"green = "\033[0;32m"light_green-= "\033[1;32m"cyan = "\0 阅读全文
posted @ 2011-05-07 06:53 hnrainll 阅读(717) 评论(0) 推荐(0)
摘要:一 ,怎样学习C语言 很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程庌輌这简直就是天方夜谭。为什么C语言如此重要呢? 第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知道的 阅读全文
posted @ 2011-05-06 17:45 hnrainll 阅读(2285) 评论(2) 推荐(4)
摘要:转自:http://dragon.cnblogs.com/archive/2006/05/09/394923.html前言:本文是前一片文章《深入浅出之正则表达式(一)》的续篇,在本文中讲述了正则表达式中的组与向后引用,先前向后查看,条件测试,单词边界,选择符等表达式及例子,并分析了正则引擎在执行匹配时的内部机理。本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载。但是为了尊重原作者和译者的劳动,请注明出处!谢谢!9.单词边界元字符<<\b>>也是一种对位置进行匹配的“锚”。这种匹配是0长度匹配。有4种位置被认为是“单词边界 阅读全文
posted @ 2011-05-06 17:22 hnrainll 阅读(291) 评论(0) 推荐(0)
摘要:转自:http://dragon.cnblogs.com/archive/2006/05/08/394078.html前言:半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现,结果就有了这篇文章。关于本文的名字,使用“深入浅出”似乎已经太俗。但是通读原文以后,觉得只有用“深入浅出”才能准确的表达出该教程给我的感受,所以也就不能免俗了。本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版 阅读全文
posted @ 2011-05-06 17:21 hnrainll 阅读(363) 评论(0) 推荐(1)
摘要:Redhat Linux下tftp服务器配置其实很容易。现以RedHat 7.3为例说明。1. 如何启动tftp服务?1执行ntsysv命令,选中tftp服务,再执行service xinetd restart命令。tftp服务就启动了,容易吧。2. 如何下载文件?先分析一下tftp的配置文件。打开/etc/xinetd.d/tftp文件,如下所示:service tftp{ disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args 阅读全文
posted @ 2011-05-06 11:56 hnrainll 阅读(3428) 评论(0) 推荐(0)
摘要:第一步:我们要确认,LINUX下是不是安装了TFTP-SERVER.在LINUX下输入:rpm -q tftp-server如出现如下回复:tftp-server-0.39-2 则表示tftp-server已安装.第二步:修改TFTP启动脚本:方法一:需要修改ftptpd的启动脚本vi /etc/xinetd.d/tftp加上disable =no 此时即可启动tfpt服务方法二:直接输入:/sbin/chkconfig tftp on此命令也是在启动脚本中加上disable=no脚本修改后的效果如下:第三步:启动TFTP服务service xinetd restart这样我们的服务就启动OK 阅读全文
posted @ 2011-05-06 11:38 hnrainll 阅读(21917) 评论(0) 推荐(0)
摘要:当我们用Xshell登录进入linux后,在普通模式下,对输入进行删除等操作没有问题.而在运行中,按delete,backspace键时会产生^H等乱码问题.这是因为编码不匹配的问题.解决方法:选择File------>Propertise弹出的对话框中,选择Terminal下的Keyboard.如下设置:设置完以后,重新开一个链接.让配置生效.就OK了. 阅读全文
posted @ 2011-05-06 08:08 hnrainll 阅读(9833) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: udpserver.c * Description: * Version: 1.0 * Created: 2011年05月05日 09时56分04秒 * Revision: none * Compiler: gcc * Author: wenhao (wh), hnrain1004@gmail.com * Company: sunplusapp * ************************************ 阅读全文
posted @ 2011-05-05 21:51 hnrainll 阅读(903) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/faraway/archive/2009/03/06/1404449.html使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。3. 将sock_fd和数组fd_A中不为0的描述符放入select将检查的集合fdsr。4. 处理fdsr中可以接收数据的 阅读全文
posted @ 2011-05-05 20:57 hnrainll 阅读(800) 评论(0) 推荐(0)
摘要:首先转一段关于回车和换行的历史。回车和换行关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历, 阅读全文
posted @ 2011-05-05 19:37 hnrainll 阅读(893) 评论(0) 推荐(0)
摘要:阻塞方式block,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。使用Select就可以完成非阻塞non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高。select能够监视我们需要监视的文件描述符的变化情况。(一)首先说明两个结构体:1:struct fd_set一个存放文件描述符(file descriptor),即文件句柄的聚合,实际上是一lon 阅读全文
posted @ 2011-05-05 19:30 hnrainll 阅读(21736) 评论(5) 推荐(4)
摘要:转载时请注明出处:http://blog.csdn.net/absurd/大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。1.常见用法。charstr[512] = {0};sscanf("123456 ","%s",str);printf("str=%s\n",str);2.取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。sscanf("123456 &quo 阅读全文
posted @ 2011-05-05 15:15 hnrainll 阅读(846) 评论(0) 推荐(0)
摘要:最近遇到了解析配置的问题,用正规表达式感觉大题小做,使用sscanf因只会用基本用法,感觉功能不够,上网搜了下,解析起来不费吹灰之力,代码也很简洁。原帖出处不详,网上到处是,我做了点修改名称:sscanf() - 从一个字符串中读进与指定格式相符的数据.函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... );说明:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入 阅读全文
posted @ 2011-05-05 15:14 hnrainll 阅读(16414) 评论(0) 推荐(0)
摘要:转自:http://blogold.chinaunix.net/u1/48325/showart_413841.html·Linux网络编程基础(一)·Linux网络编程基础(二)·Linux网络编程基础(三)• Linux网络编程一步一步学-简单客户端编写• Linux网络编程一步一步学-绑定IP和端口• Linux网络编程一步一步学-循环读取服务器上的数据• Linux网络编程一步一步学-设置非阻塞方式• Linux网络编程一步一步学-开启网络监听服务• Linux网络编程一步一步学-接受客户端连接请求• Linux网络编程一步一步学-向客户端发送消息• Li 阅读全文
posted @ 2011-05-04 21:56 hnrainll 阅读(887) 评论(0) 推荐(0)
摘要:Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换 而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。 inet_pton函数原型如下[将“点分十进制” -> “整数”] #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst); 这个函数转换字符串到网络地址,第一个参数af是地址族,转 阅读全文
posted @ 2011-05-04 21:44 hnrainll 阅读(5667) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/lovelirui/archive/2011/04/08/6309985.aspx1.套接口的地址结构确保了进程与内核之间的通讯2.套接口的地址结构中保存地址值的是二进制,inet_pton ,inet_ntop 函数用于地址的文本表达式和二进制之间的转换3.每个协议族都有自己的地址结构 以sockaddr_开头,后面加协议族后缀,网际协议族的地址结构sockaddr_in4.结构不参与通讯5.进程到内核的函数,内核到进程的函数6.字节排序函数来由:不同系统字节排序方式不一样,大端或小端,套接口地址结构中某些成员按网络字节序维护,所以需要转换ht 阅读全文
posted @ 2011-05-04 21:34 hnrainll 阅读(461) 评论(0) 推荐(0)
摘要:1.uCos-II操作系统内核的主要工作就是对任务进行管理和调度. 在应用程序设计的角度来看,uCos-II的任务就是一个线程.2.从任务的存储结构来看,uCOS-II的任务由三个部分组成: 1-任务程序代码(任务的执行部分). 2-任务堆栈(用于保存任务工作环境) 3-任务控制块(用于保存任务属性 阅读全文
posted @ 2011-05-04 21:25 hnrainll 阅读(4472) 评论(0) 推荐(1)
摘要:uC/OS是一种体积小巧而实用的实时操作系统,由于其代码的开放性,近年来普遍受到人们的关注,许多人开始从事这一操作系统的学习及应用工作,但由于其文档较少,特别是关于安装和使用方面的指导性文章不够充足,使很多初学者,特别是刚刚接触嵌入式操作系统的朋友们不知道如何进行系统的安装及调试,为此我结合自己使用 阅读全文
posted @ 2011-05-04 21:03 hnrainll 阅读(4425) 评论(1) 推荐(0)
摘要:学习一种的新的东西,观看书或看论坛可不行。最主要的还是要亲自去动手体会。学习 os-ii也不例外,Jean J.Labrosse在其《嵌入式实时操作系统 /OS-II》一书中提到用Borland C/C++ 4.5x编译器对源代码中提供的例程进行调试。《嵌入式实时操作系统 /OS-II》中例程是在P 阅读全文
posted @ 2011-05-04 21:02 hnrainll 阅读(2968) 评论(2) 推荐(0)
摘要:uC/OS II在pc上的移植与实现 本周的工作:将uC/OS II在pc上的移植并实现了一个例子,本身步骤并不难,但是由于使用软件年代久远(Borland C++ 4.5),整个系统在DOS下调用,故系统调试较为复杂,搜遍网上的百家之言,鲜有将问题描述得很全面的,往往只能在某一种情况下行得通,在此 阅读全文
posted @ 2011-05-04 20:22 hnrainll 阅读(3500) 评论(0) 推荐(0)
摘要://=============================================================// 文件名称:web.c// 功能描述:HTTP Server// 维护记录:2011-05-04 V1.0// 维护成员: wenhao//=============================================================#include <stdio.h>#include <stdlib.h>#include <string.h> // bzero#include <unistd.h 阅读全文
posted @ 2011-05-04 16:45 hnrainll 阅读(1285) 评论(0) 推荐(1)
摘要:#include <stdio.h>#include <stdlib.h>#include <windows.h>char head[]="HTTP/1.1 200 OK\r\n" \ "Content-Type: text/html\r\n"\ "\r\n";int main(){ int i,j; i = sizeof(head); printf("sizeof(head) = %d\n",i); printf("strlen(head) = %d\n", 阅读全文
posted @ 2011-05-04 15:53 hnrainll 阅读(827) 评论(0) 推荐(0)
摘要:INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。例如MontiVista Linux中在/usr/include/netinet/in.h定义为:/* Address to accept any incoming messages.*/#define INADDR_ANY ((in_addr_t) 0x00000000)一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给 阅读全文
posted @ 2011-05-03 21:49 hnrainll 阅读(1234) 评论(0) 推荐(0)
摘要:转自:http://blogold.chinaunix.net/u/4502/showart.php?id=13488服务套和客户机的信息函数1、字节转换函数 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端,高字节在高端,而alpha芯片却相反. 为了统一起来,在Linux下面,有专门的字节转换函数. unsigned long int htonl(unsigned long int hostlong) unsigned short int htons(unisgned short int hostshort) unsigned 阅读全文
posted @ 2011-05-03 09:04 hnrainll 阅读(558) 评论(0) 推荐(0)
摘要:转自:http://blogold.chinaunix.net/u/4502/showart.php?id=13285初等网络函数介绍(TCP)及示例程序1、socket int socket(int domain, int type,int protocol) domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等). AF_UNIX只能够用于单一的Unix系统进程间通信,而AF_INET是针对Internet的,因而可以允许在远程 主机之间通信(当我们 man socket时发现 domain可选项是 PF_*而不是AF_*,因为glibc是posix的实 阅读全文
posted @ 2011-05-03 08:57 hnrainll 阅读(1124) 评论(1) 推荐(2)
摘要:转自:http://blog.csdn.net/unbutun/archive/2009/05/13/4175209.aspx条件变量 使用互斥锁来实现线程间数据的共享和通信,互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。一般说来,条件变量被用来进行线承间 阅读全文
posted @ 2011-05-01 19:43 hnrainll 阅读(1893) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/future_fighter/archive/2009/02/13/3883415.aspx继续昨天的线程同步,条件变量(Condition Variables)是用于线程间,通信共享数据状态改变的机制。简介条件变量的创建和销毁等待条件变量唤醒等待条件变量的线程简介当线程互斥地访问一些共享的状态时,往往会有些线程需要等到这些状态改变后才应该继续执行。如:有一个共享的队列,一个线程往队列里面插入数据,另一个线程从队列中取数据,当队列为空的时候,后者应该等待队列里面有值才能取数据。而共享数据(队列)应该用mutex来保护,为了检查共享数据的状态(队列 阅读全文
posted @ 2011-05-01 19:42 hnrainll 阅读(543) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/hanchaoman/archive/2009/11/12/4798784.aspx1. 相关函数 #include <pthread.h> pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(p 阅读全文
posted @ 2011-05-01 19:41 hnrainll 阅读(829) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/dai_weitao/archive/2007/08/22/1754964.aspx条件变量分为两部分: 条件和变量. 条件本身是由互斥量保护的. 线程在改变条件状态前先要锁住互斥量.1. 初始化: 条件变量采用的数据类型是pthread_cond_t,在使用之前必须要进行初始化, 这包括两种方式:静态: 可以把常量PTHREAD_COND_INITIALIZER给静态分配的条件变量.动态: pthread_cond_init函数, 是释放动态条件变量的内存空间之前, 要用pthread_cond_destroy对其进行清理.#include&l 阅读全文
posted @ 2011-05-01 19:40 hnrainll 阅读(385) 评论(0) 推荐(0)
摘要:转自:http://blogold.chinaunix.net/u/22935/showart_340462.html一、什么是条件变量与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变 阅读全文
posted @ 2011-05-01 15:25 hnrainll 阅读(512) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/feisky/archive/2010/03/08/1680950.html与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁 阅读全文
posted @ 2011-05-01 13:50 hnrainll 阅读(597) 评论(0) 推荐(0)
摘要:#include<stdio.h>#include<pthread.h>#include<stdlib.h>#include<unistd.h>#include<signal.h>void *test_program(void *arg);int main(int argc,char *argv[]){ int i; pthread_t thread_id; void *status; if(pthread_create(&thread_id,NULL,test_program,NULL)>0) { fprintf(st 阅读全文
posted @ 2011-05-01 13:34 hnrainll 阅读(329) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: n_trylock.c * Description: * Version: 1.0 * Created: 2011骞?4鏈?2鏃?20鏃?9鍒?2绉? * Revision: none * Compiler: gcc * Author: wenhao (wh), hnrain1004@gmail.com * Company: sunplusapp * *********************************** 阅读全文
posted @ 2011-05-01 13:31 hnrainll 阅读(4789) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/rsp19801226/archive/2008/10/18/3095157.aspx解析C/C++语言中的sizeof一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量 sizeof使用形式:siz 阅读全文
posted @ 2011-05-01 12:38 hnrainll 阅读(2012) 评论(1) 推荐(0)
摘要:这是一个很简单的程序void main(){int i=8;printf("%d,%d,%d,%d\n", ++i, --i, i++, i--);}在这里我使用了VS.NET2005编译的结果是:8,8,7,8用TC2.0编译的结果是:8,7,7,8VC6.0我没有安装,所以没有试过,也没办法分析。这里我们可以看到,由不同的编译器产生了不同结果,可见这个问题是依赖编译器的理解和实现的。换句话说,对于i++和++i的处理本来就是非常具有歧义的,当然在自己应用中我相信也不会有任何程序员写出这样歧义的代码。但是作为一个问题,我们有必要分析一下不同编译器究竟如何理解i++和++i 阅读全文
posted @ 2011-05-01 12:19 hnrainll 阅读(1371) 评论(4) 推荐(0)
摘要:#include <stdio.h>#include <stdlib.h>void foo(void){ printf("into the foo function\n"); return;//结束子函数调用,返回主函数 printf("out the foo function\n");}int main(){ foo(); printf("Hello world!\n"); return 0;}运行结果: 阅读全文
posted @ 2011-05-01 08:22 hnrainll 阅读(1796) 评论(0) 推荐(0)
摘要:return是C++预定义的语句,它提供了种植函数执行的一种放大。当return语句提供了一个值时,这个值就成为函数的返回值.说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助.很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has be 阅读全文
posted @ 2011-05-01 08:17 hnrainll 阅读(916) 评论(0) 推荐(0)
摘要:main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序: int main( void ) { return 0; }然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo%ERRORLEVEL%”,回车.就可以看到程序的返回值为0。假设刚才编译好的文件是a.exe,如果输入“a && dir”,则会列出当前目录下的文件夹和文件。但是如果改成“return -1”,或者别的非0值,重新编译后输入“a & 阅读全文
posted @ 2011-05-01 07:54 hnrainll 阅读(5162) 评论(0) 推荐(0)