我冲进了异地婚姻的牢笼

转自: http://lady.163.com/06/0120/09/27TC1JVT00261IEG.html

阅读提示:婚姻有爱情就足够了吗?不够。她和他是那么相爱,他们的爱跨越了网络到现实的距离,跨越了广西到武汉的距离,还冲破了父母的阻力,可是,当她千里迢迢远嫁武汉后,她却发现,她无论怎么努力,也走不进他的家庭。

采写:记者毕云 通讯员刘勇刚
讲述:馥柳(化名)
性别:女
年龄:25岁
学历:大专
职业:公司职员

时间:1月12日15:00
地点:报社一楼大厅

我去一楼大厅找馥柳(化名)的时候,她正四处张望着,显得局促而紧张。巧的是,平常人来人往的大厅,那一刻,竟然只有她一个人。偌大的空间,她站在中央,营造出一种孤寂的氛围。我蓦地想起,她是一个人千里迢迢来武汉的,远嫁异乡,但现实的婚姻生活令她不知所措,她眼前的处境,不正像此情此景一样吗?

我和他是那么的相爱

我的家乡在广西的一个县城。2001年我大专毕业后进了某地级市的一家银行工作,因为在那里没有什么朋友,加之工作压力大,我逐渐迷上了上网聊天。雨杨(化名)便通过网络聊天闯入了我的生活,一切都是按正常的程序进行:他请求,我接受。雨杨是武汉人,比我大5岁,在一家合资公司工作多年,每年都随着项目在全国各地飞来飞去。或许是和阅历有关吧,他虽然网名“木头”,却很能聊,天南地北无所不谈,让我感觉成熟而沉稳。

之后的几个月里我们一直在网络上联系着,生活如静流缓缓淌过。2001年春节期间,得知他一个人在外工作,我便主动要了他的电话,同是身在他乡的我懂得那种孤独噬人的滋味。就这样,通过电话交流,我们迅速进入热恋。

2002年6月,熟悉而陌生的雨杨终于到广西来找我。天公不作美,那时恰逢广西的雨季,火车被迫停在途中,可是我们灼热的感情无畏无惧,最后,雨杨费尽千辛万苦终于走出大巴站来到我面前。他一派斯文模样,不大的眼睛还躲在一副眼镜后面,这完全不是我心目中白马王子的形象,但是我不曾有半点失落,因为我们真的是一见如故,没有一丝陌生感。

那几天,因为值班,我并没有经常陪雨杨,他总是在我上班的时候把我的房间打扫得干干净净,我的同事们说,他是一个居家好男人,不能错过。

2002年国庆节,我和雨杨相约在贵阳相聚,我们一起游黄果树瀑布,在那美丽而神奇的地方,我们许下诺言:相爱一生。走到半山腰时,我们突然看到了瑰丽的奇观,湖面上升起一道神奇的彩虹桥,我们激动不已,雨杨拥着我说,要照顾我一辈子;我倚着他的肩头,很幸福,很甜蜜。我们一起憧憬着美好未来。

馥柳回忆起那一幕时,脸上洇起幸福的红晕,可以看出来,她是多么地爱雨杨。

这几年,虽然聚少离多,但我们之间的思念却一天比一天浓。每逢节假日,雨杨总是尽可能赶去陪我,常常会因买不到座票而站十几个小时。2003年中秋节,雨杨远在甘肃敦煌出差,竟然赶到我身边陪我一起过节,只为了能和我相偎着看月亮。我总在想,我一定要跟他在一起,无论发生什么,因为他是那么地在乎我。

我抛开一切来到他身边

我小心翼翼地对父母说了我和雨杨的恋情,他们异常坚决地反对。我父母都是教师,都是那种比较理智的人,他们考虑的事情比较多:我的工作、两地的距离、生活习惯、文化背景的差异,等等。他们几乎动用了所有的力量来阻止我,我的长辈们、朋友们、同学们都不厌其烦地劝导我,父亲气急了,甚至威胁说要和我断绝关系。可是这一切又怎能阻止我对雨杨的感情呢,那份思念、那份依恋愈来愈强。

