|
|
| ¸Ö½î»ìÄýÍÁµÄUNIX C±à³Ì¼¼ÇÉ£¨Ò»¡¢ÄÚ´æÓ³Éä±í£© »Ø¸´£º0 ÔĶÁ£º122 |
2008-02-15 18:54:28 |
|
| |
¸Ö½î»ìÄýÍÁµÄUNIX C±à³Ì¼¼ÇÉ£¨Ò»¡¢ÄÚ´æÓ³Éä±í£© ×÷Õߣº¸Ö½î»ìÄýÍÁ °æ±¾£º2004-11-3 2:43 µÚÒ»¸å
¹Ø¼ü´Ê£º unix¡¢Êý¾Ý¿â¡¢E-SQLǶÈëʽ¿ª·¢¡¢¹²ÏíÄÚ´æ¡¢»Øµ÷º¯Êý ǰÑÔ£º
´óѧ±ÏÒµºó´ÓÊÂunixÉϵÄÒøÐÐ×ÛºÏÒµÎñϵͳ¿ª·¢¹¤×÷ÒÑÓÐÒ»Äê°ëµÄʱ¼ä£¬ÏòÖÚ¶àǰ±²¸ßÊÖѧϰÁ˺ܶà¾ÑéºÍ¼¼ÇÉ£¬×Ô¼ºÒ²´´ÐÂÁËЩºÃµÄ¿ª·¢¼¼Êõ£¬ÌØÐ´³öÀ´Óë·Ü¶·ÔÚÒ»ÏßµÄunix³ÌÐòÔ±Ãǹ²Ïí¡£±¾ÈË´óѧʱרעÓÚwindowsƽ̨ӦÓÿª·¢£¬¹¤×÷ºó²ÅתÈëunixƽ̨£¬¹ÊÑØÏ®Á˲»ÉÙwindows±àÂë·ç¸ñ¡£
--------------------------------------------------------------------------------
ÕýÎÄ£º
ÔÚÒ»¸ö´øÓÐÊý¾Ý¿âµÄunixϵͳÖнøÐÐE-SQLǶÈëʽ¿ª·¢£¬±ØÈ»Óõ½ºÜ¶à»ìºÏʽ±à³Ì·½Ê½¡£µ±ÏµÍ³¶Ô±íµÄSELECT²Ù×÷Ƶ·±Ê±£¬»áʹÊý¾Ý¿âЧÂÊ´ó·ùϽµ¡£ÓÚÊÇÎÒÃǺܵ±È»µÄÕâÑùÉè¼Æ£ºµ±Ó¦ÓÿªÊ¼ÔËÐÐʱ°ÑÊý¾Ý¿âÖÐÐèҪƵ·±²éѯµÄ±í×°ÔØÈë¹²ÏíÄڴ棬ͨ¹ý±àдһÅú¹²ÏíÄÚ´æ²éѯº¯ÊýʵÏÖ¶Ô±íÊý¾ÝµÄ¿ìËÙ²éѯ¡¢¶¨Î»¡£ÕâÀï½èÓÃwindowsµÄһЩÃû´Ê°ÑÕâÒ»¼¼ÊõÃüÃûΪ¡°ÄÚ´æÓ³Éä±í¡±¼¼Êõ¡£ ÄÚ´æÓ³Éä±íµÄ¸ñʽÉè¼ÆÓкܶ෽ʽ£¬ÏÂÃæ½éÉÜÒ»ÏÂÎÒÉè¼ÆµÄÒ»ÖÖ¸ñʽ£¬¸Ã¸ñʽÒѾӦÓÃÓÚijʡ¼¶ÒøÐÐÐÅÓÿ¨È«Ê¡´óǰÖÃϵͳ£¬È¡µÃ·Ç³£ºÃµÄЧ¹û¡£ | | | | | | ÄÚ´æÓ³Éä±í¼Ç¼ÌõÊý | µÚÒ»Ìõ¼Ç¼½á¹¹µ¥Ôª | µÚ¶þÌõ¼Ç¼½á¹¹µ¥Ôª | ... | | 10¸ö×Ö½Ú | ¼Ç¼½á¹¹µÄ´óС | ¼Ç¼½á¹¹µÄ´óС | | | | | | | ¹²ÏíÄÚ´æÊý¾Ý´æ·Å¸ñʽÈçÉÏͼËùʾ¡£¿ªÍ·µÄ10¸ö×Ö½Ú´æ·ÅÄÚ´æÓ³Éä±íµÄ¼Ç¼ÌõÊýÊýÖµ£¬ÓÉÓÚ±ê×¼cµÄÓзûºÅ³¤ÕûÊýÀàÐÍ×î´óֵԼΪ21ÒÚ£¬ËùÒÔÔ¤Áô10¸ö×Ö½Ú´æ·ÅASCII±àÂëµÄ¼Ç¼ÌõÊýÊýÖµÒѴ´ÂÓÐÓàÇÒÈ¡µÃ×î´óÏÞ¶ÈÖµÁË¡£µÚ11¸ö×Ö½Ú¿ªÊ¼´æ·ÅÊý¾Ý¿â±íµÚÒ»Ìõ¼Ç¼¶ÔÓ¦µÄcÓïÑԽṹÌ壬³ÆÎªÒ»¸ö½á¹¹µ¥Ôª¡£ºóÃæÒÀ´Î´æ·ÅËùÓÐÊý¾Ý¿â±í¼Ç¼ÐγɽṹÌåÊý×é¡£ Ò»ÕÅÊý¾Ý¿â±í×°ÔØÈëÒ»¿é¹²ÏíÄڴ棬¿ÉÒÔͨ¹ý±íÃû¸ø¹²ÏíÄÚ´æµÄipckeyÈ¡Ãû¡£±ÈÈç¡°¹«¹²ÏµÍ³²ÎÊý±í¡±¶ÔÓ¦µÄÄÚ´æÓ³Éä±íµÄipckeyÔÚÍ·ÎļþÀïÕâÑùÌí¼Ó"#define SHMY_KEY_GGXTCS 0x00001138 /* 4408 */"£¬ÒÔ±ãÓÚÔÚ³ÌÐòÀïÒýÓᣠÄÚ´æÓ³Éä±í¹²Õ¼Óù²ÏíÄÚ´æ´óСΪ¸Ã±í¼Ç¼¶ÔÓ¦µÄÊý¾Ý½á¹¹Ìå´óС³ËÒԼǼÌõÊý¼ÓÉÏ10¸ö×Ö½Ú¡£±ÈÈç¡°¹«¹²ÏµÍ³²ÎÊý±í¡±¼Ç¼ÌõÊýΪ10Ìõ£¬±í¶¨ÒåÈçÏ¡£ÄÇô×ÜÕ¼Óù²ÏíÄÚ´æ´óС=(20+30+40)*10+10=910¸ö×Ö½Ú¡£ ×Ö¶ÎÃû ×Ö¶ÎÊôÐÔ ³¤¶È ¿ÕÖµ±êÖ¾ ±¸×¢ °üÀ¨ÖÐÎÄ×¢ÊͺÍȡֵ·¶Î§ csxh char 20 N.N ²ÎÊýÐòºÅ csz char 30 N.N ²ÎÊýÖµ cssm char 40 ²ÎÊý˵Ã÷ Ë÷Òý1 unique csxh ÄÚ´æÓ³Éä±íµÄ²Ù×÷´óÖÂÓÐ×°ÔØºÍ²éѯÁ½ÖÖ²Ù×÷£¬ÆäËü»¹¿ÉÒÔÓмòµ¥µÄ¸üвÙ×÷¡£¿¼Âǵ½Ã¿¸öÄÚ´æÓ³Éä±íµÄ²Ù×÷´óÖÂÒ»ÑùÒÔ¼°ÒÔij¸ö¹Ø¼ü×ֶβéѯ¡¢¸üвÙ×÷µÄÏàËÆÐÔ£¬ÔÙÒÔ¡°¹«¹²ÏµÍ³²ÎÊý±í¡±ÎÒÕâÑùÉè¼ÆÄÚ´æÓ³Éä±íµÄ²Ù×÷º¯ÊýÔÐΣº int LoadMapGGXTCS(); int FetchMapGGXTCS ( void *pvCondValue , struct REPLACE_STRUCT_TYPE *pREPLACE_STRUCT_ARG , int (* REPLACE_FUNCNAME_COMPARE_PROC) ( void *pvCondValue , struct REPLACE_STRUCT_TYPE *pREPLACE_STRUCT_ARG ) ); int UpdateMapGGXTCS ( void *pvCondValue , void *pvUpdateValue , int (* REPLACE_FUNCNAME_UPDATE_PROC) ( void *pvCondValue , void *pvUpdateValue , struct REPLACE_STRUCT_TYPE *pREPLACE_STRUCT_ARG ) ); Á½¸öº¯ÊýÄÚËùÓÐÉæ¼°µ½¾ßÌå±íÃû¡¢½á¹¹ÌåÃû¡¢»Øµ÷º¯ÊýÃûÎÒ¶¼ÒѺêµÄ·½Ê½Ìæ»»µô£¬ÕâÑù×öµÄºÃ´¦ÊÇ¿ÉÒÔÐγɴúÂëÄ£°å£¬Èç¹ûÒÔºóÒªÌí¼ÓÒ»ÕűíµÄÓ³ÉäÖ»Òª¸´ÖÆ´úÂëÄ£°åµ½ÊµÏÖÎļþµÄ×îºóÃæ£¬°Ñ´úÂëÄ£°å×îÇ°ÃæµÄºê¶¨Òå³É¾ßÌåµÄÖµ¡£´úÂëÄ£°å×îºóÃæ°ÑËùÓÐÓùýµÄºê¶¼·´¶¨Òåµô£¬²»·Á°ºóÃæµÄ³ÌÐòʹÓá£ ×°ÔØ±íº¯ÊýÎÒ²»Óöà˵ÁË£¬¼´°Ñ±íÊý¾Ý×°ÔØÈë¹²ÏíÄڴ棬²»ÐèÒª²ÎÊý¡£ ²éѯº¯ÊýµÚÒ»¸ö²ÎÊýΪ¹Ø¼ü×Ö¶ÎÖµ£¬ÓëREPLACE_FUNCNAME_COMPARE_PROC»Øµ÷º¯ÊýÅäºÏʹÓᣲÎÊýÀàÐÍΪvoid*ÀàÐÍ£¬ÕâÑù¾Í¿ÉÒÔ¼æÈÝËùÓÐÀàÐ͵ÄÊý¾ÝÉõÖÁÊǽṹÌå¡¢¹²ÓÃÌ壬¶îÍâÂé·³µÄÖ»ÊǰѱäÁ¿´«ÈëÇ°Ç¿ÖÆ´«»»³Évoid*£¬Ôڻص÷º¯ÊýÀïÔÙת»»»Ø¾ßÌåµÄ±äÁ¿ÀàÐÍ¡£µÚ¶þ¸ö²ÎÊýÊǽṹÌåºê£¬ÓÃÓÚº¯Êý³É¹¦·µ»ØÊ±°Ñ·ûºÏÒªÇóµÄ¼Ç¼½á¹¹Ìå·µ»Ø¡£µÚÈý¸ö²ÎÊýÊÇÖ¸Ïò»Øµ÷º¯ÊýµÄÖ¸Õ룬Æä×÷ÓÃÊÇÕë¶Ôijһ¹Ø¼ü×ֶΣ¬·Ö±ðÈ¡³ö¹²ÏíÄÚ´æÀïµÄÿÌõ¼Ç¼½øÐбȽϣ¬µ±Ìõ¼þ·ûºÏʱ£¬»Øµ÷º¯Êý·µ»Ø0£¬·ñÔò·µ»Ø1£¬ÕâÑù¿ÉÒÔ²»¸Ä±äÍâ²ã±éÀúº¯ÊýµÄÌõ¼þÏ£¬Ê¹Óò»Í¬ÅжϷ½Ê½¡¢²»Í¬µÄÅжÏÖµ¶ÔÄÚ´æÓ³Éä±íÖÐËùÓмǼ½øÐбéÀú¡£ ±¾ÎÄ×îºó¸½¼þÖи½ÓÐ×°ÔØ¡¢²éѯºÍ¸üÐÂÈý¸öÄÚ´æÓ³Éä±íµÄ´úÂëÄ£°å£¬ÓÉÓÚÍêÈ«²ÉÓòÎÊý»¯ºêÌæ»»·½Ê½Éè¼Æ£¬ÉõÖÁ¿ÉÒÔ²»¼ÓÐ޸ĵÄÁ¢¼´Ó¦Óõ½ÄúµÄϵͳÖÐÈ¥¡£ ÏÂÃæÌøÔ¾µÄ½éÉÜһϲéѯº¯Êý¼«Æä»Øµ÷º¯ÊýµÄ²Ù×÷ÔÀí¡£¸üк¯ÊýÔÀíÓëÖ®ÏàËÆ£¬½á¹¹ÉÔÉÔ¸´ÔÓһЩ£¬ÖصãÊǻص÷º¯Êý¡£ ²éѯº¯Êý { ... ±éÀúÄÚ´æÓ³Éä±íÖÐËùÓнṹ¼Ç¼ { µ÷ÓñéÀúº¯Êý×îºóÒ»¸ö²ÎÊý¼´»Øµ÷º¯ÊýÖ¸Õë(Ìõ¼þÖµ,µ±Ç°½á¹¹¼Ç¼); Èç¹û»Øµ÷º¯Êý·µ»Ø0£¬¼´Ìõ¼þ·ûºÏÇÒ¸üгɹ¦ { ¸´ÖÆÄÚ´æÓ³Éä±íÖе±Ç°½á¹¹¼Ç¼ÄÚÈݵ½pREPLACE_STRUCT_ARGÖ¸Õë¿Õ¼äÀÊä³ö¸øÓû§ Ìø³ö±éÀú; } Æ«ÒÆµ½ÄÚ´æÓ³Éä±íÖÐÏÂÒ»Ìõ½á¹¹¼Ç¼; } ... ·µ»Ø»Øµ÷º¯ÊýµÄ·µ»ØÖµ } ²éѯ»Øµ÷º¯Êý(Ìõ¼þÖµ,ÄÚ´æÓ³Éä±íÖе±Ç°½á¹¹¼Ç¼) { °Ñ±ãÀûº¯Êý´«ÈëµÄÌõ¼þÖµÇ¿ÖÆ×ª»»³Échar*ÀàÐÍ; ÓëÄÚ´æÓ³Éä±íÖе±Ç°½á¹¹¼Ç¼µÄcsxh½øÐбȽϣ¬Èç¹ûÏàµÈ¼´ÕÒµ½ ·µ»Ø0; ·ñÔò ·µ»Ø1; } ²éѯº¯ÊýµÄʹÓÃʾÀý ... /* »ñÈ¡ ¶ÔÕʳ¡´Î */ iRt = FetchMapGGXTCS( (void *)"dzcc" , &stGgxtcs , &CompareKeyFromGGXTCSWhereCSXHProc ); if( iRt != 0 ) printf( "»ñÈ¡¶ÔÕʳ¡´Î ʧ°Ü" ); else printf( "µ±Ç°¶ÔÕʳ¡´ÎΪ[%s]" , stGgxtcs.csz ); ... ʹÓøÃÉè¼ÆÍ¨¹ý´´½¨ÓëÊý¾Ý¿â±íÓ³ÉäµÄ¹²ÏíÄÚ´æÊý¾ÝÌá¸ß¶ÔÊý¾Ý¿â¾²Ì¬±í£¨ÔËÐÐʱÊý¾ÝÄÚÈݲ»¸Ä±ä»òÕßÖ»×öÉÙÁ¿¸üÐÂµÄ±í£©µÄ²éѯ·ÃÎÊËÙ¶È£¬¶ø²»ÐèÒª¶îÍâÕ¼ÓÃÊý¾Ý¿â±¦¹óµÄЧÂÊ£¬ÓÈÆäÔÚÒ»¸ö¶ÔÊý¾Ý¿â²Ù×÷Ƶ·±µÄϵͳÖÐÄܴܺó³Ì¶ÈµÄÌá¸ßÕû¸öϵͳµÄÔËÐÐЧÂÊ¡£±¾Éè¼ÆÒ²Óв»×ãÖ®´¦£¬Ö÷ÒªÊÇÖ»ÄÜ´úÌæÊý¾Ý¿â¼òµ¥µÄSELECT²Ù×÷ºÍUPDATE²Ù×÷£¬²»Ö§³ÖINSERT¡¢DELETE²Ù×÷£¬²»¹ý¶ÔÓÚһЩ¾²Ì¬±íµÄ²éѯʹÓÃÒѾ×ã¹»ÁË£¬²»ÊÇÂð ^___^ --------------------------------------------------------------------------------
¸½¼þÒ»¡¢ÄÚ´æÓ³Éä±í ´úÂëÄ£¿é£¨ÒÔ¡°¹«¹²ÏµÍ³²ÎÊý±í¡±ÎªÀý£©
/******************************************** ** »ñÈ¡ ¹«¹²ÏµÍ³²ÎÊý±í ÄÚ´æÓ³Éä±í ÏàÓ¦¼Ç¼ ** ********************************************/
#define REPLACE_STRUCT_TYPE ggxtcs #define REPLACE_STRUCT_ARG stGgxtcs #define REPLACE_SHEKEY SHMY_KEY_GGXTCS #define REPLACE_TABLENAME ggxtcs #define REPLACE_TABLEDESC "¹«¹²ÏµÍ³²ÎÊý±í" #define REPLACE_CURSORNAME curGGXTCS #define REPLACE_DBVAR R_GGXTCS #define REPLACE_DBVARFUNC pubVtoSGgxtcs #define REPLACE_FUNCNAME_FETCH "FetchMapGGXTCS" #define REPLACE_FUNCNAME_LOAD "LoadMapGGXTCS" #define REPLACE_FUNCNAME_COMPARE_PROC CompareKeyFromGGXTCSProc #define REPLACE_FUNCNAME_UPDATE_PROC UpdateValueFromGGXTCSProc
int FetchMapGGXTCS ( void *pvCondValue , struct REPLACE_STRUCT_TYPE *pREPLACE_STRUCT_ARG , int (* REPLACE_FUNCNAME_COMPARE_PROC) ( void *pvCondValue , struct REPLACE_STRUCT_TYPE *pREPLACE_STRUCT_ARG ) ); { int iReturnValue; struct REPLACE_STRUCT_TYPE *pmpREPLACE_STRUCT_ARG; char *pmp; char acRecordAmount[11]; long lRecordAmount; long l; _IPC_ID_T ipcid; /* ÅÐ¶Ï ÄÚ´æÓ³Éä±í ÊÇ·ñ´æÔÚ */ iReturnValue = IPCIsShareMemoryExist( REPLACE_SHEKEY ); if( iReturnValue == IPC_SHAREMEMORY_RETURN_ISNT_EXIST ) { /* Èô²»´æÔÚ Ôò´´½¨Ö® */ iReturnValue = LoadMapGGXTCS(); if( iReturnValue != 0 ) { WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | ´´½¨ ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü ´íÎóÂë[%d] errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, iReturnValue, errno );
return -1; } } /* ´ò¿ª ÄÚ´æÓ³Éä±í */ ipcid = IPCOpenShareMemory( REPLACE_SHEKEY ); if( ipcid < 0 ) { /* ´ò¿ªÊ§°Ü£¬Ð´³ö´íÈÕÖ¾£¬º¯Êý·µ»Ø */ WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | ´ò¿ª ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, errno ); return -2; } /* Á¬½Ó ÄÚ´æÓ³Éä±í µØÖ· */ pmp = IPCAttachShareMemory( ipcid ); if( pmp == NULL ) { /* Á¬½Óʧ°Ü£¬Ð´³ö´íÈÕÖ¾£¬º¯Êý·µ»Ø */ WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | Á¬½Ó ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, errno ); return -3; } memset( acRecordAmount , 0x00 , sizeof( acRecordAmount ) ); strncpy( acRecordAmount , pmp , 10 ); lRecordAmount = atol( acRecordAmount ); pmpREPLACE_STRUCT_ARG = (struct REPLACE_STRUCT_TYPE *)( pmp + 10 ) ; /* ËÑѰ ÄÚ´æÓ³Éä±í */ for( l=0 ; l<lRecordAmount ; l++ ) { /* µ÷ÓÃËÑѰ»Øµ÷º¯Êý */ iReturnValue = REPLACE_FUNCNAME_COMPARE_PROC( pvCondValue , pmpREPLACE_STRUCT_ARG ) ; if( iReturnValue != 1 ) { memset( pREPLACE_STRUCT_ARG , 0x00 , sizeof( struct REPLACE_STRUCT_TYPE ) ); memcpy( pREPLACE_STRUCT_ARG , pmpREPLACE_STRUCT_ARG , sizeof(struct REPLACE_STRUCT_TYPE) );
break; } pmpREPLACE_STRUCT_ARG ++ ; } /* ¶Ï¿ª ÄÚ´æÓ³Éä±í µØÖ·Á¬½Ó */ IPCDetachShareMemory( pmp ); return iReturnValue; }
/*********************************** ** ¸üР¹«¹²ÏµÍ³²ÎÊý±í ÄÚ´æÓ³Éä±í ** ***********************************/
int UpdateMapGGXTCS ( void *pvCondValue , void *pvUpdateValue , int (* REPLACE_FUNCNAME_UPDATE_PROC) ( void *pvCondValue , void *pvUpdateValue , struct REPLACE_STRUCT_TYPE *pREPLACE_STRUCT_ARG ) ); { int iReturnValue; struct REPLACE_STRUCT_TYPE *pmpREPLACE_STRUCT_ARG; char *pmp; char acRecordAmount[11]; long lRecordAmount; long l; _IPC_ID_T ipcid;
/* ÅÐ¶Ï ÄÚ´æÓ³Éä±í ÊÇ·ñ´æÔÚ */ iReturnValue = IPCIsShareMemoryExist( REPLACE_SHEKEY ); if( iReturnValue == IPC_SHAREMEMORY_RETURN_ISNT_EXIST ) { /* Èô²»´æÔÚ Ôò´´½¨Ö® */ iReturnValue = LoadMapGGXTCS(); if( iReturnValue != 0 ) { WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | ´´½¨ ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü ´íÎóÂë[%d] errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, iReturnValue, errno );
return -1; } } /* ´ò¿ª ÄÚ´æÓ³Éä±í */ ipcid = IPCOpenShareMemory( REPLACE_SHEKEY ); if( ipcid < 0 ) { /* ´ò¿ªÊ§°Ü£¬Ð´³ö´íÈÕÖ¾£¬º¯Êý·µ»Ø */ WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | ´ò¿ª ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, errno ); return -2; } /* Á¬½Ó ÄÚ´æÓ³Éä±í µØÖ· */ pmp = IPCAttachShareMemory( ipcid ); if( pmp == NULL ) { /* Á¬½Óʧ°Ü£¬Ð´³ö´íÈÕÖ¾£¬º¯Êý·µ»Ø */ WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | Á¬½Ó ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, errno ); return -3; } memset( acRecordAmount , 0x00 , sizeof( acRecordAmount ) ); strncpy( acRecordAmount , pmp , 10 ); lRecordAmount = atol( acRecordAmount ); pmpREPLACE_STRUCT_ARG = (struct REPLACE_STRUCT_TYPE *)( pmp + 10 ) ; /* ËÑѰ ÄÚ´æÓ³Éä±í */ for( l=0 ; l<lRecordAmount ; l++ ) { /* µ÷ÓÃËÑѰ»Øµ÷º¯Êý */ iReturnValue = REPLACE_FUNCNAME_UPDATE_PROC( pvCondValue , pvUpdateValue , pmpREPLACE_STRUCT_ARG ) ; if( iReturnValue != 1 ) { break; } pmpREPLACE_STRUCT_ARG ++ ; } /* ¶Ï¿ª ÄÚ´æÓ³Éä±í µØÖ·Á¬½Ó */ IPCDetachShareMemory( pmp ); return iReturnValue; }
/*********************************** ** ×°ÔØ ¹«¹²ÏµÍ³²ÎÊý±í ÄÚ´æÓ³Éä±í ** ***********************************/
int LoadMapGGXTCS() { int iReturnValue; struct REPLACE_STRUCT_TYPE REPLACE_STRUCT_ARG; struct REPLACE_STRUCT_TYPE *pmpREPLACE_STRUCT_ARG; char *pmp; _IPC_ID_T ipcid; long lMapSize; memset( &REPLACE_STRUCT_ARG , 0x00 , sizeof( struct REPLACE_STRUCT_TYPE ) );
/* »ñÈ¡±í¼Ç¼×ÜÌõÊý */ EXEC SQL SELECT count(*) INTO :dlRecordAmount FROM REPLACE_TABLENAME ; if( sqlca.sqlcode ) { WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | »ñÈ¡ "REPLACE_TABLEDESC" ×ܼǼÊý ʧ°Ü sqlcode[%d]\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, sqlca.sqlcode );
return -1; } /* ¼ÆËãÄÚ´æÓ³Éä±í´óС */ /* ǰʮ¸ö×Ö½ÚΪ´¢´æÍ·£¬´æ·Å´¢´æµ¥ÔªµÄ¸öÊý */ lMapSize = dlRecordAmount * sizeof( struct REPLACE_STRUCT_TYPE ) + 10 ; /* ´´½¨ ÄÚ´æÓ³Éä±í */ ipcid = IPCCreateShareMemory( REPLACE_SHEKEY , lMapSize ); if( ipcid < 0 ) { if( errno == EEXIST ) return 0; WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | ´´½¨ ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, errno ); return -2; } /* ¶¨ÒåÓαê */ EXEC SQL DECLARE REPLACE_CURSORNAME CURSOR FOR SELECT * FROM REPLACE_TABLENAME ; /* ´ò¿ªÓαê */ EXEC SQL OPEN REPLACE_CURSORNAME ; /* ´ò¿ªÓαê ʧ°Ü */ if( sqlca.sqlcode ) { WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | ´ò¿ª Óαê "REPLACE_TABLEDESC" ʧ°Ü sqlcode[%d]\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, sqlca.sqlcode ); return -3; } /* Á¬½Ó ÄÚ´æÓ³Éä±í µØÖ· */ pmp = IPCAttachShareMemory( ipcid ); if( pmp == NULL ) { /* Á¬½Óʧ°Ü£¬Ð´³ö´íÈÕÖ¾£¬º¯Êý·µ»Ø */ WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | Á¬½Ó ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" ʧ°Ü errno[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, errno ); return -4; } sprintf( pmp , "%-010d" , dlRecordAmount ); pmpREPLACE_STRUCT_ARG = (struct REPLACE_STRUCT_TYPE *)( pmp + 10 ) ; while(1) { /* »ñÈ¡Óαê */ EXEC SQL FETCH REPLACE_CURSORNAME INTO REPLACE_DBVAR; /* Èç¹û¼Ç¼ÒÑÈ¡Íê£¬Ìø³öÑ»· */ if( sqlca.sqlcode == 100 ) break; /* »ñÈ¡Óαê ʧ°Ü */ if( sqlca.sqlcode != 0 ) { WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | »ñÈ¡Óαê "REPLACE_TABLEDESC" ʧ°Ü sqlcode[%d]£¬ÇëÖØÆôÓ¦ÓÃ\n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, sqlca.sqlcode ); /* ¶Ï¿ª ÄÚ´æÓ³Éä±í µØÖ·Á¬½Ó */ IPCDetachShareMemory( pmp ); /* ¹Ø±ÕÓαê */ EXEC SQL CLOSE REPLACE_CURSORNAME; return -5; } REPLACE_DBVARFUNC( &REPLACE_STRUCT_ARG ); memcpy( pmpREPLACE_STRUCT_ARG , &REPLACE_STRUCT_ARG , sizeof( struct REPLACE_STRUCT_TYPE ) ); pmpREPLACE_STRUCT_ARG ++ ; } /* ¶Ï¿ª ÄÚ´æÓ³Éä±í µØÖ·Á¬½Ó */ IPCDetachShareMemory( pmp ); /* ¹Ø±ÕÓαê */ EXEC SQL CLOSE REPLACE_CURSORNAME; WriteLog( gacLogFilename, "%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | %ldÌõ¼Ç¼½øÈë ÄÚ´æÓ³Éä±í "REPLACE_TABLEDESC" \n", GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ), __LINE__, dlRecordAmount ); return 0; }
#undef REPLACE_STRUCT_TYPE #undef REPLACE_STRUCT_ARG #undef REPLACE_SHEKEY #undef REPLACE_TABLENAME #undef REPLACE_TABLEDESC #undef REPLACE_CURSORNAME #undef REPLACE_DBVAR #undef REPLACE_DBVARFUNC #undef REPLACE_FUNCNAME_FETCH #undef REPLACE_FUNCNAME_LOAD #undef REPLACE_FUNCNAME_COMPARE_PROC #undef REPLACE_FUNCNAME_UPDATE_PROC
¸½¼þ¶þ¡¢ÏÂÃæÕâЩº¯Êý±»ÉÏÃæµÄ³ÌÐòµ÷Óùý£¬´úÂë´æ·ÅÔÚ±¾ÈËÉè¼ÆµÄiIPC¡¢iLibX»ù´¡º¯Êý¿âÖС£
/* ** º¯ÊýÃû : IPCIsShareMemoryExist ** º¯ÊýÃèÊö : ÅжϹ²Ïí´æ´¢¿é´æÔÚ ** ÊäÈë²ÎÊý˵Ã÷ : _IPC_ID_T ipckey ¹²Ïí´æ´¢¿éµÄid ** ·µ»ØÖµ : ´æÔÚ ·µ»Ø IPC_SHAREMEMORY_RETURN_EXIST ** ²»´æÔÚ ·µ»Ø IPC_SHAREMEMORY_RETURN_ISNT_EXIST */
int IPCIsShareMemoryExist( _IPC_KEY_T ipckey ) { _IPC_ID_T ipcid;
ipcid=shmget( ipckey , 1 , IPC_CREAT | IPC_EXCL | _giIPCPermission ); if( ipcid == -1 ) return IPC_SHAREMEMORY_RETURN_EXIST;
IPCDestroyShareMemory( ipcid );
return IPC_SHAREMEMORY_RETURN_ISNT_EXIST; }
/* ** º¯ÊýÃû : IPCOpenShareMemory ** º¯ÊýÃèÊö : ´ò¿ª¹²Ïí´æ´¢¿é ** ÊäÈë²ÎÊý˵Ã÷ : _IPC_KEY_T ipckey ¹²Ïí´æ´¢¿éµÄkey ** ·µ»ØÖµ : ³É¹¦£¬·µ»Ø ¹²Ïí´æ´¢¿éµÄid ** ʧ°Ü£¬·µ»Ø ´íÎó´úÂë */
_IPC_ID_T IPCOpenShareMemory( _IPC_KEY_T ipckey ) { int iReturnValue; _IPC_ID_T ipcid;
iReturnValue = IPCIsShareMemoryExist( ipckey ) ; if( iReturnValue == IPC_SHAREMEMORY_RETURN_ISNT_EXIST ) return IPC_SHAREMEMORY_RETURN_ISNT_EXIST; ipcid = shmget( ipckey , 0 , IPC_CREAT | _giIPCPermission ); if( ipcid == -1 ) return IPC_SHAREMEMORY_ERROR_CANT_OPEN;
return ipcid; }
/* ** º¯ÊýÃû : IPCAttachShareMemory ** º¯ÊýÃèÊö : Á¬½Ó¹²Ïí´æ´¢¿éÊ×µØÖ· ** ÊäÈë²ÎÊý˵Ã÷ : _IPC_ID_T ipcid ¹²Ïí´æ´¢¿éµÄid ** ·µ»ØÖµ : ´æÔÚ ·µ»Ø Ê×µØÖ· ** ²»´æÔÚ ·µ»Ø NULL */
void *IPCAttachShareMemory( _IPC_ID_T ipcid ) { void *pvAttach; pvAttach = shmat( ipcid , NULL , 0 ); if( pvAttach == (void *)-1 ) return NULL; else return pvAttach; }
/* ** º¯ÊýÃû : IPCDetachShareMemory ** º¯ÊýÃèÊö : ¶Ï¿ª¹²Ïí´æ´¢¿éÊ×µØÖ· ** ÊäÈë²ÎÊý˵Ã÷ : void *pvDetach ¹²Ïí´æ´¢¿éÁ¬½ÓÊ×µØÖ· ** ·µ»ØÖµ : ´æÔÚ ·µ»Ø IPC_SHAREMEMORY_RETURN_SUCCESS ** ²»´æÔÚ ·µ»Ø IPC_SHAREMEMORY_ERROR_CANT_DETACH */
int IPCDetachShareMemory( void *pvDetach ) { int i; i = shmdt( pvDetach ); if( i == -1 ) return IPC_SHAREMEMORY_ERROR_CANT_DETACH; else return IPC_SHAREMEMORY_RETURN_SUCCESS; }
/* ** º¯ÊýÃû : WriteLog ** º¯ÊýÃèÊö : Õý³£Ð´ÈÕÖ¾º¯Êý ** ÊäÈë²ÎÊý˵Ã÷ : char *pcLogFileName ÈÕÖ¾ÎļþÃû ** char *pcFormatString ÈÕÖ¾¸ñʽ´® ** ... ÈÕÖ¾²ÎÊýÁбí ** ·µ»ØÖµ : ³É¹¦£¬·µ»Ø TRUE ** ʧ°Ü£¬·µ»Ø FALSE ** ¸üÐÂÈÕÖ¾ : 2003/10/18 ´´½¨ */
BOOL WriteLog( char *pcLogFileName, char *pcFormatString, ... ) { va_list valist; BOOL ret;
va_start( valist, pcFormatString );
ret=DoLog(pcLogFileName, LOG_WRITE_APPEND, LOG_MODE_RETURN, pcFormatString, valist );
va_end( valist );
return ret; }
/* ** º¯ÊýÃû : DoLog ** º¯ÊýÃèÊö : ÈÕÖ¾¼Ç¼Ôʼº¯Êý ** ÊäÈë²ÎÊý˵Ã÷ : char *pcLogFileName ÈÕÖ¾ÎļþÃû ** int iWriteFlag ÈÕ־д±êÖ¾ ** int iModeFlag ÈÕ־дÍêºó²Ù×÷±êÖ¾ ** char *pcFormatString ÈÕÖ¾¸ñʽ´® ** va_list valist ÈÕÖ¾²ÎÊýÁбí ** ·µ»ØÖµ : ³É¹¦£¬·µ»Ø TRUE ** ʧ°Ü£¬·µ»Ø FALSE ** ¸üÐÂÈÕÖ¾ : 2003/10/18 ´´½¨ */
BOOL DoLog( char *pcLogFileName, int iWriteFlag, int iModeFlag, char *pcFormatString, va_list valist ) { FILE *fpLogFile=NULL;
if( iWriteFlag == LOG_WRITE_NEW ) fpLogFile=fopen(pcLogFileName,"w"); else if( iWriteFlag == LOG_WRITE_APPEND ) fpLogFile=fopen(pcLogFileName,"a");
if( fpLogFile == NULL ) return FALSE;
if( vfprintf( fpLogFile, pcFormatString, valist ) < 0 ) return FALSE; fflush(fpLogFile); fclose(fpLogFile);
if( iModeFlag == LOG_MODE_RETURN ) return TRUE; else if( iModeFlag == LOG_MODE_EXIT ) exit(0);
return TRUE; }
/* ** º¯ÊýÃû : GetLocalTimeString ** º¯ÊýÃèÊö : ¸ñʽ»¯Ê±¼ä×Ö·û´®£¨±¾µØÊ±¼ä£© ** ÊäÈë²ÎÊý˵Ã÷ : size_t bufsize ÓÃÓÚ´æ·Å¸ñʽ»¯ºó×Ö·û´®µÄ»º³åÇø´óС ** const char *format ¸ñʽ»¯´® ** Êä³ö²ÎÊý˵Ã÷ char *buf ÓÃÓÚ´æ·Å¸ñʽ»¯ºó×Ö·û´®µÄ»º³åÇøÊ×µØÖ·£¨½¨ÒéÔ¤·ÖÅä256×Ö½Ú£© ** ·µ»ØÖµ : ³É¹¦£¬·µ»Ø TRUE ** ʧ°Ü£¬·µ»Ø FALSE ** ¸üÐÂÈÕÖ¾ : 2003/10/18 ´´½¨ ** 2004/3/3 ÐÞ¸Ä ¸ñʽ»¯ºó×Ö·û´®µÄ»º³åÇøÊ×µØÖ· ÔÐÍ */
char *GetLocalTimeString(char *buf,size_t bufsize,const char *format) { struct tm *time_tm;
time_tm=GetLocalTimeStruct();
if( strftime(buf,bufsize,format,time_tm) != 0 ) return buf; else return NULL; }
/* ** º¯ÊýÃû : GetLocalTimeStruct ** º¯ÊýÃèÊö : °ÑUNIX¼ÍÔªµ½ÏÖÔÚµÄÃëÊýÒÔstruct tm½á¹¹µÄÐÎʽ·µ»Ø£¨±¾µØÊ±¼ä£© ** ·µ»ØÖµ : ÃëÊý ** ¸üÐÂÈÕÖ¾ : 2003/10/18 ´´½¨ */
struct tm *GetLocalTimeStruct() { time_t time_cl;
time(&time_cl);
return localtime( &time_cl ); } |
| |
|