freebsd下mysql清华包安装地址:
晓谦-水能载舟,亦能煮粥 说:
http://ftp2.tsinghua.edu.cn/pub/mirror/FreeBSD/ports/i386/packages-5-stable/databases/mysql-server-4.0.26.tbz
晓谦-水能载舟,亦能煮粥 说:
http://ftp2.tsinghua.edu.cn/pub/mirror/FreeBSD/ports/i386/packages-5-stable/databases/mysql-client-4.0.26.tbz
xdy108@126.com 说:
【URL:来源】http://bbs.linuxpk.com/thread-9632-1-1.html
我们如何查看错误信息呢?在哪里查看呢?应该到/usr/local/mysql/var目录中去找一个带有.err后缀的文件;
[root@bugkill var]# cd /usr/local/myql/var
[root@bugkill var]# more *.err

可能会出现存在下面的错误信息:

031203 14:49:10 mysqld started
031203 14:49:10 Can't start server : Bind on unix socket: Permission denied
031203 14:49:10 Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
031203 14:49:10 Aborting

031203 14:49:10 /usr/local/mysql/libexec/mysqld: Shutdown Complete

031203 14:49:10 mysqld ended

其实这是权限方面的事,我们把权限设置一下就OK了。我们要设置的权限是/usr/local/mysql/var的目录。要设置为777。

方法是:
[root@bugkill mysql-4.1.9]# chmod 755 /usr/local/mysql/var
另外我们要用beinan这个用户来启动mysqld服务器,当然也得改变一下 /usr/local/mysql/var的属性

[root@bugkill mysql-4.1.9]# chown -R bugkill:bugkill /usr/local/mysql/var

[root@bugkill mysql-4.1.9]# su bugkill

How do I fix the following error SQL/DB Error errcode 13 Can't create/write to file?
Problem: The MySQL variable tmpdir is set to a directory that cannot be written to when using PHP to access MySQL.

To verify this, enter MySQL at the command line and type show variables;

You'll get a long list and one of them will read: tmpdir = /somedir/ (whatever your setting is.)

Solution: Alter the tmpdir variable to point to a writable directory.

Steps:


Find the my.cnf file. On *nix systems this is usually in /etc/.
Once found, open this in a simple text editor and find the [mysqld] section.
Under this section, find the tmpdir line. If this line is commented (has a # at the start), delete the # and edit the line so that it reads: tmpdir = /writable/dir where /writable/dir is a directory to which you can write. Some use /tmp, or you might also try /home//.
Save the file.
Shutdown MySQL by typing mysqlshutdown -u -p shutdown.
Start MySQL by going to the MySQL directory and typing ./bin/safe_mysqld &. Usually the MySQL directory is in /usr/local or sometimes in /usr/ on Linux systems.

If none of this make sense and you have someone to administrate your system for you, show the above to them and they should be able to figure it out.

原文:

打开:/etc/my.cnf

tmpdir          = /usr/local/mysql/var/tmp 去掉#号
socket          = /usr/local/mysql/var/mysql.sock
指向的要有写权限,restart mysql OK!然后再重启mysql服务器。
mysql低版本日期相加:
select opendate,openlong,INTERVAL openlong DAY + opendate from enter_status;

线上跑的sql:
select a.enterpriseid,b.name,a.opendate,a.openlong,INTERVAL a.openlong DAY + a.opendate as now from enter_status a,domain b where TO_DAYS(NOW()) - TO_DAYS(a.opendate) > a.openlong+7 and a.enterpriseid=b.enterpriseid
-----------------------------------------------------------------------------------------------------------------


select b.enterpriseid from enter_status a,enterprise b where TO_DAYS(NOW()) - TO_DAYS(a.opendate) > a.openlong+1 and a.enterpriseid=b.enterpriseid and b.expiration=0 and b.flag=2 limit 10;

状态为 b.expiration=1 b.flag=1 为过期,发提醒信件,但是还能正常收发信,但是正常企业0 2 也有过期的,是由于程序没有放置标志位!



mysql -uroot -p enterprise < in.txt > out.txt
准确的sql:
SELECT  b.enterpriseid,c.name,opendate,openlong,ADDDATE(a.opendate,a.openlong) from enter_status a,enterprise b,domain c where TO_DAYS(NOW()) - TO_DAYS(a.opendate) > a.openlong+1 and a.enterpriseid=b.enterpriseid and b.enterpriseid=c.enterpriseid and a.enterpriseid=c.enterpriseid limit 15

更准确:
select  b.enterpriseid,c.name,a.opendate,a.openlong,ADDDATE(a.opendate,a.openlong) from enter_status a,enterprise b,domain c where TO_DAYS(NOW()) - TO_DAYS(a.opendate) > a.openlong+1 and a.enterpriseid=b.enterpriseid and b.enterpriseid=c.enterpriseid and a.enterpriseid=c.enterpriseid and b.expiration=1 and b.flag=1 group by c.enterpriseid limit 15;

select a.enterpriseid,b.name,a.opendate,a.openlong,ADDDATE(a.opendate,a.openlong) from enter_status a,domain b where TO_DAYS(NOW()) - TO_DAYS(a.opendate) > a.openlong+7 and a.enterpriseid=b.enterpriseid;

导入时候第4行可能有错:改为:
`check` tinyint(4) NOT NULL default '1'
http://sqlserver.chinahtml.com/2005/mysql-1127986918405.shtml
#include <stdio.h>
#include <time.h>
using namespace std;

int main(void)
{
        time_t t;
        struct tm *x;

        time( &t );

        x = localtime(&t);
        printf("year=[%d]\n", x->tm_year+1900);
        printf("month=[%d]\n", x->tm_mon+1);
        printf("day=[%d]\n", x->tm_mday);
        printf("hour=[%d]\n", x->tm_hour);
        printf("min=[%d]\n", x->tm_min);
        printf("sec=[%d]\n", x->tm_sec);

        return 0;
}
http://nod32.areone.cn/

NOD32:
http://www.zolsky.com/killsoftware/sdsoft/nod32/nod32_id_2.htm
http://www.ttrar.com/article/nod32/ID.html

用户名(UserName):TRIAL-0092656479
密 码(PassWord):9ks94c26rr
有效期至(Expiry Date):2013-11-01
适用版本:同时支持ESS和EAV两个版本





——————————————————————————————————————————
四、Nod32个人防火墙的原因,实践确切发现个人防火墙如果打开后出现连接成功后被屏蔽,导致连接失败,关闭办法:
    1)在Nod32桌面的右下角小图标上点右键,然后,打开ESET Smart Security6->设置->网络->个人防火墙 ->(关闭)

cvs基本命令

WEB2.0 jack 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;
}
分页: 288/338 第一页 上页 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 下页 最后页 [ 显示模式: 摘要 | 列表 ]