2009年12月1日星期二

c89和c99区别

1、增加restrict指针
  C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。
如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:
代码:
void *memcpy (void *s1, const void *s2, size_t size);
如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠的对象。C99中memcpy()函数原型如下:
代码:  
void *memcpy(void *restrict s1, const void *restrict s2,size_t size);  
通过使用restrict修饰s1和s2 变元,可确保它们在该原型中指向不同的对象。
  2、inline(内联)关键字
  内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码.函数的每次调用与返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时.一般情况下,当发生一次函数调用时,变元需要进栈,各种寄存器内存需要保存.当函数返回时,寄存器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,这些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的函数以及长度较短的函数。 
  3、新增数据类型 
  _Bool 
  值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹<stdbool.h>,以便程序员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用
<stdbool.h>头文件中的bool宏。
  _Complex and _Imaginary
 C99标准中定义的复数类型如下:float_Complex; float_Imaginary;
double_Complex; double_Imaginary; long double_Complex; long
double_Imaginary.
<complex.h>头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,因此在编写新的应用程序时,应该使用<stdbool.h>头文件中的complex和imaginary宏。
  long long int
  C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long
long int(0 - 2e64
- 1)。long long int能够支持的整数长度为64位。
  4、对数组的增强
可变长数组
C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的.可变长数组的维数在数组生存期内是不变的,也就是说,可变长数组不是动态的.可以变化的只是数组的大小.可以使用*来定义不确定长的可变长数组。  
  数组声明中的类型修饰符
  在C99中,如果需要使用数组作为函数变元,可以在数组声明的方括号内使用static关键字,这相当于告诉编译程序,变元所指向的数组将至少包含指定的元素个数。也可以在数组声明的方括号内使用restrict,volatile,const关键字,但只用于函数变元。如果使用restrict,指针是初始访问该对象的惟一途径。如果使用const,指针始终指向同一个数组。使用volatile没有任何意义。
  5、单行注释
  引入了单行注释标记 "//" , 可以象C++一样使用这种注释了。
  6、分散代码与声明
  7、预处理程序的修改
  a、变元列表
  宏可以带变元,在宏定义中用省略号(...)表示。内部预处理标识符__VA_ARGS__决定变元将在何处得到替换。例:#define
MySum(...) sum(__VA_ARGS__) 语句MySum(k,m,n);将被转换成:sum(k, m,
n); 变元还可以包含变元。例: #define compare(compf, ...)
compf(__VA_ARGS__) 其中的compare(strcmp,"small", "large");
将替换成:strcmp("small","large");
  b、_Pragma运算符
  C99引入了在程序中定义编译指令的另外一种方法:_Pragma运算符。格式如下:
  _Pragma("directive")
  其中directive是要满打满算的编译指令。_Pragma运算符允许编译指令参与宏替换。
  c、内部编译指令
  STDCFP_CONTRACT ON/OFF/DEFAULT
若为ON,浮点表达式被当做基于硬件方式处理的独立单元。默认值是定义的工具。
  STDCFEVN_ACCESS ON/OFF/DEFAULT
告诉编译程序可以访问浮点环境。默认值是定义的工具。
  STDC CX_LIMITED_RANGE ON/OFF/DEFAULT
若值为ON,相当于告诉编译程序某程序某些含有复数的公式是可靠的。默认是OFF。
  d、新增的内部宏
  __STDC_HOSTED__ 若操作系统存在,则为1
  __STDC_VERSION__ 199991L或更高。代表C的版本
  __STDC_IEC_599__ 若支持IEC 60559浮点运算,则为1
  __STDC_IEC_599_COMPLEX__ 若支持IEC 60599复数运算,则为1
  __STDC_ISO_10646__ 由编译程序支持,用于说明ISO/IEC
10646标准的年和月格式:
yyymmmL
  8、for语句内的变量声明  
  C99中,程序员可以在for语句的初始化部分定义一个或多个变量,这些变量的作用域仅于本for语句所控制的循环体内。比如:
代码:
for(int i=0; i<10; i++){
// do someting ...
}
  9、复合赋值
  C99中,复合赋值中,可以指定对象类型的数组、结构或联合表达式。当使用复合赋值时,应在括弧内指定类型,后跟由花括号围起来的初始化列表;若类型为数组,则不能指定数组的大小。建成的对象是未命名的。
  例: double *fp = (double[]) {1.1, 2.2, 3.3};
  该语句用于建立一个指向double的指针fp,且该指针指向这个3元素数组的第一个元素。
在文件域内建立的复合赋值只在程序的整个生存期内有效。在模块内建立的复合赋值是局部对象,在退出模块后不再存在。
  10、柔性数组结构成员
  C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
  11、指定的初始化符
  C99中,该特性对经常使用稀疏数组的程序员十分有用。指定的初始化符通常有两种用法:用于数组,以及用于结构和联合。用于数组的格式:[index]
= vol; 其中,index表示数组的下标,vol表示本数组元素的初始化值。
  例如: int x[10] = {[0] = 10, [5] = 30};
其中只有x[0]和x[5]得到了初始化.用于结构或联合的格式如下:
  member-name(成员名称)
  对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。
  例如: struct example{ int k, m, n; } object = {m = 10,n = 200};
  其中,没有初始化k。对结构成员进行初始化的顺序没有限制。
 12、printf()和scanf()函数系列的增强
  C99中printf()和scanf()函数系列引进了处理long long int和unsigned long
long int数据类型的特性。long long int
类型的格式修饰符是ll。在printf()和scanf()函数中,ll适用于d, i, o, u
和x格式说明符。另外,C99还引进了hh修饰符。当使用d, i, o,
u和x格式说明符时,hh用于指定char型变元。ll和hh修饰符均可以用于n说明符。
  格式修饰符a和A用在printf()函数中时,结果将会输出十六进制的浮点数。格式如下:[-]0xh,
hhhhp
+ d
使用A格式修饰符时,x和p必须是大写。A和a格式修饰符也可以用在scanf()函数中,用于读取浮点数。调用printf()函数时,允许在%f说明符前加上l修饰符,即%lf,但不起作用。
  13、C99新增的库
  C89中标准的头文件
  <assert.h> 定义宏assert()
  <ctype.h> 字符处理
  <errno.h> 错误报告
  <float.h> 定义与实现相关的浮点值勤
  <limits.h> 定义与实现相关的各种极限值
  <locale.h> 支持函数setlocale()
  <math.h> 数学函数库使用的各种定义
  <setjmp.h> 支持非局部跳转
  <signal.h> 定义信号值
  <stdarg.h> 支持可变长度的变元列表
  <stddef.h> 定义常用常数
  <stdio.h> 支持文件输入和输出
  <stdlib.h> 其他各种声明
  <string.h> 支持串函数
  <time.h> 支持系统时间函数
  C99新增的头文件和库
  <complex.h> 支持复数算法
  <fenv.h> 给出对浮点状态标记和浮点环境的其他方面的访问
  <inttypes.h>
