⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 worker.ec

📁 证券交易系统
💻 EC
字号:
#include <stdio.h>#include <ctype.h>#include <sys/types.h>#include <sys/ipc.h>#include "../incl/bank.h"#define       MAX_WORKERS       32#define       WORKERID_NET      77       #define       NTBKHOLD       "/etc/ntbkhold"int       shmid;int       wknum = 0;WORKER   *worker_table;        /* Global but used only in this file */init_worker(){       int       i,j,k;       char      buf[ 100 ];       char      comment[10][80];       FILE     *fp;       WORKER    wks[ MAX_WORKERS ];       /* Read file ntbkhold */       memset( ( char * )wks, '\0', sizeof( wks ) );       fp = fopen( (char *) getfname ( WORKDIR, NTBKHOLD ), "r" );       if ( fp == NULL ) {          WriteLog ( LOGFILE, "fopen(ntbkhold) return NULL" );          return( -1 );       }       i = j = 0;       while( i< MAX_WORKERS  &&  fgets( buf, 80, fp ) != NULL ) {            if ( buf[ 0 ] == '#' || buf[ 0 ] == '\n' ) {                 strcpy( comment[j++], buf );                 continue;                                    /* 注释行空行 */            }             sscanf( buf, "%s%s%s%s%s%s%s\n",                     wks[ i ].manager_id,  wks[ i ].worker_4,                     wks[ i ].worker_5,    wks[ i ].passwd,                     wks[ i ].rank,        wks[ i ].note,                     wks[ i ].active );             wks[ i ].busy[ 0 ] = '0';             wks[ i ].active[ 0 ] = '0';             i++;       }       fclose( fp );       fp = fopen( (char *)getfname(WORKDIR,"/etc/ntbkhold"), "w" );       if ( fp == NULL ) {            WriteLog(LOGFILE, " ntbkhold not found! \n" );            return( -1 );       }       for( k=0; k<j; k++ )            fwrite( comment[ k ], 1, strlen( comment[k] ), fp );       for( k=0; k<i; k++ )            fprintf( fp, "%s\t%s\t\t%s\t\t%s\t%s\t%s\t%s\n",                     wks[ k ].manager_id,     wks[ k ].worker_4,                     wks[ k ].worker_5,       wks[ k ].passwd,                     wks[ k ].rank,           wks[ k ].note,                     wks[ k ].active );       fclose( fp );       if ( i == 0 ) {              WriteLog ( LOGFILE, "no worker can be used" );              return( -1 );                     }       wknum = i;       /* Creat share memory worker table */       worker_table = ( WORKER * )                creat_shm ( SHMFILE_NET, WORKERID_NET, wknum * sizeof(WORKER) );       if ( worker_table == NULL ) {              WriteLog ( LOGFILE, "creat_shm() return NULL" );              return( -1 );       }       memcpy( (char * )worker_table, ( char * )wks, wknum * sizeof(WORKER) );       return( 0 );}alloc_worker( manager_id, wk )char   *manager_id;WORKER **wk;{       int  i = 0;       int  flag;       while( i < wknum ) {            WriteLog( LOGFILE,"worker_table[%d].busy is [%s]!",i,worker_table[ i ].busy);             WriteLog( LOGFILE,"worker_table[%d].active is [%s]!",i,worker_table[ i ].active);             WriteLog( LOGFILE,"worker_table[%d].manager_id is [%s]!",i,worker_table[ i ].manager_id);             if (  worker_table[ i ].busy[ 0 ] == '0' &&                  worker_table[ i ].active[ 0 ] == '1' &&                  !strcmp( manager_id, worker_table[ i ].manager_id ) )            {                  (* wk) = & worker_table[ i ];                  (* wk) -> busy[ 0 ] = '1';                  flag = 1;                  break;            }            i++;       }       prtb ();       if ( flag == 1 )       {          WriteLog ( LOGFILE, "alloc worker successful!");               return( 0 );       }       else       {          WriteLog ( LOGFILE, "woker hasn't sign on or no free worker now!");               return( -1 );       }}free_worker( wk )WORKER *wk;{       if ( wk != NULL )              wk->busy[ 0 ] = '0';       return( 0 );}get_worker( wk, worker_4 )WORKER     **wk;char       * worker_4;{       int       i = 0;       while( i < wknum ) {              if ( !memcmp( worker_4, worker_table[ i ].worker_4, 4 ) ) {WriteLog(LOGFILE,"worker_4: %s  worker_table[i].worker_4:%s;",worker_4,worker_table[i].worker_4);                     (* wk) = & worker_table[ i ];                     return( 0 );              }              i++;       }       prtb ();       WriteLog ( LOGFILE, "worker[%s] is not in ntbkhold", worker_4 );       }close_worker( ){       return( rm_shm( SHMFILE_NET, WORKERID_NET ) );}prtb(){       int i;       while( i < wknum ) {           printf("%s %s %s %s %s %s %s %s\n",              worker_table[ i ].manager_id,   worker_table[ i ].worker_4,              worker_table[ i ].worker_5,     worker_table[ i ].passwd,              worker_table[ i ].rank,         worker_table[ i ].note,              worker_table[ i ].active,       worker_table[ i ].busy);              i++;       }       printf("\n");}worker_on( wk )WORKER **wk;{       int  i = 0;       while( i < wknum ) {            (* wk) = & worker_table[ i ];            (* wk) -> active[ 0 ] = '1';            i++;       }       prtb ();       WriteLog ( LOGFILE, "signon worker successful!");            return ( 0 );}worker_off( wk )WORKER **wk;{       int  i = 0;       while( i < wknum ) {            (* wk) = & worker_table[ i ];            (* wk) -> active[ 0 ] = '0';            i++;       }       prtb ();       WriteLog ( LOGFILE, "signoff worker successful!");            return ( 0 );}Get_worker( manager_id,worker_4, wk )char   *manager_id;char   *worker_4;WORKER **wk;{       int  i = 0;       int  flag = 0;       while(1)       {            while( i < wknum )            {                  if (  worker_table[ i ].busy[ 0 ] == '0' &&                        worker_table[ i ].active[ 0 ] == '1' &&                        !strcmp( manager_id, worker_table[ i ].manager_id )&&                        !strcmp(worker_4,worker_table[i].worker_4))                  {                        (* wk) = & worker_table[ i ];                        (* wk) -> busy[ 0 ] = '1';                        flag = 1;                        break;                  }                  i++;           }           if(flag == 1)                break;       }       prtb ();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -