cvs基本命令

WEB2.0 jackxiang 2008-3-21 19:17
CVS基本命令      
goldway 发表于 2006-8-17 13:56:00

1. 检出源代码操作(cvs checkout)

    *
      将项目工作库目录取到个人工作库:cvs checkout dirname
    *
      将项目工作库中某个文件取到本地个人工作库:cvs checkout filename

2. 将文件同步到最新的版本(cvs update)


   开发人员每天开始工作前,请将项目工作库中的最新版本代码文件取到个人工作库中,养成"先同步,后修改"的习惯;
   更新单个文件:cvs update file_name
   更新目录:cvs update (不指定文件名,cvs将同步所有子目录下的文件)
   注意:第一次导出文件以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。


3. 文件提交(cvs commit)


   确认文件修改写入CVS库:cvs commit -m "注释内容" file_name;

   建议每次文件提交都只修改一个文件,以避免多个文件以同样注释commit到CVS库里了;每次确认提交时,请认真填写修改注释,以帮助其他开发人员了解修改的原因;



4. 添加(cvs add)


   添加某个目录操作:cvs add dir_name
   添加某个文件操作:cvs add new_file;
   然后确认添加文件并注释
    cvs commit -m "write some comments here"
  对于图片,Word文档等非纯文本的项目,需要使用cvs add -kb选项按2进制文件方式导入,否则有可能出现文件被破坏的情况;
   cvs add -kb readme.doc

5. 删除文件(cvs rm)

  将某个文件物理删除操作:cvs remove -f file_name
  确认删除文件并注释cvs commit -m "why delete file"
  查看修改历史(cvs log)
  查看日志操作命令:
    cvs log file_name
    cvs log dirname
  操作历史命令:cvs history file_name
  查看版本操作:cvs status -v filename
  查看当前文件不同版本的区别:
    cvs diff file_name
    cvs diff -c file_name 查看对照的输出

6. 更名
   cvs里没有cvs move或cvs rename两个命令;
     可先移动老命名文件:cvs remove old_file_name;
     然后再增加新命名文件实现更名操作:cvs add new_file_name;
    例:将文件tt.c改名为test.c,具体操作如下
      mv tt.c test.c
      cvs remove -f tt.c
      cvs commit -m "remove for rename" tt.c
      cvs add test.c

7. 导出不带CVS目录的源代码文件
   每个开发目录下,CVS都创建了一个CVS/目录。里面有文件用于记录当前目录和CVS库之间的对应信息。项目发布的时候一般不希望把文件目录还带着含有 CVS信息的CVS目录导出,这个一次性的导出过程使用cvs export命令,不过export只能针对一个TAG或者日期导出;
   cvs export -r release1 project_name;
   cvs export -D 20021023 project_name
   cvs export -D now project_name

8. 基线标识
   多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,方便以后按照这个阶段里程碑版本号导出项目,同时也是项目的多个分支开发的基础;
   确认版本基线cvs tag release_1_0
   开始一个新的版本基线;
      cvs commit -r 2 标记所有文件开始进入2.0的开发
      cvs update -j release_1_0_patch_1
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <strstream>
#include <fstream>  //ifstream fin("ent_list");
#include "../../entadmin_g/src/enterpriseManager.hpp"
char file_path1[1024]="/tmp/ent_not_exit.log";   //enterprise.domain的数据库select语句成功日志
char file_path2[1024]="/tmp/ent_failed_modify.log";   //enterprise.domain的数据库select语句失败日志
char file_path3[1024]="/tmp/ent_successful.log";  //enterprisemail.domain数据库的update修改成功日志
char file_path4[1024]="/tmp/startent_not_exit.log";  //enterprisemail.domain数据库的update语句修改失败日志
char file_path5[1024]="/tmp/startent_failed_modify.log";  //enterprisemail.domain蕌pdate语句修改失败日志
char file_path6[1024]="/tmp/startent_successful.log.log";  //enterprisemail.domain蕌pdate语句修改失败日志
int opt_type = 0;
char opt_file[1024];
void trim(string& str)
{
str.erase(str.find_last_not_of(' ')+1, string::npos);
str.erase(0, str.find_first_not_of(' '));
}