定义标准的、可移植的整型类型集合。也支持处理最大宽度整数的函数
  <iso646.h> 首先在此1995年第一次修订时引进,用于定义对应各种运算符的宏
  <stdbool.h> 支持布尔数据类型类型。定义宏bool,以便兼容于C++
  <stdint.h> 定义标准的、可移植的整型类型集合。该文件包含在<inttypes.h>中
  <tgmath.h> 定义一般类型的浮点宏
  <wchar.h> 首先在1995年第一次修订时引进,用于支持多字节和宽字节函数
  <wctype.h> 首先在1995年第一次修订时引进,用于支持多字节和宽字节分类函数
  14、__func__预定义标识符
  用于指出__func__所存放的函数名,类似于字符串赋值。
  15、其它特性的改动
  放宽的转换限制
 
    限制             C89标准  C99标准
    数据块的嵌套层数       15     127
    条件语句的嵌套层数      8      63
    内部标识符中的有效字符个数  31     63
    外部标识符中的有效字符个数  6      31
    结构或联合中的成员个数    127    1023
    函数调用中的参数个数     31     127
  不再支持隐含式的int规则
  删除了隐含式函数声明
  对返回值的约束
    C99中,非空类型函数必须使用带返回值的return语句.
  扩展的整数类型
    扩展类型 含义
    int16_t 整数长度为精确16位
    int_least16_t 整数长度为至少16位
    int_fast32_t 最稳固的整数类型,其长度为至少32位
    intmax_t 最大整数类型
    uintmax_t 最大无符号整数类型
  对整数类型提升规则的改进
    C89中,表达式中类型为char,short int或int的值可以提升为int或unsigned
int类型.
    C99中,每种整数类型都有一个级别.例如:long long int 的级别高于int,
int的级别高于char等.在表达式中,其级别低于int或unsigned
int的任何整数类型均可被替换成int或unsigned int类型.

汉字编码与中国大历史

电影《2012》中委托中国制造方舟、逃过世界末日的故事,在汉字编码表中早有预言,在汉字编码字符表中"2012"对应的汉字恰恰是"船"字。

我仔细看了一遍这个字符表,天哪,跟中国历史太吻合了!试解读如下:

1911 倡:武昌起义,倡导革命,倡导新制度。
1914 钞:是年第一次世界大战爆发,原因当然是为了钞票。
1918 巢:仗打完了,各回老巢。
1919 吵:巴黎和会,会上很吵。五四运动、火烧赵家楼更吵。
1921 车:寓意深刻,一个政党诞生了,中国上了快车道,以后的成员都有公车。
1937 撑:日本人吃饱了撑的,制造卢沟桥事变。
1945 惩:盟国胜利,战犯得到严惩。
1949 逞:各种政治势力在中国大地上交战,以求一逞。
1950 骋:最后只剩下共产党驰骋。
1951 秤:分田分地,用大秤。
1952 吃:再不吃就来不及了。
1953 痴:说你呢,知识分子。
1954 持 持不同政见者们注意了。
1957 迟 毒草被抓住了吧,后悔了,但已经很迟了。
1960 耻 大饥荒开始,真是人类之耻。
1966 斥 我的第一章大字报,指斥党内走资派。文革开始。
1967 炽 很快炽热化。
1969 冲 全世界左翼青年学生们,冲啊!向资产阶级阵营发起猛攻!
1972 宠 尼克松访华,谁都是谁的新宠。
1976 踌 周恩来、朱德、毛泽东离世,唐山大地震,朝廷政变,中国踌躇不前。
1977 稠 总算有粮食吃了。
1978 愁 中国往何处去?愁啊。
1979 筹 改革开放初布局,与美国建交,运筹帷幄了一把。
1980 仇 清除三种人,伤痕文学,平反补工资,该报的仇也报了。
1981 绸 未雨绸缪吧。
1982 瞅 眼瞅着中国一天一个样变化。
1983 丑 犯罪率上升,丑恶现象增多,严打严打。
1984 臭 这个年号因为乔治-奥威尔的同名小说而臭名昭著
1985 初 我上初中。这个不算。初次的东西太多了,懒得查书。
1986 出 胡耀邦出局?
1987 橱 赵紫阳同志扮靓了人民的大衣柜。
1988 厨
中国当代史上最关键的年份之一。这一年价格闯关,造成物价飞涨,人民的厨房发生危机,从而酝酿了一次大风波。
1989 躇 中国再一次踟躇
1990 锄 铲锄一批是必要的。
1991 雏 雏凤清于老凤音?还是,他只是一个雏?
1992 滁 环滁皆山也。需要突围。因此有了南巡讲话。
1993 除 酝酿分税制改革,削减地方财权,除掉了中央的心腹大患。
1994 楚 不是四面楚歌,是楚河汉界。
(1995-2000编码表上缺失)
2001 础 中美撞机事件,没有变成战争,考验了中美关系的基础。
2002 储 胡锦涛当选为中共中央总书记
2003 矗 从此和谐社会开始矗立。
2004 搐 偶尔也会抽搐一下。
2005 触 谁的利益也不容易触动。
2006 处 河北处女"嫖娼"案?这条费解。
2007 揣 人们还在揣摩中国往哪里去?
2008 川 地震震碎了人们的梦。
2009 穿 穿墙、穿衣、穿越
2010 椽 出头椽子先烂,房地产崩盘?
2011 传 不要相信谣传,要相信政府。
2012 船 谁能有幸登上那条救命的大船?
2013 喘 谁能侥幸逃脱并且嘘嘘带喘?
3769 佩 一千七百六十年后,我跟你们约定在这个博客上再次相见。

注:什么是汉字编码表?
1980年,为了使每一个汉字有一个全国统一的代码,我国颁布了第一个汉字编码的国家标准:《信息交换用汉字编码字符集》基本集,简称GB2312,这个字符集是我国中文信息处理技术的基础,也是国内所有汉字系统的统一标准。

换城市工作后住房公积金转移的问题

职工在外市缴纳的住房公积金可以转移到现在城市继续缴存,具体操作方式应首先由录用单位为职工建立个人住房公积金账户(已建立个人住房公积金账户应转入录用单位),然后由外市公积金管理部门将职工在外市缴纳的住房公积金以电汇形式汇入录用单位的账户,最后由录用单位将汇入资金以补缴形式缴入该职工个人住房公积金账户。

2009年11月28日星期六

马德里的蜗居和北京如此不同

    真高兴。我的网友遍布全球,不断有来自澳洲、欧洲和美国的网友找我聊天,原先他们和我聊得最多的当然是房子,但这一次却和马德里的网友聊起了不仅仅只是房子的话题。下面是我们的聊天记录,有删节。

 

Jooni 11:32:50

你是牛刀还是牛刀的代理人啊? 

牛刀 11:33:30

我是本人

Jooni 11:34:31

哈,我没指望你能加我! 

牛刀 11:34:41

哈哈。你在欧洲吗

Jooni 11:34:49

我从零六年开始关注国内的房地长,

Jooni 11:35:00

我在马德里,,,,

