Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 186

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

78 {

79Β  int flags = REG_NOSUB; /* информация ΠΎ мСстС совпадСния Π½Π΅ трСбуСтся */

80Β  int ret;

81 #define MSGBUFSIZE 512 /* ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ */

82Β  char error[MSGBUFSIZE];

83

84Β  if (ignore_case)

85Β Β  flags |= REG_ICASE;

86Β  if (extended)

87Β Β  flags |= REG_EXTENDED;

88

89Β  ret = regcomp(&pattern, pat, flags);

90Β  if (ret != 0) {

91Β Β  (void)regerror(ret, &pattern, error, sizeof error);

92Β Β  fprintf(stderr, "%s: pattern '%s': %s\n", myname, pat, error);

93Β Β  errors++;

94Β  }

95 }

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 75–95 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

compile_pattern()
. Она сначала устанавливаСт
REG_NOSUB
Π²
flags
, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ лишь Β«ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ строка?Β», Π° Π½Π΅ Β«Π³Π΄Π΅ Π² строкС располагаСтся подходящий тСкст?Β»

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 84-85 Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ Π² соотвСтствии с опциями ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 89 ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ шаблон, Π° строки 90–94 ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΡˆΠΈΡ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…

97Β  /* process --- Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строки тСкста ΠΈ сопоставляСт ΠΈΡ… с шаблоном */

98

99 Β void process(const char *name, FILE *fp)

100 {

101Β  char *buf = NULL;

102Β  size_t size = 0;

103Β  char error[MSGBUFSIZE];

104Β  int ret;

105

106Β  while (getline(&buf, &size, fp) != -1) {

107Β Β  ret = regexec(&pattern, buf, 0, NULL, 0);

108Β Β  if (ret != 0) {

109Β Β Β  if (ret != REG_NOMATCH) {

110Β Β Β  Β (void)regerror(ret, &pattern, error, sizeof error);

111Β Β Β Β  fprintf(stderr, "%s: file %s: %s\n", myname, name, error);

112Β Β Β Β  free(buf);

113Β Β Β Β  errors++;

114Β Β Β Β  return;

115 Β Β  }

116Β  Β } else

117Β Β  printf("%s: %s", name, buf); /* вывСсти подходящиС строки */

118 Β }

119Β  free(buf);

120 }

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 97–120 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

process()
, которая Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈ выполняСт сопоставлСниС с рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ» (строки 106–119) Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строки Π²Π²ΠΎΠ΄Π°. Для избСТания ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΄Π»ΠΈΠ½ΠΎΠΉ строки ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ
getline()
(см. Ρ€Π°Π·Π΄Π΅Π»Β 3.2.1.9 «Волько GLIBC: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Ρ‹Ρ… строк:
getline()
ΠΈ
getdelim()
Β»). Π‘Ρ‚Ρ€ΠΎΠΊΠ° 107 Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚
regexec()
. НСнулСвоС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ сопоставлСниС, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 109–115 соотвСтствСнно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚
REG_NOMATCН
ΠΈ выводят ΠΎΡˆΠΈΠ±ΠΊΡƒ лишь Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° какая-Π½ΠΈΠ±ΡƒΠ΄ΡŒ другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ сопоставлСниС Π½Π΅ являСтся ошибкой

Если Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0, строка совпала с шаблоном ΠΈ соотвСтствСнно строка 117 Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ имя Ρ„Π°ΠΉΠ»Π° ΠΈ ΡΠΎΠ²ΠΏΠ°Π²ΡˆΡƒΡŽ строку.

122 /* usage --- Π²Ρ‹Π²ΠΎΠ΄ сообщСния ΠΎΠ± использовании ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ */

123

124 void usage(void)

125 {

126 Β fprintf(stderr, "usage: %s [-i] [-E] pattern [ files ... ]\n", myname);

127Β  exit(1);

128 }

Ѐункция

usage()
Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± использовании ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Она вызываСтся, ΠΊΠΎΠ³Π΄Π° прСдоставлСны Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π½Π΅ прСдоставлСн шаблон (строки 38–40 ΠΈ 44–45).

Π’ΠΎΡ‚ ΠΈ всС! Бкромная, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ полСзная вСрсия

grep
Π² 130 строк ΠΊΠΎΠ΄Π°.

12.9. РСкомСндуСмая Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

1.Β Programming Pearls, 2nd edition, by Jon Louis Bentley Addison-Wesley, Reading, Massachusetts, USA, 2000. ISBN- 0-201-65788-0. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Π±-сайт этой ΠΊΠ½ΠΈΠ³ΠΈ. [131]

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Ρ‚Π΅ΠΌ Π² этой ΠΊΠ½ΠΈΠ³Π΅.

2.Β Building Secure Software How to Avoid Security Problems the Right Way, by John Viega and Gary McGraw Addison-Wesley, Reading, Massachusetts, USA, 2001. ISBN: 0-201-72152-X.

Бостояния Π³ΠΎΠ½ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ написании бСзопасного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ случайныС числа. Данная ΠΊΠ½ΠΈΠ³Π° рассматриваСт наряду с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±Π΅ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ (ΠœΡ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΠΎ Π½Π΅ΠΉ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.)

3.Β The Art of Computer Programming. Volume 2. Seminumerical Algorithms, 3rd edition, by Donald E. Knuth Addison-Wesley, Reading, Massachusetts, USA, 1998. ISBN- 0-201-89684-2. [132] Π‘ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Π±-сайт этой ΠΊΠ½ΠΈΠ³ΠΈ. [133]

Π­Ρ‚ΠΎ классичСскоС справочноС руководство ΠΏΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных чисСл.

4.Β Random Number Generation and Monte Carlo Methods, 2nd edition, by James E. Gentle Springer-Verlag, Berlin, Germany. 2003. ISBN: 0-387-00178-6.

Данная ΠΊΠ½ΠΈΠ³Π° ΡˆΠΈΡ€ΠΎΠΊΠΎ освСщаСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ тСстирования псСвдослучайных чисСл. Π₯отя для Π½Π΅Ρ‘ Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся матСматичСская ΠΈ статистичСская ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ высокий, ΠΊΠ°ΠΊ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠšΠ½ΡƒΡ‚Π°. (Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Nelson H.F. Beebe Π·Π° ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ этой ссылки.)

5.Β sed & awk, 2nd edition, by Dale Dougherty and Arnold Robbins. O'Reilly and Associates, Sebastopol, California, USA, 1997. ISBN: 1-56592-225-5.

Π­Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° остороТно Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² рСгулярныС выраТСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ тСкста, начиная с

grep
ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡŒ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтам
sed
ΠΈ
awk
.

6.Β Mastering Regular Expressions, 2nd edition, by Jeffrey E.F. Friedl. O'Reilly and Associates, Sebastopol, California, USA, 2002. [134] ISBN: 0-59600-289-0.