表 1 シグナル一覧 SIGUSR2 SIGUSRI SIGINFO SIGWINCH SIGPROF SIGVTALRM SIGXFSZ SIGXCPU SIGIO SIGTTOU SIGTTIN SIGCHLD SIGCONT SIGTSTP SIGSTOP SIGURG SIGTERM SIGALRM SIGPIPE SIGSYS SIGSEGV SIGBUS SIGKILL SIGFPE SIGEMT SIGABRT SIGTRAP SIGILL SIGQUIT SIGINT SIGHUP 記号定数 内容 端末ラインのハングアップ プログラムへの割込み プログラムの中冬了 不正な命令の実行 トレースのトラップ abort(3) の呼出し 工ミュレート命令の実行 : ル」虫例外 プログラムの強伽了 ノヾス、エラーー セグメンテーション違反 存しないシステムコーノレ 読み手のないパイフ。への書込み リアルタイム・タイマーの満了 ソフトウェア終了シグナル ソケットに緊念伏況か当を E 停止 キーポードからの停止 停止後の継続 子プロセスの状態刻ヒ バックグラウンド・プロセスの言翹 ( り バックグラウンド・プロセスの書込み 記主イへの入出力が・可能 cpu 制寺間の超過 ファイルサイズ制限の超過 イ反想時間アラーム フロファイリングタイマー ウインドウサイズの変化 キーポードからの状態要求 ユーサー定義シグナル 1 ユーサー定義シグナル 2 ・アラ ーム デフォルトの里 プロセスの終了 プロセスの終了 コアの作成 コアの作成 コアの作成 コアの作成 コアの作成 コアの作成 プロセスの終了 コアの作成 コアの作成 コアの作成 プロセスの終了 プロセスの終了 プロセスの終了 シグナルの破棄 プロセスの停止 プロセスの停止 シグナルの破棄 シグナルの破棄 プロセスの停止 プロセスの停止 シグナルの破棄 プロセスの終了 プロセスの終了 プロセスの終了 プロセスの終了 シグナルの破棄 シグナルの破棄 プロセスの終了 プロセスの終了 スの停止 " は、プロセスを一時停止します。 68 す。そのために利用されるシグナルとしては、さきはどの で、いつでも外部からのイベントに応答することができま ラムではシグナルハンドラをあらかしめ登録しておくだけ く必要があります。しかしシグナルを利用すれば、プログ 常はプログラム側がつねに入力を受け取れるようにしてお 重川乍中のプログラムになんらかの↑帯にを伝えるには、通 を車川乍中のプログラムに伝えられるようにしています。 などに利用し、ユーサーか設定ファイルを書き換えたこと のプログラムでは、このイ目みを設定ファイルの再言ムみ 的にこのシグナルを発生させる場合が多いでしよう。多く 発生するシグナルです。しかし実際には、ユーサーか明示 モデム経由て端末を接続していて電話が切れたときなどに SIGHUP ( 端末ラインのハングアッフ。 ) は、たとえば SIGHUP に加え、 SIGINFO 、 SIGUSRI 、 SIGUSR2 などがあります。 SIGINFO は上如罅斤しいシグナルで、 プログラムが一焉寺している情報を表示させるのによく利用 されます。すこし調べたところ、たとえは ftp や telnet などの通常利用するプログラム、 fsck や ping といった管 理者がおもに利用するプログラムなどで使われています。 なお、通常は Control-T により、プログラムの実行中に SIGINFO シグナルを送ることができます。これは設定に より異なる可能性があるので、 stty コマンドで status 制 御文字に割り当てられている文字を調べてください。 外部からプログラムの動作を制御するのに利用できる シグナルはこれらだけではありません。 DNS サー である named は、数多くのシグナルを利用しているプ ログラムの 1 つです。 SIGHUP 、 SIGINT 、 SIGILL 、 UNIX MAGAZINE 2002.2
特集ネットワークの基礎知識 0 図 4 動作確認のためのテスト # mail —v maJ0rdom Subject : 1ists EOT majordom. aliased tO maJ ordomo aliased to /usr/local/maj ordomo/wrapper maj ordomo" majordomo . /usr/local/maj ordomo/wrapper maj ordomo" Connecting tO prog ・ Majordomo@mypc . yutaka. jp serves the f0110 i Ⅱ g lists : > > > > lists 図 5 乍確認テストへの反信 Sent /usr/local/maj ordomo/wrapper maj ordomo" Use the 'info ' command tO get more information about a specific list . 図 6 メーリングリストの作成手順 # touch /usr/10ca1/mai1/1ists/N-BoF # chgrp maJ ordom N-BOF* chown maj ordom N—BOF* # vi /usr/IocaI/maiI/Iists/N—BOF . # vi /usr/IocaI/maiI/Iists/N—BOF # vi /usr/IocaI/maiI/Iists/N—BOF . passwd . intro info ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) ノレカゞ なっています。ここでプログラムか起動さメー 88 です。 これで、 Majordomo のインストールと重川御忍は完了 いため、メーリングリスト名は表示されません ) 。 メーリングリストがまだ Majordomo に登録されていな 図 5 のようなメールが」されてきますにの時点では、 信処理は正しくおこなわれています。送信に成功すると、 られます。図 4 のようなメッセージが出力されれば、送 1. メーリングリストの本体となるファイルを作成します。 さい ) 。 作成の手順は以下のとおりです ( 図 6 も参照してくだ 所有者を yutaka-n として説明します。 は、メーリングリスト名を N-BoF 、メーリングリストの ます、メーリングリストを作成してみましよう。以ードで いて説明します。 次に、メーリングリストの作成・削除・設定の方法につ ル宀 2. 作成したメーリングリストの内容を説明するファイルを 作成します。 3. メーリングリストに参加したとき、送信されるメールの 内容を作成します。 4. メーリングリストの管理者用のパスワード・ファイルを 作成します。 5. 作成したファイルの所有者を majordom に変更しま す。 UNIX MAGAZINE 2002.2 を送信したメンバーに、メーリングリストの使い方や参加 です。 request-answer は、 N-BoF-request にメール て、 request-answer フログラムを起動する " という意味 request は、、、 N-BoF-request 宛に届いたメールにヌ↓し アドレスのメンバーに送信されます。 4 行目の N-BoF- mail/lists/N-BoF というファイルに書かれているメール これによって、 N-BoF 宛に届いたメールが /usr/local/ ルアドレスのリストを別名に追加する " という意味です。 /mail/lists/N-BoF というファイルに入っているメー /usr/local 変更します。 2 行目の N-BoF-going は、 プログラムによって、目的アドレスを、、 N-BoF-going" に 宛に届いたメールに対する処理を指定しています。 resend 図 7 の記述の意味を説明します。 1 行目では、 N-BoF ます。 を追加し、 root の権限で newaliases コマンドを実行し るために別名を設定します。 /etc/aliases に図 7 の内容 次に、作成したメーリングリストを sendmail に登録す ます。 6. 作成したファイルのグループを majordom に変更し
0 けつま 3 びっド 、 mkdir" コマンドの一 p オプションは、途中のディレク トリもすべて作成する、という意味です。 次に、 CD-ROM のライセンス用パスワードを /etc 以 下にコピーします。 cp /cdrom/passwd/dpkeylist /etc/dpkey/ これで、ライセンス・サーバーのインストールは完了の はすです。コマンドラインで reh h コマンドを実行して から、、 dpkeyserv" と入力すると、ライセンス・サーバー かな漢字変換サーバーのインストール が立ち上がりました。 イ御忍は後回しにして、さきに辞書本体をインストー cp share/* /usr/share cp sbin/* /usr/sbin tar cf sharel ()d /usr/ ; tar xfpr ー ) tar cf lib l()d /usr/ ; tar xfpr ー ) Cd usr mkdir -p /etc/wnn7/ja-JP rpm2pkg .. /wnn7—server—1.00 ー 1 . i386 . rpm cd JSERVER mkdir JSERVER をすべて / usr ディレクトリにコピーします。 と同しディレクトリ構造を作成し、 JSERVER/usr 以下 ファイルを展開します。続いて、 /etc に JSERVER/etc 用のディレクトリを作り、かな漢字変換サーバーの rpm ライセンス・サーバーの場合と同しく、ファイル展開 辞書にアクセスします。 アントは、このかな漢字変換サーバー (jserver) を通して 次はかな漢字変換サーバーのインストールです。クライ 乍成 ルしておくことにしました。 なかで rpm2pkg コマンドを実行してファイルを展開しま ました。展開用の MAINDIC ディレクトリを作り、その トール手順は同しです。ます maindic から作ることにし ン辞書 (optiondic) の 2 つがあります。両方ともインス Wnn7 の辞書には、メイン辞書 (maindic) とオプショ UNIX MAGAZINE 2002.2 —•vnn7 ディ ~ レクートリを作成します。 MAINDIC ディレク 続いて、辞書本体を置くために /usr/local/libdata/ rpm2pkg ・ . /wnn7—maindic—1.00 ー i386. rpm cd MAINDIC mkdir MAINDIC 、一 0 SC 翡 好評発売中 ! インターネットの 起源 Where W 「 ds Stay up [ 衾 te The Origins 0 「 The lnternet ・ Katie Hafner 、 Matthew Lyon 著 ・加地永都子、道田豪訳 ・ A5 判、 336 ページ ・ ISBN 4-7561-3479-3 ・本体 2 , 500 円 + 税 誤った“常識”を覆し、創設に携わった人びとの肉声を あますところなく伝える貴重な証言集 目次から 即断即決で 100 万ドル / 大聖堂を建てたのは誰か / 第 3 の 大学 / プログラムと格闘する日々 / トウルート宛必着 / ハッ キングと喧噪と / 電子メール / 手にしたロケット 参考文献、索引 Java フログラミング・ノート 国際化と 日本語処理 CAFE BABE ・風間一洋著 ・ A5 判、 312 ページ ・ ISBN 4-7561-3481-5 ・本体 3 , 000 円十税 Java による日本語処理、さらには国際化プログラミング に必須の知識を数多くのサンカいプログラムを示し ながら平易に解説する。真の意味での "Write Once, Run Anywhere" を目指すプログラマーに最適の 1 冊。 目次から Java はどんな言語か / 国際化と地域化 / Unicode / ロケー ル / 工ンコーティング / タイムゾーン / リソースパンドル / フォ ーマット出力と解析 / 文字列の比較 / テキストの境界解析 / インブットメソッド / 文字の表示 付録 : Unicode プロック / ロケール一覧 / 工ンコーティング名 一覧 / タイムゾーン D 一覧 / ユーロ通貨記号への対応 株式会社アスキー 〒 1 51 ー 8024 東京都渋谷区代々木 4 ー 33 ー 1 0 出版営業部 電話 (03) 535 ト 8194 143
ロプログラミンク・テクニック 多治見寿和 シグナルの処理 前回は、入出力をプロックせすに処理できるかどうかを 謌ヾられる select システムコールを紹介しました。 select を利用すれば、複数の入力元や出力先を扱うときに入出力 処理のためにプロックすることを避けられます。さらに、 リングバッフアと組み合わせれは、 telnet コマンドの処 理でどのような入力も正しく扱うことができます。 今回は、 telnet コマンドにおけるシグナルの処理をみて いきます。 シグナルは、実行中のプロセスに対し、その内外で発生 したさまざまなイベントを通知するために利用されます。 シグナルの通知ガ去は、計算機のハードウェアて当盟三する 割込みに似ています。シグナルの発生と同時に、未な関 数であるシグナルハンドラか呼び出されます。発生したイ べントをシグナルハンドラで処理したあと、イベントハン ドラカ鮗了すると、処理が中断された点からプロセスの 実行を再開します。つまり、何事もなかったかのように実 行か読けられます。突多勺に発生したイベントの処理はシ グナルハンドラでおこなうため、通常のプログラム部分で はこれらに対する処理をとくに主しません。 シグナルハンドラの実行・終了後に、制御がもとの位置 に戻ってくる点がやや不思議に思えるかもしれません。 れは、プログラムにシグナルハンドラの呼出しカ当され ていた、つまりシグナルが三した時点で実行していた部 分の次の行がシグナルハンドラの呼出しだったと考えれば 分かりやすいでしよう。こう考えれは、プログラムの実 行中にシグナルハンドラか呼び出さそれカ鮗了すると ー , ー , ー、一一一一 ~ ーー、一 , 、一一一一・一一一一。ー。 ~ ーも一と一の位置に戻ることも理解しやすいのではないでしよう シグナル UNIX MAGAZINE 2002.2 か。ただし、実際にはもうすこし複雑です。複雑な式を評 価しているあいだにシグナルが発生することもあります。 この場合にも、次に言叫面したい式の一部がシグナルハンド ラの呼出しだったと考えるとよいかもしれません。 シグナルは、実際にいくっかのプログラムで利用されて います。たとえは、 2001 年 8 月号で紹介した rwh 。 d で は、 3 分ごとにシステムの状態を通知するためにタイマー を設定しています。設定した時間か経過するのを待つあい だ、システムはプロックしているわけではなく、独自に 処理をおこなえます。タイマーを待って次の処理を始める 代わりに、タイマーに定した日判肋を茴するとシグナル が発生することになっているからです。したがって、タ イマーをとくに意識しないプログラムになっており、タイ マーに設定した時間が過ぎたら発生するシグナルのシグナ ルハンドラで適切な処理をおこないます。ここでは、発生 したイベントとはタイマーに設定した時間か経過したこと であり、イベントハンドラでおこなうイベントに対応した 処理はシステム情報の送信となります。 シグナルとして認識できるイベントに対応したシグナル を表す記号定数は、 signal.h ヘッダファイルで定義され ています。現在、て利用可能なシグナルを表 1 に示します。 表の左端か記号定数で、中央のカラムはそのシグナルの 意味てす。右端のカラムはそのシグナルを受け取ったとき の、プロセスにあらかしめ用意されているデフォルトのハ ンドラの動イ乍です。、、プロセスの終了 " は、シグナルを捕 捉したプロセスを終了します。、、コアの作成 " は、プロセ スの朋大を示すコアファイルを作成してプロセス自身も終 了します。、、シグナルの破棄 " は、あたかもシグナルが発 生していないかのようにシグナルを無視します。、、プロセ 67
図 2 Majordomo のインスト % su # make insta11 ーノレ TO finish the installation, ' su' tO て 00t and type : make install—wrapper If not installing the wrapper , type cd /usr/local/maj ordomo ; . /wrapper config—test ( Ⅱ 0 necessary) tO verify the installation. 図 3 /etc/aliases への自加 owner—owner : yutaka—n /usr/local/maj ordomo/wrapper maj ordomo" maJ ordomo : maj ordom : maj ordomo maj ordomo—owner : yutaka—n owner—maj ordomo : yutaka—n これで準備は終りです。 root になってインストールし wrapper config—test ラムを実行してみましよう。 従って wrapper をインストールし、 ようなメッセージか表示されます。 su で ro 。 t の権限を得てインストールすると、図 2 の ます。 テスト用のプログ こで、メッセージに UNIX MAGAZINE 2002.2 参加者へメールを醪医する処理をおこないます。デフォル 送信されたメールのヘッダを解析し、メーリングリストの リです。これは Perl プログラムで、メーリングリストに プログラムの 1 つである resend が使用するディレクト テスト時に石忍される $TMPDIR は、 Majordomo の 意識をずに管理作業をおこなうことカそきます。 wrapper を利用することで、設定ファイルのアクセス権限を に保証するために使われます。メーリングリストの管理者は、 ストール時に設定した適切な権限で Majordomo か動くよう れが wrapper です。 wr 叩 per は setuid されていて、イン すが、 1 つだけ C て第当されているプログラムがあります。 Majordomo のプログラムの大半は Perl で書かれていま ノート 2 クされます。 などが majordomo. cf での設定と合っているかがチェッ ・インストールされたファイルの権限 ・インストール先のディレクトリ に関するさまざまな石忍がおこなわれます。たとえば、 を実行すると、インストールされた Majordomo の設定 $TMPDIR = $ENV{ , TMPDIR , } Ⅱ "/usr/tmp" と定義されています。システムに /usr/tmp ディレクト リがないとテスト時にエラーになるので、作成してからテ ストを実行します。 # mkdir /usr/tmp # chmod 777 /usr/tmp # make install—wrapper # cd /usr/local/maj 0 て domo # . /wrapper config—test 次に、 MTA の sendmail て利用する /etc/aliases フ ァイル 1 に、図 3 の内容を追加します。 sendmail では、 /etc/aliases にユーサーのメールアドレスの別名を設定し ます。このファイルは、 名前 : アドレス 1 , アドレス 2 , という書式で記述します。、、名前 " が別名として使われ、 、、アドレス 1 " や、、アドレス 2 " がその別名に置き換えられ て解釈されます。アドレス 1 やアドレス 2 には、ユーサー 名やファイル名、コマンド、メールアドレスなどを記主す ることができます。 こまでの作業カ鮗ったら、動イ御窿認のためのテスト をおこないます。図 4 に例を示します。このテストでは、 ューザー majordom 宛に lists コマンドを実行するため のメールを送信しています。 図の下のほうに表示されているように、 majordom は majordomo への別名、そして majordomo は〕 /usr/ local/majordomo/wrapper majordomo " への別名と 1 sendmail 8.10 VJ 」年では /etc/mail/aliases です。 87
になります。それなら、わざわさ唳り値をチェックする必 要もないというのが作者の考えでしよう。 こまでに紹介していない次の この関数の後半部では、 ようなシグナル里の呼出しがおこなわれています。 (void) sigsetmask(sigb10ck(0) & ~(1 くく (SIGTSTP-I))) ; ます内側からみていきましよう。 sigblock は、現在プ ロックされているシグナルの集合に、引数として指定した シグナルの集合を追加するためのシステムコールです。 こでは引数に 0 を指定しているので、プロックされるシ グナルの集合に変更はありません。この呼出しは、戻り値 を得るために利用しているだけです。 sigblock システム コールは、現在プロックされているシグナルの集合を表す 値を返します。ここでは、現伏の値を取得するためにこの システムコールを使っています。 sigsetmask システムコール呼出しの引数では、 sig- block により返される値 ( 現在プロックされているシグ ナルの集合 ) から SIGTSTP シグナルを除外する竹喋を おこなっています。そのため、ます SIGTSTP を表す 集合を構築し (1 くく (SIGTSTP-I)) 、その補集合をとって います (~(1 くく (SIGTSTP-1)))0 さらに、現在のプロッ クされたシグナルの集合との積集合をとり、引数としてい ます。 sigsetmask システムコールは名前が示すとおり、プロ ックすべきシグナルのマスクを引数として渡すと、それ をプロセスのシグナルマスクとして設定するための関数で す。このシステムコールでおこなう処理は、上で作成した 、、もとのシグナルマスクから SIGTSTP を除いたもの " を 設定する竹喋になります。 こて利用している sigsetmask や sigblock しつは、 などのシステムコールはいまでは旧く、代わりに sigproc- mask システムコールを利用することになっています。 sigprocmask(how, &set' &oset) 第 1 引数の how には、このシステムコールでおこなう 処理を示す記号定数を指定します。 SIG BLOCK : sigblock システムコールと同様に、指 定したマスクを現在のマスクに」助日する。 SIG-UNBLOCK : 上でおこなった処理のように 定したマスクを現在のマスクから削除する。 UNIX MAGAZINE 2002.2 プログラミング・テクニック SIG-SETMASK : sigsetmask システムコールと同 様に、指定したマスクをプロセスのシグナルマスクとす る。 第 2 引数の set には、 sigset-t 型のアドレスを指定しま す。 sigset-t 型の値として、指定したい値を渡すのです。 第 3 引数の oset にも sigset-t 型のアドレスを指定します が、こちらは sigprocmask システムコールから値を返す ためのものです。処理をおこなう前の、現在のシグナルマ スクの値カされます。この値が不要な場合には NULL を指定できます。 sigprocmask システムコールを使うと、さきはどの、 (void) sigsetmask(sigblock(()) & ~(1 くく (SIGTSTP-I))) ; という呼出しは以下のように変更できます。 sigset—t sig; SIGEMPTYSET(&sig) ; SIGADDSET(&sig, SIGTSTP) ; sigprocmask (SIG—UNBLOCK , &sig , NULL) ; 行数は長くなりますが、こちらのはうが分かりやすいの ではないでしようか。 ☆ 今回は、プログラムの実行中に外部から特別な処理がお こなえるシグナルについて説明しました。シグナルを処理 するには、シグナルハンドラを作成してあらかじめシステ ムに登録しておきます。シグナルが発生すると、システム が自重加勺にシグナルハンドラを呼び出すので、プログラム ではいつシグナルが発生するかを気にする必要はありませ ん。 シグナル処理というと難しそうですが、 signal 関数を 使えは上如勺簡単に割込み処理のプログラムが作成できま す。ためしに、 SIGINFO シグナルに対するシグナルハン ドラを書いて、プログラムの実行中にステータス情報を出 力してみてはいかがでしよう。 73 ( たしみ・ひさかす )
特集ネットワークの基礎知識 0 図 19 qpopper のインストール手順 % tar xvzf qpopper4.0.3. tar. gz % cd qpopper4.0.3 % . /configure —enable—apop=/etc/pop ・ auth % make % su # make install インストール -enable—popuid=pop それでは、 qpopper をインストールしましよう。 qpop- per のソースパッケージを、以下の URL から入手します。 ・ http://www.eudora.com/qpopper/ 執点 : の最新版は 4.0.3 です。以下では、 FreeBSD 4.2 上での例をもとに説明します。インストールの基本的 な手順を図 19 にまとめておきます。 configure の実行時に指定している 2 つのオプション は、次のような意味をもっています。 ・一—enable—apop APOP で使うパスワードを管理するファイルを指定し ます。図刎列では /etc/pop. auth としています。 —enable—popuid 上記の一 -enable-apop で指定したファイル (/etc/ pop ・ auth) を管理するためのユーサー ID を指定しま す。この例では pop' としてい、ます。システムに pop というューザー・アカウントがない場合には、あらかし め作成しておきます。 図 19 の手順で各コマンドを実行していくと、 /usr/ local/sbin/popper として qpopper がインストールさ れます。また、 APOP 用のパスワード管理プログラム popauth も /usr/local/sbin ディレクトリにインストー ルされます。 ユーザーの設定 インストールカ鮗了したら、ユーザーに関する設定をお こないます。 qpopper では、 APOP 用の認証データベー スを独自に管理しています。この認証データベースを操作 するためのプログラムとして popauth が用意されてい ます。今回の例では、 popauth プログラムで /etc/pop ・ auth を操作することになります。 popauth は setuid さ れていて、インストール時に一—enable—popuid の引数で 104 指定したユーザー ( 今回の例では pop) の権限で動胙しま す。また、認証データベース・ファイル /etc/pop ・ auth の所有者も同じューサーになります。 インストール直後の状態からイ喋を始めることにしまし よう。ます、認証データベースを初期化します。それには、 root の権限で以下のように実行します。 # popauth —init この時点ではデータベース・ファイルはないはすなの で、新たに作成されます ( すでにある場合には初期化され ます ) 。 次に、新たなユーザーの j 助日、あるいは既存のユーザー のパスワードの変更方法について説明します。たとえば、 yutaka-n というユーザーを j 助日する場合は、 root もしく は指定したユーサー (pop) になり、以下のコマンドを実 行します。 # popauth —user yutaka—n すると、パスワードを訊かれるので入力します。ここで 入力したものが、ユーザー yutaka-n の POP におけるパ スワードになります。 意 2 当然のことながら、ログイン・アカウントとは異なるパス ワードを言殳定するほうがよいでしよう。 既存のユーサーの POP アカウントを削除するときは、 # popauth —delete yutaka—n とします。これで、 yutaka-n という POP アカウントが 認証ファイルから削除されます。 すでに登録されている POP アカウントの一覧を参照し たいときは、 # popauth -list ALL とします。 UNIX MAGAZINE 2002.2
イリき ~ いいヤ . .0- . ・・イ : : ィ 3 女子大生の放課後 モしていたので、それを参考にしながら設し、コンソー ルの Emacs でも日本語が使えるようになりました ( もつ べきものは友 ) 。 あゆ : ふーん、 mpg123. el を site-lisp の下に入れれはえ えんやれ そよか : あーもう、プラウサがないから、、リンク先を指定 して保存 " ができん。 まり : なんや、そよか、 fetch コマンド知らんの ? あゆ : 「そのうち、できるようになろうね」とか言いつつ 1 、 自分ではできんのかい ! そよか : 必要になったときにできればええんよ。 あゆ : だったら、いまできるようになりなさい。 そよか : まり、できるんだよね ? ( もつべきものは友 ) まり : 分かった、分かった。ええと・ > fetch http://www.gentei ・ org/-yuuji/software/ mpg123e1/mpg123. el そよか : やった。ありがとう、まり。 まり : これで、できるようになったね ( はつ、あってたか ) 。 . emacs. el に記述を追加して Emacs を再起動すると、 、、 M-x mpg123 " で mpg123 が使えるようになりました。 プレイリストも日本語て表示できるし、操作も簡単です。 さらに id3. e12 も導入すると、 Emacs のプレイリスト上 で、、 E " を押せば ID3 タグを書き換えることもできます。 いまでは、この Emacs 用の MP3 プレイヤーが大のお気 に入りです。 ウインドウを有効活用 Emacs 用 MP3 プレイヤーのおかげで、真っ黒コン ソール生活にもうるおいが出てきました。コンソール上で Emacs を使っているので、起動した Emacs は画面全体 にひろがっています。この状態で mpg123 を動かしてい るとき、 Emacs で何か書くには画面を 2 分割するしか なく、事実 - E は 1 回に 1 つの作業しかできません。 MP3 ファイルを BGM として流したいのに、 1 つのことしかで きないのでは BGM になりません。 mpg123 のウインド ウ、プログラムを書くウインドウ、メモを書くウインドウ というふうに、複数のウインドウを切り替えて使えないも 1 1 月号ではっきり言っています。 2 http://www.gentei ・ org/-yuuji/s0ftware/mpg123el/ 150 のでしようか。そんな私の理想をかなえてくれる Emacs 用のプログラムが、 windows. e13 です。 あゆ : どうやってウインドウを切り替えられるん ? そよか : windows. el か動くように設正できたら、 Emacs を起動すると、 ・・ほら、 ニノヾッフアに Startup with window [ 1 ] " って出てるでしょ ? まり : おお、ほんとだ。 そよか : ここで mpg123 を走らせて、 C-c C-w 1 ってす るとこの状態が 1 番目のバッフアに記慮されるんだよ。 、、 C-c C-w 2 " と押すと、ウインドウをどうするのかと 訊かれるので、新規ウインドウを作る、℃ reate" を選びま す。これで、、 [ 2 ] " というバッフアが作成されます。さらに こで画面を 2 分割すれば、 tcsh を走らせながら Ruby のプログラムを書くこともできます。 まり : ふーん、、℃ー c C-w 数字 " でいくつも新規ウイン ドウを開けるんか。 そよか : そ。 mpg123 の画面か完全に隠れてるでしょ ? れで、音楽を聴きながらプログラムを書いたりできるわ け。 あゆ : mpg123 のウインドウに戻るにはどうするの ? そよか . 、℃ -cC-w 1 " で 1 番目のバッフアに戻れるし、 、℃ー c SPC " でも直則に使っていたバッフアに戻れる よ。 あゆ : へえ、便利だれ そよか : revive. e14 っていうのを組み合わせるとレジュー ム機能力咐いて、、、 c-c c-w C-r a" ってするとそれま でに作ったウインドウの状態を保存してくれるんだよ。 まり : ロードするのは、℃ー c C-w C-r r" か。 あゆ : おつ、ちゃんと憶えてる。工ライねえ。 まり : 何か音楽かけてみてよ。 そよか : ちょっと待ってね。、、 M-x mpg123 -/mp3/ hoi/" っと。 まり : 仮面ライダー AGITQ? もっとまともなの、な い、ん ? そよか : まともやけど。何か ? 3 4 ( きたがわ・あゆみ、いとう・そよか、かさとう・まり 京都女子大 http://www.gentei.org/-yuuji/software/windows.el http://www.gentei.org/&yuuji/software/revive.el UNIX MAGAZINE 2002.2
--sighandler-t という型を新たに定義し、それを使って 型亘暠をおこなっています。こちらのほうはたいへんすっ きりとした宣言になっているのか分かるでしようか。 それでは、 telnet のソースコードでシグナルを扱って いる部分をみていきましよう。シグナルはいくつかのファ イルで扱っていますが、 こでは sys-bsd. c ファイルを とりあげます。 ファイルのう頁のはうでは、シグナルハンドラの戻り値 の型を決定しています。 ソースコード * when SIGINFO is received . ayt-status() (void) call(status, #endif "status " "notmuch" #def ine #e1se #endif #if defined(CRAY) Ⅱ (defined(USE_TERMIO) & & ! defined(SYSV_TERMIO) ) SIG_FUNC_RET #define SIG_FUNC_RET void int 関数の定義でも、 SIGINFO に関する ifdef で括って おくことで不要な関数定義を避けています。また、この関 数には有効な引数がないことも分かります。ここでは引数 のあるシグナルハンドラしカ呂介していませんが、このよ うな関数でも正しくコンパイルすることができます。 sys-bsd. c ファイルに戻りましよう。次にシグナル里 の言当か現れるのは、 TerminaINewMode という巨大な 関数のなかです。ここでも、ます SIG-FUNC-RET 型 のシグナルハンドラとして旦暠しています。このとき、関 数カ躾際に必要かどうかを、登録したいシグナルが定義さ れているかて判断しています。 シグナルハンドラの戻り値は、システムによって void となっていたり int となっていたりします。これらの違 いを吸収するために、 SIG-FUNC-RET というマクロを 利用しています。シグナルハンドラの戻り値の型をこのマ クロに成疋しておくことで、シグナルハンドラの旦暠時に 考慮する必要がなくなっています。 このコードのすぐ後ろに、実際に SIG-FUNC-RET を使ってシグナルハンドラを定義している部分がありま す。このコードは SIGINFO に関する ifdef て話られて います。ここで旦暠している ayt-status は、 SIGINFO のシグナルハンドラとして用意されている関数です。 SIG- INFO カイ吏えないシステムでは不要なので、このようにし #endif extern SIG—FUNC_RET ayt—status ( ) ; #ifdef SIGINFO ています。 72 * Function that gets called #ifdef SIGINFO れています。その部分は次のようになっています。 この関数は、実際には commands. c ファイルで旦暠さ す。 を戻り値の型とし、 K&R 形式の宣言をおこなっていま 型宣言としては、さきほど決定した SIG-FUNC-RET #ifdef #endif #ifdef #endif SIGTSTP SIG_FUNC_RET susp ( ) ; / * SIGTSTP * / SIGINFO SIG_FUNC_RET ayt ( ) ; 関数を宣言したあとは、同様に ifdef て才舌りながら sig- nal 関数を使ってシグナルハンドラを登録します。 #ifdef #endif #ifdef #endif SIGTSTP (void) signa1(SIGTSTP, susp) ; / * SIGTSTP * / SIGINFO (void) signa1(SIGINFO, ayt) ; signal 関数の戻り値はすでに設定されているシグナル ハンドラですが、こでは void 型にキャストすることで、 返される値を捨てています。このプログラムでは、以前に 登録されていたシグナルハンドラを再度設定する操作は発 生しないので、これを保存しないのは糸断昇できます。さら にいえは、 signal 関数の実行が成功したかどうかをチェッ クしたほうがよいのでしようが、失敗していたとしてもど ちらのシグナルもプログラムの実行に必須ではないため、 そのままプログラムの実行か継続されます。つまり、 sig- Ⅱ al 関数が失敗したことが分かっても何も処理しないこと UNIX MAGAZINE 2002.2
図 31 認証テスト # imtest —m login —a yutaka—n localhost C : C01 CAPAB 工 LITY S : * OK a21p-freebsd Cyrus IMAP4 v2 . 0.16 server ready S : * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL + NAMESPACE UIDPLUS 工 D NO—ATOMIC-RENAME UNSELECT MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE AUTH=D 工 GEST—MD 5 AUTH=CRAM-MD5 S: C01 OK Comp1eted C: L01 LOGIN yutaka-n { 4 } + go ahe ad C: く omitted> L01 OK User logged in Authenticated . Security strength factor : 0 は、 sendmail のパッケージを展開したディレクトリの下 の cf/README ファイルを参照してください。 Cyrus IMAP サーバーには、 MTA から IMAP サー ノヾーへの酉占逶をおこなう deliver というプログラムが含 まれています。 deliver は標準入力を読み込み、 IMAP サ ーバーの 1 つ以上のメールポックス , 当医します。 send- mail から deliver を呼び出すには、 /etc/group ファイ ルを編集し、グルーフ daemon に対してグループ mail を 追加します。 daemon : * : 1 : daemon,mail そして、 sendmail.cf ファイルを生成します。 send- mail. cf ファイルの言当主はたいへん英早で、相当な経験を 積んだ人以外は直接編集するのはほほ不可能です。そこ で、通常は WIDE プロジェクトの中村素典氏が開発し た CF プログラム、あるいは m4 と呼ばれるマクロ言語 プロセッサを使います。ただし、 CF は sendmail 8.9 ま でしかサポートしていないため、以下では m4 を利用する ガ去を紹介します。 m4 を使って cf ファイルを生成するには、もとになる マクロファイルが必要です。といっても、ゼロから書くの は大仕事てす。さいわい、 Cyrus IMAP サーバー doc/cyrusv2. mc というサンフ。ルファイルが付属してい ます。 このファイルの初めのはうにある、 OSTYPE (linux) を、利用しているシステムの OS に応して書き換えます。 こてイ吏っている FreeBSD 4.2 であれは、 (Ä)STYPE ( b sd4.4 UNIX MAGAZINE 2002.2 とします。その他の指定については、 sendmail に付属の cf/README ファイルなどを参考にしてください。 mc ファイルを作成したら、 cf ファイルを生成します。 上で変更したファイルを、 sendmail を展開したディレク トリの cf / m4 ディレクトリに cyrusv2. mc ファイルと Cyrus IMAP サーノヾーには、 cyradm というメ メールポックスの管理 これで MTA の設定変更カ鮗了しました。 ファイルを生成したら、 sendmail を再起動します。 を実行すると、 sendmail. cf ファイルが生成されます。 cf # cp cyrusv2. cf /etc/sendmail . cf % su % m4 cf . m4 cyrusv2. mc > cyrusv2. cf いう名前でコピーします。そこで、 ーノレ ースワードを訊かれるので、 saslpasswd コマンドで設定し 権限でローカルホストにログインするという懣未です。パ admin は管工叫径限をもっューサー名で、このユーサーの -user オプションの引数に指定している yutaka- localhost> ←コマンド入力待ち P1ease enter your password : XXXXX % cyradm —user yutaka—admin localhost ます。 ます、管理モードに入るために以下のコマンドを実行し 式になっています。 ます。コマンドラインで実行し、対話式に操作していく形 セス制御リスト (ACL) の設定などをおこなうことができ は、メールポックスの作成や削除、 quota の設定、アク ポックス管理プログラムが付属しています。 cyradm で 113