Jooni 11:35:10

现在凌成四点半了! 

Jooni 11:38:19

我先介绍一下自己吧!所谓的八零后,江苏出生,四川读书,读一半去了日本,两年后去了丹麦,随男朋友去的,后来生了孩子,回到马德里也就是老公的故乡,现在算是定居马德里了,每次回国就觉得物价一直在涨!北京的房价比马德里还贵了! 感觉自己越来越穷了!

牛刀 11:38:52

你住什么样的房子?

Jooni 11:39:52

我住在马德里北面的colmenar viejo ,一个小村子,今年刚搬过来,哥本哈根的房子出租了,现在租房,因为回来之后这边的房子就一直降价,所以没买。

牛刀 11:40:29

能和我谈谈具体怎么降价吗

Jooni 11:41:01

住的是次新房,三室一厅,带个院子四十平米,不过跟国内的面积没法比,这边的面积是78平米,但是比我北京一个亲戚的一百二十平米差不了多少,不知道国内怎么算面积的!

Jooni 11:41:14

零八年就开始降价的!

牛刀 11:42:04

国内算建筑面积,还有公摊面积,包括电梯间、过道

Jooni 11:43:07

我跟你说一下我的具体的情况好了。零六年我们去哥本哈根的,后来到马德里,因为我老公在市中心靠近中心公园有个小公寓,两室一厅,一百多年了!!准备卖掉!那时候政府部门来丈量,然后开出一张证书,说这个房子目前质量是很好,市场价格20万欧元

牛刀 11:43:33

不贵啊

Jooni 11:43:52

那个房子太小了! 才30平方米,跟香港的差不多! 但是两室一厅!看起来比我以前在苏州租的56平米的差不多!

Jooni 11:44:16

但是人家丈量以后说面积是30点几! 

Jooni 11:44:23

价格我觉得很贵!

牛刀 11:44:51

他们算套内面积

Jooni 11:45:21

我当时还很高兴! 这么小,里面也很旧,卫生间是新的,但是地段在calle castello !!在马德里最贵的地段的最贵的门牌号

Jooni 11:45:35

零六年地我们决定把它卖了 !

Jooni 11:45:55

可是由于去了哥本哈根,没卖成!

Jooni 11:46:16

这一来,我们就惨了! 零七年下半年好像就开始降价了!

牛刀 11:46:15

哦。

Jooni 11:47:01

现在估计也就12万欧元就不错了,不过我们租给了一个朋友,从英国来的,每月550欧元,倒也不错

牛刀 11:46:58

你那个房有物业税吗

Jooni 11:47:26

什么叫物业税?

Jooni 11:48:17

我只知道每月银行上自动交八欧元好像,然后装了电梯,每家集资,按楼层,我们是一楼,也就是国内的二楼,比三楼要便宜一点

Jooni 11:49:12

楼价一直在降价,现在很多楼盘都降了一半了,经济学家还说要降到2013年呢!

Jooni 11:49:29

我就纳闷了! 国内怎么就一直涨! 质量还那么差!

Jooni 11:50:15

哥本哈根的楼房越老越贵,一百多年的房子,比三四十年的要贵,因为据说是石头做的,质量好

牛刀 11:50:16

国内是官商勾结坑害百姓

Jooni 11:51:37

马德里市区,南区最便宜,每米一千多欧元,主要是吉卜赛人和中国小商人多,北区贵,富人区,很多middle class也到马德里之外的很多漂亮的村里买房子住

牛刀 11:52:56

你有没有住房和上班之间的交通问题

Jooni 11:53:04

总体来说,马德里的均价应该在两千五百左右一米,不过他们发达国家市区房子肯定都是旧的,三四十年的,二三十年的,甚至更老的,新房都在郊区开发的多一点

Jooni 11:53:44

没有啊! 开车从我住的小村子,从车库算起,也才二十分钟就到了

牛刀 11:53:54

Jooni 11:53:59

高速路都是免费的,在西班牙

Jooni 11:54:32

做火车也可以,甚至比开车还便宜呢

牛刀 11:54:47

也就是轻轨吧

Jooni 11:55:39

虽然我说是村子,但是不要跟国内的村子比啊!我家出门五分钟就是一个中等大的购物中心,步行十五分钟就是一个大型购物中心,周围的超市酒吧饭店药店就更不用说了

就是train ,他们这边一律train,应该是轻轨吧

牛刀 11:56:02

冒昧的问一句,你的房子是在按揭吗

Jooni 11:56:42

哪个房子?

牛刀 11:56:50

哥本哈根的

Jooni 11:57:04

就是贷款了

Jooni 11:57:14

是的,全额的!

Jooni 11:57:27

他们不需要交什么首付,只看你的工作

牛刀 11:57:36

每月占你家庭收入的多少呢

Jooni 11:58:17

我们刚到就买的,那边用克朗,所以我们也没把欧元换,就交了十万克朗,剩下全部贷款, 我老公一人工作,我在学习

牛刀 11:58:47

哦。具体比例呢?

Jooni 11:58:51

所以应该说占我老公的收入多少,是百分之30左右

牛刀 11:58:57

Jooni 11:59:48

我们当时没孩子,买的比较小,56米,一室一厅在比较贵的北区

Jooni 12:00:13

不到百分之三十好像,加上物业税百分之三十

牛刀 12:00:34

相当于北京80多平米,那是很好的一居
Jooni 12:02:07

主要是税太贵,北欧高税是全世界出名的

Jooni 12:02:38

搞不懂国内怎么丈量的!!

牛刀 12:02:54

也就是租金抵不了月供

Jooni 12:03:33

是啊,现在房价也降了,可以说我们买的时机不好

牛刀 12:04:07

房价的降幅有多大?

Jooni 12:04:21

不过没什么负担,也无所谓。长远看应该还可以。那边租房子特别容易,有房不愁租不出去! 他们那边都喜欢租房子,

Jooni 12:04:32

马德里降幅已经一半了!

牛刀 12:04:45

50%的降幅啊?

Jooni 12:05:06

我们到了马德里找房找了半年,发现房价还在降,就决定不买了

Jooni 12:05:10

是啊

Jooni 12:06:15

我从零八年底就开始找房,零九年2月正式搬过来继续找,最后放弃了!很多房子降了一半了。我们6月底租了房子

Jooni 12:07:55

可是你知道不,这边你失业了,政府每月发你钱的,就是unemployment benefit

牛刀 12:08:12

哦。这个消息不要让中国炒楼的知道了,他们会去抄底啊。哈哈

牛刀 12:09:06

失业救济金是吗?能够生活吗

Jooni 12:09:22

生孩子,哥本哈根是按月发给你孩子,每个月180欧元左右一直到孩子十八岁。马德里是一次性2500欧元,三个孩子发的更多,母亲上班的每月发一百欧元,直到孩子三周岁

牛刀 12:09:56

那真好 

Jooni 12:10:09

在丹麦,失业救济金等于你工资的百分之七八十好像,马德里这边我还不太清楚,不过肯定够生活了,

