记录Linux C常用函数以便开发时随时复制

最近在一个老系统平台做扩展开发,用的Linux C,为了方便开发整理一个常用函数放在旁边可以随时复制。


1、设空值
 memset( str, 0x00, sizeof( str ) );


2、字符拷贝
 strcpy( str, "setStrWhatYouWant" );


3、字符串连接
 (1)
 strcpy(aczSendBuf,"AAAAAA");
 strcat(aczSendBuf,"|");
 strcat(aczSendBuf,"BBBBBB");
 strcat(aczSendBuf,"|");
 (2)
 sprintf(returnFullPath,"%s%s","/home/ap/test/",returnfilename);


4、获取字符串长度
 strlen( str );


5、字符串比较
 strcmp( str, "000000" ) != 0   //这个说明与000000不相等


6、字符串trim
 STR_StrTrim( str, ' ' );


7、字符串转换成数字
 int i = atoi( stri );
 double amt = atof( strf );
 long l = atol( strl );


8、调用shell示例
 memset( ftpCmd, 0x00, sizeof( ftpCmd ) );
 sprintf( ftpCmd,"%s/shell/ftpput.sh  %s",getenv("HOME"),returnfilename );
 iRet = system( ftpCmd );
 if( iRet != 0 ){ ... }


9、字符串填充及截取
 iHead= strlen( aczTranBuf );
 memset( sendAczTranBuf, 0x00, sizeof( sendAczTranBuf ) );
 sprintf(sendAczTranBuf,"%06d0",iHead );    //6位长度(前补0)+0, 例如188的长度拼成的串为:0001880
 memcpy( sendAczTranBuf+7, aczTranBuf, iHead );     //将aczTranBuf(第0位开始)拷贝到sendAczTranBuf中(内容从sendAczTranBuf的第7个字节开始填充),共拷贝将aczTranBuf的iHead个字节
 截取:
 iRcvStrLen=strlen(revPczTranRetBuf)-7;
 memcpy( pczTranRetBuf, revPczTranRetBuf+7, iRcvStrLen );    //将revPczTranRetBuf(第7位开始)拷贝到pczTranRetBuf中(内容从spczTranRetBuf的第0个字节开始填充),共拷贝iRcvStrLen个字节


10、增加进程
 childPid = fork();
 if(childPid > 0){  /*主进程*/
   todo something;
 }else if(childPid == 0){    /*子进程*/
   todo something;
 }else{ /*fork进程失败的处理*/
   todo something;
 }

 //超过最大并发数时可以查看是否有子进程执行完毕
 iStatus = 0;
 childPid = wait( &iStatus );   //不关心状态时可以用 wait( NULL );
 iForkNum --;


11、获取字符串位置
  char *sub;
  sub = strstr (aczPeekBuf, "<head>");
  sprintf(aczPeekBufNew,"%s",sub);


12、判断文件是否存在
 int isacc = access(filenamedw, F_OK);


13、取系统时间

 int TOOL_GetTimeString_N( char* pcTime )
 {
    long   lTime;
    struct tm *tp;
    char   pcGetTime[20];
 
    /* 判断 */
    if( pcTime == NULL )
    {
       return( -1 );
    }
 
    strcpy( pcTime,"" );
 
    memset( pcGetTime,0,sizeof(pcGetTime) );
    time( &lTime );
    tp=localtime( &lTime );
 
    sprintf( pcTime, "%04d", 1900+tp->tm_year );
 
    sprintf( pcGetTime, "%02d", tp->tm_mon+1 );
    strcat( pcTime, pcGetTime );
 
    sprintf( pcGetTime, "%02d",tp->tm_mday );
    strcat( pcTime, pcGetTime );
 
    sprintf( pcGetTime, "%02d",tp->tm_hour );
    strcat( pcTime, pcGetTime );
 
    sprintf (pcGetTime, "%02d", tp->tm_min );
    strcat( pcTime, pcGetTime );
 
    sprintf( pcGetTime, "%02d", tp->tm_sec );
    strcat( pcTime, pcGetTime );
 
    return( 0 );
 
 }

14、数据库事务
  EXEC SQL begin work;
  EXEC SQL commit work;
  EXEC SQL rollback work;

15、    变量动态分配
  char *buffer = NULL;
  char *sMessage = (char *)malloc(strlen(etcbuf) + 1);
  
  buffer = malloc(pos);
  if(buffer == NULL){
     YDebug(strLogfile,__FILE__,__LINE__,"%s\n","分配内存错\n");
     return(-2);
  }
  free(buffer);
  //注意:不能用sizeof()来获取长度 清空空间


16、 数据库操作_1
  memset(azxm, 0x00, sizeof(azxm));
  EXEC SQL  select money, buyer_name, seller_name, number, currstate, subacct 
  into :money, :aczbuyer_name, :aczseller_name, :acznumber, :aczcurrstate, :subacct 
  from test_basemsg
  where contract=:aczcontract ;
  
  if( sqlca.sqlcode == 0 ){
    STR_StrTrim( azhth, ' ' );
    STR_StrTrim( azdkje, ' ' );
    STR_StrTrim( azxm, ' ' );
  }else if( sqlca.sqlcode == 100 ){
    LOG_NEW(_ERROR_LOG_TYPE_, _RUN_LVL_, "[%d in %s]未查到信息",__LINE__, __FILE__ );
    return -1;
  }else{
    LOG_NEW(_ERROR_LOG_TYPE_, _RUN_LVL_, "[%d in %s]查询信息失败",__LINE__, __FILE__ );
    return -1;
  }

17、数据库操作_2
    memset(insertsql, 0x00, sizeof(insertsql));
    strcpy(insertsql,"insert into test_basemsghis ");
    strcat(insertsql,"select contract,status,ver,money,buyer_name,buyer_number,seller_name ");
    strcat(insertsql,"seller_number,number,bank,name,timestamp,currstate,currmsg,address,mainacct ");
    strcat(insertsql,"subacct,dealtime,freeuse1,freeuse2,freeuse3 from test_basemsg  ");
    strcat(insertsql,"where contract='");
    strcat(insertsql,aczcontract);
    strcat(insertsql,"';");
    STR_StrTrim( insertsql, ' ' );
    LOG_NEW(_INFO_LOG_TYPE_,_RUN_LVL_, "insertsql[%s] !\n", insertsql);
    EXEC SQL PREPARE sql_stmt from :insertsql ;
    if( sqlca.sqlcode != 0 ){
      LOG_NEW(_ERROR_LOG_TYPE_,_RUN_LVL_, "Declare the course error! ERR=[%d]", sqlca.sqlcode);
    }
    EXEC SQL EXECUTE sql_stmt;
    if(sqlca.sqlcode != 0){
      LOG_NEW(_ERROR_LOG_TYPE_,_RUN_LVL_, "Declare the course error! ERR=[%d]", sqlca.sqlcode);
    }

18、按分隔符截取
   int  iLen = 0 ;
   memset( aczRetCode, 0x00, sizeof( aczRetCode ) );
   GetNumberInfo( aczRecvBuf, strlen( aczRecvBuf ), 2, '|', aczRetCode, &iLen );

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值