2004年“五一”长假时,我偷偷将雨杨带回家,即将到家门口时我才告诉父母,我不是一个人回来的。我这样先斩后奏,父母当然无法拒绝雨杨进门。但父亲说,欢迎雨杨去做客,但不是作为我的男朋友来款待的。所幸我父母在见到雨杨后态度有所缓和,雨杨以他的诚意、礼貌和“巧言花语”争取我父母的好感,他们不再执意反对了。于是,就在这年圣诞节,我和雨杨趁热打铁领取了结婚证。我们成了法律上的夫妻了,再没有什么能阻止我们在一起了。

2005年3月,我再次违背父母的意愿,毅然辞掉尚未到合同期的工作,收拾起行囊只身来到武汉。

这是我第二次来武汉,第一次还是在2003年“国庆”长假时,我在武汉待了三天,匆匆而来匆匆而去,只是一个客人。而这一次,我是以武汉媳妇的身份来这个陌生的城市,将要在这里长期生活,心里不由涌出一种莫名的紧张与不安。

在火车上我就开始担心起来,我完全听不懂武汉话,和雨杨的家人也不熟悉,如果遇到了什么问题我该怎么办呢?走出汉口火车站时,我没有见到想象中的场面,我找不到雨杨。来接我的是他妹妹,他妹妹告诉我,雨杨临时被派到陕西出差去了,不能来接我。我顿时感到一种莫名的委屈:我仅仅和他的家人见过一面啊,而且事隔两年,他竟连一个过渡期都不给我。我能否跟他的家人相处得好呢?

不过,我又这样安慰自己:我和雨杨是那么相爱,那么大的阻力我们都走到了一起,以后还有什么能让我害怕的呢?无论发生什么,雨杨都会替我遮风挡雨的。
怎么也走不进他的家庭

但我在武汉的生活却超出了我原先的想象。

雨杨的家庭是个大家庭,但他家人的脾气都不怎么好,可以说是三天一小吵五天一大吵,他父亲一吼,整栋楼都可听到。每当这时,我总是心里一颤,急忙跑回自己的房间。我好害怕,我只想逃。我成长的家庭环境很简单,父母连大声说话都很少,我根本不知道该如何面对这样的生活。

2005年11月的一个晚上,因为一件很小的事情,雨杨的父亲和他妹妹突然吵起架来,吵得很凶,我慌忙从房间跑出去看看发生了什么事,只见他父亲举着一把菜刀,妹妹手里拎着一只鞋子,两人不住地叫骂。看着他们就要打起来了,我急忙死死地抱着妹妹。

看到文文静静的馥柳,我想象着她当时是多么的惶恐。

最后,以妹妹的出走结束了这场家庭战争。家里总算平静下来了,可我心里却怎么也平静不了。我一个人站在阳台上默默地流泪。这是什么样的家庭,我怎么会来到这个家庭?这就是我千里迢迢来寻找的幸福生活吗?我好累好累,突然涌出一种想逃离的念头。家里好闷,我想出去呼吸一下外面的新鲜空气,便出去走走。可是,晚上8点,当我回家时却发现门已反锁了,我拿钥匙怎么也打开不了。我不由愣住了,我还在外面呀,这家里还有一个人没回家呢。他们还当我是这个家庭的一员吗?无奈之下,我只好打电话找出差在外的雨杨。

第二天,雨杨回家了,刚说“以后不要反锁门”,结果一家人又吵了起来,完全没办法坐下来心平气和地沟通一下。我和雨杨被推到了其他人的对立面。

我眼睛都哭肿了,原计划第二天去拍婚纱照的,眼睛红肿着没法拍,只得取消。几天后雨杨又出差去了。丢下我一个人尴尬地面对他们一家人。

整整一个月,没有人和我同桌吃饭,我怎么也融入不了这个家庭。我感到了一种可怕的孤独。

这种情形一直延续到圣诞节,为了缓和气氛,我主动提出做我家乡的特色火锅吃,然后打麻将娱乐,家庭气氛这才趋于缓和。

婚期订在2006年3月,我提出请雨杨的姐姐暂回她自己家,腾出地方来让我父母来武汉参加婚礼时住。没想到,姐姐却说,她们这里的风俗是房子不能让外人住。我心里顿时凉了半截,“外人?那你呢?房子好歹是我和雨杨自己买的、自己装修的呀?”当然,这话我只敢在心里说,绝不敢说出口。我不想惹起轩然大波。

我试探着跟婆婆提起,我父母退休后我想把他们接到武汉来住段时间,尽尽孝心,婆婆说,可以啊,在外面租个房子住。我的心又凉了半截。