Jooni 12:10:20

所以我觉得国内老百姓真凄惨!

牛刀 12:11:08

我们想为老百姓争取一点权利都很难

Jooni 12:11:25

丹麦如果你被裁员了,公司要提前一两个月通知你,并且多发给你三个月的工资!

Jooni 12:12:01

国内呢! 公司炒你,你就走人,哪里还有给你额外三个月薪水的??

Jooni 12:12:41

而且他们每周上四天半的班,周五下午就不上班了! 想让他们加班,门都没有!

Jooni 12:14:48

以前我老公的一个同事,丹麦本地人,下午三点半左右,他的老板来对正在跟同事聊天的他说-----我有事跟你商量一下好吗? 他说不好意思,我要下班了! 我赶时间! 结果收拾东西就走人了! 你相信吗??在国内这个可能吗??这可是我老公亲眼看见的,回家跟我说的。工人就是拽! 老板他们也不放眼里

牛刀 12:15:59

因为他不怕被炒,老板和工人是对等的

Jooni 12:16:15

西班牙政府鼓励买车,你买车的话,政府给你两千欧元! 

Jooni 12:17:08

这边的买房贷款利息才百分之一点六多一点

Jooni 12:17:19

国内是多少啊??三十年的

牛刀 12:17:50

国内啊。5.7%的基准利率,如果30年利率更高。30年的7成房贷等于按揭100万供完是200万,利息基本是一倍。

 

哇哇......  这么高!
Jooni 12:19:01
可能存款利息也高....这边存款基本没什么利息倒是真的
牛刀 12:19:17
是啊。今年政府为了烘托房价,给与70%利率优惠
Jooni 12:19:45
我哥哥在南京,你知道不??

牛刀 12:20:26

Jooni 12:20:51

他跟我说明年一定要买房子,要存钱! 

Jooni 12:21:00

我说你千万别买,去看看牛刀!

Jooni 12:21:10

他偏不听!

Jooni 12:21:28

我说你买可以,到时候别哭喊着跟我借钱! 

牛刀 12:21:25

让他等央行回收流动性后再买,中国房价会有一个暴跌的过程

Jooni 12:22:52

他说反正都是死路一条,通货膨胀也是死,不如把钱拿来买房了,他说他有三十万的什么公积金

牛刀 12:23:06

住房公积金

Jooni 12:23:45

我跟他说,等2013年买,涨价的话我赔他双倍差价! 

牛刀 12:24:22

中国人都为房子疯狂了,他们不信

Jooni 12:25:04

是啊你们几个说降价说了很久了,可是昨天凤凰卫视什么人民大学的还研究说明年房价不会回落

牛刀 12:25:39

都是政府逼的。人民大学那帮学究不懂国情,不懂经济  

Jooni 12:27:40

我觉得中国人就是死要面子! 面子比什么都重要. 这种作风也带进里经济里面去,连高层领导也要对外死要面子,死撑着为了那个GDP的数字好看而死撑房价

Jooni 12:28:23

气球已经吹的很大了,快到极限了,他们还是要吹吹,因为面子好看

牛刀 12:28:24

埋怨没用啊。关键是缺乏民主

牛刀 12:29:07

政府可以不理睬老百姓

Jooni 12:29:12

民主怎么能有呢??连个出版言论自由都没有

Jooni 12:29:53

水能载舟,亦可覆舟他们忘了!   

Jooni 12:32:03

政府一方面拼命想继续蒙蔽老百姓,一方面打开国门搞改革开放,信息开放,最后总会觉得力不从心而出了大错的

Jooni 12:35:32

奇怪,你怎么这么有觉悟? 你也到过万恶的资本主义发达国家居住过??

牛刀 12:35:46

没有

Jooni 12:36:17

不说了,我去睡觉了! 下次聊。 有欧洲甚至日本的生活方面的问题可以问我。我不一定都知道,但是多少知道一点!

Jooni 12:37:15

还有,我发现马德里的物价很便宜啊! 去年回国发现北京的物价太贵了!我儿子穿的纸尿裤吃的奶粉(还是有毒的)什么的比欧洲还贵!!




网易历六年耗亿资打造,3D国韵网游《天下贰》,免费领光盘

2009年11月27日星期五

中国一直在“补贴”西方

前些日子,我翻阅一份英国报纸,看到一幅大照片,画面是相当于伦敦"王府井"的牛津街的商场购物人流,照片说明称英国消费者重返商店显示金融危机可能即将触底云云,但仔细端详,我却发现人流中有许多华人模样的脸庞,再认真研究,更觉得这些人的穿着打扮像是中国大陆人。

后来,我先后与几位英国华裔朋友谈起此事,他们一口咬定:"没错,这些人肯定是从中国大陆来的!"他们还补充说,他们在中国的朋友熟人中,就有许多人借出差或旅游之机,转战伦敦各大商场,为英国经济走出衰退"做贡献"。

最近读了中国财经评论家时寒冰的博客,发现中国消费者也在为美国经济重归繁荣"做贡献"。时寒冰最近去了一趟美国,他在博客中写道,他在洛杉矶曾经"遇到一群中国去的游客,购物之多可用疯狂来形容。在一个卖箱包的商店,几乎每个从中国去的人都买两个以上的箱子,因为,他们要装下所买的商品。他们一边挑选商品一边惊诧着:'这里的东西怎么会比国内便宜这么多?!'我可以听出他们心中的不平衡。"

至于那些没有机会公款出国或没有实力自费旅游的普通中国人,知道这一事实后可能心里就会更不平衡了:因为他们只能无奈地接受中国物价的现实。

乍一听,你会觉得不可思议:尽管如今中国人收入不断提升,但中国人均GDP毕竟远远低于美英等西方富国,怎么能够承受比伦敦、洛杉矶还高的物价呢?其实,如果不是我本人今年也在北京工作、生活了几个月,因而对北京物价有了亲身体会的话,我也不会相信这是个事实。

别的地方我不敢说,仅仅对比一下我长期生活过的北京和伦敦。在衣、食、住、行四个方面,北京至少在"衣"、"住"两大方面比伦敦贵,至于"行",北京的公共交通费用的确要比伦敦便宜,但在个人购车花销上,北京却比伦敦贵得多。

我这里说的"贵",并不是相对的"贵"(即某商品价格在居民平均收入中所占的比例),而是绝对的"贵",也就是说,如果英镑与人民币目前的兑换率是1:12,那么,在北京,房价和租房租金(至少在三环以内)、国际名车价格以及正规商场多数中档以上服装的价格,即使除以12,也比伦敦贵。

"食"的情况比较复杂,一般而言,北京超市的蔬菜水果、柴米油盐,如果除以12,要比伦敦便宜,但在相对价格上,则比伦敦贵或不相上下;北京有很多服务于外来打工者的廉价小餐馆,无论是绝对价格,还是相对价格,都比伦敦便宜,但稍微上点儿档次的餐馆,相对价格就比伦敦贵,而高档餐馆的价格,绝对价格都比伦敦贵。

