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

📄 errlog.c

📁 unix 下用pro*c tuxedo 开发的东西
💻 C
📖 第 1 页 / 共 2 页
字号:
      }
      sprintf(temp_string, "%02X", (unsigned char)dump_buffer[i]);
      buffer[13+j*3]   = temp_string[0];
      buffer[13+j*3+1] = temp_string[1];
      if ((unsigned char)dump_buffer[i] >= ' ')
         buffer[62+j] = dump_buffer[i];
      else
         buffer[62+j] = '.';
      j++;
    }
    if (j != 0)
    {
      buffer[78] = '\n'; buffer[79] = 0;
      len = strlen(buffer);
      write(filedes, buffer, len);
    }
  }

#ifndef DOS
  /* unlock the file. */
  flk.l_type = F_UNLCK; 
  flk.l_whence = 0;
  flk.l_start = 0;
  flk.l_len = 0;
  flk.l_pid = 0;
  flk.l_pid = getpid();
  fcntl(filedes, F_SETLKW, &flk);
#endif

  close(filedes);
  return(0);
}


static int RemoteLog(int typ, char *message_string, int data_len)
{
  char *ptr;
  int    len;
  time_t timer;
  struct tm *t;
  int    i;
  int    filedes;
  char   buffer[2048];
#ifndef DOS
  struct  flock flk;
#endif
  char    fn[MAX_FN_LEN];

  if (buffer == NULL)
      return -1;

  strcpy(fn, path);
  strcat(fn, ErrorLogFileName);
#ifdef DOS
  filedes = open(fn, O_CREAT | O_TEXT | O_APPEND | O_WRONLY);
  if (filedes == -1) return(errno);
#else
  filedes = open(fn, O_CREAT | O_APPEND | O_WRONLY, PERM);
  if (filedes == -1) return(-1);
  fcntl(filedes, F_GETLK, &flk);
  flk.l_type = F_WRLCK; 
  flk.l_whence = 0;
  flk.l_start = 0;
  flk.l_len = 0;
  flk.l_pid = 0;
  flk.l_pid = getpid();
  fcntl(filedes, F_SETLKW, &flk);
#endif

  timer = time(NULL);
  t = localtime(&timer); t->tm_year += 1900;  t->tm_mon ++;

  SendToRemote(NetId, " ", 1);
  sprintf(buffer, "PROCESS ID   <%-40s>     DATE <%04d-%02d-%02d>", IdStr, t->tm_year, t->tm_mon, t->tm_mday);
  len = strlen(buffer);
  SendToRemote(NetId, buffer, len);

  sprintf(buffer, "MESSAGE TYPE <%-10s>      MESSAGE LENGTH <%04d>        TIME <%02d:%02d:%02d>", Message[typ], data_len, t->tm_hour, t->tm_min, t->tm_sec);
  len = strlen(buffer);
  SendToRemote(NetId, buffer, len);

  memset(buffer, SEPARATOR_CHAR, 78); buffer[78] = '\n'; buffer[79] = 0;
  SendToRemote(NetId, buffer, len);

  ptr = message_string;
  while (*message_string  != 0)
  {
     if (*message_string == '\n')
     {
        *message_string = 0;
        len = strlen(ptr);
        i = 0;
        if (len > MAX_REMOTE_LEN)
           for (i=0; i<len/MAX_REMOTE_LEN; i++)
              SendToRemote(NetId, &ptr[i*MAX_REMOTE_LEN], MAX_REMOTE_LEN);
        if (len % MAX_REMOTE_LEN != 0)
           SendToRemote(NetId, &ptr[i*MAX_REMOTE_LEN], len - i*MAX_REMOTE_LEN);
        ptr = message_string+1;
     }
     message_string ++;
  }

#ifndef DOS
  /* unlock the file. */
  flk.l_type = F_UNLCK; 
  flk.l_whence = 0;
  flk.l_start = 0;
  flk.l_len = 0;
  flk.l_pid = 0;
  flk.l_pid = getpid();
  fcntl(filedes, F_SETLKW, &flk);
#endif

  return(0);
}

static int ReadConfigFile(char *filename)
{
  FILE *fp;
  char temp_str[80];
  int  SectorFlag;
  int  i,j;


  fp = fopen(filename, "rt");
  if (fp==NULL) return(-1);

  SectorFlag = 0;

  while (!feof(fp))
  {
    fgets(temp_str, 80, fp);
    if (feof(fp)) break;
    strupr(temp_str);

    for (i=0; i<MAX_SECTOR_NUM; i++)
      if (strstr(temp_str, Sector[i]) != NULL)
      {
         SectorFlag = i;
         break;
      }
    for (i=0; i<MAX_MESSAGE_TYPE_NUM; i++)
      if (strstr(temp_str, Message[i]) != NULL)
      {
        TraceFlag[SectorFlag][i] = 0;
        for (j=0; j<strlen(temp_str); j++)
          if (isdigit(temp_str[j]))
              TraceFlag[SectorFlag][i] = TraceFlag[SectorFlag][i] * 10 +
                                                   (temp_str[j] - '0');
        break;
      }
  }

  fclose(fp);
  return(0);
}


/* UNIX use only function */

#ifndef DOS
static char *strupr(char *str)
{
  int i;

  for (i=0; i<strlen(str); i++)
    str[i] = toupper(str[i]);
}

