2010年6月1日火曜日

关于linux内核中的"__attribute__ ((packed))"



__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。

#define __u8 unsigned char
#define __u16 unsigned short

/* __attribute__ ((packed)) 的位置约束是放于声明的尾部“;”之前 */
struct str_struct{
__u8 a;
__u8 b;
__u8 c;
__u16 d;
} __attribute__ ((packed));

/* 当用到typedef时,要特别注意 __attribute__ ((packed))放置的位置,相当于:
* typedef struct str_stuct str;
* 而 struct str_struct 就是上面的那个结构。
*/
typedef struct {
__u8 a;
__u8 b;
__u8 c;
__u16 d;
} __attribute__ ((packed)) str;

/* 在下面这个typedef结构中,__attribute__ ((packed))放在结构名str_temp之后,其作用是被忽略的,注意与结构str的区别。*/
typedef struct {
__u8 a;
__u8 b;
__u8 c;
__u16 d;
}str_temp __attribute__ ((packed));

typedef struct {
__u8 a;
__u8 b;
__u8 c;
__u16 d;
}str_nopacked;

int main(void)
{
printf("sizeof str = %d\n", sizeof(str));
printf("sizeof str_struct = %d\n", sizeof(struct str_struct));
printf("sizeof str_temp = %d\n", sizeof(str_temp));
printf("sizeof str_nopacked = %d\n", sizeof(str_nopacked));
return 0;
}
编译运行:
引用:
[root@localhost root]# ./packedtest
sizeof str = 5
sizeof str_struct = 5
sizeof str_temp = 6
sizeof str_nopacked = 6
GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

__attribute__ 书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的__attribute__参数。

__attribute__ 语法格式为:

__attribute__ ((attribute-list))

其位置约束:放于声明的尾部“;”之前。

函数属性(Function Attribute):函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。__attribute__机制也很容易同非GNU应用程序做到兼容之功效。

GNU CC需要使用 –Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。

packed属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。

struct 和typedef struct



分三块来讲述:
1 首先:
在 C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明
这里的Stu实际上就是struct Student的别名。
另外这里也可以不写Student(于是也不能struct Student stu1;了)
typedef struct
{
int a;
}Stu;
但在c++里很简单,直接
struct Student
{
int a;
};
于是就定义了结构体类型Student,声明变量时直接Student stu2;
===========================================
2其次:
在c++中如果用typedef的话,又会造成区别:
struct Student
{
int a;
}stu1;//stu1是一个变量
typedef struct Student2
{
int a;
}stu2;//stu2 是一个结构体类型
使用时可以直接访问stu1.a
但是stu2则必须先 stu2 s2;
然后 s2.a=10;
===========================================
3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
如果在c程序中我们写:
typedef struct
{
int num;
int age;
}aaa,bbb,ccc;
这算什么呢?
我个人观察编译器(VC6)的理解,这相当于
typedef struct
{
int num;
int age;
}aaa;
typedef aaa bbb;
typedef aaa ccc;
也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。

typedef struct 用法详解




1. 基本解释

  typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

  在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

  至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。

  2. typedef & 结构的问题

  当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明:

typedef struct tagNode
{
  char *pItem;
 pNode pNext;
} *pNode;

  答案与分析:

  1、typedef的最简单使用

typedef long byte_4;

  给已知数据类型long起个新名字,叫byte_4。

  2、 typedef与结构结合使用

typedef struct tagMyStruct
{
 int iNum;
 long lLength;
} MyStruct;

  这语句实际上完成两个操作:

  1) 定义一个新的结构类型

struct tagMyStruct
{
 int iNum;
 long lLength;
};

  分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。

  我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

  2) typedef为这个新的结构起了一个名字,叫MyStruct。

typedef struct tagMyStruct MyStruct;

  因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。

  答案与分析

  C语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于typedef的应用。

  根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。

  解决这个问题的方法有多种:

  1)、

typedef struct tagNode
{
  char *pItem;
 struct tagNode *pNext;
} *pNode;

  2)、