我想起当初父母反对我嫁给雨杨时,我对他们的承诺:“不管女儿嫁多远,那里永远是你们的家,有你们住的地方。”今天我还敢对父母这样说吗?

这些日子,我总在想,在武汉的这一段生活是不是梦啊?如果是梦该多好,梦醒我就可以回到以前的生活里去了。

我想过离婚,可是又实在舍不得雨杨,我们是那么相爱,我们曾相互许诺过要相守一生的。可是,如果要这样生活一辈子,我真的不甘心,这一切和我憧憬的婚姻生活相差太远了。

记者毕云手记:嫁给他意味着什么

婚姻跟爱情不同的地方是嫁娶。爱情,仅仅是两颗心的交融;婚姻,是两个人的结合,是你嫁了他,他娶了你,这一嫁一娶,就不仅仅是两颗心的事了。

你嫁给了他的同时,也嫁给了他的家庭,他的生活习惯,他的成长环境……有些,是可以依靠爱情的力量改变的,而有些,是爱情不能改变的。所以,结婚,从某种意义上说,既是一件很幸福的事,同时,也是一种冒险行为。可是,无论多么冒险,每天还是有无数的人幸福地结婚,只有极少数人因为不敢冒险而拒绝结婚。

那么相爱的一对人,却不能幸福安宁地生活,而又并不是因为自身的原因,仅仅是因为家庭背景、成长环境不一样,这确实是一件苦恼的事。馥柳为此都苦恼得想离婚了。

馥柳那么爱雨杨,当然不愿意走到离婚那一步。她找我讲述自己的故事,就是想找到一个既不离婚,也能摆脱眼前困境的两全之策。有没有两全之策呢?只要努力,当然是有的。婚姻,在很多时候是一种妥协的艺术。馥柳可以尝试多种办法,比如,与雨杨的父母分开居住,过自己的二人世界;或者自己不要过于敏感,过于计较,专注地做自己的事,转移注意力,宽容或者忽视他们家那种市民习气浓厚的家居生活……试一试吧,不要轻言放弃。

.bash_profile和.bashrc的什么区别


/etc/profile:
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.

/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. su user 时,不执行~/.bash_profile ;  su – user 时,执行~/.bash_profile ;

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取. 非交互式子shell不执行该文件

~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。如果没有~/.bash_profile 则,bash总是会参考~/.bashrc ;但是,如果存~/.bash_profile,则,该文件需要显式包含~/.bashrc ,否则登录shell是不会参考 ~/.bashrc 的; 对于win10上的wsl子系统来讲,win10的cmd中执行的bash.exe默认是一个登录shell(即:bash -l)的行为。方便起见,可以不要有 ~/.bash_profile ,完全只使用 ~/.bashrc 就好了

一个比较NB的bashrc:  http://tldp.org/LDP/abs/html/sample-bashrc.html

参考资料: http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html

 

daima

[mycode=php]
#!/usr/bin/php -f    
/**********************************************************    
说明:该类访问共享内存    
功能:添加、删除、获取共享内存信息,创建或删除共享内存    
    
***********************************************************/    
require_once(“/home/junjie2/php_module/Shm.class.php”);    
    
if(!isset($argv[1]) || isset($argv[1]) && ( $argv[1] == “-h” || $argv[1] == “–help”)){    
    show_help();    
}    
    
$shm = new Shm();    
    
$op = $argv[1];    
    
if($op == ‘create’){        //创建    
    $name = $argv[2];   //键标识    
    $mod = $argv[3];    
    $size = $argv[4];    
    if(strlen($name) != 1){    
        echo “key name only can be a one charactor string\n”;    
        exit(1);    
    }    
    $shm_key = @ftok(__FILE__, $name);    
    if($shm_key == -1){    
        echo $php_errormsg;    
        exit(1);    
    }    
    if(!$shm->create($shm_key,$mod,$size)){    
        echo $shm->get_error() .”\n”;    
        exit(1);    
    }    
    echo “The key of shm is : 0x”.dechex($shm->get_key()) .”\n”;    
    exit(0);    
}    
    
if($op == ‘get’){       //获取变量    
    $key = $argv[2];    //键标识    
    $var = $argv[3];    
    $shm->set_key($key);    
    $val = $shm->get_var($var);    
    show($val) ;    
    echo “\n”;    
    exit(0);    
}    
    