using namespace std;
int main(int argv,char * argc[])//main函数体
{  
  if(argv!=3)
  {
    cout << "_____________________请在ent_list文件放入企业ID_______________\n";
    cout << "|然后请传入参数? (0,1)                                         |\n";
    cout << "|传入1:ent_dated_restet 0 后跟关闭企业ID的文件      |\n";
    cout << "|传入0:ent_dated_restet 1 后跟打开企业的ID文件             \n";
    cout << "|______________________________________________________________|\n";
    cout << "|_你只要将要关闭或者打开的企业ID放到ent_list由1或者0来控制即可_|\n";
    cout << "| Warn:  连续一行一个企业ID(domain.enterpriseid)       \n";
    cout << "|Example:  scan_enterprise_dated 0 /tmp/open_enterprise.txt|\n";
    cout << "|______________________________________________________________|\n";
    return 0;
        
  }
  time_t t;
  struct tm *x;
  time( &t );
  x = localtime(&t);
  opt_type=atoi(argc[1]); //判断是关闭企业还是恢复企业  
  strcpy(opt_file,argc[2]); //传入的文本文件,读取企业ID  
  enterprise *_enterprise = new enterprise( );
  string errMsg;
  //读取文本
  FILE*   fp;  
    fp   =   fopen(opt_file,"r");  
  if   ( 0==fp )
  {   cout << "What you put the filename is not exist!\n ";
    return 0;
  }  
  fclose(fp);
  ifstream fin(opt_file);
  //读取结束
  ofstream fout1(file_path1,ios_base::app);//enterprise.domain的数据库select语句成功日志
  ofstream fout2(file_path2,ios_base::app);//enterprise.domain的数据库select语句失败日志
  ofstream fout3(file_path3,ios_base::app);//enterprisemail.domain数据库的update修改成功日志
  ofstream fout4(file_path4,ios_base::app); //enterprisemail.domain数据库的update语句修改失败日志
  ofstream fout5(file_path5,ios_base::app); //enterprisemail.domain数据库的update语句修改失败日志
  ofstream fout6(file_path6,ios_base::app); //enterprisemail.domain数据库的update语句修改失败日志
  string str;
  while(getline(fin,str))
  {    
    trim(str);//去掉读出的一行前后空格
    char buffer[1024];
    int str_to_int=atoi(str.c_str());  
    sprintf(buffer,"%d",str_to_int);  
    if(strcmp(str.c_str(),buffer)!=0)
    {  
      cout <<str<<"Have contain special character in one line,please check...\n";
      fout2 <<  x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<  "Enterpriseid:\t" <<str <<"\tHave contain special character in one line,please check...\n";
      continue;
    }  
    memset(buffer,0,1024);//销毁临时变量
    //判断是否是数字    
    if (!str.length())
    {
      printf("请检查一下你的./ent_list里面是否有空行...\n");
      return 0;
    }
  
    enterprise _enterprise1;
    string enterpriseID;
    enterpriseID=str;
    if ( !_enterprise1.getEnterpriseInfo( atoi( enterpriseID.c_str() ), errMsg ) )
    {
      cout <<errMsg;  
      fout1 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<enterpriseID<<"\t"<< errMsg<<"\n";
      delete _enterprise;
      return 0;
    }
    
    if ( opt_type == 0 )
    {

  
      if ( !_enterprise->stopDomain( atoi( enterpriseID.c_str() ), errMsg ) )
      {
        fout2 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<enterpriseID<<"\t"<< errMsg<<"\n";
        delete _enterprise;
        return 0;
      }
      fout3 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<enterpriseID<<"\t"<<"禁用企业成功"<<"\n";
      delete _enterprise;
      return 0;
    }

    if ( opt_type == 1 )
    {

      if ( !_enterprise->startDomain( atoi( enterpriseID.c_str() ), errMsg ) )
      {
        fout5 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<enterpriseID<<"\t"<< errMsg<<"\n";  
        delete _enterprise;
        return 0;
      }
      fout6<< x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<enterpriseID<<"\t" << errMsg<<"\n";  
      delete _enterprise;
      return 0;
    }
  

  }
  fin.close();
  fout1.close();
  fout2.close();
  fout3.close();
  fout4.close();
  fout5.close();
  fout6.close();

  }
  



all: scan_enterprise_dated.cgi
scan_enterprise_dated.cgi:
  g++ -o ./scan_enterprise_dated.cgi scan_enterprise_dated.cpp ../../db/rpcserver/common/bin/freebsd/rpcsql_g.a ../../entadmin_g/oldlib/libStrLib.a ../../db/rpcserver/qmail/bin/freebsd/ent_rpcserver_clnt.a ../../db/rpcserver/qmail/ini.o ../../entsystem/email/entaddress/bin/freebsd/ent_domain.o  ../../entsystem/email/entaddress/bin/freebsd/ent_add_tool.o -L../../entadmin/lib/ -I../../entadmin/lib/  
clean:
  rm -Rf scan_enterprise_dated.cgi
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <strstream>
#include <fstream>  //ifstream fin("ent_list");
#include "/usr/local/mysql/include/mysql/mysql.h"
//const char mysqlServer[20] = "172.16.1.77";
const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
const char database2[20]="enterprisemail";
unsigned  int port=3306;
int flag=0;
char name[1024];
char query[1024];
char query2[1024];
char file_path[1024]="./ent_list";   //过期企业ID 数据文件
char file_path1[1024]="/tmp/enterprise.domain.successful.log";   //enterprise.domain的数据库select语句成功日志
char file_path2[1024]="/tmp/enterprise.domain.failed.log";   //enterprise.domain的数据库select语句失败日志
char file_path3[1024]="/tmp/enterprisemail.domain.successful.log";  //enterprisemail.domain数据库的update修改成功日志
char file_path4[1024]="/tmp/enterprisemail.domain.failed.log";  //enterprisemail.domain数据库的update语句修改失败日志
char file_path5[1024]="/tmp/enterprisemail.domain.successful.recover.log";  //enterprisemail.domain数据库的update语句修改失败日志



using namespace std;
//去掉读出的一行的前后空格
void trim(string& str)
{
str.erase(str.find_last_not_of(' ')+1, string::npos);
str.erase(0, str.find_first_not_of(' '));
}
//去前后空格函数结束