typedef struct tagNode *pNode;
struct tagNode
{
 char *pItem;
 pNode pNext;
};

  注意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字。C语言编译器支持这种做法。

  3)、规范做法:

typedef uint32 (* ADM_READDATA_PFUNC)( uint16*, uint32 );

这个以前没有看到过,个人认为是宇定义一个uint32的指针函数,uint16*, uint32 为函数里的两个参数; 应该相当于#define uint32 (* ADM_READDATA_PFUNC)( uint16*, uint32 );

struct在代码中常见两种形式:
struct A
{
//...
};

struct
{
//...
} A;
这其实是两个完全不同的用法:
前者叫做“结构体类型定义”,意思是:定义{}中的结构为一个名称是“A”的结构体。
这种用法在typedef中一般是:
typedef struct tagA //故意给一个不同的名字,作为结构体的实名
{
//...
} A; //结构体的别名。

后者是结构体变量定义,意思是:以{}中的结构,定义一个名称为"A"的变量。这里的结构体称为匿名结构体,是无法被直接引用的。
也可以通过typedef为匿名结构体创建一个别名,从而使得它可以被引用:
typedef struct
{
//...
} A; //定义匿名结构体的别名为A

2010年5月22日土曜日

Linux查看机器开放的端口


一、使用nmap扫描机器开放的端口

我用这个工具的目的是查看自己服务器RHEL5所开放的端口,发现没有必要的端口就关闭,并不是用来扫描别的机器的端口……善哉善哉……
nmap是个跨平台的工具,在Linux、Linux,FreeBSD,UNIX,Windows下都有可用的版本。

主要功能:
1、测一组主机是否在线
2、扫描主机端口,嗅探所提供的网络服务
3、推断主机所用的操作系统

我用到的几个命令如下:
检查我所在网段有多少台“活着”的机器
[root@pps ~]# nmap -sP 192.168.32.0/24
Starting Nmap 4.11 at 2009-03-10 13:31 CST
Host 192.168.32.1 appears to be up.
MAC Address: 00:50:56:C0:00:08 (VMWare)
Host hoho.com (192.168.32.50) appears to be up.
Host 192.168.32.254 appears to be up.
MAC Address: 00:50:56:E1:E2:F8 (VMWare)
Nmap finished: 256 IP addresses (3 hosts up) scanned in 5.476 seconds
我感觉这个结果不真实,因为我的虚拟机不止一个IP,有些IP并没有检测到。但是自己没有把握说明白原因,于是就不多说了。

检查我本身的机器开放了哪些端口
[root@pps ~]# nmap -sTU localhost
Starting Nmap 4.11 at 2009-03-10 13:33 CST
Interesting ports . localhost.localdomain (127.0.0.1):
Not shown: 3156 closed ports
PORT STATE SERVICE
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
631/tcp open ipp
953/tcp open rndc
3306/tcp open mysql
53/udp open|filtered domain
111/udp open|filtered rpcbind
631/udp open|filtered unknown
Nmap finished: 1 IP address (1 host up) scanned in 2.875 seconds

根据实际的需要,用防火墙来“屏蔽”对一些端口的访问,确保安全。

参数说明:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
比较实用的还有以下三个:
SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:
nmap -sS 192.168.32.0/24
当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描:
nmap -sT 192.168.32.0/24
UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:
nmap -sU 192.168.32.0/24

Windows下的NmapWin等使用可以参考:
[url]http://hi.baidu.com/xzqmr/blog/item/67226a8dfde32a13b31bbad3.html[/url]

二、使用netstat来看看系统的监听端口

# netstat -antp //所有连接、数字显示主机、端口、TCP连接、监听的程序
# netstat -anup //所有连接、数字显示主机、端口、UDP连接、监听的程序
# netstat -s //统计所有(开机至今的)连接数据,包括tcp、udp等
# netstat -st //统计所有tcp连接数据
# netstat -su //统计所有udp连接数据
# netstat -su //粗略统计连接数据

从netstat里可以看到自己机器正在监听的端口、相关程序以及当前的连接数、连接来自何方等数据,然后有针对性的进行关闭相关服务或者用防火墙来屏蔽、过滤对本机服务的访问。