更为匪夷所思的是,北京某些日常用品的价格,绝对价格也比伦敦贵。例如,伦敦超市洗发水的价格通常是一英镑左右,但北京超市洗发水通常都要卖15元人民币以上,名牌洗发水则在30元人民币以上。

时寒冰在其博客中如此描述他最近的美国之行:"到美国后才发现,美国除人工服务之外,绝大部分商品的价格(绝对价格)是低于中国的,有些商品的价差之大,有点瞠目结舌。"他对比了中国(大概指他居住的上海)和美国洛杉矶的物价:在中国一套卖3万元左右的Armani(阿玛尼)西服,在洛杉矶用四分之一甚至五分之一的钱就可以买到;宝马Z4的价格,洛杉矶的广告上标注的报价为29881美元,中国的价格,听一位朋友介绍,大致在50万元——80万元人民币之间……

时寒冰说的这些国际名牌商品,大概由于进口到中国要征收很高的关税,再加上运费等等,所以,在中国卖得比西方贵并不令人吃惊(尽管贵四、五倍仍然有些不甚合理);但那些纯属中国制造的商品,在中国卖得居然也比西方贵,就太令人费解了。

例如,美国一位研究中国经济的华裔学者就曾吃惊地发现,他在美国超市沃尔玛买到的中国大陆生产的质量不错的登山鞋,价格只有2.99美元,后来,他给一位中国经济官员打电话,讲了此事,对方不信,说在中国大陆出售的登山鞋,"三百块人民币买的还是烂牌子,好一点的都要一千多块。"

我今年上半年住在北京,下半年住在伦敦,这种对比更鲜明、更强烈、更真实:许多同样类型的中国产品,在英国的售价确实低于中国。但为什么会出现这种怪事?

那位美国华裔学者也想知道其中的原因。他询问了一位在中国大陆投资的台湾商人,这位台湾人的解释是:"中国大陆到处是欺诈,贸易商之间拖欠货款比比皆是,生产商只有提高出厂价格才能保障自己的利润;而出口就不同了,只要你和外商签订了合约,基本上你就不用担心,美国进口商给你信用状,你可以去银行抵押贷款,生产之后你发货,钱就到手了,没有麻烦,钱少赚点,但风险也小。"

对这个解释,这位美国华裔学者相信确有其理,但仍感并非全部原因,于是,他又查阅了一些中国大陆的商业流通资料,并通过其它渠道进行了调查研究,结果发现了一个更让他吃惊的事实:从中国大陆运货到美国的运费,竟然比从广州运货到北京还便宜!原因何在?还是腐败:由于中国大陆铁路货运超负荷,流通商要想申请一个车皮的指标,运费之外的额外费用竟然高达五千到五万人民币之间;高速公路运输也不便宜,中国大陆媒体引述一位常年从广州送货到北京的司机的话说,广州到北京的高速公路,一路的过路费就有1400元人民币,除此以外,还要有大约有7000元人民币的额外费用,这个费用不是汽油费,也不是汽车修理费,而是无缘由的罚款和敲诈。

这些因腐败所造成的成本,自然也都被摊到产品价格中去了,最后由消费者埋单。看来,腐败之害,不仅体现在政治方面,也体现在经济方面。

中国政府这些年已经意识到中国经济发展模式的弊病,所以常讲要提振内需,但效果不大,中国至今依然是一个主要依靠投资和出口拉动的经济体。中国的内需为什么提不上来?原因很多,包括缺乏医疗、养老等社会保障,但相对西方来说中国物价过高,至少也是原因之一。

而西方这么多年来通货膨胀一直保持着较低的水平,至少在那些有真知灼见的西方学者看来,是得益于来自中国的廉价商品。中国一直在为西方打工,而且是廉价打工。

上个星期,我在伦敦参加了一次新书发行讲座。这本新书的作者是两位在多年在中国经商的英国人,书名是:《China
Counting》,序言中有一句话让我深以为然:"西方舆论倾向于认为,中国一直在免费乘坐西方的消费列车,但真实情况是,中国一直在补贴西方。"

然而,即使西方的政客们意识到这一真相,但面对某些利益集团的压力,他们或者出于选票得失的短期政治考虑,或者出于保护本国制造业的短视经济理由,也会筑起"反倾销"关税的大墙,挡住来自中国的"补贴"。欧美最新一波针对中国进口商品的贸易保护主义浪潮即为明证。

嗨,好一个里外不讨好、两头不受待见的"中国补贴"。

感动世界的中国男人

在以险著称的华山上有这样的一群人,他们背负百十斤的货物,在陡峭、险峻的山路上艰难攀爬,来换取维持整个家庭生计的二、三十元。他们每个人的背上都压着一座沉重的大山,在这群挑山的人当中,有一个人所背负的比所有人的都要沉重,他就是独臂挑夫何天武。

记者近日专程前往华山采访了何天武,并记录了他一天的生活。在老何住的小屋内,他接受了采访,点燃一只香烟,便开始给我们讲述他的经历。


艰辛的人生
1962年,何天武出生在陕西省汉中市镇巴县长岭镇的一个小山村里。1989年,他的妻子在生下小儿子后便因风湿性心脏病而撒手人寰。留给何天武的只是两个幼小的儿子和12000元的外债。在那个时候,12000元对城市里的一个普通家庭来说都是个天文数字,何况何天武只是一个贫困山区的农民。

开始的时候,何天武只是在村子附近打零工,修路和维护当地火车站的轨道。但工钱太低了。因为他不光要养活两个幼小的孩子和年长的父母,还要偿还巨额的外债。

"我给自己说,必须要出去打工,否则这个家就撑不下去了。我那时侯很相信自己,觉得出去打工一定能挣下钱。哪怕下多大的苦都不要紧,咱是农村人,不怕吃苦。但是当时很穷啊,连出去的路费都没有。我跑了三十里路,上山十五里下山十五里,都没有人肯借给我钱。他们不相信我,他们不相信我出去能挣下钱。"

1990年的时候,何天武在外面打了半年工,但是依旧没有挣下钱,沉重的生活负担压的这位镇巴汉子喘不过气。

"家里都是山地,种地也打不下粮食,我一琢磨这不行啊,靠种地什么时候才能把债还完,能把孩子拉扯大?还得出去。"

1992年3月,把两个孩子托付给父母后,何天武跟着一位老乡去了邻省的一个煤矿,在那里下井干活。那个时候,老何只有一个念头,那就是"一定要挣下钱"。在7月30日那天,一位工友有事不能上工,老何决定去顶班。"当时只想着多干点活就能多挣点钱",却不知道灾难已经向他慢慢逼来。

"我们都是下苦的,也不懂,那个绞车的钢丝估计是用的时间长了,磨损了,不知道怎么的就突然断了,猛然一下就把我拉到了顶架上,然后又重重地摔了下来。我醒来的时候已经是两天以后了,就发现自己的一条胳膊没了。"

出事以后,黑心的矿主只给了老何4200元就让他赶紧走人。

