ircdのExcess Floodを無効にする

ircdを自分だけが使用し、大量に書き込みが許される状況では、ircdのExcess Floodの機能が非常に邪魔だ。

数キロバイトのテキストがircdに貯まるだけで、Excess Floodが発動し、強制ログアウトさせられる。

configで機能を削除する方法もあったが、とりあえずソースを弄って、Excess Floodの機能を削除した。

Excess Floodとmsg_readyエラーを削除する必要がある。

以下にソースを弄ったログを。

続きを読む

構文解析2メモ(syntactic_analysis)

さてさて、構文解析1メモにおいてコーディングした構文解析部の残りのルーチン3つを今回は記載。

おさらいとして、以下のように解析の流れを構造化しておく。

/*
E → TE'
E' → +T[+}E'|ε
E' → -T[-}E'|ε
T → FT'
T' → *F[*]T'|ε
T' → /F[/]T'|ε
F → (E)|i[i]|num[num]
*/

/* E'がsyntactic_analysis_2()関数に対応 T'がsyntactic_analysis_3()関数に対応 F がsyntactic_analysis_4()関数に対応 */

では、残りのコードを以下に示す。↓

続きを読む

C言語でOS判定

こんなのでできてしまう。

ircdのソースを参考にコーディング。

# cat c/os_chk.c
#include<stdio.h>

int main()
{

    #if(defined(__NetBSD__))
    {
        printf("NetBSD\n");
    }
    #elif(defined(linux))
    {
        printf("linux\n");
    }
    #elif(defined(__FreeBSD__))
    {
        printf("FreeBSD\n");
    }
    #else
        printf("error\n");
    #endif
    return 0;
}

perlでテキストファイル内容を取得

どうも、この書き方が苦手だ。

$file = `cat hoge.txt`;

かなり多様されてはいるものの、やはりできるだけ使用言語によるコーディングを心がけたい。

しかし、確かに、open→while→closeと段階を踏んで記述するのも、面倒と言う気持ちも分かる。

というわけで、サブルーチンにファイルオープン処理を記述してやると、多少便利だと思った。

sub get_text_file
{
    open my $FILE_HANDLE , $_[0] || die("File Opne Error.");
    local $/;
    <$FILE_HANDLE>
}

これでだいぶ手間が省ける。

↓コーディング例

# cat test.pl
#!/usr/bin/perl

my $file = &get_text_file($ARGV[0]);
print $file;

sub get_text_file
{
    open my $HANDLE , $_[0] || die("File Opne Error.");
    local $/;
    <$HANDLE>
}

# cat hoge.txt
frpijfweroi
fdrfefwfewef
fuok

# ./test.pl hoge.txt
frpijfweroi
fdrfefwfewef
fuok