-p参数是Linux特有的,如果没有使用-p参数,想知道哪个程序监听25端口,可以用:
lsof -i :port

来确定是哪个程序监听着port端口,比如我的RHEL5:
[root@pps ~]# lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sendmail 3316 root 4u IPv4 11299 TCP *:smtp (LISTEN)

嘿嘿,就知道是sendmail在监听本机的25端口。

2010年5月20日木曜日

温哥华 - 夏威夷 - 洛杉矶 - 旧金山十天游记


公司很忙,只批准我休假五天,利用两个周末和Good Friday,一共凑得十天假期。如果我还有多一个星期的假的话,Banff,Grand Canyon和Yellow Stone Park都会被纳入行程之中。可惜我没有。如果上天再给我一个机会的话,我宁愿我这十天都呆在了夏威夷。幸好这个机会我也没有,旧金山很美很浪漫,哪怕只呆一个小时也是值得的。

多伦多,带上怀孕三个月的笨笨,三月三十一日一早八点的飞机。在机场Security,带去的几瓶水不幸被没收,解释是避免液体炸弹。两年没坐飞机了,世界变了我们竟还无知。温哥华中午时分到达,离飞往Honolulu的班机还有八个小时。于是到机场的Tour Info.花了二十加币买shuttle Bus的往返票,一路往温哥华市中心去了。注:Tour Info.的工作人员还是很Nice的,听了我们的情况,他们准备好了地图并标出最佳路线,为的是帮助旅客充分利用这几个小时的时间。

半个小时左右,Bus就到了温哥华downtown。很热闹的一个城市,很温和的气候。附近Condo林立。我们还到一个Open House的Townhouse看了一下。说是Town House,其实是一个Condo的第一层,也就是一个钢筋水泥做的Town House。这是一个两层的单位,2 bedrooms + 1 Den + 1 Study Room + 1 storage room,约1100 sf,不到8 ft ceiling,主卧的沐浴隔一块玻璃对着卧室。总体装修相当不错,当是城市恋人最佳的温柔乡。不过价格就不那么温柔了,一开价就是600K。

在温哥华转了市区,在奥运倒计时钟前一张到此一游照,往Gas Town压了压马路,再到海滩上搔首弄姿若干张,更不忘了到Pacific Shopping Center转了转Holt Renfrew。最后在Pacific Shopping Center吃了顿饭,就一般的Food Court,在多伦多6块左右的一顿饭在温哥华竟然要9块?不过味道还是很好的,比多伦多6块一顿的不知好上多少倍。吃完饭就可以回机场了,一路无话。

三月三十一日晚七点,终于登上了飞往Honolulu的班机。夏威夷,我们来了。我对笨笨说,其实夏威夷不见得比古巴漂亮多少,但消费就贵了很多。笨笨说,谁叫它是夏威夷呢?冲这名字就得去一次,这一辈子可能也就去一次,也总得去一次吧?如果有钱和时间的话。是呀,阳光,沙滩,海浪,仙人掌,还有一位老船长,总得去一次吧?还有心驰神往的珍珠港,总得去一次吧?注:有仙人掌吗?好象还真没有看到。老船长呢?有,还是开潜艇的。

夜半,抵达Honolulu。机场挺旧,空气里弥漫着海的气息。每人花十五美金买了个机场住往返Bus Shuttle。一路就往订好的酒店去了。这里的Airport Shuttle服务很周到,会到每个Waikiki Beach的酒店接送人。我们住离Waikiki海滩约五分钟脚程的一个三星级酒店,约160加币一个晚上。房间旧得让人失望,不过一想到节目明天就要开始了,还是由衷的欣喜。