"当时我想我这个样子到哪儿会有人要我啊,所以我不愿意走,想叫老板把我留下来,哪怕扫地看门都行。但是老板不答应,让我赶紧拿着钱走,不然就弄了我。矿上出了这种事情人家把你弄了就弄了,家属来也就是给七、八千块钱也就打发了。"老何说的"弄"就是指杀了。"我一想这不行啊,我还得生存下去,家里两个儿子和父母还要靠我养活。丢了一只胳膊但是不能把命也丢了,就拿了那四千二百块钱走了。"

"我把五十和一百的缝在了内裤里头,总共是两千二百块钱。剩下的两千块是十块一张的我装在了包里,结果还没到火车站就被小偷把包划开把钱偷走了。我就觉得出来走到哪都太害怕了,没有一点安全感。出来一次失败一次,关键是我觉得我付出了那么多心血、汗水都没有回报。我那时就只向奔回家了。"

带着失去了一只胳膊的身体和那两千二百元钱,老何又回到了那个贫穷的小山村。

"村子附近有条河,我平时白天睡觉,晚上就出来用锨在那一锨一锨的平地,用了两个月时间平出了一亩多不到二亩地,种了点苞谷。我主要是想通过平地来锻炼一下自己的身体,为以后出去打工做点基础,要不然我这个样子出去肯定没人要。"

然而,就在老何辛辛苦苦种下的玉米快要收获的时候,一场水灾又将这一切毁掉了。不甘心失败的他第二年的时候又在这里继续种了些粮食,但是这一次毁掉希望的是人。

"村子里的人看我在这种地,两边的邻家便东占一块,西占一块,欺负的我实在是干不下去了。"

但是家里的负担却越来越重,两个孩子因为交不起学费已经辍学在家。

"我去找村里领导,意思是我是残疾人,看能不能得到些补贴。因为我知道国家对残疾人有补贴,但是村领导给我说他们要商量商量。然后我又去找县里,县里的人说这事应该由村里处理。"

就这样,老何被当成皮球在村县两级踢来踢去。要强的他暗下决心,一定要靠自己来养活这个家。在这期间,老何曾经开过一段时间的商店,但是来店里的人大多数都是赊帐,商店开了没多长时间就关门了,并且又欠下了一些外债。

于是一些亲戚朋友给老何出主意,让他利用残疾人的身份去乞讨,并且说"那么多四肢健全的人都在乞讨,你一个残疾人去乞讨也没什么。"

"人格要是丢了,买不回来!"老何断然拒绝了这个建议。

1996年,他在另一个老乡的介绍下又来到了一个金矿,但是结果依旧是挣不下钱。工资要么被拖欠,要么被克扣。

1999年的时候,老何怀揣着二百元钱来到了上海,因为他听说在这里可以挣下钱。

"当时我到上海一看,这城市我肯定能混下去随便都混下去了。当时我抱着最大的希望,至少在这里我能找个适合我干的活,能在这里待下去了。但是没想到去了几个建筑工地都没找下活,我还专门给他们演示了一下,我用锨铲土,一锨一锨地甩过去。但是人家随便找了个借口就把我打发了。"

为了节省开支,老何在上海白天找活,晚上就在路边的绿化带中过夜。由于害怕被警察发现送到收容站,他不得不提心吊胆地躲在冬青树后面。

"后来实在找不下活了我就去了一个残疾人联合会,我没想让他们给我钱什么的,我只想让他们帮我联系一个我力所能及的活来干。但是没想到的是里面的人一见我就挥手给我说'出去、出去'"。

在上海呆了四十多天,遭受了无数白眼和呵斥的老何始终没有找下工作,他有了轻生的念头,想跳到黄浦江里一死了之。但是一想到家人,一想到两个未成年的孩子和年迈的父母,他徘徊许久又打消了这个念头。

"我想给父母尽孝心,但是还没能尽。想给儿子尽义务,也没能尽。要是这样做了上对不起父母,下对不起儿子。"

我是被逼上华山
走投无路的老何在2000年6月14日的时候来到了华山。

"我记得特别清楚,2000年6月14号我到了华山脚下,第二天我就往山上背东西了。当时也害怕啊,哪想到还有这么陡壁绝峭的山峰啊?我是被逼上华山的,不管承负多重的压力,只能走这条路了,再没有别的选择了。"于是他花10元钱办个挑山工的进山证,60元一月的房租在山脚租了间小房。

第一次上华山的老何背了五十斤的货物,交货地是华山北峰。

"特别的累,但是休息也不敢休息,因为一休息腿就发软,只能咬着牙往上走,手把铁链死死地抓着,一步一步往上走。"

当老何把五十斤的货物背上山的时候已经是下午的四点半,他走了整整一天。

"那时货是三毛钱一斤,我那天背了五十斤,挣了十五块钱,虽然特别的累,但是我心里乐滋滋的,高心。十五块钱不多,但是我觉得有希望了,能在这继续干下去了,我觉得自己站起来了。"老何说这话的时候很开心。

第二天老何背了八十斤的货,挣了二十四块钱,比第一天多了九块。

老何告诉记者:"这钱虽然来的辛苦,但是有安全感,心里塌实。把货一交,人家老板给我把票一签,下山就能领现钱,不会拖欠。"

从西山门也就是玉泉院到北峰,游客们要走五、六个小时的路程挑夫们三、四个小时就走完了,一斤货物是三毛钱。如果是到华山最高峰南峰,游客需要走一整天的时间,而挑夫们走六、七个小时就到了,一斤货是四毛钱。

"没过多长时间我就能背一百斤的水泥到西峰了,能挣三十块钱。有时货多的话一天可以背两趟。到两千年九月的时候,华山东西南北中峰我都上去了。"老何一脸的自豪。

来到华山的这半年,老何总共给家里寄去了800元钱。但是由于冬季活少,过年的时侯老何并没有攒下钱。

"过年的时候我没有钱,我跟一个买豆腐的关系好,就跟他借了一百块钱,给家里寄了六十,我自己留了四十块钱过年。我去银行寄钱的时候人家还看不起我,但是我不管这些,我要寄钱回家让家里人过年。"

老何在华山每天平均能挣二、三十块钱,每月要上二十七、八趟山。除去他的房租和生活花销,每月他都要寄二百元回家。农耕播种的时候,他会寄三百元回去让家里买化肥。

华山上总共有3999个台阶,从玉泉院到南峰有十多公里,其间有"华山第一关"五里关,"华山第一险"千尺幢,但是老何就在这样的路上已经整整走了8个年头,走了两千六百多个来回。

2001年的时候,老何辍学在家的12岁的小儿子到华山来看他,天真的孩子被华山险峻的山峰惊呆了,便问他是怎么走上去的,老何回答"我是一步一步走上去的。"

"我给他说我挣钱供他上学,但是当时我没有挣下那么多钱,他要跟我上山,我就带他去了,他还背了一箱方便面,从山上下来后他就哭了,从那以后他好象一下子就懂事了。"

