さかいです. <200008021648.AA01350 _at_ jiro.pluto.dti.ne.jp>の記事において catmoon _at_ pluto.dti.ne.jpさんは書きました。 >> .forward からパイプでプログラムに流し込むしくみや方法について >> だいたい理解できました。 よかったです.:-) >> 実際に行いたいことは、メールの中にファイル名を記述しておきます。 >> メールが届いたら、リアルタイムで、あるプロセスがそのファイルを >> 読みに行く、ということを行いたいのです。 リアルタイムで,という意味がちょっとよくわかりませんが... >> それで、処理の内容として考えたことは >> 1.メールを受信したら、.forward ファイルによって、メールを読む >> プロセス(A)が起動する >> 2.メールを読むプロセス(A)は、メールの中身のエラーチェック後、 >> メールに書かれたファイル名を読むための別プロセス(B)に >> メッセージを送る(メッセージキューによるプロセス間通信を行う) >> 3.メールを読むプロセス(A)はメッセージを送るとexitする >> Q1. .forward ファイルの中に "| プログラム名"という記述をしておくと >> して、プログラム内では標準入力からメールの最後をなんというコードで >> 認識したらよろしいのでしょうか?(何をもってメールのEOFとみなすか?) 繰り返しますが,*ふつうのテキストデータ*ですので,getchar() で読むなら, while ((c = getchar()) != EOF) { /* 処理 */ } です. Perl なら, while (<>) { } ですね. # 厳密に言えば,read() システムコールが 0 を返すまで,ということかな >> Q2.仮に同時刻に、同じユーザ宛てに複数のメールが届いたとすると >> .forward によって起動されるメールを読むプロセス(A)は複数と >> 考えてよろしいでしょうか? 当然,複数です. >> つまり、1プロセスにつき1件のメールを処理する、と考えて >> 問題ないでしょうか? sendmail がそのつどプロセスを作るので,問題ないです. >> Q3.他に何かよい方法ありますか? >> 例えばシェルだけで可能とか・・。(シェルについてあまり詳しくないので >> よく分からないのです) Perl でやるのがいいとおもいます.楽ですよ. (プロセス間通信とかをやろうとかならなおさら楽) シェルだけでもできるとは思いますが,こういうことこそ,Perl でやるべき ことだと思います. 長く使うこととかを考えると,たとえ1からPerlを勉強したとしても, Cでぜんぶやるより楽に作れるでしょう. それに, >> 2.メールを読むプロセス(A)は、メールの中身のエラーチェック後、 >> メールに書かれたファイル名を読むための別プロセス(B)に >> メッセージを送る(メッセージキューによるプロセス間通信を行う) ここまでする必要は無いのでは? と思います. ただ単にプロセスAが目的の作業を行えばいいのではないのでしょうか? リアルタイム,というのが理由なのかな? あとセキュリティには十分注意する必要がありますね. /etc の下は読まれないようにするとか.
Follow-Ups:
- [linux-users:72135] Re: 受信メールを自動的に読む方法Hiromi Shiraishi
- [linux-users:72102] Re: 受信メールを自動的に読む方法Hiromi Shiraishi
- Prev by Subject: [linux-users:72130] Re:レスキューフロッピーの作成方法
- Next by Subject: [linux-users:72132] Re: [linux-users:72081]FWサーバーを入れると、クライアントがインターネットにつながらなくなりました。
- Previous by thread: [linux-users:72102] Re: 受信メールを自動的に読む方法
- Next by thread: [linux-users:72135] Re: 受信メールを自動的に読む方法
- Indexes:[Main][Thread]