int main(int argv,char * argc[])//main函数体
{
  
  time_t t;
  struct tm *x;
  time( &t );
  x = localtime(&t);

  MYSQL myData,myData2,*sock,*sock2;
  MYSQL_RES *res;
  MYSQL_FIELD *fd;
  MYSQL_ROW row;
  mysql_init( &myData );
  mysql_init( &myData2 );
  if(argv!=2)
  {
    cout << "_____________________请在ent_list文件放入企业ID_______________\n";
    cout << "|然后请传入参数? (1,0)                                         |\n";
    cout << "|传入1:ent_dated_restet 1  为打开过期续费企业           |\n";
    cout << "|传入0:ent_dated_restet 0  关闭过期没有续费企业            \n";
    cout << "|______________________________________________________________|\n";
    cout << "|_你只要将要关闭或者打开的企业ID放到ent_list由1或者0来控制即可_|\n";
    cout << "| Warn:  连续一行一个企业ID(domain.enterpriseid)       \n";
    cout << "|______________________________________________________________|\n";
    return 0;
        
  }
  flag=atoi(argc[1]); //判断是关闭企业还是恢复企业
  if(!(sock = mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0)))
  {
    printf("can not connect mysql error...(enterprise.domain)\n");
    return 0;
        
  }
  if(!(sock2 = mysql_real_connect( &myData2, mysqlServer, user, password, database2,port,NULL,0)))
  {
    printf("can not connect mysql error...(enterprisemail.domain)\n");
    return 0;
  }
  //读取文本
  ifstream fin(file_path);
  ofstream fout1(file_path1,ios_base::app);//enterprise.domain的数据库select语句成功日志
  ofstream fout2(file_path2,ios_base::app);//enterprise.domain的数据库select语句失败日志
  ofstream fout3(file_path3,ios_base::app);//enterprisemail.domain数据库的update修改成功日志
  ofstream fout4(file_path4,ios_base::app); //enterprisemail.domain数据库的update语句修改失败日志
  ofstream fout5(file_path5,ios_base::app); //enterprisemail.domain数据库的update语句修改失败日志

  string str;
  while(getline(fin,str))
  {    
    trim(str);//去掉读出的一行前后空格
    char buffer[1024];
    int str_to_int=atoi(str.c_str());  
    sprintf(buffer,"%d",str_to_int);  
    if(strcmp(str.c_str(),buffer)!=0)
    {  
      cout <<str<<"Have contain special character in one line,please check...\n";
      fout2 <<  x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<  "Enterpriseid:\t" <<str <<"\tHave contain special character in one line,please check...\n";
      continue;
    }  
    memset(buffer,0,1024);//销毁临时变量
    //判断是否是数字    
    if (!str.length())
    {
      printf("请检查一下你的./ent_list里面是否有空行...\n");
      return 0;
    }
    
    strcpy(query,"select name from `domain` where name not like \"%shenbak\" and  enterpriseid=");
    strcat(query,str.c_str());
    cout<<query<<"\n";
    if( mysql_query(&myData, query) != 0 )
    {
    fout2 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<< "Enterpriseid:\t" <<str <<"\t Failed!\n";   //失败的select 查询记录到日志enterprise.domain.failed.log
    continue;
    }else{
        res = mysql_store_result( &myData);
        while(row = mysql_fetch_row(res))
        {
          fout1 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<"Enterpriseid:\t" << str <<"\tname:\t" << row[0] <<"\t Select sql Run Successful!\n";//写日志
          strcpy(name,row[0]);
        
               
          if(flag==0)  
          {
            strcpy(query2,"update\t`domain` set name=replace(name,name,concat(name,\"shenbak\")) where name not like \"%shenbak\" and name=");
            strcat(query2,"'");
            strcat(query2,name);
            strcat(query2,"'");
            cout << query2<<"\n";
          }
          if(flag==1)  
          {
          strcpy(query2,"update `domain` set name=replace(name,\"shenbak\",\"\") where name like \"%shenbak\" and name=");          
          strcat(query2,"'");
          strcat(query2,name);
          strcat(query2,"shenbak");
          strcat(query2,"'");
          }
          if( mysql_query(&myData2, query2) != 0 )
          {
          fout4 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<< "Enterpriseid:\t" << str <<"\tname:\t"<<name<<"\tupdate query failed!\n";
          continue;
          }else{
        
            if(flag==0)  
            {
          
              fout3 << x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<"Enterpriseid:\t" << str << "\tname:\t" <<name<<"\tupdate query successful!\n";
            //写屏蔽日志
            }  
            if(flag==1)
            {
              fout5 <<x->tm_year+1900 <<"年"<<x->tm_mon+1<<"月"<<x->tm_mday<<"日"<<x->tm_hour<<"点"<<x->tm_min<<"分"<<x->tm_sec<<"秒\t"<<"Enterpriseid:\t" << str << "\tname:\t" <<name<<"\tupdate query successful!\n";
          //写日恢复日志
          
            }  
                        
                    }
            
        memset(name,0,1024);  
        }  
      str="";
      memset(query,0,1024);  
      memset(query2,0,1024);  
          }
  }
  mysql_free_result(res);
  mysql_close(&myData);
  mysql_close(&myData2);
  fin.close();
  fout1.close();
  fout2.close();
  fout3.close();
  fout4.close();
  fout4.close();
  
  cout << "\nAll task run ok....Goodbye!\n";
}
师兄恢复单身已经有相当时日,我揣度他一定是个很挑剔的人,就问他需要一个什么样的新妻子。
    他罗列:体贴、宽厚、会照顾人,心疼寡居的母亲,也能善待自己的孩子。
    这叫什么条件什么理想?一点也不高远么!
    可他说要找到这样的女子太难了。

    几日前安慰一离婚的女友,陪她探讨如果再婚应该选择什么样的丈夫。
    我俩数来数去,认为好丈夫应该是这样的:体贴、会照顾人心疼人、诚实心软,愿意踏踏实实地陪伴自己。
    可找到这样的男子太难了!我的女友交游广阔,周围不乏成功人士,却在为这么个最低纲领而黯然伤神。

    他们的烦恼让我忽然明白了,为什么在这个繁华的人气的充满男男女女的城市里,寂寞的灵魂如此之多。
    城市需要什么样的人?
    是个圆滑的社会人。
    他或她要成功,首先锻炼智商,然后磨炼情商。接着,进入刀光剑影的办公室和险象环生的恋爱场,一番搏杀一番受伤一番反思一番领悟,最终成长成让自己更富贵,让敌人难下手的钢铁战士。笑里藏刀、阳奉阴违、花言巧语…虽然心中反对也要五毒俱全;即使能有一点点洁身自好的本能尚在,也需容下那些表面仁义道德,实乃男盗女娼的阴贼小人。
    俗话说,狗生九子,一只为獒。它杀出重围,吃掉另外八个兄弟才能成为犬中之王。我们没那么惨烈,却哪里能不湿鞋?即使不是成功人士,也在一天天讨生活的消磨中,把传统美德丢空了。
    所以,你要选精明强干的男子遍地都是、才华横溢的女人绵绵不绝,而想挑出个淳朴善良老实肯吃亏的,那是打着灯笼都照不着啊!
    在夜深人静,孤枕难眠之时,理想中的爱人在脑子里慢慢升腾。按照磁场的理论,缘分的天空会把有缘人拉在一起。可这个缘分在哪里呢?大家的诉求完全不一样,都想着收获更多,付出更少,都想着让对方承受损失。月老有红线都不敢牵呀。
    不得不承认,人到中年组建婚姻更不容易。虽然不再强求别人的出人头地富贵荣华,但大家对情感的付出谨慎多了。
    因为在年轻的时候,我们都是游击队。没有枪没有炮,没有产业没有股票。我们有的,就是浑身洋溢的爱的激情。不管对方如何,我们都能赤胆忠心地爱一次或几次,献出所有青春。很多人不要他财产不要他名分不要他年轻也不要他权位。因为年轻的人可以犯错误,即使丢盔卸甲、只赢得仓皇北顾,却还有卷土重来,东山再起的希望。大家可以不考虑未来不考虑结果。
    自然,很简单,你喜欢美女帅哥就去找一个来,你喜欢黄金美钞就投怀献抱,你喜欢成熟才情或者向往权威手段都可以只记一点不记其余。

    我发现,我的朋友们当时的择偶取向,男孩子们喜欢像猫一样精灵,像狐狸一样妩媚的,整日想给她们叠被铺床;而躲避那些一心想着好好过日子、勤劳勇敢的。女孩子则喜欢情商高能力大,处处游刃有余的,想像圣女一样奉献自己的一切;却最讨厌实心实意暗恋单恋,像个尾巴一样跟着自己的。
    剩余的,对方的家庭有多末复杂、背景有多么浑浊、性格是多么乖戾,甚至身体有什么疾患,无所谓!
    但到了一定年龄,不是那么回事啦。
    过去心甘情愿给夫人端洗脚水做菜洗衣的痴情男子长大了,以前可以断然抛弃父母愿意牺牲一切的傻丫头顿悟啦。人生从一场爱之梦变成了一场战争。再婚就要改变打法,游击战变成了阵地战。
    孑然一身的战士,现在有了很多放不下的牵挂,财产是血汗堆积,子女是亲情所系,过去的历史虽不成功却要保卫,眼前的生态环境是苦苦经营而成哪能轻易打破?所以男人要防新媳妇对孩子不好,女人最怕新婆婆干扰太多,成功者要防图财产的把孩子继承权搞乱,失意的要防势利的新家风刀霜剑。
    所以,新的婚姻谁都盼望,却希望那人一定要无条件地对自己好,愿意奉献和牺牲,因为只有这样,才能保住现有的,获得更多美好的。
    可自从《爱的奉献》唱红了中国,就再也没人愿意作牺牲的那一方了。
    现在想来,年轻的时候把自己稀里糊涂“婚”了,都是因为迷糊和自以为是,当下呢,吃过亏打过败仗的人知道世界上找新配偶的人都狡猾得像精算师。别人算了自己不算,岂不被卖了还给人数钱,所以也要细细盘算。
    要说年轻时的婚姻是糊涂蛋遭逢二百五的话,中年则应该叫算盘子应对计算机了。
    可最聪明的人往往最寂寞,最警醒的人往往最痛苦。所以,总的来说,人生是苦海无涯,草率的婚姻让人们因为出昏着吃尽苦头,经不起变化的婚姻让大家因为不能坚持受尽伤害,而现在,想重获新生,却因为太清醒而无路可走。
    我几乎对好友们束手无措。
    但有一种隐隐的感觉,游击战的打法生机盎然最富生命力,我们在浑身都是负累的情况下,抛下点辎重,轻装上阵,也许获胜的把握稍大一些。成语有壮士断腕,兵法有丢卒保车,可不知在这场男女间的持久战中,要签订个和平的波兹坦公告,得经历多少轰炸与厮杀。
    最近接到母校一位老师的短信:人生的两剂良药--吃苦和吃亏。
    药毕竟是药,就看这个苦字和亏字我都有黄莲的感觉。所以,我们都想,把那良药给家里那一半吃了,治治对方的自私病。
    唉,真是想的美。
    可能我们大家想象的爱人类型真的在中国的大城市已经绝种了,即使侥幸存活,也被其他有运气的人圈养在人家的动物园里。

