戻る

(2) symlinkを使ってロックする
#-----------------------------------------------------------------
# ログファイルの読み込み(@linesに格納)
#-----------------------------------------------------------------
sub read_log {

    $lockfile = "lockdir/lock";

    $count    = 0;
    while ( !symlink("$$","$lockfile") ) {
        if ( $count == 5 ) {
            &error("ただ今アクセスが集中しています。");
        }
        $count++;
        sleep(2);
    }
    if (!open(DB,"$log_file")) {
        unlink($lockfile);
        &error("ログファイルが読み出しオープンできません。");
    }
    @lines = <DB>;
    close(DB);
    unlink($lockfile);
}


#-----------------------------------------------------------------
# ログファイルの書き出し
#-----------------------------------------------------------------
sub write_log {

    $lockfile = "lockdir/lock";

    $count    = 0;
    while ( !symlink("$$","$lockfile") ) {
        if ( $count == 5 ) {
            &error("ただ今アクセスが集中しています。");
        }
        $count++;
        sleep(2);
    }
    if (!open(DB,">$log_file")) {
        unlink($lockfile);
        &error("ログファイルが書き出しオープンできません。");
    }
    print DB @new;
    close(DB);
    unlink($lockfile);
}

戻る
CGI工房