本报记者8月11日去采访何天武的时候,得知他们几个挑夫从今年初开始给山上的一家饭店做固定挑夫,饭店给他们办了乘坐索道缆车的证件,现在他们只用把货物放在缆车上,然后再从北峰背到五云峰就行了。于是记者和他约好第二天早上在北峰索道站会合。

12号早上9点多的时候,老何他们到了索道站,在别的挑夫的帮助下,老何把五十斤盐、一箱二十斤的饮料、一把火钳和一大包卫生筷装进了背篓,这些货物总共有一百二十斤左右。记者试着用手提了一下背篓,但也只是勉强提离地面。而老何要背着这些货物走一公里多的上山路,其中包括七十多度,两侧为悬崖的险道苍龙岭。

走在路上,老何背着的背篓"吱吱呀呀"响个不停,这个背篓老何已经用了四年了。每走一段,老何便要停下来休息一会,他手里那只T型的拐棍放在背后支撑着背篓。天气不是很热,但是老何的汗水仍然不断地流下来,没走多远他的衣服就已经全都湿了。

这时,原本开朗健谈的老何话也不多了,他要注意精力来把握重心。细心的游客发现这个独特的挑夫后在惊讶之余都会打听货物的重量,有的还善意地劝老何少背一点。而老何也不断提醒身边的游客注意安全。在攀爬苍龙岭的时候,老何的身子几乎都要贴在台阶上了。

记者看到,虽然老何情况特殊,但是他背负的重量和行走的速度一点也不比其他挑夫差,一同上路,一同交货。用时大概在一个多小时。交完货后,老何他们便在这个饭店坐下歇息。饭店给他们管一顿中午饭,老何饭量不是很好,只吃了两个馒头夹菜。

"我们以前从北峰把货背到这里(五云峰)是两毛钱一斤,7月1号的时候我在这饭店门口遇到七、八个人,其中一个问我背一斤多钱,我也不认识他们,就跟他说了,他说这确实是有点低了,后来我才知道他们是省上领导。然后7月3号的时候我们的工钱就每斤涨了一毛,现在是三毛一斤了。"

"你莫非想当暴发户?"
老何告诉本报记者,2004年,一位游客贾先生(老何至始至终都给记者强调是贾老师,在老何心里,"老师"是个很崇高的称呼)来华山游玩的时候偶遇了他,了解了老何的情况后很受感动,于是就把他的照片和故事发到了网上。引起了一些网友和媒体的关注。

陕西电视台,凤凰卫视,北京电视台,四川卫视,上海电视台,新京报,华商报,落杉基时报等媒体相继对他做了报道。

"我开始接受媒体采访的时候很紧张,说话还打官腔,于是就喝了两瓶老白干,这才慢慢才放松下来。"老何有些不好意思。

凤凰卫视的《冷暖人生》在2006年5月30日播出了老何和其他挑夫的节目。反响很大,收视率当天在电视台排第三,热线电话几乎要被观众打爆了。很多人为他面对艰难困苦所表现出的勇气深深震撼,一些读者还在网上发帖称赞"何天武才是真正意义上的男人、伟丈夫。"并表示要解囊资助老何。

其实在凤凰卫视采访老何的时候,他就已经得了比较严重的疝气。节目播出后,北京某著名医院立即表示愿免费为老何治疗。在北京治疗期间,老何又接受了一些媒体的采访。

2007年4月,《冷暖人生》凭着《独臂挑夫何天武》这期节目在美国芝加哥电影节上获得了"美国芝加哥电影节电视记录片艺术与人文贡献银雨果奖。"

当本报记者把这个消息告诉老何的时候,他说他还不知道呢。"那些记者老师都是有身份的人,都忙,我也不好意思给人家打电话。"

"社会上有很多好心人都帮助了我,我现在已经把外债还完了,大儿子已经成家了,小儿子在好心人的帮助下现在在广东一个学校学模具加工。"

老何的小儿子辍学后曾经在一个煤矿里打工,那时才16岁。西安铁路信号厂一位李先生专门打电话过问了此事,责备老何"你已经在矿上吃了亏,怎么还敢让儿子去那种地方干活"。然后就帮老何给小儿子联系了一个学校。

"也有很多好心人要给我介绍工作,但是我不好意思去啊,我没什么文化,去了万一干不了活多不好,还给人家添麻烦。社会上那么多好心人关心我,我不能对不起他们,我只有在这好好干活,尽量少麻烦大家。"
但是老何也有他的烦心事,"凤凰卫视的《冷暖人生》播出以后,06年7月30号那天,华山旅游公司的一个人就来找我,他说电视上把我的节目放了,肯定会有好心人给我捐钱,他说要把我的身份证号抄去给我到银行办个帐号。过后我想想这事情有点不对头,就给凤凰卫视的制片人朱卫民老师打了个电话,朱老师叫我去别的银行另外开了个帐号。然后过了几天那个旅游公司的人就给我打电话,他说'你莫非要当暴发户?我给你办的帐号你为什么不用?为什么要自己去办个帐号?'然后又过了没多长时间,这里的出租车司机、一起干活的挑夫都问我'人家给你寄了五万美金和十万港币,你都发了怎么还在这下苦啊?'"说起这事老何很无奈,"我确实是没有收到嘛,好心人给我捐的钱我一笔一笔都记在本子上的,花在哪里我也记着呢。"
和两年前电视里的老何相比,现在他看上去似乎精神了许多,但是头发却有些稀疏了,接受我们的采访时也不怎么紧张了,他几乎是一直微笑着给我们讲述他的经历,平淡的就像是在讲一个发生在别人身上的故事。
"四川地震以后,我看别人都在捐钱,我就给我父亲说我这月不给家里寄钱了,给灾区捐200元,我父亲很支持我这个决定。我有困难了社会上那么多好心人都帮助我,我没多大能力回报他们,捐200元钱就当是个心意吧。"
老何说他准备在华山再干上十年,然后回家好好孝敬父母。
"我喜欢华山,我登上山峰的时候呼吸着新鲜的空气,我心里真的好舒畅,我愿意在这里呆下去,因为华山接纳了我,我的付出有了回报!"
读完这个故事后,我想到了另外一个讲述中国男人的故事《盲井》,这个电影是王宝强主演的,这个角色是王宝强的第一部电影作品。冯小刚导演正是在这部电影中看了王宝强的表现,决定让他演《天下无贼》的。

2009年11月26日星期四

connect超时控制

1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用connect函数
2.调用connect,正常情况下,因为TCP三次握手需要一些时间;而非阻塞调用只要不能立即完成就会返回错误,所以这里会返回EINPROGRESS,表示在建立连接但还没有完成。
3.在读套接口描述符集(fd_set rset)和写套接口描述符集(fd_set
wset)中将当前套接口置位(用FD_ZERO()、FD_SET()宏),并设置好超时时间(struct
timeval *timeout)
4.调用select( socket, &rset, &wset, NULL, timeout )
返回0表示connect超时
如果你设置的超时时间大于75秒就没有必要这样做了,因为内核中对connect有超时限制就是75秒。