if($op == ‘put’){       //创建    
    $key = $argv[2];    //键标识    
    $var = $argv[3];    
    $val = $argv[4];    
    $shm->set_key($key);    
    if(!$shm->put_var($var,$val)){    
        echo $shm->get_error() .”\n”;    
        exit(1);    
    }    
    exit(0);    
}    
    
if($op == ‘remove’){        //创建    
    $key = $argv[2];    //键标识    
    $var = $argv[3];    
    $shm->set_key($key);    
    if(!$shm->remove_var($var,$val)){    
        echo $shm->get_error() .”\n”;    
        exit(1);    
    }    
    exit(0);    
}    
if($op == ‘delete’){        //创建    
    $key = $argv[2];    //键标识    
    $shm->set_key($key);    
    if(!$shm->delete()){    
        echo $shm->get_error() .”\n”;    
        exit(1);    
    }    
    exit(0);    
}    
    
show_help();    
exit(0);    
function show_help(){    
    global $argv;    
    echo “usage:” . $argv[0] .” \n”;    
    echo “create name mod size \n”;    
    echo “get key var \n”;    
    echo “put key var val \n”;    
    echo “remove key var \n”;    
    echo “delete key \n”;    
    exit(0);    
}    
function show($var) {    
    if(is_array($var)){    
            print_r($var);    
    }else{    
            echo $var;    
    }    
}    
?>
[/mycode]

代码高亮

 
        

  1. #!/usr/bin/php -f
  2.     

  3. <?php
  4.     

  5. /**********************************************************
  6.     

  7. 说明:该类访问共享内存
  8.     

  9. 功能:添加、删除、获取共享内存信息,创建或删除共享内存
  10.     

  11.     

  12. ***********************************************************/
  13.     

  14. require_once("/home/junjie2/php_module/Shm.class.php");
  15.     

  16.     

  17. if(!isset($argv[1]) || isset($argv[1]) && ( $argv[1] == "-h" || $argv[1] == "–help")){
  18.     

  19.     show_help();
  20.     

  21. }
  22.     

  23.     

  24. $shm = new Shm();
  25.     

  26.     

  27. $op = $argv[1]; 
  28.     

  29.     

  30. if($op == ‘create’){        //创建
  31.     

  32.     $name = $argv[2];   //键标识
  33.     

  34.     $mod = $argv[3];
  35.     

  36.     $size = $argv[4];
  37.     

  38.     if(strlen($name) != 1){
  39.     

  40.         echo "key name only can be a one charactor string\n";
  41.     

  42.         exit(1);
  43.     

  44.     }
  45.     

  46.     $shm_key = @ftok(__FILE__$name);
  47.     

  48.     if($shm_key == -1){
  49.     

  50.         echo $php_errormsg;
  51.     

  52.         exit(1);
  53.     

  54.     }
  55.     

  56.     if(!$shm->create($shm_key,$mod,$size)){
  57.     

  58.         echo $shm->get_error() ."\n";
  59.     

  60.         exit(1);
  61.     

  62.     }
  63.     

  64.     echo "The key of shm is : 0x".dechex($shm->get_key()) ."\n";
  65.     

  66.     exit(0);
  67.     

  68. }
  69.     

  70.     

  71. if($op == ‘get’){       //获取变量
  72.     

  73.     $key = $argv[2];    //键标识
  74.     

  75.     $var = $argv[3];
  76.     

  77.     $shm->set_key($key);
  78.     

  79.     $val = $shm->get_var($var);
  80.     

  81.     show($val) ;
  82.     

  83.     echo "\n";
  84.     

  85.     exit(0);
  86.     

  87. }
  88.     

  89.     

  90. if($op == ‘put’){       //创建
  91.     

  92.     $key = $argv[2];    //键标识
  93.     

  94.     $var = $argv[3];
  95.     

  96.     $val = $argv[4];
  97.     

  98.     $shm->set_key($key);
  99.     

  100.     if(!$shm->put_var($var,$val)){
  101.     

  102.         echo $shm->get_error() ."\n";
  103.     

  104.         exit(1);
  105.     

  106.     }
  107.     

  108.     exit(0);
  109.     

  110. }
  111.     

  112.     

  113. if($op == ‘remove’){        //创建
  114.     

  115.     $key = $argv[2];    //键标识
  116.     

  117.     $var = $argv[3];
  118.     

  119.     $shm->set_key($key);
  120.     

  121.     if(!$shm->remove_var($var,$val)){
  122.     

  123.         echo $shm->get_error() ."\n";
  124.     

  125.         exit(1);
  126.     

  127.     }
  128.     

  129.     exit(0);
  130.     

  131. }
  132.     

  133. if($op == ‘delete’){        //创建
  134.     

  135.     $key = $argv[2];    //键标识
  136.     

  137.     $shm->set_key($key);
  138.     

  139.     if(!$shm->delete()){
  140.     

  141.         echo $shm->get_error() ."\n";
  142.     

  143.         exit(1);
  144.     

  145.     }
  146.     

  147.     exit(0);
  148.     

  149. }
  150.     

  151.     

  152. show_help();
  153.     

  154. exit(0);
  155.     

  156. function show_help(){
  157.     

  158.     global $argv;
  159.     

  160.     echo "usage:" . $argv[0] ." \n";
  161.     

  162.     echo "create name mod size \n";
  163.     

  164.     echo "get key var \n";
  165.     

  166.     echo "put key var val \n";
  167.     

  168.     echo "remove key var \n";
  169.     

  170.     echo "delete key \n";
  171.     

  172.     exit(0);
  173.     

  174. }
  175.     

  176. function show($var) {
  177.     

  178.     if(is_array($var)){
  179.     

  180.             print_r($var);
  181.     

  182.     }else{
  183.     

  184.             echo $var;
  185.     

  186.     }
  187.     

  188. }
  189.     

  190. ?>

