*******************内存管理******************
#include
void*malloc(sizt_tsize)
分配长度为size字节的内存块
返回值:
如果分配成功则返回指向被分配内存的指针,否则返回空指针,当内存不再使用时,应使用free()函数将内存块释放
#include
voidfree(void*ptr_to_memory)
功能:
释放ptr_to_memory指向的内存
#include
char*getenv(constchar*name)
功能:
取指定环境变量name对应的内容。
返回值:
成功则返回变量内容,失败返回NULL
#include
intputenv(constchar*string)
功能:
设置环境变量。
格式为"name=value"
成功返回0,失败返回-1
intmain()
{
char*ss=getenv("PATH");
printf("%s\n",ss);
inta=putenv("tanjie=ami");
printf("%d\n",a);
printf("%s\n",getenv("tanjie"));
uid_tuid=getuid();
printf("UID:
%d\n",uid);
char*login=getlogin();
printf("LOGIN:
%s\n",login);
}
#include
#include
uis_tgetuid(void)
功能:
返回当前用户的UID
char*getlogin(void)
功能:
返回当前用户登录名
#include
#include
structpasswd*getpwuid(uid_tuid);
取口令数据库结构
成功返回口令数据库的结构,失败返回NULL
structpasswd*pw=getpwuid(getuid());
pw->pw_name,pw->pw_uid,pw->pw_gid,pw->pw_dir,pw->pw_shell;
结果:
name=hfsd1006,uid=1002,gid=1002,home=/home/hfsd1006,shell=/bin/bash
rootpasswdentry:
structpasswd*getpwnam(constchar*name)
功能:
取口令数据库结构
成功返回口令数据库结构,失败返回NULL
structpasswd*pw=getpwuid("root");
pw->pw_name,pw->pw_uid,pw->pw_gid,pw->pw_dir,pw->pw_shell;
结果:
name=root,uid=0,gid=0,home=/root,shell=/bin/bash
#include
intgethostname(char*name,size_tnamelen);
功能:
获取计算名。
#include
intuname(structutsname*name);
功能:
获得计算机详细信息
charcomputer[256];
structutsnameuts;
gethostname(computer,255)
uname(&uts)
日志管理
#include
voidsyslog(intpriority,stringmessage,...);
功能:
函数将message字符串写到系统记录中,参数priority为优先级和用户标识码
priority的内容可以是:
LOG_EMERG:
紧急情疻。
LOG_ALERT:
应该被立即改正的问题,如系统数据库被破坏
LOG_CRIT:
重要情况,如硬盘错误
LOG_ERR:
错误
LOG_WARNING:
警告信息
LOG_NOTICE:
不是错误情况,是可能需要处理
LOG_INFO:
普通信息
LOG_DEBUG:
包含情报信息,通常只在调试一个程序时
LOG_USER:
来自于用户
################编程规范####################
排版:
缩进4格
程序块之间,变量说明之后必须加空行
一行的代码太长了(>80),下一行要空开多个TAB。
要在低优先级的操作符处划分。
低优先级的操作符放在下一行首
循环,判断也同上。
func(fa()+fb()
fc()+fd()
fe()
);
函数或过程的开始要缩进
花括号上下对齐
逗号,分号后加一个空格如,inta,b,c;
说明性文件(.h.inc.def.cfg)头部应该注释,
addrenivebeginendcreatdestroy
insertdeletefirstlastgetrelease
incrementdecrementputget
*****************************QT第一天******************************************
QT类库,开发工具,开发环境(14年)
二十个左右的类
QT简介:
跨平台的应用程序和UI(用户接口)框架,完全基于C++,增加一些XML语言,之所以跨平台,因为它做了高度的抽象。
用固定的类与方法实现多线程,源码可移植(诺基亚收购了QT,缺点:
与以前的版本不兼容)
QT可以做什么:
桌面系统,嵌入式设备,消费的电子设备,高级的GUI开发,Linux设备开发
(EeePC上网本,及为省电可用十几个小时,)
(一些开源项目:
KDEKOFFIC,VLC媒体播入器,Amarok2Marble)
QTE,QTOPIA:
QT/Embedded:
QT嵌入版,
Qtopia:
可以认为是基于QT/E库的一个嵌入式Linux桌面环境,同时又为开发者为嵌入式设备编写程序提供了一个面向对象的API。
QTE是一个基础的类库,面QTOPIA是基于QTE基础上开发的一套应用程序(qtopia2应用基于qte2.3x的)
架构:
Qte是基于Linux系统的
Qtopia
Qt/Embedded
Framebuffer
LINUX
QT/QTE比较:
应用源代码
Qt的API(类库)
Qte
侦缓冲
Linux内核
Arm开发版上,只需要有一个内核,为方便测试可以有一个很小的文件(放QTE开发环境,和程序)
QTSDK完整的开发环境:
版本4.6.3需要一个框架
QTSDKforWindows下载Window的Q库t4.6.3
QTQTSDKforLinux/x11下载Linux/X11的Qt库4.6.3
下载嵌入式Linux的Qt库4.6.3
要在sdk中配置框架,
SDK的结构如下:
classlibrary如下:
Developmenttools(开发工具)
(corexml)cross-platformIDE
(GuiMultimedia)guihelp
(webkitdatabase)118nToolBuittools
(graphicvinetwork)
(scriptiingunitTests)
(OpenglBenchmarking)
交叉平台的支持:
(如WindowsLinux)
版权QTSERVICES(QT所类要的一些服务,就是一些库,简单的就在IDE中就可以)
项目名.pro文件:
是项目的管理文件
引用了哪些库,及所括文件
ui文件不能编译,它是XML配置文件
容器:
面象对象的的事件驱动
属性
objectName:
对象名,有一个默认的
改名方案pButton_类及功能是什么如pButton_ok,pButton_cancel
font字体
cursor光标
text:
显示按钮上的字
信号signal与槽slot
对象间通读分两种
1回调。
回调是指一个函数的指针,如果希望一个处理函数通知你做一些事件,可以把另一个函数的指针传递给处理函数。
处理函数在适当的时候调用了回调,回调不是类型安全的
2,信号和槽,一个事件发生时,信号被发身。
Qt的窗口部件有很多预定义的信号,槽就是一个可以被调用处理特定信号的函数。
Qt的窗口部件又很多预定义的槽,通常我们可以加入自已的槽(槽是类里的一个抽象方法)这样就可以处理感兴趣的信号,信号和槽的机制是类型安全的。
一个类中可以有对象,信号和槽
connect(Object1,signal1,Object2,slot1);对象1的信号发给了对象2的槽
connect(Object1,signal1,Object2,slot2);//一个信号可以连接到多个槽
//若干个对象也可以连接到一个槽
QT典型类
classFoo:
publicQObject//定义一个QT类继承整个QT类的一个基类
{
Q_OBJECT//这是一个宏
public:
Foo();//构造
intvalue()const{returnval;}//常成员函数
publicslots:
//槽
voidsetValue(int);
signals:
//信号
voidvalueChanged(int);//发射了一个信号
private:
intval;//这是一个信号的值
}
QT类中发送信号的方法
voidFoo:
:
setValue(intv)
{
if(v!
=val)//避免发给自已进入死循环
{
val=v;
emitvalueChanged(v);//发射信号
}
}
连接信号和槽-
Fooa,b;
connect(&a,SIGNAL(valueChanged(int)),&b,SLOT(setValue(int)));
//宏里边写一个信号valueChanged(int),宏里边有一个槽setValue(int)
b.setValue(11);//槽就是一个成员方法,可被这样调用此时b=11a里不知什么值
a.setValue(79);//a==79,b==79
b.Value();
注意参数可为各种类型,但信号与对应的槽要类型一致
槽的访问权限
publicslots:
区包含了任何信号都可以相连的槽。
这对于组件来说非常有用,你生成许多对象,它们互相并不知道,把它们的信号和槽连接起来。
这样信息就可以正确传递,并且就像一个铁咱模型。
把它打开然后让它跑起来。
protectslots:
区所含之后这个类和它的子类的信号才能连接槽。
这就是说这些槽只是类的实现的一部分,而不是它和外界的接口
privateslots:
区包含了之后这个类本身的信号可以连接的槽。
这就是说它和这个类是非常紧密的甚至它的子类都没有获得连接权利这样的信任。
QT类库
窗口部件,数据库,日期与时间,拖放环境,事件,非GUI的类,图形和打印,图像处理,布局管理,输入输出各网络主窗口和相关类,杂项,多媒体,插件类,标准对话框,线程类,窗口部件外观
QObject:
类
#include
QObject类是所有Qt对象的基类。
QObject是Qt对象模型的中心,这个模型的中心特征就是一种用于无缝对象通讯的被叫做信号和槽的非常强大的机制,你能够使用connect()信号和槽连接起来并且可以用disconnect()来破坏这种连接,为了避免从不结束的通知循环,
QObject继承关系
QCoreApplicationQWidgetQLayout
QApplicationQwidgetQB
....
可以
QObject*pb=newQPushButton("test");//不用是直接基类
QObject
boolQObject:
:
connect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*method,Qt:
:
ConnectionTypetype=Qt:
:
AutoConnection)[static]
//static表示发送者
把从sender对象发送的signal和receiver对象中的method连接起来,并且如果连接成功返回真,否则返回假。
必须在说明signal和method的时候使用SIGNAL()和SLOT()两个宏
例如:
QLaber*laber=newQLabel;
QScrollBAR*scrollBar=newQScrollBar;
QObjectconnect(...);
QObject类
boolQObject:
:
disconnect(constOObject*sender,constchar*signal,constQObject*receiver,constchar*method)[static]
取消从sender对象发送的signal和对象receiver中的method
1,取消连接一个对象的信呈怕任何事物
disconnect(myObject,0,0,0);
2,取消连接一个特定信号的任何事物
disconnect(myObjectSIGNAL(mySignal()),0,0)
3,取消一个特定接收者的所有连接
disconnect(myObject,0,myReceiver,0)
QObject:
:
disconnect()
O可以用做一个通配符,意义可能分别为任何信号,任何接受对象“或者”一个接受对象中的任何槽
sender不能为O
signal为O,它取消所有和这个对象的信号连接的receiver和method,如果不是只由特定信号被取消联接。
receive为O,它取消连接到signal的任何事物,如果不是,只有receiver中的槽被取消连接
method为O,它取消连接reciver的任何事特,如果不是,只有名为method的槽被取消联接。
boolQObject:
:
inherits(constchar*clname)
如果这个对象是继承的clname的类的实例,并且clname继承QObject那么返回值真,否则返为假
实例
QTimer*t=newQTimer//QTimer;继承QObject
t->inherits("QTimer");//返回TRUE
t->inherits("QObject");//返回TRUE
t->inherits("QAbstractButton");//返回FALSE
boolQObject:
:
isA(constchar*clname)
如果这个对象是clname类的实例,返回真,否则返回假。
如:
QTimer*t=newQTimeer;//QTimer继承QObject
t->isA("QTimer");//返回TRUE
t->isA("QObject");//返回为FALSE
QObject
boolQObject:
:
isWidgetType()
如果这个对象是一个窗口部件,返回真,否则返回假
调用这个函数等于调用inherits("QWidget"),但这个函数要快很多
QString
floatQString:
:
toFloat(bool*ok=0)const
doubleQString:
:
toDouble(bool*ok=0)const
返回由这个字符串转化的double值
如果转化发生错识误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回,否则*ok被设置为真
QStringstring("12345.6");
longQString:
:
toLong(bool*ok=0,intbase=10)const
shortQString:
:
toShort(bool*ok=0,intbase=10)cost
intQString:
:
toInt(bool*ok=0,intbase=10)const
返回由这个字符串转化的int值,是基于base的,默认为10并且必须由2到36之间
QStringstd("FF");
boolok;
inthex=str.toInt(&ok,16);//hex==255,ok=TRUE
intdec=str.toInt(&ok,10);//dec=0,ok==FALSE
作业:
******************************QT第二天****************************************
#include
QWidget类是所有用户界面对象的基类,
窗口部件是用户界面的一个原子。
它从窗口系统接鼠标,键盘和其它事件,并且在屏幕上绘制自已的表现。
每一个窗口部件者是矩形。
一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。
如果由操作系统或类库提供的不用重画,其它都用重画。
缺点是极度浪费资源,和内存。
速度很慢
QWidget被QAbstractButton,QFrame,QDialog,QComboBox,QDataBrowser,QDataView,QDateTimeEdit,QDesktopWidget,QDial,
.......等类继承
QWidget属性----------------属性名:
类型
acceptDrops:
bool窗口部件中放下事件是否有效
windowTitle:
QString窗口标题
cursor:
QCusrsor窗口部件的光标外形---------------类型是构造出来的
focus:
constbool窗口部件(或者它的焦点代理)是否得到键盘输入焦点(只读)
font:
QFont:
窗口部件当前的字体集
(如果是对容器设置字体或字体大小,它里面的子类会继承这个容器的设置)
height:
constint不包括窗口框架的窗口部件的高度(只读)----按象素来算
isActiveWindow:
constbool窗口部件或者它的一个子对象是否是活动窗口(只读)
不一定在最前面的对话框就有输入焦点
QWidget的其它属性
maximumHeight:
int窗口部件的最大高度
maximumSize:
QSize窗口部件的最大大小
maximumWidth:
int窗口部件的最大宽度
minimized:
constbool窗口部件是否是最小化的。
(变为图标了)(只读)
minimumHeight:
int窗口部件的最小高度
minimumSize:
窗口