“我将给他一个无法拒绝的理由……”恐怕世界上在没有哪个演员能够演绎《教父》中,马龙·白兰度的这句对白,“教父”在人们心中所留下难以泯灭的印象是男人、是男人的家庭和男人的爱。
“不要憎恨你的敌人,否则你将做出错误的判断。”
,“让朋友低估你的优点,让敌人高估你的缺点……”
不照顾家人的男人,根本算不上是个男人!”
“不要憎恨你的敌人,否则你将做出错误的判断。”
,“让朋友低估你的优点,让敌人高估你的缺点……”
不照顾家人的男人,根本算不上是个男人!”
史玉柱成功是必然的
最近关注史玉柱的故事,突然冒出一个想法,撇开对史玉柱的道德评判,单纯从商业角度看,史玉柱在财富上的成功是必然的。并且当下对史玉柱的道德评判显然有点过分,比如,奢侈品的效果和脑白金的效果差不多,为什么没那么多人批评奢侈品?(我猜一个理由是,传媒从机构到个人都被奢侈品“收买”了)。与其他网游比起来,《征途》也没有过分到哪儿去,其实对《征途》的批评很大比例来自业内,认为它破坏了行业惯例。
史玉柱必然成功在两点,一是他抓住了有大众消费基础的需求,深刻理解消费者的心理特性,并以最简单的方式满足他们的需求。《三联生活周刊》对史玉柱几个产品的一个总结特别到位:“脑黄金”、“脑白金”卖健康;“黄金搭档”卖聪明;《征途》卖权力与欲望。我个人的体验是,春节去买礼物,选择实在太少,差一点就偷懒买上七八盒脑白金。
营销做的是高端拉动,史玉柱同样擅长做渠道驱动,他的成功的第二个因素正是渠道。史玉柱认为网游的主要市场不在北京上海广州这些金字塔尖,而在农村。无论从脑白金,还是做征途,史玉柱都建立起直达县一级的渠道。史的渠道模式是,把市场销售的工资压得很低,但提成高得惊人。他的销售团队,是完全由赚钱所驱动的。
有个细节说明了史在商业上的智慧。我们在西方的营销案例中无数次看到区域性试销,但在中国中,这相当少见。脑白金最早是在江阴试销的,送了价值10万的产品,看到效果之后,再各地逐渐铺开。
在宝洁和可口可乐的中国实践中,我们也看到有直到最基层的渠道,那是它们国际渠道模式在中国的复制,我们经常能看到宝洁、可口可乐的各类前营销人员写的类似经历。不过它们似乎没有在中国搞试销。它们也没有像史玉柱那样根据中国的实际情形改造渠道,比如高提成,而仍然是职业发展加金钱收入的混合模式。
最近关注史玉柱的故事,突然冒出一个想法,撇开对史玉柱的道德评判,单纯从商业角度看,史玉柱在财富上的成功是必然的。并且当下对史玉柱的道德评判显然有点过分,比如,奢侈品的效果和脑白金的效果差不多,为什么没那么多人批评奢侈品?(我猜一个理由是,传媒从机构到个人都被奢侈品“收买”了)。与其他网游比起来,《征途》也没有过分到哪儿去,其实对《征途》的批评很大比例来自业内,认为它破坏了行业惯例。
史玉柱必然成功在两点,一是他抓住了有大众消费基础的需求,深刻理解消费者的心理特性,并以最简单的方式满足他们的需求。《三联生活周刊》对史玉柱几个产品的一个总结特别到位:“脑黄金”、“脑白金”卖健康;“黄金搭档”卖聪明;《征途》卖权力与欲望。我个人的体验是,春节去买礼物,选择实在太少,差一点就偷懒买上七八盒脑白金。
营销做的是高端拉动,史玉柱同样擅长做渠道驱动,他的成功的第二个因素正是渠道。史玉柱认为网游的主要市场不在北京上海广州这些金字塔尖,而在农村。无论从脑白金,还是做征途,史玉柱都建立起直达县一级的渠道。史的渠道模式是,把市场销售的工资压得很低,但提成高得惊人。他的销售团队,是完全由赚钱所驱动的。
有个细节说明了史在商业上的智慧。我们在西方的营销案例中无数次看到区域性试销,但在中国中,这相当少见。脑白金最早是在江阴试销的,送了价值10万的产品,看到效果之后,再各地逐渐铺开。
在宝洁和可口可乐的中国实践中,我们也看到有直到最基层的渠道,那是它们国际渠道模式在中国的复制,我们经常能看到宝洁、可口可乐的各类前营销人员写的类似经历。不过它们似乎没有在中国搞试销。它们也没有像史玉柱那样根据中国的实际情形改造渠道,比如高提成,而仍然是职业发展加金钱收入的混合模式。
有天使呵护的男人注定要成功
向应聘者提出这样一个问题:“如果你驾驭着一匹烈马,应该怎么办?”
她朗声说道:“如果我驾驭着的是一匹烈马,我先勒紧缰绳,然后用鞭子狠狠地抽它!”
此一时,彼一时,经过了这一番风吹雨打,我悟到了,人世间最可宝贵的不是财富,而是无私无我的一份情义
史玉柱:也有人认为我不会搞管理,但我自认为我的管理还可以。
因为不管哪套管理,
目的无非有四:
第一,能让员工的积极性最大限度发挥;
第二,能让销售额最大化;
第三,能让成本最小;
第四,货款及公司是安全的。
事过境迁,如今想来,他有次与四通的老板段永基的一段对话十分经典:成功的经验总是因放大而扭曲,而失败的教训才更加真实。
“史玉柱这个营销团队相当于中国保健品领域的美国戴尔公司。我看好的就是史玉柱和他的这个团队,”这是2004年段永基聘请史玉柱担任四通控股CEO的理由。
“我看好的不是一个产品”,段永基面对媒体质疑脑白金功能时说,“脑白金就其技术含量来说,什么都不是”,但“真的白金卖出白金价,不是本事;而把不是白金的东西卖出了白金价,那才是真功夫。”
“把一个什么也不是的产品变成了钱”,这就是段看重史的地方。
史玉柱对此的解释是,“这个东西有用没用,在于人们信不信。这就是诀窍。”
曾经有媒体吹捧说“史玉柱以一种行为,纪念了一个时代”。而史玉柱则异常低调地回答:“我只是个干活的人”,“并不是我有意把活儿干成这样,只是我只能干成这样。”
曾经有史玉柱当年的部下,见到央视《对话》节目的主持人对复出后的史玉柱以“天才”相称时,在“对人类博大而盲目的同情心和英雄崇拜的情结俯首无语”时,也感到了悲哀:他认为毁掉史玉柱的正是他的“营销天才”。
他自称从来不看科特勒们的营销书籍,却牢牢把握住了营销的终极方向———消费者
软硬勿相碰,版面读者多,价格四五扣,标题要醒目,篇篇有插图,党报应为主,宣字要不得,字形应统一,周围无广告,不能加黑框,形状不规则,热线不要加,启事要巧妙,结尾加报花,执行不走样,效果顶呱呱
“喜欢吃肉的,未必能当好厨子。”——这是当年盛大陈天桥对游戏爱好者和运营者关系的一句概括(史玉柱喜欢,能运营好游戏?)
你们不了解这个产业,现在保健品是白天睁着眼睛我们在赚钱,游戏这个产业是晚上我们睡觉的时候也可以赚到钱
几年前,史玉柱曾像这位姓乔的小伙子迷恋《征途》一样,对盛大的“传奇”上瘾,他平均1个月在《传奇》上的开支超过5万元,在一个拥有极品装备的账号上先后共投入了几十万元。“他每天要花四五个小时泡在网络游戏上。”盛大前副总朱威廉说,“史玉柱为了游戏装备或游戏里遇到的问题,经常直接打电话给陈天桥。陈天桥有时也会在公司高层会议上提起这些,陈天桥当时很得意,认为《传奇》的市场推广做得很成功,能吸引像史玉柱这样重量级的玩家。”
比起不玩游戏的丁磊和陈天桥,史玉柱更知道哪些东西让人欲罢不能。史玉柱进入网游行业前曾问他的开发团队:为什么一定要枯燥地打怪升级?开发人员回答,所有游戏都是这样。史玉柱于是按自己的意愿,让升级变得容易,让玩家对装备的依赖变得更强,这个程序修改的本质是在钱上:“卖点卡的方式回收资金,史玉柱觉得太慢了。玩家直接向他购买装备,这绕开了一些中间商,减少了不必要的成本,也大大加快了金钱回收的速度。”
销售额就是一切
金玉言说,“(史玉柱)上马一提金,下马一提银,确实很讲义气,对帮过他的人不会忘记”
向应聘者提出这样一个问题:“如果你驾驭着一匹烈马,应该怎么办?”
她朗声说道:“如果我驾驭着的是一匹烈马,我先勒紧缰绳,然后用鞭子狠狠地抽它!”
此一时,彼一时,经过了这一番风吹雨打,我悟到了,人世间最可宝贵的不是财富,而是无私无我的一份情义
史玉柱:也有人认为我不会搞管理,但我自认为我的管理还可以。
因为不管哪套管理,
目的无非有四:
第一,能让员工的积极性最大限度发挥;
第二,能让销售额最大化;
第三,能让成本最小;
第四,货款及公司是安全的。
事过境迁,如今想来,他有次与四通的老板段永基的一段对话十分经典:成功的经验总是因放大而扭曲,而失败的教训才更加真实。
“史玉柱这个营销团队相当于中国保健品领域的美国戴尔公司。我看好的就是史玉柱和他的这个团队,”这是2004年段永基聘请史玉柱担任四通控股CEO的理由。
“我看好的不是一个产品”,段永基面对媒体质疑脑白金功能时说,“脑白金就其技术含量来说,什么都不是”,但“真的白金卖出白金价,不是本事;而把不是白金的东西卖出了白金价,那才是真功夫。”
“把一个什么也不是的产品变成了钱”,这就是段看重史的地方。
史玉柱对此的解释是,“这个东西有用没用,在于人们信不信。这就是诀窍。”
曾经有媒体吹捧说“史玉柱以一种行为,纪念了一个时代”。而史玉柱则异常低调地回答:“我只是个干活的人”,“并不是我有意把活儿干成这样,只是我只能干成这样。”
曾经有史玉柱当年的部下,见到央视《对话》节目的主持人对复出后的史玉柱以“天才”相称时,在“对人类博大而盲目的同情心和英雄崇拜的情结俯首无语”时,也感到了悲哀:他认为毁掉史玉柱的正是他的“营销天才”。
他自称从来不看科特勒们的营销书籍,却牢牢把握住了营销的终极方向———消费者
软硬勿相碰,版面读者多,价格四五扣,标题要醒目,篇篇有插图,党报应为主,宣字要不得,字形应统一,周围无广告,不能加黑框,形状不规则,热线不要加,启事要巧妙,结尾加报花,执行不走样,效果顶呱呱
“喜欢吃肉的,未必能当好厨子。”——这是当年盛大陈天桥对游戏爱好者和运营者关系的一句概括(史玉柱喜欢,能运营好游戏?)
你们不了解这个产业,现在保健品是白天睁着眼睛我们在赚钱,游戏这个产业是晚上我们睡觉的时候也可以赚到钱
几年前,史玉柱曾像这位姓乔的小伙子迷恋《征途》一样,对盛大的“传奇”上瘾,他平均1个月在《传奇》上的开支超过5万元,在一个拥有极品装备的账号上先后共投入了几十万元。“他每天要花四五个小时泡在网络游戏上。”盛大前副总朱威廉说,“史玉柱为了游戏装备或游戏里遇到的问题,经常直接打电话给陈天桥。陈天桥有时也会在公司高层会议上提起这些,陈天桥当时很得意,认为《传奇》的市场推广做得很成功,能吸引像史玉柱这样重量级的玩家。”
比起不玩游戏的丁磊和陈天桥,史玉柱更知道哪些东西让人欲罢不能。史玉柱进入网游行业前曾问他的开发团队:为什么一定要枯燥地打怪升级?开发人员回答,所有游戏都是这样。史玉柱于是按自己的意愿,让升级变得容易,让玩家对装备的依赖变得更强,这个程序修改的本质是在钱上:“卖点卡的方式回收资金,史玉柱觉得太慢了。玩家直接向他购买装备,这绕开了一些中间商,减少了不必要的成本,也大大加快了金钱回收的速度。”
销售额就是一切
金玉言说,“(史玉柱)上马一提金,下马一提银,确实很讲义气,对帮过他的人不会忘记”
http://forum.ubuntu.org.cn/about63843-0-asc-0.html
[url=http://www.ithaka.cn/Down/View.asp?id=11][/url]
main( )
{
int *p,**m;
m = &p ;
printf("%d",m);
}
~
得益于:
[url=http://tech.tute.edu.cn/xujpkch/lili/c/study%20online/part9/9-7-2.cfm.htm][/url]
{
int *p,**m;
m = &p ;
printf("%d",m);
}
~
得益于:
[url=http://tech.tute.edu.cn/xujpkch/lili/c/study%20online/part9/9-7-2.cfm.htm][/url]
cd /usr/ports/editors/vim6
make
make install
make
make install
我每天早上醒来,牙齿上都会带点血迹,这是为什么呢?而怎样弄才不会这样?
不止牙齿,嘴里的上颚早上醒来也是有血迹..我想应该也是牙齿留的吧``可以前都不会啊,以前都是牙齿而已。。这又是为什么?
答:牙齿流血的原因很多:一、缺维C。在以前贫困地区常发生,大概属于营养不良。如果你的饮食太差而导致牙银流血,很可能是缺维C,脐成,萍果、胡罗波等水果蔬菜都含丰富维C,如果用药物补充维C(如维C片),要注意还要多吃东西。因为维C片必须与食物一起才能起作用。但能上网的我想大概也不会因营养不良导致牙银流血,所以第一条原因是屁话。二、睡眠。这一点也很重要,但我不知道原因。我睡眠好的时候牙银流血现象就要好些。熬夜多了,随时都觉得口里有血。有段时间我住院,生活很有规律,居然好多年牙齿流血的毛病在那几周刷牙都不会流血,不过出院没多久,我又故态重萌。三、刷牙方法不正确。我刷了二十几年的牙,结果有一天才发现居然方法有问题,我GF的刷牙方法是正确的,我问她为甚麽不告诉我,她狂笑,满脸歉意,“我不知道你连牙都不会刷”,气死我了。其实,如果你到医院去,你会发现现在至少有60-80%的成人都不会刷牙,牙科医生称为之文明病。好了,我扯得太远,错误的方法是横着刷,这样牙齿不容易刷干净,而且牙银要被刷伤,你照照镜子,如果发现有的牙根(我不懂专业术语,大概就是这个位置了)有点暴露出来,用指甲轻轻一碰觉得酴痛的话,你已经跟我一样了。一句话,刷牙应该竖着刷,既能清洁干净,又不会伤牙银,具体方法网上找得到。四、需要洁牙。你可以说你每天都刷牙,而且方法也正确,还是早晚加上中午三次,难道还要洁牙?的确需要,无论你怎麽刷,都不可能完全干净,久之,会产生牙结石,压迫着牙银,发生牙银炎,牙银红肿,常流血,这是最主要的原因了。我想大多数人都是这个原因。一般来说,正常不抽烟的一两年也需刷一次牙,我到医院洁了牙后,牙银再也没有流血了。五、内脏有病。据我所知,五脏六腑有病也会在牙齿上体现出来。具体案例我只知道肝炎晚期就满口牙血,散发着腥味,我在川医住院时,就有人得了肝炎还不知道休息,没多久就升天了。所以说不想去检查也得去,而且,要找负责的医生,有的医生没职业道德,真是害人啊
不止牙齿,嘴里的上颚早上醒来也是有血迹..我想应该也是牙齿留的吧``可以前都不会啊,以前都是牙齿而已。。这又是为什么?
答:牙齿流血的原因很多:一、缺维C。在以前贫困地区常发生,大概属于营养不良。如果你的饮食太差而导致牙银流血,很可能是缺维C,脐成,萍果、胡罗波等水果蔬菜都含丰富维C,如果用药物补充维C(如维C片),要注意还要多吃东西。因为维C片必须与食物一起才能起作用。但能上网的我想大概也不会因营养不良导致牙银流血,所以第一条原因是屁话。二、睡眠。这一点也很重要,但我不知道原因。我睡眠好的时候牙银流血现象就要好些。熬夜多了,随时都觉得口里有血。有段时间我住院,生活很有规律,居然好多年牙齿流血的毛病在那几周刷牙都不会流血,不过出院没多久,我又故态重萌。三、刷牙方法不正确。我刷了二十几年的牙,结果有一天才发现居然方法有问题,我GF的刷牙方法是正确的,我问她为甚麽不告诉我,她狂笑,满脸歉意,“我不知道你连牙都不会刷”,气死我了。其实,如果你到医院去,你会发现现在至少有60-80%的成人都不会刷牙,牙科医生称为之文明病。好了,我扯得太远,错误的方法是横着刷,这样牙齿不容易刷干净,而且牙银要被刷伤,你照照镜子,如果发现有的牙根(我不懂专业术语,大概就是这个位置了)有点暴露出来,用指甲轻轻一碰觉得酴痛的话,你已经跟我一样了。一句话,刷牙应该竖着刷,既能清洁干净,又不会伤牙银,具体方法网上找得到。四、需要洁牙。你可以说你每天都刷牙,而且方法也正确,还是早晚加上中午三次,难道还要洁牙?的确需要,无论你怎麽刷,都不可能完全干净,久之,会产生牙结石,压迫着牙银,发生牙银炎,牙银红肿,常流血,这是最主要的原因了。我想大多数人都是这个原因。一般来说,正常不抽烟的一两年也需刷一次牙,我到医院洁了牙后,牙银再也没有流血了。五、内脏有病。据我所知,五脏六腑有病也会在牙齿上体现出来。具体案例我只知道肝炎晚期就满口牙血,散发着腥味,我在川医住院时,就有人得了肝炎还不知道休息,没多久就升天了。所以说不想去检查也得去,而且,要找负责的医生,有的医生没职业道德,真是害人啊
内容:
系统标识
时间与日期
多进程编程
1. 系统标识符
a.获得有关的系统信息
#include
int uname( struct utsname * name);// 用 man uname 查看 struct utsname
b.获得系统的名称
#include
int gethostname( char* name, int namelen ); // 成功返回 0, 否则返回 1
例子:
#include<iostream>
#include<unistd.h>
#include<sys/utsname.h>
using namespace std;
int main(){
cout<<"-------------- hostname ------------"<<endl;
char name[ 100 ];
memset( name, 0x00, sizeof( name ) );
gethostname( name, sizeof( name ) );
cout<< name <<endl;
cout<<"-------------- uname ----------------"<<endl;
struct utsname nm;
memset( &nm, 0x00, sizeof( nm ) );
uname( &nm );
cout<<"sysname ="<< nm.sysname <<endl;
cout<<"nodename ="<< nm.nodename <<endl;
cout<<"release ="<< nm.release <<endl;
cout<<"version ="<< nm.version <<endl;
cout<<"machine ="<< nm.machine <<endl;
return 0;
}
2. 时间与日期
4种表示形式:(1)time_t 1970年至今的秒数 (2) struct tm 以结构表示
(3) char * 字符串 (4) formated char* 自定义格式
(1)-->(2) 转换有函数: localtime() // 本地时间 gmtime() // 格林威治时间
(2)-->(1) 转换有函数: mktime()
(1)-->(3) 转换有函数: ctime()
(2)-->(3) 转换有函数: asctime()
(2)-->(4) 转换有函数: strftime()
例子:
#include<iostream>
#include<time.h>
using namespace std;
int main(){
// time() get kernel time
cout<<"-----------time_t-----------"<<endl;
time_t t=0;
time( &t );
cout<< t <<endl;
// time_t --> struct tm, localtime(),gmtime()
// man localtime to see the struct tm
cout<<"-----------struct tm-----------"<<endl;
struct tm *p=NULL;
p=localtime( &t );
cout<<"year:"<< p->tm_year+1900 <<endl; // the number of years since 1900
cout<<"month:"<< p->tm_mon+1 <<endl; // tm_mon ranges 0 to 11
cout<<"day:"<< p->tm_mday <<endl;
// struct tm --> time_t
cout<<"-----------mktime-----------"<<endl;
time_t t1;
t1=mktime( p );
cout<< t1 <<endl;
// time_t --> char *
cout<<"-----------ctime-----------"<<endl;
cout<< ctime( &t ) <<endl;
char ct[ 100 ]; //如果想保持返回值应开辟新空间,不能直接定义指针保存
memset( ct, 0x00, sizeof( ct ) ); //因为ctime的返回值总是在同一空间,下次调用ctime时就会被更改
strcpy( ct, ctime( &t ) );
cout<< ct <<endl;
// struct tm --> char *
cout<<"-----------asctime-----------"<<endl;
cout<< asctime( p ) <<endl;
// struct tm --> formated char*
cout<<"-----------strftime-----------"<<endl;
char ft[ 100 ];
memset( ft, 0x00, sizeof( ft ) );
strftime( ft, sizeof( ft ), "%Y-%m-%d %H:%M:%S", p );
cout<< ft <<endl;
return 0;
}
3.system 函数
#include
int system( const char * string );
执行string 所表示的命令,将产生一个新的进程,system为阻塞函数, 新的进程结束后才继续
例子:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
cout<<"----------begin---------"<<endl;
system("ls -l");
cout<<"----------end-----------"<<endl;
return 0;
}
// 一个简单的shell
#include<iostream>
#include<unistd.h>
using namespace std;
int main(){
char cmd[ 100 ];
memset( cmd, 0x00, sizeof( cmd ) );
while( 1 ){
cout<<"[irini@localhost]#";
cin.getline( cmd,sizeof( cmd ) );
if( strcmp( cmd,"bye" )==0 ) break;
system( cmd );
}
return 0;
}
4. atexit() 函数
#include
int atexit( void (*func) (void) );
登记exit handler,最多可登记32个,在进程退出时最后登记的先调用,最先登记的最后调用
5. exit 与 _exit
* 进程的退出过程:
进程做的事: exit handler( atexit注册的), 关闭IO流,如果申请了堆空间就释放
------------------------------------------------------------------
kernel做的事: 销毁进程空间, 删除进程表中的相应项
* exit 是正常退出,想做进程的,然后进入kernel处理
_exit 是异常退出,直接进入kernel
例子:
#include<iostream>
#include<unistd.h>
using namespace std;
void fn1(){
cout<<"in fn1()..."<<endl;
}
void fn2(){
cout<<"in fn2()..."<<endl;
}
int main(){
atexit( fn1 );
atexit( fn2 );
cout<<"return from main..."<<endl;
//exit( 0 );
_exit( 0 );
}
6. 进程标识符
#include
#include
pid_t getpid(); // 当前进程号
pid_t getppid(); // 得到父进程号
例子:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
using namespace std;
int main(){
cout<<"pid="<<getpid()<<endl;
cout<<"ppid="<<getppid()<<endl;
return 0;
}
7. fork 函数
* 创建一个新进程,这个进程是父进程的完全拷贝,完全拷贝父进程的进程空间,唯一的区别是fork()的返回值不同
返回给父进程的是子进程的pid, 返回给子进程的是0
例子:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
using namespace std;
int main(){
pid_t cid=fork();
if( cid==0 ){
for( int i=0; i<5; i++ ){
cout<<"[child] pid="<<getpid()<<" ppid="<<getppid()<<endl;
sleep( 1 );
}
exit( 0 );
}else if( cid > 0 ){
for( int i=0; i<5; i++ ){
cout<<"[father] pid="<<getpid()<<" cid="<<cid<<endl;
sleep( 1 );
}
exit( 0 );
}else{
cout<<"error"<<endl;
exit( -1 );
}
return 0;
}
* fork后,父子进程相互独立,如果之前父进程申请了一个堆空间,那之后父子进程中的指针值相同吗?
通过程序可验证他们是相同的,但指向的空间是不同,因为进程中分配给指针的不是绝对地址,
是逻辑偏移地址,进程空间中正文段的起始地址是逻辑0
* 如果父进程在子进程之前退出,子进程会被初始化进程(pid=1) 托管
如果子进程在父进程之前退出,子进程不会被销毁,变为僵死进程 Z状态,等待父进程处理
例子:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
using namespace std;
void fn(){
cout<<"in fn()... "<<endl;
}
int main(){
atexit( fn );
pid_t cid=fork();
if( cid==0 ){
for( int i=0; i<5; i++ ){
cout<<"[child] pid="<<getpid()<<endl;
sleep( 1 );
}
exit( 0 );
}else if( cid > 0 ){
cout<<"father exit..."<<endl;
exit( 0 );
}else{
cout<<"error"<<endl;
exit( -1 );
}
return 0;
}
8. wait 和 waitpid 函数
处理结束的子进程,是阻塞函数
#include
#include
pid_t wait( int * statloc );
pid_t waitpid( pid_t pid, int *static, int option );
返回值为子进程的pid
statloc 用于接受终止的子进程的返回状态
option 通常设为0
例子:
#include<iostream>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
using namespace std;
int main(){
pid_t cid=fork();
if( cid==0 ){
sleep( 3 );
cout<<"[child] pid="<<getpid()<<" ppid="<<getppid()<<endl;
exit( 0 );
}else if( cid > 0 ){
cout<<"[father] pid="<<getpid()<<" cid="<<cid<<endl;
int statloc=0;
pid_t id=waitpid( cid, &statloc, 0 );
cout<<"[child] "<< id <<" exited"<<endl;
cout<<"exit value is "<< statloc <<endl;
if( WIFEXITED( statloc ) )
cout<<"value "<<WEXITSTATUS( statloc )<<endl;
else cout<<"signal "<<WTERMSIG( statloc )<<endl;
}else{
cout<<"error"<<endl;
exit( -1 );
}
return 0;
}
9. exec 函数
类似system,建立新的进程,但不新建进程空间,而是把原进程空间清0变成自己的开始执行
则原进程exec之后的代码不在存在,失效
例子:
[code]
#include
#include
using namespace std;
int main(){
cout<<"-------------begin-----------"< //execlp( "ls","ls","-l","-a",NULL ); // 第一个参数为要执行的命令文件名,后面的为命令行参数(从0开始都要写,以NULL结束)
char* argv[]={ "ls","-l","-a",NULL };
execvp( "ls", argv );
cout<<"-------------end-------------"< return 0;
}
系统标识
时间与日期
多进程编程
1. 系统标识符
a.获得有关的系统信息
#include
int uname( struct utsname * name);// 用 man uname 查看 struct utsname
b.获得系统的名称
#include
int gethostname( char* name, int namelen ); // 成功返回 0, 否则返回 1
例子:
#include<iostream>
#include<unistd.h>
#include<sys/utsname.h>
using namespace std;
int main(){
cout<<"-------------- hostname ------------"<<endl;
char name[ 100 ];
memset( name, 0x00, sizeof( name ) );
gethostname( name, sizeof( name ) );
cout<< name <<endl;
cout<<"-------------- uname ----------------"<<endl;
struct utsname nm;
memset( &nm, 0x00, sizeof( nm ) );
uname( &nm );
cout<<"sysname ="<< nm.sysname <<endl;
cout<<"nodename ="<< nm.nodename <<endl;
cout<<"release ="<< nm.release <<endl;
cout<<"version ="<< nm.version <<endl;
cout<<"machine ="<< nm.machine <<endl;
return 0;
}
2. 时间与日期
4种表示形式:(1)time_t 1970年至今的秒数 (2) struct tm 以结构表示
(3) char * 字符串 (4) formated char* 自定义格式
(1)-->(2) 转换有函数: localtime() // 本地时间 gmtime() // 格林威治时间
(2)-->(1) 转换有函数: mktime()
(1)-->(3) 转换有函数: ctime()
(2)-->(3) 转换有函数: asctime()
(2)-->(4) 转换有函数: strftime()
例子:
#include<iostream>
#include<time.h>
using namespace std;
int main(){
// time() get kernel time
cout<<"-----------time_t-----------"<<endl;
time_t t=0;
time( &t );
cout<< t <<endl;
// time_t --> struct tm, localtime(),gmtime()
// man localtime to see the struct tm
cout<<"-----------struct tm-----------"<<endl;
struct tm *p=NULL;
p=localtime( &t );
cout<<"year:"<< p->tm_year+1900 <<endl; // the number of years since 1900
cout<<"month:"<< p->tm_mon+1 <<endl; // tm_mon ranges 0 to 11
cout<<"day:"<< p->tm_mday <<endl;
// struct tm --> time_t
cout<<"-----------mktime-----------"<<endl;
time_t t1;
t1=mktime( p );
cout<< t1 <<endl;
// time_t --> char *
cout<<"-----------ctime-----------"<<endl;
cout<< ctime( &t ) <<endl;
char ct[ 100 ]; //如果想保持返回值应开辟新空间,不能直接定义指针保存
memset( ct, 0x00, sizeof( ct ) ); //因为ctime的返回值总是在同一空间,下次调用ctime时就会被更改
strcpy( ct, ctime( &t ) );
cout<< ct <<endl;
// struct tm --> char *
cout<<"-----------asctime-----------"<<endl;
cout<< asctime( p ) <<endl;
// struct tm --> formated char*
cout<<"-----------strftime-----------"<<endl;
char ft[ 100 ];
memset( ft, 0x00, sizeof( ft ) );
strftime( ft, sizeof( ft ), "%Y-%m-%d %H:%M:%S", p );
cout<< ft <<endl;
return 0;
}
3.system 函数
#include
int system( const char * string );
执行string 所表示的命令,将产生一个新的进程,system为阻塞函数, 新的进程结束后才继续
例子:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
cout<<"----------begin---------"<<endl;
system("ls -l");
cout<<"----------end-----------"<<endl;
return 0;
}
// 一个简单的shell
#include<iostream>
#include<unistd.h>
using namespace std;
int main(){
char cmd[ 100 ];
memset( cmd, 0x00, sizeof( cmd ) );
while( 1 ){
cout<<"[irini@localhost]#";
cin.getline( cmd,sizeof( cmd ) );
if( strcmp( cmd,"bye" )==0 ) break;
system( cmd );
}
return 0;
}
4. atexit() 函数
#include
int atexit( void (*func) (void) );
登记exit handler,最多可登记32个,在进程退出时最后登记的先调用,最先登记的最后调用
5. exit 与 _exit
* 进程的退出过程:
进程做的事: exit handler( atexit注册的), 关闭IO流,如果申请了堆空间就释放
------------------------------------------------------------------
kernel做的事: 销毁进程空间, 删除进程表中的相应项
* exit 是正常退出,想做进程的,然后进入kernel处理
_exit 是异常退出,直接进入kernel
例子:
#include<iostream>
#include<unistd.h>
using namespace std;
void fn1(){
cout<<"in fn1()..."<<endl;
}
void fn2(){
cout<<"in fn2()..."<<endl;
}
int main(){
atexit( fn1 );
atexit( fn2 );
cout<<"return from main..."<<endl;
//exit( 0 );
_exit( 0 );
}
6. 进程标识符
#include
#include
pid_t getpid(); // 当前进程号
pid_t getppid(); // 得到父进程号
例子:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
using namespace std;
int main(){
cout<<"pid="<<getpid()<<endl;
cout<<"ppid="<<getppid()<<endl;
return 0;
}
7. fork 函数
* 创建一个新进程,这个进程是父进程的完全拷贝,完全拷贝父进程的进程空间,唯一的区别是fork()的返回值不同
返回给父进程的是子进程的pid, 返回给子进程的是0
例子:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
using namespace std;
int main(){
pid_t cid=fork();
if( cid==0 ){
for( int i=0; i<5; i++ ){
cout<<"[child] pid="<<getpid()<<" ppid="<<getppid()<<endl;
sleep( 1 );
}
exit( 0 );
}else if( cid > 0 ){
for( int i=0; i<5; i++ ){
cout<<"[father] pid="<<getpid()<<" cid="<<cid<<endl;
sleep( 1 );
}
exit( 0 );
}else{
cout<<"error"<<endl;
exit( -1 );
}
return 0;
}
* fork后,父子进程相互独立,如果之前父进程申请了一个堆空间,那之后父子进程中的指针值相同吗?
通过程序可验证他们是相同的,但指向的空间是不同,因为进程中分配给指针的不是绝对地址,
是逻辑偏移地址,进程空间中正文段的起始地址是逻辑0
* 如果父进程在子进程之前退出,子进程会被初始化进程(pid=1) 托管
如果子进程在父进程之前退出,子进程不会被销毁,变为僵死进程 Z状态,等待父进程处理
例子:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
using namespace std;
void fn(){
cout<<"in fn()... "<<endl;
}
int main(){
atexit( fn );
pid_t cid=fork();
if( cid==0 ){
for( int i=0; i<5; i++ ){
cout<<"[child] pid="<<getpid()<<endl;
sleep( 1 );
}
exit( 0 );
}else if( cid > 0 ){
cout<<"father exit..."<<endl;
exit( 0 );
}else{
cout<<"error"<<endl;
exit( -1 );
}
return 0;
}
8. wait 和 waitpid 函数
处理结束的子进程,是阻塞函数
#include
#include
pid_t wait( int * statloc );
pid_t waitpid( pid_t pid, int *static, int option );
返回值为子进程的pid
statloc 用于接受终止的子进程的返回状态
option 通常设为0
例子:
#include<iostream>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
using namespace std;
int main(){
pid_t cid=fork();
if( cid==0 ){
sleep( 3 );
cout<<"[child] pid="<<getpid()<<" ppid="<<getppid()<<endl;
exit( 0 );
}else if( cid > 0 ){
cout<<"[father] pid="<<getpid()<<" cid="<<cid<<endl;
int statloc=0;
pid_t id=waitpid( cid, &statloc, 0 );
cout<<"[child] "<< id <<" exited"<<endl;
cout<<"exit value is "<< statloc <<endl;
if( WIFEXITED( statloc ) )
cout<<"value "<<WEXITSTATUS( statloc )<<endl;
else cout<<"signal "<<WTERMSIG( statloc )<<endl;
}else{
cout<<"error"<<endl;
exit( -1 );
}
return 0;
}
9. exec 函数
类似system,建立新的进程,但不新建进程空间,而是把原进程空间清0变成自己的开始执行
则原进程exec之后的代码不在存在,失效
例子:
[code]
#include
#include
using namespace std;
int main(){
cout<<"-------------begin-----------"<
char* argv[]={ "ls","-l","-a",NULL };
execvp( "ls", argv );
cout<<"-------------end-------------"<
}
1 安装系统和软件;
通过安装,我们能了解Linux的目录结构;系统和软件的安装方法,以及基本目录、文件和用的操作,没有比这些更基础的吧。
2 对硬件的安装和维护;
Linux是个系统,我们得把她用起来才能达到我们的目的。在生产、生活和或者娱乐中的应用,最能体现她的价值。比如我们要让Linux支持 scsi ;raid ;usb; firewire; mouse; video card;TV card 等,无非就是应用。比如我有鼠标,在我的Linux中却用不起来,是不是有点浪费??
3 用户管理;
Linux是一个多用户,多任务的系统,要让很多人能同时用这台机器的Linux,我们不得不经常对用户进行增加或者删除。有的弟兄可能会说,我的机器上只有一个显示器一套键盘和鼠标,怎么让更多的用户应用呢??可能初学Linux的弟兄可能早就明白了,比如 web服务器,是不是多用户的呢??ftp服务器也应该是多用户的吧。咱们不是有远程登录ssh 和telnet吗?这个多用户可不是一台机器,几个人同时挤在同一个键盘和显示器上用不同用户名登录系统。
4 磁盘管理;
磁盘是有限的,就是再大的磁盘需要管理。因为我们都是玩家,再大的磁盘也感觉小。我现在有160的磁盘,我感觉还是不够用,所以要把有限的空间都利用上,还得对磁盘有个计划。。比如限制用户家目录空间;限制用户上传文件大小;定时查看磁盘分区的利用率 。管理员经常用 fdisk -l 或者 df -h du -h 查来看分区,目录的大小等
5 检测系统状态;
有时学习Linux的弟兄总是问“为什么我的机器开机这么慢?”;“Linux真的是浪费内存,对不对?”等。其实这些问题都涉及到系统监测。比如 CPU、内存、网络利用率等。因为生产型系统是必须有效率的。如果一台服务器反应迟钝,可能最急的是管理员。管理员首先要做的可能是查看系统运行状态。比如用top ; sar ; netstat等 ;
6 安全和备份;
对于生产型的系统,没有比安全更重要了。如果发现安问题,可能管理员首要做的就是停止相应的服务,查看日志,执行备份,以及打补丁。
世上没有绝对安全的东西,硬件的可靠性没有百分之分的,Linux系统也不是百分之百的安全。每天进行日常备份还是极为必要的。比如我们把重要的数据用备份到一个较为安全的地方,比如磁带机,本地机,或者网络上的计算机上。
7 灾难恢复;
有了备份,才能有恢复之说,如果没有备份,那就只能是一切从头开始了。我想大家在玩自己的机器时也有所体会吧。灾难只能说是天灾了,真的遇到了灾难,咱们不能怨天忧人了。骂什么或者怪自己太大意都没有用,我们做的只能是自己承受,能恢复多少算多少吧。只要每天都用心尽力了,恢复还不是太大的问题。
8 网络管理;
Internet 是最流行的,自从我们在学校的BBS和恐龙MM聊天开始,可能我们就懂得了Internet的强大,虽然在学校可能是校园网,但我们还是感觉到了网的神秘。在电视中,我们经常看到七八十岁的老爷爷和老奶奶运指如飞,对着显示器聊的不亦乐乎。这就是net的魅力。我们可以在LinuxSir上聊天灌水,也是net的魅力。在LinuxSir的后面呢???这就是我们所要谈到的,管理和版所要做的,比如web服务器架设,FTP 、 IRC 、防火墙的架设;网络基本操作。比如简的设置IP,IP追踪; whois 这个ip是从如来的,各种网络服务器进程查看等 。
9 系统管理与日志分析;
这个概念有些大,有的人也把系统管理看上最高点,把用户管理;磁盘管理;网络管理;安全都纳入这个关健词之中。这也是有道理的。因为这么多的管理都是密不可分的,离了哪个都不行。当然还有好多的零活让我们来做,比如系统优化,内核编译等。系统管理概念比较大,麻烦事也比较多。以后在各部份一步一步的让初学Linux的弟兄体验体验,可能有的弟兄早就体验过了,只是不知道他就是在体验系统管理 。
日志分析对于我们了解系统运行还是极有帮助的,否则有人攻击我们的机器都不知道,那不麻烦了?通过分析日志,我们能得到硬件及各种软件的运行状态,以及他们配合的是否正常等。系统中的每个服务都有日志,这对于我们找出系统运行中出现故障有极大的帮助。有时发现问题比解决问题更难,我相信初学 Linux的弟兄慢慢就明白这个道理了。
10 开发:
玩Linux的最高境界,可能就是开发了。现在我还是处于对系统的学习阶段,所以不能写出什么开发的经验之谈。一想到自己能造出一个发行版自己用用,也是件高兴的事。
加油吧。。。。。。弟兄们!
通过安装,我们能了解Linux的目录结构;系统和软件的安装方法,以及基本目录、文件和用的操作,没有比这些更基础的吧。
2 对硬件的安装和维护;
Linux是个系统,我们得把她用起来才能达到我们的目的。在生产、生活和或者娱乐中的应用,最能体现她的价值。比如我们要让Linux支持 scsi ;raid ;usb; firewire; mouse; video card;TV card 等,无非就是应用。比如我有鼠标,在我的Linux中却用不起来,是不是有点浪费??
3 用户管理;
Linux是一个多用户,多任务的系统,要让很多人能同时用这台机器的Linux,我们不得不经常对用户进行增加或者删除。有的弟兄可能会说,我的机器上只有一个显示器一套键盘和鼠标,怎么让更多的用户应用呢??可能初学Linux的弟兄可能早就明白了,比如 web服务器,是不是多用户的呢??ftp服务器也应该是多用户的吧。咱们不是有远程登录ssh 和telnet吗?这个多用户可不是一台机器,几个人同时挤在同一个键盘和显示器上用不同用户名登录系统。
4 磁盘管理;
磁盘是有限的,就是再大的磁盘需要管理。因为我们都是玩家,再大的磁盘也感觉小。我现在有160的磁盘,我感觉还是不够用,所以要把有限的空间都利用上,还得对磁盘有个计划。。比如限制用户家目录空间;限制用户上传文件大小;定时查看磁盘分区的利用率 。管理员经常用 fdisk -l 或者 df -h du -h 查来看分区,目录的大小等
5 检测系统状态;
有时学习Linux的弟兄总是问“为什么我的机器开机这么慢?”;“Linux真的是浪费内存,对不对?”等。其实这些问题都涉及到系统监测。比如 CPU、内存、网络利用率等。因为生产型系统是必须有效率的。如果一台服务器反应迟钝,可能最急的是管理员。管理员首先要做的可能是查看系统运行状态。比如用top ; sar ; netstat等 ;
6 安全和备份;
对于生产型的系统,没有比安全更重要了。如果发现安问题,可能管理员首要做的就是停止相应的服务,查看日志,执行备份,以及打补丁。
世上没有绝对安全的东西,硬件的可靠性没有百分之分的,Linux系统也不是百分之百的安全。每天进行日常备份还是极为必要的。比如我们把重要的数据用备份到一个较为安全的地方,比如磁带机,本地机,或者网络上的计算机上。
7 灾难恢复;
有了备份,才能有恢复之说,如果没有备份,那就只能是一切从头开始了。我想大家在玩自己的机器时也有所体会吧。灾难只能说是天灾了,真的遇到了灾难,咱们不能怨天忧人了。骂什么或者怪自己太大意都没有用,我们做的只能是自己承受,能恢复多少算多少吧。只要每天都用心尽力了,恢复还不是太大的问题。
8 网络管理;
Internet 是最流行的,自从我们在学校的BBS和恐龙MM聊天开始,可能我们就懂得了Internet的强大,虽然在学校可能是校园网,但我们还是感觉到了网的神秘。在电视中,我们经常看到七八十岁的老爷爷和老奶奶运指如飞,对着显示器聊的不亦乐乎。这就是net的魅力。我们可以在LinuxSir上聊天灌水,也是net的魅力。在LinuxSir的后面呢???这就是我们所要谈到的,管理和版所要做的,比如web服务器架设,FTP 、 IRC 、防火墙的架设;网络基本操作。比如简的设置IP,IP追踪; whois 这个ip是从如来的,各种网络服务器进程查看等 。
9 系统管理与日志分析;
这个概念有些大,有的人也把系统管理看上最高点,把用户管理;磁盘管理;网络管理;安全都纳入这个关健词之中。这也是有道理的。因为这么多的管理都是密不可分的,离了哪个都不行。当然还有好多的零活让我们来做,比如系统优化,内核编译等。系统管理概念比较大,麻烦事也比较多。以后在各部份一步一步的让初学Linux的弟兄体验体验,可能有的弟兄早就体验过了,只是不知道他就是在体验系统管理 。
日志分析对于我们了解系统运行还是极有帮助的,否则有人攻击我们的机器都不知道,那不麻烦了?通过分析日志,我们能得到硬件及各种软件的运行状态,以及他们配合的是否正常等。系统中的每个服务都有日志,这对于我们找出系统运行中出现故障有极大的帮助。有时发现问题比解决问题更难,我相信初学 Linux的弟兄慢慢就明白这个道理了。
10 开发:
玩Linux的最高境界,可能就是开发了。现在我还是处于对系统的学习阶段,所以不能写出什么开发的经验之谈。一想到自己能造出一个发行版自己用用,也是件高兴的事。
加油吧。。。。。。弟兄们!
一直用着vi,有朋友劝我用vim,那么它们有什么区别呢?
简单点来说,它们都是多模式编辑器,
不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,
而且还有一些新的特性在里面。
vim的这些优势主要体现在以下几个方面:
1、多级撤消
我们知道在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性
vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台。
3、语法加亮
vim可以用不同的颜色来加亮你的代码。
4、可视化操作
就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
5、对vi的完全兼容
某些情况下,你可以把vim当成vi来使用。
[Last Modified By songzi, at 2006-08-07 14
简单点来说,它们都是多模式编辑器,
不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,
而且还有一些新的特性在里面。
vim的这些优势主要体现在以下几个方面:
1、多级撤消
我们知道在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性
vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台。
3、语法加亮
vim可以用不同的颜色来加亮你的代码。
4、可视化操作
就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
5、对vi的完全兼容
某些情况下,你可以把vim当成vi来使用。
[Last Modified By songzi, at 2006-08-07 14
对象属性
document.title //设置文档标题等价于HTML的<title>标签
document.bgColor //设置页面背景色
document.fgColor //设置前景色(文本颜色)
document.linkColor //未点击过的链接颜色
document.alinkColor //激活链接(焦点在此链接上)的颜色
document.vlinkColor //已点击过的链接颜色
document.URL //设置URL属性从而在同一窗口打开另一网页
document.fileCreatedDate //文件建立日期,只读属性
document.fileModifiedDate //文件修改日期,只读属性
document.fileSize //文件大小,只读属性
document.cookie //设置和读出cookie
document.charset //设置字符集 简体中文:gb2312
---------------------------------------------------------------------
对象方法
document.write() //动态向页面写入内容
document.createElement(Tag) //创建一个html标签对象
document.getElementById(ID) //获得指定ID值的对象
document.getElementsByName(Name) //获得指定Name值的对象
---------------------------------------------------------------------
images集合(页面中的图象)
a)通过集合引用
document.images //对应页面上的<img>标签
document.images.length //对应页面上<img>标签的个数
document.images[0] //第1个<img>标签
document.images[i] //第i-1个<img>标签
b)通过nane属性直接引用
<img name="oImage">
document.images.oImage //document.images.name属性
c)引用图片的src属性
document.images.oImage.src //document.images.name属性.src
d)创建一个图象
var oImage
oImage = new Image()
document.images.oImage.src="/1.jpg"
同时在页面上建立一个<img>标签与之对应就可以显示
<html>
<img name=oImage>
<script language="javascript">
var oImage
oImage = new Image()
document.images.oImage.src="/1.jpg"
</script>
</html>
----------------------------------------------------------------------
forms集合(页面中的表单)
a)通过集合引用
document.forms //对应页面上的<form>标签
document.forms.length //对应页面上<form>标签的个数
document.forms[0] //第1个<form>标签
document.forms[i] //第i-1个<form>标签
document.forms[i].length //第i-1个<form>中的控件数
document.forms[i].elements[j] //第i-1个<form>中第j-1个控件
b)通过标签name属性直接引用
<form name="Myform"><input name="myctrl"></form>
document.Myform.myctrl //document.表单名.控件名
-----------------------------------------------------------------------
<html>
<!--Text控件相关Script-->
<form name="Myform">
<input type="text" name="oText">
<input type="password" name="oPswd">
<form>
<script language="javascript">
//获取文本密码框的值
document.write(document.Myform.oText.value)
document.write(document.Myform.oPswd.value)
</script>
</html>
-----------------------------------------------------------------------
<html>
<!--Select控件相关Script-->
<form name="Myform">
<select name="oSelect">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</form>
<script language="javascript">
//遍历select控件的option项
var length
length=document.Myform.oSelect.length
for(i=0;i<length;i++)
document.write(document.Myform.oSelect[i].value)
</script>
<script language="javascript">
//遍历option项并且判断某个option是否被选中
for(i=0;i<document.Myform.oSelect.length;i++){
if(document.Myform.oSelect[i].selected!=true)
document.write(document.Myform.oSelect[i].value)
else
document.write("<font color=red>"+document.Myform.oSelect[i].value+"</font>")
}
</script>
<script language="javascript">
//根据SelectedIndex打印出选中的option
//(0到document.Myform.oSelect.length-1)
i=document.Myform.oSelect.selectedIndex
document.write(document.Myform.oSelect[i].value)
</script>
<script language="javascript">
//动态增加select控件的option项
var oOption = document.createElement("OPTION");
oOption.text="4";
oOption.value="4";
document.Myform.oSelect.add(oOption);
</script>
<html>
-----------------------------------------------------------------------
<Div id="oDiv">Text</Div>
document.all.oDiv //引用图层oDiv
document.all.oDiv.style
document.all.oDiv.style.display="" //图层设置为可视
document.all.oDiv.style.display="none" //图层设置为隐藏
/*document.all表示document中所有对象的集合
只有ie支持此属性,因此也用来判断浏览器的种类*/
document.title //设置文档标题等价于HTML的<title>标签
document.bgColor //设置页面背景色
document.fgColor //设置前景色(文本颜色)
document.linkColor //未点击过的链接颜色
document.alinkColor //激活链接(焦点在此链接上)的颜色
document.vlinkColor //已点击过的链接颜色
document.URL //设置URL属性从而在同一窗口打开另一网页
document.fileCreatedDate //文件建立日期,只读属性
document.fileModifiedDate //文件修改日期,只读属性
document.fileSize //文件大小,只读属性
document.cookie //设置和读出cookie
document.charset //设置字符集 简体中文:gb2312
---------------------------------------------------------------------
对象方法
document.write() //动态向页面写入内容
document.createElement(Tag) //创建一个html标签对象
document.getElementById(ID) //获得指定ID值的对象
document.getElementsByName(Name) //获得指定Name值的对象
---------------------------------------------------------------------
images集合(页面中的图象)
a)通过集合引用
document.images //对应页面上的<img>标签
document.images.length //对应页面上<img>标签的个数
document.images[0] //第1个<img>标签
document.images[i] //第i-1个<img>标签
b)通过nane属性直接引用
<img name="oImage">
document.images.oImage //document.images.name属性
c)引用图片的src属性
document.images.oImage.src //document.images.name属性.src
d)创建一个图象
var oImage
oImage = new Image()
document.images.oImage.src="/1.jpg"
同时在页面上建立一个<img>标签与之对应就可以显示
<html>
<img name=oImage>
<script language="javascript">
var oImage
oImage = new Image()
document.images.oImage.src="/1.jpg"
</script>
</html>
----------------------------------------------------------------------
forms集合(页面中的表单)
a)通过集合引用
document.forms //对应页面上的<form>标签
document.forms.length //对应页面上<form>标签的个数
document.forms[0] //第1个<form>标签
document.forms[i] //第i-1个<form>标签
document.forms[i].length //第i-1个<form>中的控件数
document.forms[i].elements[j] //第i-1个<form>中第j-1个控件
b)通过标签name属性直接引用
<form name="Myform"><input name="myctrl"></form>
document.Myform.myctrl //document.表单名.控件名
-----------------------------------------------------------------------
<html>
<!--Text控件相关Script-->
<form name="Myform">
<input type="text" name="oText">
<input type="password" name="oPswd">
<form>
<script language="javascript">
//获取文本密码框的值
document.write(document.Myform.oText.value)
document.write(document.Myform.oPswd.value)
</script>
</html>
-----------------------------------------------------------------------
<html>
<!--Select控件相关Script-->
<form name="Myform">
<select name="oSelect">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</form>
<script language="javascript">
//遍历select控件的option项
var length
length=document.Myform.oSelect.length
for(i=0;i<length;i++)
document.write(document.Myform.oSelect[i].value)
</script>
<script language="javascript">
//遍历option项并且判断某个option是否被选中
for(i=0;i<document.Myform.oSelect.length;i++){
if(document.Myform.oSelect[i].selected!=true)
document.write(document.Myform.oSelect[i].value)
else
document.write("<font color=red>"+document.Myform.oSelect[i].value+"</font>")
}
</script>
<script language="javascript">
//根据SelectedIndex打印出选中的option
//(0到document.Myform.oSelect.length-1)
i=document.Myform.oSelect.selectedIndex
document.write(document.Myform.oSelect[i].value)
</script>
<script language="javascript">
//动态增加select控件的option项
var oOption = document.createElement("OPTION");
oOption.text="4";
oOption.value="4";
document.Myform.oSelect.add(oOption);
</script>
<html>
-----------------------------------------------------------------------
<Div id="oDiv">Text</Div>
document.all.oDiv //引用图层oDiv
document.all.oDiv.style
document.all.oDiv.style.display="" //图层设置为可视
document.all.oDiv.style.display="none" //图层设置为隐藏
/*document.all表示document中所有对象的集合
只有ie支持此属性,因此也用来判断浏览器的种类*/
雅虎网易邮箱大战升级 竞争无限量邮箱,我都听朋友说yahoo老是要找ajax程序员呢。。。原来是要基于ajax搞邮箱开发,以后它去yahoo哈哈,说不定和我就是有竞争关系了,到时有得搞了。。。。。
昨天才得到朋友确切消息,确实是真的有得搞了。。。
昨天才得到朋友确切消息,确实是真的有得搞了。。。