http://www.mysql.com/doc/en/C.html  
    
  [转贴自http://homepage.qdcatv.com.cn/antonio/mysql/mysql.htm]  
    
  执行一个查询有以下几个步骤要做。首先执行一个查询,然后保存结果,  
  得到的是一个子集。这里是一个小例子:  
    
  #include    
  #include    
  #include   "mysql.h"  
    
  MYSQL   mysql;  
  MYSQL_RES   *res;  
  MYSQL_ROW   row;  
    
  void   exiterr(int   exitcode)  
  {  
  fprintf(   stderr,   "%s\n",   mysql_error(&mysql)   );  
  exit(   exitcode   );  
  }  
    
  int   main()  
  {  
  uint   i   =   0;  
    
  if   (!(mysql_connect(&mysql,"host","username","password")))    
  exiterr(1);  
    
  if   (mysql_select_db(&mysql,"payroll"))  
  exiterr(2);  
    
  if   (mysql_query(&mysql,"SELECT   name,rate   FROM   emp_master"))  
  exiterr(3);  
    
  if   (!(res   =   mysql_store_result(&mysql)))  
  exiterr(4);  
    
  while((row   =   mysql_fetch_row(res)))   {  
  for   (i=0   ;   i   <   mysql_num_fields(res);   i++)    
  printf("%s\n",row[i]);  
  }  
    
  mysql_free_result(res);  
  mysql_close(&mysql);  
  }  
    
    
  mysql_query   函数将把查询送给服务器,如果查询成功,调用mysql_store_result  
  函数将分配一个MYSQL_RES   结构并且重新从服务器获得一个结果集。你可以用    
  mysql_fetch_row   函数来查看数据。这样做你将获得一个   MYSQL_ROW   指针指向数  
  据中的一行。   MYSQL_ROW   指针是一简单的字符串数组。所有的数据类型被转换成  
  字符串送到客户端。  
      
    
  mysql_num_fields   函数将告诉你返回的列数。你可以继续调用   mysql_fetch_row  
  直到它返回一个空指针以得到查询中的每一行。  
    
  注意在这个例子里,我们没有检查有空指针的列。如果你不使用非空列的表,那么  
  你必须检查一个特殊行的列是否为空。  
    
  一旦你使用完毕一个结果集,你必须释放它。这通过   mysql_free_result   来完成。  
    
  最后调用   mysql_close   来关闭你和数据库之间的连接。  
    
  查看结果集  
    
  你可以不用调用   mysql_fetch_row   就查出返回的结果集共有多少行。这由  
  int   mysql_num_rows(MYSQL_RES   *result)来完成。  
  改变到被下一个   mysql_fetch_row   调用返回的行,你可以用    
  void   mysql_data_seek(MYSQL_RES   *res,   uint   offset)   改变到任意一行。  
    
  获得更多的信息  
    
  你可以使用这几个额外的函数来找出关于一个查询的更多的信息,并从服务器获得  
  这些信息。  
  如果你执行一个UPDATE,   INSERT   或者   DELETE   查询,你可以用    
  int   mysql_affected_rows   来查出共有多少行数据被你影响到。  
  如果在你的数据库里有二进制数据,那么得知数据的长度将是有用的。unsigned    
  int   *mysql_fetch_lengths(MYSQL_RES   *mysql)   将返回一指出了结果集中每一列  
  的长度的整型数组。  
    
  当你插入一个带有   AUTO_INCREMENT   列的表的时候,你可以用    
  int   mysql_insert_id(MYSQL   *mysql)   来查出生成的那一行的ID。  
======================

我连过成功了!  
    
  #include   "/include/mysql/mysql.h"   /*为绝对路径*/    
  #include   <stdio.h>    
    
  int   main(int   argc,char   *argv[])    
  {    
  char   *user   =   "root",   *pwd   =   "mysql",   *dbname   =   "mysql";    
  MYSQL   mysql;    
  MYSQL_RES   *mysql_ret;    
  MYSQL_ROW   mysql_row;    
  unsigned   long   num_rows;    
  int   ret;    
    
  mysql_init(&mysql);    
    
  if(mysql_real_connect(&mysql,NULL,user,pwd,dbname,0,NULL,0))    
  {    
  printf("Connection   success!\n");    
  ret   =   mysql_query(&mysql,"select   *   from   user");    
  if(!ret)    
  {    
  printf("Query   Success!\n");    
  mysql_ret   =   mysql_store_result(&mysql);    
  if(mysql_ret   !=   NULL)    
  {    
  printf("Store   Result   Success!\n");    
  num_rows   =   mysql_num_rows(mysql_ret);    
  if(num_rows   !=   0)    
  {    
  printf("%d\n",num_rows);    
  while(mysql_row   =   mysql_fetch_row(mysql_ret))    
  {    
  printf("%s\t%s\t%s\t%s\t%s\t%s\n",mysql_row[0],mysql_row[1],mysql_row[2],mysql_row[3],mysql_row[4],mysql_row[5]);    
  }    
  }    
  else    
  {    
  printf("mysql_num_rows   Failed!\n");    
  exit(-1);    
  }    
  mysql_free_result(mysql_ret);    
  exit(0);    
  }    
  else    
  {    
  printf("Store   Result   Failed!\n");    
  exit(-1);    
  }    
  }    
  else    
  {    
  printf("Query   Failed!\n");    
  exit(-1);    
  }    
  }    
  else    
  {    
  printf("Connection   Failed\n");    
  exit(-1);    
  }    
  }    
  如果你包含了正确的头文件而在连接的时候,   告诉你没有符号连接    
  你应该连接你需要的库    
    
  我的/lib/mysql/libmysqlclient.so下面    
  gcc   -L/lib/mysql   -lmysqlclient   -o   tes   tes.c   进行编译  
    
    
  RedHat_shu@hotmail.com
Simple Demo:


concat和Max混合用法:


select * from domain where enterpriseid='95358';

update `domain` set name=replace(name,name,concat(name,"shenbak")) where name not like "%shenbak" and enterpriseid='95358' ;
%表示后面有shenbak的,但是加了not,于是就没有问题了!

还回来:
update `domain` set name=replace(name,"shenbak","") where name like "%shenbak" and enterpriseid='95358';

update `film_info` set IMDB=REPLACE ( IMDB,'tt','');//将IMDB码的tt去掉,好建立索引


在数据转换的时候需要用到mysql的replace函数,这里简单介绍一下!

比如你要将 表 tb1里面的 f1字段的abc替换为def

Update tb1 SET f1=REPLACE(f1, 'abc', 'def');

REPLACE(str,from_str,to_str)    
在字符串   str   中所有出现的字符串   from_str   均被   to_str替换,然后返回这个字符串:    
mysql>   Select   REPLACE('www.mysql.com',   'w',   'Ww');  
                  ->   'WwWwWw.mysql.com'  
这个函数是多字节安全的。

示例:
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'</td>',
'' );
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'</tr>',
'' );
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'<tr>',
'' );      
Update  `dede_archives`  SET title=  REPLACE ( title,
'大洋新闻 - ',
'' );  
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'../../../../../../',
'http://special.dayoo.com/meal/' );

