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

📄 pgrep.c

📁 Apache HTTP Server 是一个功能强大的灵活的与HTTP/1.1相兼容的web服务器.这里给出的是Apache HTTP服务器的源码。
💻 C
字号:
/**************************************************               PCRE grep program                **************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <errno.h>#include "config.h"#include "pcre.h"#define FALSE 0#define TRUE 1typedef int BOOL;/**************************************************               Global variables                 **************************************************/static pcre *pattern;static pcre_extra *hints;static BOOL count_only = FALSE;static BOOL filenames_only = FALSE;static BOOL invert = FALSE;static BOOL number = FALSE;static BOOL silent = FALSE;static BOOL whole_lines = FALSE;#if ! HAVE_STRERROR/**************************************************     Provide strerror() for non-ANSI libraries  **************************************************//* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()in their libraries, but can provide the same facility by this simplealternative function. */extern int   sys_nerr;extern char *sys_errlist[];char *strerror(int n){if (n < 0 || n >= sys_nerr) return "unknown error number";return sys_errlist[n];}#endif /* HAVE_STRERROR *//**************************************************              Grep an individual file           **************************************************/static intpgrep(FILE *in, char *name){int rc = 1;int linenumber = 0;int count = 0;int offsets[99];char buffer[BUFSIZ];while (fgets(buffer, sizeof(buffer), in) != NULL)  {  BOOL match;  int length = (int)strlen(buffer);  if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;  linenumber++;  match = pcre_exec(pattern, hints, buffer, length, 0, 0, offsets, 99) >= 0;  if (match && whole_lines && offsets[1] != length) match = FALSE;  if (match != invert)    {    if (count_only) count++;    else if (filenames_only)      {      fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);      return 0;      }    else if (silent) return 0;    else      {      if (name != NULL) fprintf(stdout, "%s:", name);      if (number) fprintf(stdout, "%d:", linenumber);      fprintf(stdout, "%s\n", buffer);      }    rc = 0;    }  }if (count_only)  {  if (name != NULL) fprintf(stdout, "%s:", name);  fprintf(stdout, "%d\n", count);  }return rc;}/**************************************************                Usage function                  **************************************************/static intusage(int rc){fprintf(stderr, "Usage: pgrep [-Vchilnsvx] pattern [file] ...\n");return rc;}/**************************************************                Main program                    **************************************************/intmain(int argc, char **argv){int i;int rc = 1;int options = 0;int errptr;const char *error;BOOL filenames = TRUE;/* Process the options */for (i = 1; i < argc; i++)  {  char *s;  if (argv[i][0] != '-') break;  s = argv[i] + 1;  while (*s != 0)    {    switch (*s++)      {      case 'c': count_only = TRUE; break;      case 'h': filenames = FALSE; break;      case 'i': options |= PCRE_CASELESS; break;      case 'l': filenames_only = TRUE;      case 'n': number = TRUE; break;      case 's': silent = TRUE; break;      case 'v': invert = TRUE; break;      case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;      case 'V':      fprintf(stderr, "PCRE version %s\n", pcre_version());      break;      default:      fprintf(stderr, "pgrep: unknown option %c\n", s[-1]);      return usage(2);      }    }  }/* There must be at least a regexp argument */if (i >= argc) return usage(0);/* Compile the regular expression. */pattern = pcre_compile(argv[i++], options, &error, &errptr, NULL);if (pattern == NULL)  {  fprintf(stderr, "pgrep: error in regex at offset %d: %s\n", errptr, error);  return 2;  }/* Study the regular expression, as we will be running it may times */hints = pcre_study(pattern, 0, &error);if (error != NULL)  {  fprintf(stderr, "pgrep: error while studing regex: %s\n", error);  return 2;  }/* If there are no further arguments, do the business on stdin and exit */if (i >= argc) return pgrep(stdin, NULL);/* Otherwise, work through the remaining arguments as files. If there is onlyone, don't give its name on the output. */if (i == argc - 1) filenames = FALSE;if (filenames_only) filenames = TRUE;for (; i < argc; i++)  {  FILE *in = fopen(argv[i], "r");  if (in == NULL)    {    fprintf(stderr, "%s: failed to open: %s\n", argv[i], strerror(errno));    rc = 2;    }  else    {    int frc = pgrep(in, filenames? argv[i] : NULL);    if (frc == 0 && rc == 1) rc = 0;    fclose(in);    }  }return rc;}/* End */

⌨️ 快捷键说明

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