网络编程中socket的分量我想大家都很清楚了,socket也就是套接口,在套接口编程中,提到超时的概念,我们一下子就能想到3个:发送超时,接收
超时,以及select超时(注:
select函数并不是只用于套接口的,但是套接口编程中用的比较多),在connect到目标主机的时候,这个超时是不由我们来设置的。不过正常情况下
这个超时都很长,并且connect又是一个阻塞方法,一个主机不能连接,等着connect返回还能忍受,你的程序要是要试图连接多个主机,恐怕遇到多
个不能连接的主机的时候,会塞得你受不了的。我也废话少说,先说说我的方法,如果你觉得你已掌握这种方法,你就不用再看下去了,如果你还不了解,我愿意与
你分享。本文是已在Linux下的程序为例子,不过拿到Windows中方法也是一样,无非是换几个函数名字罢了。
Linux中要给connect设置超时,应该是有两种方法的。一种是该系统的一些参数,这个方法我不讲,因为我讲不清楚:P,它也不是编程实现的。另外一种方法就是变相的实现connect的超时,我要讲的就是这个方法,原理上是这样的:
1.建立socket
2.将该socket设置为非阻塞模式
3.调用connect()
4.使用select()检查该socket描述符是否可写(注意,是可写)
5.根据select()返回的结果判断connect()结果
6.将socket设置为阻塞模式(如果你的程序不需要用阻塞模式的,这步就省了,不过一般情况下都是用阻塞模式的,这样也容易管理)
如果你对网络编程很熟悉的话,其实我一说出这个过程你就知道怎么写你的程序了,下面给出我写的一段程序,仅供参考。
/******************************
* Time out for connect()
* Write by Kerl W
******************************/
#include <sys/socket.h>
#include <sys/types.h>
#define TIME_OUT_TIME 20 //connect超时时间20秒
int main(int argc , char **argv)
{
………………
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0) exit(1);
struct sockaddr_in serv_addr;
………//以服务器地址填充结构serv_addr
int error=-1, len;
len = sizeof(int);
timeval tm;
fd_set set;
unsigned long ul = 1;
ioctl(sockfd, FIONBIO, &ul); //设置为非阻塞模式
bool ret = false;
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) ==
-1)
{
tm.tv_set = TIME_OUT_TIME;
tm.tv_uset = 0;
FD_ZERO(&set);
FD_SET(sockfd, &set);
if( select(sockfd+1, NULL, &set, NULL, &tm) > 0)
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
if(error == 0) ret = true;
else ret = false;
} else ret = false;
}
else ret = true;
ul = 0;
ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式
if(!ret)
{
close( sockfd );
fprintf(stderr , "Cannot Connect the server!n");
return;
}
fprintf( stderr , "Connected!n");
//下面还可以进行发包收包操作
……………
}

以上代码片段,仅供参考,也是为初学者提供一些提示,主要用到的几个函数,select,
ioctl,
getsockopt都可以找到相关资料,具体用法我这里就不赘述了,你只需要在linux中轻轻的敲一个man
<函数名>就能够看到它的用法。
此外我需要说明的几点是,虽然我们用ioctl把套接口设置为非阻塞模式,不过select本身是阻塞的,阻塞的时间就是其超时的时间由调用select
的时候的最后一个参数timeval类型的变量指针指向的timeval结构变量来决定的,timeval结构由一个表示秒数的和一个表示微秒数
(long类型)的成员组成,一般我们设置了秒数就行了,把微妙数设为0(注:1秒等于100万微秒)。而select函数另一个值得一提的参数就是上面
我们用到的fd_set类型的变量指针。调用之前,这个变量里面存了要用select来检查的描述符,调用之后,针对上面的程序这里面是可写的描述符,我
们可以用宏FD_ISSET来检查某个描述符是否在其中。由于我这里只有一个套接口描述符,我就没有使用FD_ISSET宏来检查调用select之后这
个sockfd是否在set里面,其实是需要加上这个判断的。不过我用了getsockopt来检查,这样才可以判断出这个套接口是否是真的连接上了,因
为我们只是变相的用select来检查它是否连接上了,实际上select检查的是它是否可写,而对于可写,是针对以下三种条件任一条件满足时都表示可写
的:
1)套接口发送缓冲区中的可用控件字节数大于等于套接口发送缓冲区低潮限度的当前值,且或者i)套接口已连接,或者ii)套接口不要求连接(UDP方式的)
2)连接的写这一半关闭。
3)有一个套接口错误待处理。
这样,我们就需要用getsockopt函数来获取套接口目前的一些信息来判断是否真的是连接上了,没有连接上的时候还能给出发生了什么错误,当然我程序中并没有标出那么多状态,只是简单的表示可连接/不可连接。
下面我来谈谈对这个程序测试的结果。我针对3种情形做了测试:
1. 目标机器网络正常的情况
可以连接到目标主机,并能成功以阻塞方式进行发包收包作业。
2. 目标机器网络断开的情况
在等待设置的超时时间(上面的程序中为20秒)后,显示目标主机不能连接。
3. 程序运行前断开目标机器网络,超时时间内,恢复目标机器的网络
在恢复目标主机网络连接之前,程序一只等待,恢复目标主机后,程序显示连接目标主机成功,并能成功以阻塞方式进行发包收包作业。
以上各种情况的测试结果表明,这种设置connect超时的方法是完全可行的。我自己是把这种设置了超时的connect封装到了自己的类库,用在一套监
控系统中,到目前为止,运行还算正常。这种编程实现的connect超时比起修改系统参数的那种方法的有点就在于它只用于你的程序之中而不影响系统。


---------------------------------------------------------------------------------------------------------------------

原来我们实现connect()超时基本上都使用unix网络编程一书的非阻塞方式(connect_nonb),今天在网上看到一篇文章,觉得很有意思,转载如下:

读Linux内核源码的时候偶然发现其connect的超时参数竟然和用SO_SNDTIMO操作的参数一致:

File: net/ipv4/af_inet.c 559 timeo = sock_sndtimeo(sk, flags &
O_NONBLOCK);
560
561 if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
562 /* Error code is set above */
563 if (!timeo || !inet_wait_for_connect(sk, timeo))
564 goto out;
565
566 err = sock_intr_errno(timeo);
567 if (signal_pending(current))
568 goto out;
569 }


这意味着:在Linux平台下,可以通过在connect之前设置SO_SNDTIMO来达到控制连接超时的目的。简单的写了份测试代码:

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>

int main(int argc, char *argv[])
{
int fd;
struct sockaddr_in addr;
struct timeval timeo = {3, 0};
socklen_t len = sizeof(timeo);

fd = socket(AF_INET, SOCK_STREAM, 0);
if (argc == 4)
timeo.tv_sec = atoi(argv[3]);
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, len);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(argv[1]);
addr.sin_port = htons(atoi(argv[2]));
if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
if (errno == EINPROGRESS) {
fprintf(stderr, "timeout\n");
return -1;
}
perror("connect");
return 0;
}
printf("connected\n");

return 0;
}