mysql replace

用法1.replace intoreplace into table (id,name) values(‘1‘,‘aa‘),(‘2‘,‘bb‘)
此语句的作用是向表table中插入两条记录。
2.replace(object, search,replace)
把object中出现search的全部替换为replaceselect replace(‘www.163.com‘,‘w‘,‘Ww‘)--->WwW wWw.163.com

例:把表table中的name字段中的 aa替换为bbupdate table set name=replace(name,‘aa‘,‘bb‘)

本文转载自『北漂石头的博客』
http://www.niutian365.com/blog/
更多精彩内容,欢迎访问北漂石头的博客!
#include <string>
#include <iostream>
#include <strstream>
#include <fstream>  //ifstream fin("ent_list");
#include "/usr/local/mysql/include/mysql/mysql.h"
const char mysqlServer[20] = "172.16.1.77";
//const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
unsigned  int port=3306;

using namespace std;

//去掉读出的一行的前后空格
void trim(string& str)
{
str.erase(str.find_last_not_of(' ')+1, string::npos);
str.erase(0, str.find_first_not_of(' '));
}
//去前后空格函数结束

int main()//main函数体
{
  MYSQL myData;
  
  MYSQL_RES *res;
  MYSQL_FIELD *fd;
  MYSQL_ROW row;
  int i,j,rowCount = 0,colCount = 0;
  char query[1024];
  
  mysql_init( &myData );
  if(!mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0))
  {
    printf("connect mysql error!\n");
        
  }
  //读取文本
  
  ifstream fin("ent_list");
  string str;    
  while(getline(fin,str))
  {  
    trim(str);//去掉读出的一行前后空格
    //cout<<str<<"\n";
    strcpy(query,"select path from enterprise where enterpriseid=");
    strcat(query,str.c_str());
    //fprintf(stderr,"FILE=%s,LINE=%d,query=%s\n",__FILE__,__LINE__,query);
    
    if( mysql_query(&myData, query) != 0 )
    {
    printf("query error!\n");
    return 0;
    }else{
    
    
        res = mysql_store_result( &myData );
        rowCount = (int) mysql_num_rows( res );
        colCount = (int) mysql_num_fields( res );
        //printf(" result: %d records found\n fields: %d \n", rowCount, colCount);
        row = mysql_fetch_row( res );
        for(i = 0; i < rowCount; i++)
        {
          
          for( j = 0; j < colCount; j++)
            {
            cout <<"cd ";
            printf("%s", row[j] );
            cout <<";touch .expire;";
            cout<<"\n";
            }

        }
    
      }

  
  }




  

  
}





  在该网站上注册一个帐号,就可以拥有该站提供的多台Solaris、Fedora等Unix/Linux服务器的登录帐号。对于想学习Unix/Linux系统,却又苦于没有合适的环境和条件的教师、学生和工程人员来说,这是一份不错的免费资源。

  Unix体验中心:http://www.unix-center.net/
  可以上传、下载文件的SSH客户端软件--SecureCRT:http://blog.s135.com/read.php/207.htm

  以下简介信息摘自Unix体验中心:

  Unix体验中心(Unix-Center.Net)的目标是为研究、学习和使用各种版本的Unix和类Unix操作系统的教师、学生和工程技术人员提供一个体验和测试各种版本的Unix和类Unix系统的软硬件平台。该平台能够为所有注册用户免费提供如下服务:

  -- SSH登录
  -- C/C++,Fortran,Java,Ruby,Python,Perl,Common Lisp等多种语言开发工具

  本站的注册用户可以远程登录进入多个不同的系统,享受该系统上普通用户的所有权限,学习和使用各种版本的Unix和类Unix操作系统的常用命令和功能。开发人员更可以将自己正在开发的应用程序上载到Unix体验中心的服务器,在不同的软硬件平台上编译和运行,充分体验多处理器、多核、多线程的高性能计算的乐趣。

  到目前为止,本站已经有五个系统正式投入使用,如下:

  T1000/Solaris系统:
  硬件环境:1 颗UltraSPARC T1芯片,CPU 主频为1.0 GHz,八核四线程配置8 GB内存
  软件环境:Solaris 10 Update 3 for SPARC
  机器域名:t1000.unix-center.net(公网),t1000-edu.unix-center.net(教育网)

  X4100/Solaris系统:
  硬件环境:2 颗双核单线程的AMD Opteron 280芯片,CPU 主频为2.4 GHz,配置4 GB内存
  软件环境:Solaris 10 Update 3 for x86/x64
  机器域名:x4100.unix-center.net(公网),x4100-edu.unix-center.net(教育网)

  PE860/Solaris系统:
  硬件环境:1 颗双核单线程的Intel Xeon 3050芯片,CPU 主频为2.13 GHz,配置1 GB内存
  软件环境:Solaris 10 Update 3 for x86/x64
  机器域名:solaris.unix-center.net(公网),solaris-edu.unix-center.net(教育网)

  PE860/Fedora系统:
  硬件环境:1 颗双核单线程的Intel Xeon 3050芯片,CPU 主频为2.13 GHz,配置1 GB内存
  软件环境:Fedora Core 6
  机器域名:fedora.unix-center.net(公网),fedora-edu.unix-center.net(教育网)

  龙芯福珑系统:
  硬件环境: 3 台配置龙芯2E处理器的龙芯福珑计算机,CPU 主频为666 MHz,配置256 MB内存
  软件环境:Debian Linux for MIPS
  机器域名:仅限内网连接

  在2007年6 月底之前,本站还将增加一批新的服务器,届时将可以为网友提供FreeBSD和Ubuntu等多个版本的Unix和类Unix操作系统