关于sendmail的三个进程

sendmail的三个进程
        

  1.     
    [root@login ~]# ps aux | grep sendm

        

  2.     

  3.     
    root      7006  0.0  0.1  4908 1892 ?        Ss   Nov11   0:00 sendmail: accepting connections

        

  4.     

  5.     
    root     16179  0.0  0.2  5672 2580 ?        Ss   14:00   0:00 sendmail: ./oAP603RX016159 staffmx1.sina.com.cn.: user open

        

  6.     

  7.     
    smmsp     7014  0.0  0.1  5224 1700 ?        Ss   Nov11   0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

        

PHP 中对变量unset,可以销毁变量中的资源

提示: 您可以先看结论,结论在文章最后。

start…

我们先看两段代码:

测试代码 a.php
        

  1.     
    <?php

        

  2.     

  3.     

        

  4.     

  5.     
    while($i++ < 1000) {

        

  6.     

  7.     
            $a = fsockopen("10.55.38.18",11211);

        

  8.     

  9.     
            unset($a);

        

  10.     

  11.     
            sleep(3);

        

  12.     

  13.     
    }

        

  14.     

  15.     

        

  16.     

  17.     
    ?>

        

测试代码 b.php
        

  1.     
    <?php

        

  2.     

  3.     

        

  4.     

  5.     
    while($i++ < 1000) {

        

  6.     

  7.     
            $a = fsockopen("10.55.38.18",11211);

        

  8.     

  9.     
            sleep(3);

        

  10.     

  11.     
    }

        

  12.     

  13.     

        

  14.     

  15.     
    ?>

        

分析:

        

  1. 两段测试代码只有一个unset的区别,我们只是在测试unset是否是必要的
  2.     

  3. 因为我们打开的连接根本就没有关闭,在变量被unset或被重新赋值时,该变量所使用的连接是否会自动关闭呢?如果不能自动关闭,代码一直运行将会产生大量的连接,这是我们最担心的。
  4.     

  5. 其实我们完全可以不必做这种测试,我们可以在销毁变量前显示关闭连接的,我们也最好这么做,虽然多了几行代码,但是代码的可读性就提高了很多

测试

1.

strace  -tt php a.php
        

  1.     
    10:57:43.474622 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3

        

  2.     

  3.     
    10:57:43.474705 fcntl(3, F_GETFL)       = 0x2 (flags O_RDWR)

        

  4.     

  5.     
    10:57:43.474787 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0

        

  6.     

  7.     
    10:57:43.474898 connect(3, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("10.55.38.18")}, 16) = 1 EINPROGRESS (Operation now in progress)

        

  8.     

  9.     
    10:57:43.474984 poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP, revents=POLLOUT}], 1, 60000) = 1

        

  10.     

  11.     
    10:57:43.523892 getsockopt(3, SOL_SOCKET, SO_ERROR, [29042414236729344], [4]) = 0

        

  12.     

  13.     
    10:57:43.523974 fcntl(3, F_SETFL, O_RDWR) = 0

        

  14.     

  15.     
    10:57:43.524046 close(3)                = 0

        

  16.     

  17.     
    10:57:43.524124 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0

        

  18.     

  19.     
    10:57:43.524201 rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0

        

  20.     

  21.     
    10:57:43.524269 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0

        

  22.     

  23.     
    10:57:43.524331 nanosleep({3, 0}, {3, 0}) = 0

        