愚人节,一早就起来了,在酒店用了丰盛的早餐(自费,12/人)。到遍布Honolulu的ABC连锁店买了水和水果,第一天的旅程就开始了。本打算这一天去火山岛的,却被告知需要提前两三天订好飞火山岛的机票。只好改为去坐观光潜艇,约90美金一个人,水底行程共四十五分钟。于是到海滩上等潜艇。海滩上有人在讲道,Amen to that!由于要赶时间,没有坐下来听。海滩?我刚才有说海滩吗?阳光灿烂,天是深蓝,风清云高,浅水是绿,深水蔚蓝,眼前风情万种,远望无边无际。头顶上班机以每分钟一架的频率飞来,感慨说又有人源源不断地给夏威夷送钱来了。一个字,美!不愧为旅游天堂。

在海边坐小船到深海,登上潜艇Atlantis号。潜入120 ft深的海底看鱼,还是被鱼看?每个人都有一个专用舷窗,视野非常好,也看到了许许多多的知名不知名的鱼和海龟。这是一个难得的经历,笨笨和旦旦也留下最“深”的一个Kiss。

浮上来后就去名店街,LV,Gucci,Barbara,Diesel,Channel,Banana Republic,... 你能想到的名牌都在这里了,不知为何就是没有Versace。中午去日本饭店吃拉面,加小费等约12元一位。这里的街道非常干净,异常整洁。约五十米到一百米之间就一个红绿灯。满街走的是日本人,说是日本人到夏威夷渡假比在日本本土还便宜。名店里的服务员也多数是日本人,来大包小包买东西最多的也还是日本人。名店里的东西比起多伦多来要便宜五分之一左右,而且只上4%左右的税。

到处狂拍一阵后,准备坐Sunset Cruise。船上吃buffet,还有当地文化表演。在这里我们拍到了最美的夕阳。也和认识不认识的人一起乱舞狂欢。错,全是不认识的人。还有好几个从中国大陆公费出差旅游的男士,看完表演直摇头,曰:都乱扭的什么呀?完尔。第一天就在狂欢中结束了。心想,夏威夷,我们总算来过了。

第二天,珍珠港。其实不用跟旅行团去(约二十/人),自己坐Bus去才单程2/人。下了巴士,就是珍珠亚得桑那记念号的停泊地了。这里是美国人的骄傲,也是日本人的耻辱。据说夏威夷充满了日本人,唯有这里没有。排在一个很长很长的队后面,但行进速度还是很快的,不到十五分钟就入场了。含着泪水看了当年的珍贵史料和记录片。站在沉船上的记念馆,再次明白了生死的意义。人总是要死的,不是吗?我们或者不能选择如何降生,但是如何可能的话,我们可以选择如何活着,以及如何去面对死亡。再次感谢神!仰望亚利桑那号上空飘扬的星条旗,God bless America!God bless mankind!

下午就去海滩上躺着吧。忘记工作,忘记尘世间的烦恼。哪怕是享受只一分钟的安宁,这不就是旅行的目的吗?在海里畅游,累了就仰泳,凝视天,凝视云。天堂,就在不远的地方。

第三天,让我们去Hiking!Diamond Head是一个Hiking的好地方,据说山顶有好风光。还是坐Bus直达(跟团要20左右)。这是非常好的一条Hiking路线,随着山越爬越高,风光也渐入佳境。到达顶峰的时候,脑海里只有一句话:“欲穷千里目,更上一层楼”。Downtown,beaches,蓝天大海,尽收眼底。崎丽的风光,已超出言语的表达。笨笨气喘如牛,只说了一个字:“值”。

下午当然还是海滩了,不游泳也可以晒肚皮嘛,据说胎儿最爱晒太阳了。笨笨抚摸着肚皮说,估计以后穿bikini的机会不多了。两天下来人就黑了。

第四天,太平洋上最大的Mall,Ala Moana。极大极大极大的一个Mall,还是琳琅满目的名店。顺道过Chinatown惊鸿一暼,奇迹,很干净嘛!

第五天,已经没有了去火山岛的意念。除了乱逛就是海滩。人开始想家。晚上飞往Los Angeles。

