特定の文字列を含むセクションだけを抜き出す (続き)


きむらさんのこういう部分はいろいろためになります。

1.  ある大きさをまとめて読んでくる
2. 読んできた中にRSにマッチする文字列があれば
      1. RSにマッチした位置より前の部分を今回読み込んだレコードとして設定する
      2. RSにマッチした部分文字列をRTに設定する
      3. RSにマッチするものがなければ、ストリームから読み足してくる
3. 読み込んだレコードのフィールド分割を行う
4. ルールの適用

gawk 自体で Cygwin で分岐している部分もあります。

io.c で以下のようになっていて、

#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__EMX__) || defined(__CYGWIN__)
/* binmode --- convert BINMODE to string for fopen */

static const char *
binmode(const char *mode)
{
        switch (mode[0]) {
        case 'r':
                if ((BINMODE & 1) != 0)
                        mode = "rb";
                break;
        case 'w':
        case 'a':
                if ((BINMODE & 2) != 0)
                        mode = (mode[0] == 'w' ? "wb" : "ab");
                break;
        }
        return mode;
}

awk.h で以下のような設定になっています。

#if ! defined(MSDOS) && ! defined(OS2) && ! defined(WIN32) && ! defined(__EMX__) && ! defined(__CYGWIN__) && ! defined(O_BINARY) /*duh*/
#define O_BINARY        0
#endif

なんとなく、gawk の BINMODE と絡んできそうです。

このへんを元に (時間があったら) 会社で挙動を調べてみます。