2.

strace  -tt php b.php
        

  1.     
    11:13:24.554959 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3

        

  2.     

  3.     
    11:13:24.554998 fcntl(3, F_GETFL)       = 0x2 (flags O_RDWR)

        

  4.     

  5.     
    11:13:24.555029 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0

        

  6.     

  7.     
    11:13:24.555063 connect(3, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("10.55.38.18")}, 16) = 1 EINPROGRESS (Operation now in progress)

        

  8.     

  9.     
    11:13:24.555131 poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP, revents=POLLOUT}], 1, 60000) = 1

        

  10.     

  11.     
    11:13:24.615839 getsockopt(3, SOL_SOCKET, SO_ERROR, [339302416384], [4]) = 0

        

  12.     

  13.     
    11:13:24.615924 fcntl(3, F_SETFL, O_RDWR) = 0

        

  14.     

  15.     
    11:13:24.616017 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0

        

  16.     

  17.     
    11:13:24.616098 rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0

        

  18.     

  19.     
    11:13:24.616173 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0

        

  20.     

  21.     
    11:13:24.616250 nanosleep({3, 0}, {3, 0}) = 0

        

  22.     

  23.     

        

  24.     

  25.     

        

  26.     

  27.     
    11:13:27.618228 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4

        

  28.     

  29.     
    11:13:27.618302 fcntl(4, F_GETFL)       = 0x2 (flags O_RDWR)

        

  30.     

  31.     
    11:13:27.618368 fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0

        

  32.     

  33.     
    11:13:27.618453 connect(4, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("10.55.38.18")}, 16) = 1 EINPROGRESS (Operation now in progress)

        

  34.     

  35.     
    11:13:27.618598 poll([{fd=4, events=POLLIN|POLLOUT|POLLERR|POLLHUP, revents=POLLOUT}], 1, 60000) = 1

        

  36.     

  37.     
    11:13:27.676299 getsockopt(4, SOL_SOCKET, SO_ERROR, [339302416384], [4]) = 0

        

  38.     

  39.     
    11:13:27.676381 fcntl(4, F_SETFL, O_RDWR) = 0

        

  40.     

  41.     
    11:13:27.676679 close(3)                = 0

        

  42.     

  43.     
    11:13:27.676776 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0

        

  44.     

  45.     
    11:13:27.676858 rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0

        

  46.     

  47.     
    11:13:27.676934 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0

        

  48.     

  49.     
    11:13:27.677013 nanosleep({3, 0},  <unfinished …>

        

分析:

        

  1. 测试1中,我们观察 4~8行,打开的连接时立即被关闭的,因为遇到了unset函数,说明: 在变量被unset时,变量所标示的连接立即关闭
  2.     

  3. 测试2中,我们观察14~21行,发现打开的连接是4,但是关闭的连接是3,但是3是上次sleep之前的一个连接,说明: 在变量被重新赋值时,变量所标示的连接立即关闭

结论:

        

  1. 在变量被重新赋值时,变量所标示的连接立即关闭
  2.     

  3. 在变量被unset时,变量所标示的连接立即关闭
  4.     

  5. 不要写这么含蓄的代码。
        
              

    • 如果你是一个连接变量,重新赋值前最好close一下;
    •         

    • 如果你是一个对象,在析构函数中关闭你的连接;当然如果你使用的是长连接,就不必这么做了
    •     

        

关于bdb

       Oracle Berkeley DB最先由加州大学伯克利分校为了移除受到AT&T限制的dbm代码,而从BSD 4.3到4.4时所改写的。经过将近二十年的衍化,目前Oracle Berkeley DB家族已经发展到包含4个独立产品线 – Berkeley DB、Berkeley DB Java 版、Berkeley DB XML和Mobile Server,被应用到行行业业,在全球有超过2亿的部署

        

  • Oracle Berkeley DB 产品家族介绍: http://www.bdbchina.com/2010/09/oracle-berkeley-db-产品家族介绍/
        
        

  • 官方地址: http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html
        

  • BDB中国: http://www.bdbchina.com/

BDB的 11.2.5版本将支持sql语句(DBSQL)。

DBSQL接口是一个1M大小的C语言类库,是一个高效并发的嵌入式数据库。它支持in-memory  cache选项,某些场合可作为内存数据库的一个替代方案。它支持C/C++/Java/PHP等语言接口和通过JDBC/ODBC等驱动程序访问。它运 行于Unix/POSIX、Windows家族、VxWorks、QNX、Android等平台。和SQLite一样,支持SQL92标准。

给fckeditor添加代码高亮功能

什么是UGeSHi?UGeSHi是一个连接器,它把FCKEditor与GeSHi(采用PHP编程语言写的代码高亮插件,目前它已能高亮100多种程序语言)紧密的结合在一起,您可以称为它为FCK插件,也可以称它为连接器(因为代码高亮的核心文件不是本人编写,本人只编写了其与FCKEditor整合的过程)。

UGeSHi的功能:高亮程序代码,使程序代码美观且易读。

为什么采用GeSHi作为核心文件?原因很简单,因为GeSHi高亮足够完美,而且支持高亮的程序语言也很完善。

UGeSHi能高亮多少种程序语言?粗略的说可以高亮100多种,具体细节看下表:

注:若您不想使用其中某种代码的高亮,您可以直接将geshi文件夹下的此语言文件删除,无需更改其它程序代码。

可以自定义高亮的颜色吗?可以,您只需要修改geshi文件下相应的语言文件中$language_data[‘STYLES’]变量即可!

UGeSHi对FCKEditor的兼容性怎么样?您可以像使用其它FCKEditor的插件那样使用UGeSHi,本人是在FCKEditor 2.6.3版本下开发的,其它版本未经测试,但相信兼容性一定非常不错。

UGeSHi对浏览器的兼容性怎么样?将其配置于FCKEditor 2.6.3版本中,本人已在IE5.0,IE6.0,IE7.0,Opera9.62,Firefox3.0.4,Chrome0.3.154.9下测试通过。

这是一张用UGeSHi高亮PHP代码的示意图。

下载使用UGeSHi:http://phpor.net/blog/attachment/ugeshi.zip
使用方法:

1. 将ugeshi文件夹存放于fckeditor/editor/plugins/目录下;
2. 编辑fckconfig.js文件,添加 FCKConfig.Plugins.Add(‘ugeshi’, "zh-cn’);
3. 设置FCKEditor工具栏,FCKConfig.ToolbarSets["Default"]值中添加:UGeSHi (注意大小写)

清空浏览器临时文件,开始体验吧…

实例:

测试
        

  1.     
    <?php

        

  2.     

  3.     
    error_reporting (1);

        

  4.     

  5.     
    header(‘Content-Type:text/plain; charset=utf-8’);

        

  6.     

  7.     
    if (!empty($_POST[‘UGC’]) && !empty($_POST[‘UGL’])) {

        

  8.     

  9.     
        include_once(dirname(__FILE__) . ‘/geshi.php’);

        

  10.     

  11.     
        if (get_magic_quotes_gpc()) $_POST[‘UGC’] = stripslashes($_POST[‘UGC’]);

        

  12.     

  13.     
        $_POST[‘UGC’] = stripslashes($_POST[‘UGC’]);

        

  14.     

  15.     
        $_POST[‘UGL’] = strtolower($_POST[‘UGL’]);

        

  16.     

  17.     
     

        

  18.     

  19.     
        $GeSHi = new GeSHi($_POST[‘UGC’], $_POST[‘UGL’]);

        

  20.     

  21.     
        //$GeSHi->enable_classes();

        

  22.     

  23.     
        $GeSHi->set_header_type(GESHI_HEADER_NONE);

        

  24.     

  25.     
        $GeSHi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);

        

  26.     

  27.     
        $GeSHi->enable_keyword_links(false);

        

  28.     

  29.     
        $GeSHi->set_overall_style();

        

  30.     

  31.     
        $GeSHi->set_tab_width(4);

        

  32.     

  33.     
        echo $GeSHi->parse_code();

        

  34.     

  35.     
    }

        

  36.     

  37.     
    ?>