×¢²á | µÇ¼ Íü¼ÇÃÜÂ룿 51ctoÊ×Ò³ | ²©¿Í | ÂÛ̳ | ÕÐÆ¸
¡¡°ïÖú
  51CTO²©¿Í > ¼¼ÊõȦ > ³ÌÐòÉè¼Æ > ÌÖÂÛÇø
 
 
ÊØ×¡Ã¿Ò»Ìì [Â¥Ö÷]
 
 
ȦÖ÷
Ȧ»ý·Ö£º222
·¢¶ÌÏûÏ¢ ²©¿Í
¸Ö½î»ìÄýÍÁµÄ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 );
}
 
2008-02-15 18:58:40 ȦÖ÷ ÊØ×¡Ã¿Ò»Ìì ¼ÓΪ¾«»ª ÒýÓûظ´
 ÌáÐÑ£ºÄú»¹²»ÊdzÌÐòÉè¼ÆµÄ³ÉÔ±£¬Äú¿ÉÒԻظ´£¬µ«²»ÄÜ·¢±íÐÂÌû¡£ÏÖÔÚ¼ÓÈ뱾ȦÓëȦÓÑÎ޽繵ͨ¡£
»Ø¸´±¾Ìù
ÄØ³Æ: 
±êÌâ: 
ÄÚÈÝ: