メール送信時のエラー

定期的にメール送信するプログラムがあったのだが、とある時期をきっかけにうまく送信できなくなっていた。ログには以下のような文字列が。


Relaying denied: Use POP before SMTP or SMTP-AUTH

POP before SMTP」か「SMTP_AUTH」を使ってね...両方知らない orz
グーグルで検索してみる。

エラーの意味は以下のページを参照。
http://www.osaru.ne.jp/smtperror.html

対処方法は以下のページを参照。
http://terrazilog.quipu.jp/?eid=591548

なるほど、勉強になりました。

続・vimのmakeでサブディレクトリを含む場合のMakefile

再帰的にmakeする場合の設定方法が分かったのでメモ。


以下のページのerrorformatを参照。
http://d.hatena.ne.jp/goth_wrist_cut/20080601/1212340171


~/.vimrcに以下を追加すれば良い。

set errorformat+=%D%*\\a[%*\\d]:\ ディレクトリ\ `%f'\ に入ります
set errorformat+=%X%*\\a[%*\\d]:\ ディレクトリ\ `%f'\ から出ます

設定が必要な理由

再帰的にmakeした際のディレクトリを保持する機能はvimで動作している。正しく動作させるためにはエラーフォーマット(errorformat)を正しく設定する必要がある。
gccでのデフォルトのエラーフォーマットは、/usr/share/vim/vim70/compiler/gcc.vimに書かれている(centosの場合)。このファイルを見ると、英語の場合のエラーフォーマットのみ指定されている。日本語の場合は考慮されていないので、各々が各自設定に追加することになる。

vimのmakeでサブディレクトリを含む場合のMakefile

以下のような場合、Makefileを作る場合、2つのパターンがあると思う。


.:
a.c

./b:
b.c b.h

1.「.」と「./b」にMakefileを作る。


.:
a.c Makefile

./b:
b.c b.h Makefile

Makefileのみで見る場合、こちらが一般的なのかな、と思う。でも、これだとvim上から:makeを実行した場合、Quickfixからファイルを開くことができない。

2.「.」のみにMakefileを作る。


.:
a.c Makefile

./b:
b.c b.h

こちらであると:makeを実行した場合、Quickfixからファイルを開ける。

どちらが良いの?

vimでmakeをする場合、2を使うのが良いのかな? 1でもうまくファイルを開く方法がある?
教えて、えらいひと!

19:00追記

2の場合のMakefileのサンプル。

CC=gcc
DIRS=. ./b
SRCS=$(wildcard $(addsuffix /*.c,$(DIRS)))
OBJS=$(patsubst %.c,%.o,$(SRCS))

# [makedependのwarning対策] stddef.hとstdarg.hのために以下のパスを設定(centosの場合)
INCPATH=-I/usr/include/linux -I/usr/lib/gcc/i386-redhat-linux/4.1.1/include
TARGET=test

CFLAGS=$(INCPATH) -g -Wall -O0

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) -o $@ $(OBJS)

.c.o:
    $(CC) -c $(CFLAGS) $< -o $*.o

depend:
    makedepend -- $(CFLAGS) -- $(SRCS)

bashでviキーバインド

下のページではじめてしりました。bashでviキーバインドなんてできるんですね...
http://builder.japan.zdnet.com/news/story/0,3800079086,20372652,00.htm?ref=rss

~/.bashrcに

 set -o vi

と書くだけでOK。すばらしい!ワンダフル!

fgets確認

改行までを読みます。
printfで表示されるのは「#include 」です。

#include <stdio.h>
// test

int main() {
        FILE *fp;
        char line[30];

        fp = fopen("a.c", "r");
        if(fp == NULL){
                printf("file not found");
                return 1;
        }

        fgets( line, sizeof(line), fp);
        printf(line);
        return 0;
}

ポート番号とUSHRT_MAX

ポート番号は0〜65535。
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7

USHRT_MAXとかで判定できるか確認。
http://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88

SILP64でshortが64ビットなのでUSHRT_MAXではだめですね。