由于预计只能在Los Angeles呆一天,所以选择去了Hollywood Unverisal Studio(没有去美丽的圣地亚哥)。这也是一个很好玩的地方,门票是61一个人(可以免费转成年票)。先去恐怖片场被吓个半死,再去坐猪罗纪小艇淋个湿透。看了无数3D电影,再参观无数片场。看了人,还看了宠物明星表演,最后不忘在假Hollywood布景前到此一游。这是愉快的一天。当然不会忘了去星光大道上轻舞飞扬,走了二十分钟才有两个认识的,一个是Harrison Fort,另一个竟然是我一路念叨着的梦露。Amen to that!

四月七日,在Los Angeles坐上了San Franciso三日游的大巴。一路山区和海岸,风光无限。玩过Danish Town, Hearst Castle,以及Yosemite National Park,终于到达梦绕魂牵的旧金山。坐船饱览了金门桥的秀色,也近距离观看了勇闯夺命岛和Prison Break里传奇一般的Alcatraz Island监狱。参观了Palace of Fine Arts,再登上金门桥,爬上Lombard Street(九曲花街)。旧金山的梦就算圆了。有机会我们还会再来,美丽的旧金山。

回家了,我总说,这个世界上没有哪里好得过家。当我们光着脚丫子站在家里的木板地上的时候,心情是喜悦的。但家却是从来没有过的陌生。喔,原来我们的心早在留在了风情万种的夏威夷。

阳光,沙滩,海浪,仙人掌,还有一位老船长... 好梦,我们的孩子。好梦,神的儿女...

洛杉矶和纽约哪个环境更好呢?


都是大城市,市中心都好不了,相应的远离市中心的地方应该还是不错的

当然是落汤鸡 Los Angeles
气候就像四季如春的云南一样美

美国最重要的城市是洛杉矶, 将来也是如此. 它生活要求很高. 如果你能够在洛杉矶生存下来, 在美国人眼里, 你是美国社会里面的佼佼者或者高手.

喜欢洛杉矶的气候风光,但是怕加州会有地震,东岸纽约好像不会有地震之忧,但是东岸的冬天可真是太冷了,所以真的不知道哪里是好

这些地方也有飓风哦,看来美国真的也不多得天独厚的好地方
飓风不同于地震,飓风是可以预测到的而地震不能。飓风来前可以做充分的准备,这一点就比地震强多了。呵呵!

纽约生活过5个月,洛杉矶也生活过7个月,时间都不长,但是总体感觉还是洛杉矶好,空气干净、温度合适、环境清洁、治安相对好的多、人相对善良、到处都很宽敞,在洛杉矶生活,心情总是加州的阳光一样明媚。洛杉矶的缺点是生活费用要比纽约高一点,因为要买车,没有车,在洛杉矶什么事都很难。纽约的优点是,华人区里,各种店铺都很集中,交通方便,福利非常好,对于经济困难的新移民很适合。吃住的费用,两地差不多,纽约海鲜便宜,洛杉矶水果便宜。


中国人若你不太懂英文就去洛杉矶吧..有一个超大的唐人区.

洛杉矶好,有迪士尼乐园,好莱呜,里面有影星的,像BRUCE.LEE JACK.CHEN等.

紐約好,因為紐約唐人街很大,而且離曼哈頓很近。紐約是美國最大的城市,很多元化的城市。LA空氣很差。

纽约经济最好 洛杉矶mm比较多
机遇和挑战吧~洛杉矶比较安定生活压力比较小,纽约充满挑战如果能成功当然好~不能成功生活压力就很大了

这要看你去美国是干什么的,如果你是想去享受生活的,去LA更好,那是个闲适的地方。纽约太过嘈杂喧嚣了,如果你是个生意人,去纽约更容易成功些,

纽约吧,毕竟那里是联合国总部所在地,而且洛杉矶是一个工业城市,污染会相对比较大一些吧!

