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

📄 fsif.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <io.h>#include "bacstd.h"MODULEINF("1992-08-01", "1990-1992 Erik Bachmann (E-mail: ebp@dde.dk" ) ;#define  BUFFERSIZE  512/* /=======================================\|     FIND_STR_IN_FILE                    |-----------------------------------||\=======================================/|| Searches a binary file for a string.|| Returns the start offset for the first occurrence of the string.|||||-----------------------------------------------------------------------------|| CALL:|    find_str_in_file(Filename, startoffset, string);|| HEADERS:|    stdio.h|    string.h|    malloc.h|    io.h|| GLOBALE VARIABLES:|    %|| ARGUMENTS:|    fpFile      : Pointer to the (open) binary file|    lOffset     : Startoffset for search|    pszStr      : String to search for|| PROTOTYPE:|    long _CfnTYPE find_str_in_file(FILE *fpFile, long lOffset,|                                   char *pszStr);|| RETURN VALUE:|    long lStatusFlag   : -1   : String not found|                         -2   : Not enough memory to perform search|                         else : Offset for string in file|| MODULE:|    fsif.c|-----------------------------------------------------------------------------||1994-03-18/Bac|   -  Enhanced error detection. Returning error value|1995-06-19/Bac|   -  Patch for returning position. Changed from blockwise to bytewise|      calculation.|1995-09-20/Bac|  -  Ajusted secondary search in last block||1995-10-27/Bac|  -  Released to public domain||-----------------------------------------------------------------------------||1992-08-01/Erik Bachmann\===========================================================================|*/long _CfnTYPE find_str_in_file(FILE *fpFile, long lOffset, char *pszStr){      long  lStatusFlag = -1l,            /* Status: -1 = not found     */            lPosInFile  = 0l,             /* Position in file           */            lCurrentPos = 0l;      char  cFound      = FALSE,          /* Flag: FALSE = Not found (yet) */            *pszBuffer  = NULL;           /* Buffer for fileinput       */      int   iDataSize   = 0,              /* Size of data read from file*/            iSector     = 0,              /* No of blocks read          */            offset      = 0,              /* local counter              */            iBufferSize = BUFFERSIZE,            iNoBlocks   = 0;              /* No of blocks remaining     */      /*----------------------------------------------------------------*/      lPosInFile = filelength(fileno(fpFile));  /* Find filesize        */      iNoBlocks = (int)(lPosInFile / (int) iBufferSize) ;                                    /* Calculate remaining no of blocks */      fseek(fpFile, lOffset, SEEK_SET) ;  /* Go to start offset */      lCurrentPos = lOffset ;      iNoBlocks = (int)((lPosInFile - lOffset) / (int) iBufferSize);                                    /* Calculate remaining no of blocks */      if (0 == (pszBuffer = (char *) calloc(2 * iBufferSize, sizeof(char))))            return -2;              /* Allocate buffer                  */      memset(pszBuffer, '\0', iBufferSize);      iDataSize = fread(pszBuffer, sizeof(char), iBufferSize, fpFile);                                    /* Read the first block             */      while ((0 < iNoBlocks) && !cFound)      {                             /* Repeat until EOF or found        */            iSector++;              /* Counting no of blocks read       */            iNoBlocks--;            memset(&pszBuffer[iBufferSize], '\0', iBufferSize);            iDataSize = fread(&pszBuffer[iBufferSize], sizeof(char),                              iBufferSize, fpFile); /* Read next block  */            for (offset = 0; offset < iBufferSize; offset++)                                    /* Search first block               */            {                  if (0 == strncmp(&pszBuffer[ offset ],                                   pszStr, strlen(pszStr)))                  {                 /* Is the string placed here?       */                        cFound = TRUE;    /* Yes -> set flag            */                        break;                  }                  else  lCurrentPos++;    /* No -> Try again            */            }            memcpy(pszBuffer, &pszBuffer[ iBufferSize ], iBufferSize);                                    /* Shift block left                 */      }      /* Search the last Sector read if tag not found yet               */      if (!cFound)      {            iSector++;              /* Counting no of blocks read       */            for (offset = 0; offset < iDataSize - strlen(pszStr); offset++)                  if (0 == strncmp(&pszBuffer[ offset ], pszStr,                                   strlen(pszStr)))                  {                 /* Is the string placed in last block?*/                        cFound = TRUE;    /* Found -> set flag          */                        break;                  }                  else if (lCurrentPos < lPosInFile)                                    /* Check for End of File            */                        lCurrentPos++;    /* In file -> goto next       */                  else  break;            /* End of File = quit         */      }      free(pszBuffer);              /* Free the allocated memory again  */      if (TRUE == cFound)                 /* IF tag is found            */            return ((long) lCurrentPos);  /* Return bytewise positon    */      else  return lStatusFlag;           /* Return errorcode           */}

⌨️ 快捷键说明

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