[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!

[2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!

[3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!

[4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!

[5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!

[6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!

[7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!

[8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!

[9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...

[10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
//该程序通过mysql数据库得到path,然后通过函数GetUserDetailFilename得到user_info?.conf ? 里面的数字,然后配合mysql数据库里面取得的内容写入到文本中,修复rpc造成的影响让webmail的企业通讯录下员工名录得以正常查看任何一个用户的详细信息!xiangdong2@staff.sina.com.cn
//测试enterpriseid=100334;
//CC -o user_info_mysql.cgi user_info_mysql.cpp -L/usr/local/lib/mysql -lmysqlclient -I/usr/local/include
#include <fstream>
#include <iostream>
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <math.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
unsigned  int port=3306;
#define DETAILFILE_NUM  10
static int GetUserDetailFilename(const char *email, char *filename, const unsigned int size=1);
char path[1024];
char ent_address[21]="/ent_address/";
char filename[100];
char  file_path_del[1024];
char buffer[1024],buffer1[1024],buffer2[1024],buffer3[1024],buffer4[1024],buffer5[1024],buffer6[1024],buffer7[1024],buffer8[1024],buffer9[1024];
using namespace std;
int main(int argc,char* argv[])
{
  
  MYSQL myData;
  MYSQL_RES *res;
  MYSQL_FIELD *fd;
  MYSQL_ROW row;
  int i,j,rowCount = 0,colCount = 0;
  string query="select path from enterprise where enterpriseid=";
  string query2 = "select email,realname,tel,mobile,address,office,enter_time,num,dept,flag from enterprisemail_info where enterpriseid=";
  if (argc < 2) {
    printf("usage:  请输入enterprise库enterprise表里面企业id(enterpriseid? Such As:./user_info_mysql.cgi 100334)\n", argv[0]);
    exit(1);
          }
    query+=argv[1];
  query2+=argv[1];

  mysql_init( &myData );
  if(!mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0))
  {
    printf("connect mysql error!\n");
        
  }
  
  
  if( mysql_query(&myData, query.c_str()) != 0 )
  {
  printf("query error!\n");
  return 0;
  }else{
    
     cout << "mysql query run ok!\n";
    
     }
  
  res = mysql_store_result( &myData );
  row = mysql_fetch_row( res );
  strcpy(path,row[0]);
  //cout << row[0]<<path;取得path然后加入ent_address/
  strcat(path,ent_address);
  //cout << path<<"\n";
  if( mysql_query(&myData, query2.c_str()) != 0 )
  {
  printf("query error!\n");
  return 0;
  }else{
    
     cout << "mysql query run ok!\n";
    
     }
  
  
  res = mysql_store_result( &myData );
  rowCount = (int) mysql_num_rows( res );
  colCount = (int) mysql_num_fields( res );
  //cout << "\t"<<colCount<<"\t"<<rowCount<<"\n";
  
  char num[2];
  for(i=0;i<=10;i++){//构造从user_info0.conf to user_info10.conf 路径然后del掉他们,为下面从数据库取写做准备

  strcpy(file_path_del,path);
  strcat(file_path_del,"user_info");
  sprintf(num,"%d",i);
  strcat(file_path_del,num);
  strcat(file_path_del,".conf");
  if( remove(file_path_del) != 0 )//删除文件
    cout << "Error deleting "<< file_path_del <<" file, \t Because it is not exit! But it is still Ok...\n";
    else
    cout << "File" <<file_path_del<<" successfully deleted\n";
  
    }
  
  for(i = 0; i < rowCount; i++)
  {      
    row = mysql_fetch_row( res );
    for(j=0;j<colCount;j++){
    strcpy(buffer,row[0]);
    strcpy(buffer1,row[1]);
    strcpy(buffer2,row[2]);
    strcpy(buffer3,row[3]);
    strcpy(buffer4,row[4]);
    strcpy(buffer5,row[5]);
    strcpy(buffer6,row[6]);
    strcpy(buffer7,row[7]);
    strcpy(buffer8,row[8]);
    strcpy(buffer9,row[9]);
        
    char* p = strstr(buffer,"@");
    *p=0;
    //取@前面的
    const char *uid;
    uid=buffer;
    
    if(GetUserDetailFilename(uid, filename, 100)<0)//获取目录位置
    {
      cout<<"GetUserDetailFilename() erro...";  
  
    }
      
                 }//字段数循环
    char file_path[1024];
    strcpy(file_path,path);
    strcat(file_path,filename);//得到文件的完整的path路径
    //cout<<"file_path="<<file_path<<"\n\n";

    //write file
    ofstream fout(file_path,ios_base::app);
    fout <<"[USER:"<<buffer<<"]\n"<<"EMAIL="<<buffer<<"\n"<<"REALNAME="<<buffer1<<"\n"<<"TEL="<<buffer2<<"\n"<<"MOBILE="<<buffer3<<"\n"<<"ADDRESS="<<buffer4<<"\n"<<"OFFICE="<<buffer5<<"\n"<<"ENTER_TIME="<<buffer6<<"\n"<<"NUM="<<buffer7<<"\n"<<"DEPT="<<buffer8<<"\n"<<"FLAG="<<buffer9<<"\n";

    fout.close();
    


    memset(file_path, 0, 1024);//清空该变量 清空其它字段缓存
    memset(buffer, 0, 1024);
    memset(buffer1, 0, 1024);
    memset(buffer2, 0, 1024);
    memset(buffer3, 0, 1024);
    memset(buffer4, 0, 1024);
    memset(buffer5, 0, 1024);
    memset(buffer6, 0, 1024);
    memset(buffer7, 0, 1024);
    memset(buffer8, 0, 1024);
    memset(buffer9, 0, 1024);
    
      
  }//条目数
  
  cout <<"\n\n\nVery good ,The task  finished all right!\t goodbye...\n\n\n";

}




int GetUserDetailFilename(const char *email, char *filename, const unsigned
int size)
{
  if(!email || !filename)return -1;
  int t=0, n;
  for(int i=0; i<strlen(email); i++)
    t+=email[i];
  
  n = (int)fmod(t, DETAILFILE_NUM)+1;
  if(snprintf(filename, size, "user_info%d.conf", n)>=size)return -1;
  return 0;
}
remove function
int remove ( const char * filename ); <cstdio>

Remove file

Deletes the file whose name is specified in filename.
This is an operation performed directly on a file; No streams are involved in the operation.


Parameters
filename
C string containing the name of the file to be deleted. This paramenter must follow the file name specifications of the running environment and can include a path if the system supports it.

Return value
If the file is successfully deleted, a zero value is returned.
On failure, a nonzero value is reurned and the errno variable is set to the corresponding error code. Error codes are numerical values representing the type of failure occurred. A string interpreting this value can be printed to the standard error stream by a call to perror.

Example
/* remove example: remove myfile.txt */
#include <stdio.h>

int main ()
{
  if( remove( "myfile.txt" ) != 0 )
    perror( "Error deleting file" );
  else
    puts( "File successfully deleted" );
  return 0;
}


If the file example.txt existed before the execution and we had write access to it, then the file will be deleted and this message will be written to stdout:
File successfully deleted

Otherwise, a message similar to this will be written to stderr:
Error deleting file: No such file or directory


See also
rename Rename file (function)
电脑重起故障,一般都是由这些原因引起的(根据出现概率排序):
  1.CPU过热
   此种原因导致的重起,一般重起的时间间隔比较有规律,并且在运行大型程序或游戏的时候重起比较频繁。这种比较好检测,重起现象发生后,立即进BIOS察看一下CPU的温度。如果INTEL的在70度以上,AMD的在65度以上,那就很有可能是这种原因导致的。 CPU过热基本都是散热器风扇故障、散热器风道积灰太多、散热器底座或扣具损坏引起的。
  我通常是这样判断是不是由CPU过热引起重起的:找个大文件或是电影,用RAR压缩5分钟以上,不重起就不是CPU过热引起的。 这种原因导致的重起是出现概率最高也是最容易判断的。
  
  2.电源故障
   如果检测不是CPU的问题,第二个该怀疑的就是电源了。判断电源故障引起的重起就很需要经验了。电源故障引起的重起有两种情况:1.开机后很快就重起; 2.无规律重起。开机后很快就重起这种情况,替换电源就很快可以判断是不是电源故障了;无规律重起判断起来就很麻烦了,这种情况通常发生在那些采用劣质电源(尤其是那些没有听说过名字的杂牌电源)或者是设备很多的计算机上。根据我和我的同事统计,这种原因引起重起的概率仅次于CPU过热。
  
  3.内存不完全损坏
   内存不完全损坏。是指内存有个别存储单元损坏或者是其他原因引起的热不稳定。内存不完全损坏通常还会引起一些其他的现象:经常程序报错,或是经常弹出对话框说某某程序引用错误的内存地址,或是偶尔还蓝屏。内存不完全损坏可以用微软内存检测工具来检测,我很喜欢这个检测软件,它检测的结果很准,就是速度奇慢很讨厌。
  
  4.主板故障
  主板故障引起的重起是最难判断的,这种原因导致的重起往往是没有规律没有特征的。CM最讨厌这种重起(呵呵,其实只要是无故重起,没有不讨厌的)。CM通常最后再检测是不是主板引起的重起。
  
  5.机箱按钮故障
  机箱按钮如果是使用时间太长,或是其他原因造成弹性不好。也会引起重起,一般的现象是开机后就不断的重起。当然也有少数是进系统之后无规律重起的。机箱按钮故障引起的重起,一般发生在老机器或是使用杂牌机箱的机器上。
  
  6.供电问题
   供电问题是指电压不稳,或者是电力线路有问题引起的。电压不稳引起的重起,通常可以在电脑附近开盏灯,如果重起时,灯突然变暗。那就是电压问题了。当然,如果有万用表、稳压器之类的东西来辅助判断就更好了。电力线路问题引起的故障也可以在接电脑的插线板上插个台灯来判断。如果重起的时候台灯突然灭了或是突然变暗,那就是电力线路有问题了。
  
  7.显卡过热
  显卡引起重起并不多见。通常在重起前会有短暂的花屏、黑屏现象。开箱后可也看到显卡风扇有问题,或者可以摸到显卡的显存、散热片很烫手。
  
  8.硬件冲突
  硬件冲突引起的重起,通常都很不好判断,需要有很多备件来测试。 我遇到过的最离谱的硬件冲突是几片昂达865的主板同CD 2.8的CPU冲突,换其他频率的CD就好了。真是匪夷所思,居然这样的硬件冲突也会发生。
  
  9.环境因素
   环境因素引起的重起就不好说了。我仅仅遇到过一次:一个客户的电脑总是重起,什么部件都换过了,就是不行,稳压器、UPS都装了,也不行。把他的电脑搬到公司烤了一个星期,什么问题都没有。最后发现他们家旁边的楼顶上有个基站。 总之,换个地方故障就消失的,那就是环境因素引起的。
  
  10.CPU不完全损坏或是热不稳定
  这种原因引起的重起CM目前还没有遇到过,不过我有几个同事都曾经遇到过了。我还不知道这种重起特征现象。相信只有用替换法才可以判断出来
  
  11.其他因素
  比如软件问题 、主机电源线松动、中了木马等等,这些原因引起的重起并不多见。
  
  
  CM才疏学浅,经验也不很丰富,如有遗漏或谬误,欢迎各位补充指正!
[博爱情感网]http://vastai.com/index.html
http://tieba.baidu.com/f?kz=334927979
点击在新窗口中浏览此图片
分页: 289/339 第一页 上页 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 下页 最后页 [ 显示模式: 摘要 | 列表 ]