#endif
 
static int RemoteDupLog(int typ, char *error_string, char *dump_buffer, int data_len, int fmt)
{
  char    fn[MAX_FN_LEN];
  int     filedes;
  char    temp_string[10];
  char    *ptr;
  int     i, j;
  int     len;
  struct  tm *t;
  time_t  timer;
  char    buffer[2048];
  int     big = 0;

#ifndef DOS
  struct  flock flk;
#endif

  if (buffer == NULL)
     return -1;
  timer = time(NULL);
  t = localtime(&timer);    t->tm_year += 1900; t->tm_mon ++;
  strcpy(fn, path);
  /* strcat(fn, ErrorLogFileName); */
  strcat(fn, RemoteLockFileName);

#ifdef DOS
  filedes = open(fn, O_CREAT | O_TEXT | O_APPEND | O_WRONLY);
  if (filedes == -1) return(errno);
#else
  filedes = open(fn, O_CREAT | O_APPEND | O_WRONLY, PERM);
  if (filedes == -1) return(-1);
  fcntl(filedes, F_GETLK, &flk);
  flk.l_type = F_WRLCK; 
  flk.l_whence = 0;
  flk.l_start = 0;
  flk.l_len = 0;
  flk.l_pid = 0;
  flk.l_pid = getpid();
  fcntl(filedes, F_SETLKW, &flk);
#endif

  /* print the information title */

  sprintf(buffer, "PROCESS ID   <%-40s>     DATE <%04d-%02d-%02d>\n", IdStr, t->tm_year, t->tm_mon, t->tm_mday);
  len = strlen(buffer);

  sprintf(buffer+len, "MESSAGE TYPE <%-10s>      MESSAGE LENGTH <%04d>        TIME <%02d:%02d:%02d>\n", Message[typ], data_len, t->tm_hour, t->tm_min, t->tm_sec);
  len = strlen(buffer);

  memset(buffer+len, SEPARATOR_CHAR, 77); buffer[len+77] = 0;
  len = strlen(buffer);
  SendToRemote(NetId, buffer, len+1);

  if (fmt == 0)
  {
  ptr = error_string;
  while (*error_string  != 0)
  {
     if (*error_string == '\n')
     {
        *error_string = 0;
        len = strlen(ptr);
        i = 0;
        if (len > MAX_REMOTE_LEN)
           for (i=0; i<len/MAX_REMOTE_LEN; i++)
              SendToRemote(NetId, &ptr[i*MAX_REMOTE_LEN], MAX_REMOTE_LEN);
        if (len % MAX_REMOTE_LEN != 0)
           SendToRemote(NetId, &ptr[i*MAX_REMOTE_LEN], len - i*MAX_REMOTE_LEN);
        ptr = error_string+1;
     }
    error_string ++;
  }
 
  SendToRemote(NetId, "\n", 1);

  } 
  else
  {
    int tmpLen;
    char tmpBuf[2024];

    /* print DUMP message */
    sprintf(buffer, "DUMP of <%s>", error_string);
    len = strlen(buffer);
    SendToRemote(NetId, buffer, len+1);
    /*  write(filedes, buffer, len); */

    strcpy(buffer, "\nDisplacement ----------------- Hex codes -------------------     ASCII value");

    tmpLen = 0;
    tmpBuf[0] = '\0';

    for (i=0; i<data_len; i++)
    {
      if (i % 16 == 0)
      {
        j = 0;  buffer[77] = '\n'; buffer[78] = 0;
        
        len = strlen(buffer);
        if (tmpLen < MAX_REMOTE_LEN-80)
        {
          strcat(tmpBuf, (char*)buffer);
          tmpLen += len;
        }
        else
        {
          big = 1;
          tmpBuf[tmpLen-1] = '\0'; 
          SendToRemote(NetId, tmpBuf, tmpLen);
          usleep(40000); 
          tmpLen = 0;
          tmpBuf[0] = '\0';
          strcat(tmpBuf, (char*)buffer);
          tmpLen += len;
        }
        sprintf(buffer, "%04X(%04d) ", i, i);
        memset(&buffer[10], ' ', 68);
      }
      sprintf(temp_string, "%02X", (unsigned char)dump_buffer[i]);
      buffer[12+j*3]   = temp_string[0];
      buffer[12+j*3+1] = temp_string[1];
      if ((unsigned char)dump_buffer[i] >= ' ')
         buffer[61+j] = dump_buffer[i];
      else
         buffer[61+j] = '.';
      j++;
    }
    if (j != 0)
    {
      strcat(tmpBuf, (char*)buffer);
      strcat(tmpBuf, "\n\n");
      len = strlen(tmpBuf);
      if (big == 1 && len <= 512)
        usleep(50000); 
      SendToRemote(NetId, tmpBuf, len+1);
      if (len > 512)
        usleep(50000); 
      /* write(filedes, buffer, len); */
    }
    else
      SendToRemote(NetId, "\n\n", 3);
  }

#ifndef DOS
  /* unlock the file. */
  flk.l_type = F_UNLCK; 
  flk.l_whence = 0;
  flk.l_start = 0;
  flk.l_len = 0;
  flk.l_pid = 0;
  flk.l_pid = getpid();
  fcntl(filedes, F_SETLKW, &flk);
#endif

  close(filedes);
  return(0);
}

⌨️ 快捷键说明

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