都不好!我都不喜欢!纽约太乱,乱糟天....马路上的人跟中国差不多...冬天冻死,夏天热死,闷热,闷热的洛杉矶太土,气候又热,公路上的车横冲直撞,一点儿规矩都没有在那里,你感觉不出是在美国,跟在中国一样对了,你问这个是想定居呀,还是观光呀?到北加州来看看吧!旧金山,湾区,太平洋海边..........我们这里的气候是全美国(不敢说全世界)最好的气候!四季如春我在这呆了十几年,长年累月就是一件褂子,一条裤子.冬天多套上个夹克就行了.现在你那里热不热?我每天清晨上班,还得穿个厚夹克呐.北加州的人家很少有空调的.至于豪宅,海边上的房子,哪栋也得个一百万,二百万以上到美国来看看吧,自己走一圈儿,答案就出来了..........


感觉LA都好冷清的 哪个市最繁华 Mall pub什么的比较多一点 而且刚开始我不想呆在华人很多的地方 ...

我准备去美国 本来很喜欢纽约 但是听人说很脏很乱 不知道是不是真的

我准备去东海岸或西海岸 哪些城市是发达热闹环境又好的 而且有好大学

我们常说的“洛杉矶”通常有三个地理概念:
1、大洛杉矶地区,包括 洛杉矶县、奥兰治县、河滨县等5个郡131个城市,人口952万,是全美最大的城市群;
2、洛杉矶县,由88个城市组成;
3、洛杉矶市,美国第二大城市,人口396万。

嗯,老实说,华人在国外通常都会集聚于一个区域内,长而久之,也便形成了所谓的“唐人街”。这估计是民族的凝聚力,以及与外族文化的差异无法相溶的客观结果。所以你说你刚开始不想呆在华人多的地方,我认为当你在LA呆久了,很快将会改变你这样的“初衷”。

如果是去美国学习的话,而且非要在纽约与洛杉矶之间选择,我建议你去纽约!
你所听说的很脏很乱,那绝不是事实!估计说的是纽约的垃圾站。呵。

我劝你别来洛杉矶,我来了就后悔了。不想华人多还是到中部和东部吧。洛杉矶人口40%墨西哥人,30%亚洲人,一部分欧洲人,美国当地白人不是很多。因为人口复杂所以平均素质较低。我从ohio到la感觉落差那个大哦。不过你要是能住在beverly hills,pasadena, santa monica可能会好一点。如果没车在洛杉矶就跟没腿一样,公共交通基本上等于没有。这一点上ny会好很多。城市划分和1楼说的一样。

我住pasadena, old town附近蛮不错的。。。。。
华人不太多,但也蛮多的,买东西吃饭很方便,但是大学不怎么样,但也要看你念什么了,pasadena这边有美国排名前3的设计学院art center,但PCC就是一个很烂的学校,如果你想去白人多的地方就是riverside的corona或norco附近了,但是那边就属于农村了。。。哈哈。。。。。最近已经好了很多了,我高中在那边的时候离家最近的电影院是开车高速公路15分钟。。。。。
如果你属于散漫又爱玩的类型还是去纽约吧,LA不适合爱玩的人,LA人是很懒很layback的

最繁华的当然是LA的DOWNTOWN了,但那里的物价挺贵的,停车不方便,动不动停车都要交钱,华人不太多,容易被鬼佬欺负

2010年5月18日火曜日

php中箭头指针的写法和内置函数写法的区别简单对比

这里的对比仅仅是表面上的对比,写法上的对比。我发现这两者之间是有些关联,所以想写下来,一是备忘,而是加深自己的记忆。

我发现指针形式写法的函数在Dreamweaver下没有变色,例如,query($query),fetch_array(MYSQLI_ASSOC),close(),而所有的这些在前面添加"mysqli_"时,就会变成蓝色,成为php的内置函数。

所以两者的差别就在于对象的位置以及下划线和箭头的区别。举个例子:

$this -> dbc-> close(); 与mysqli_close($dbc);实现的效果是一样的,比如前者,只要将close前面的箭头变成下划线,再添加一个固定的“mysqli”,然后把$this -> dbc对象(这里是面向对象写法),放到mysqli_close函数括号里面去就行了。

类似的,其他很多函数都是如此。理解这个规则对于学习php应该有不小的帮助。

鄙人php初学者,可能归结不准确,见谅!

(完)