最近在一个老系统平台做扩展开发,用的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 );