|
>http://www2q.biglobe.ne.jp/~terra/cgi/lockfile.htm (笑) あはは、どもです。どこだったか忘れてました。 |
|
>Netboy さんは、ノンブロッキングの flock なら OK、 >という立場ですよね? はい. 動作環境を知っていて,使えると判断した用途にはOKです. 例えば常駐動作のサーバー用のスクリプトなんかにはいいですよね. >それとも 両方価値がない、という話ですか? いいえ,fcntlは意味があると思います. POSIX準拠(?)+NFS対応だそうですし. あれはOSの内部操作をそのまま出してくれているんですよね? でもWin環境で互換性が無いので,あまり使いません. >> flockして成功したプロセスが無限ループに入ったとき, >という状況って、起こり得ますか? (現象事態は >root が SIGSTOP 送れば容易に発生しますが) 次のようなものです. - スクリプトの単なるバグ - 作成中のスクリプトのテスト時 - 予期しないデータを与えられたスクリプト - Perlインタプリタがコケたとき.OSリソース逼迫下. - インタプリタのバグ. - Apacheの設定ミス,管理者の不注意な設定変更. - クラッキングを受けたサーバー >Netboy さんは、どういうプログラムを想定しておられます? >ちなみに僕が考えたのは、カウンタとか web BBS とかです。 私も同じです. スクリプトのバグでは,機種/環境依存文字の訂正で ある予期しない文字列のとき置換操作が止まらなくなる...など. >僕の環境では「まともにロックできない」というのは >経験したことはありません それは68userさんだから(笑). 普通の人は下で書いたスクリプトみたいな感じです. NFSを使っているプロバイダの場合,もっと状況は複雑になります. >それと flock は、symlink・mkdir よりは速かったです。 う〜ん,負荷が掛かった時なんです,問題は. デッドロックの自動検出と,flockの解除のための pidの保存操作や予防措置も含めてください. MMX233+FreeBSDで1000個の掲示板が同時動作で平均待ちプロセスが2〜4個 の状況('97のテレホ時)でflockを使うかどうか,です. >訳の分からない排他制御手段を考える人 いや,いいんじゃないですか.誰もが通る出発点だと思います. 68userさんだって,miniBBSのアレとか,ほら,悪い思い出(笑). 混雑時の実用性や設置性を検証すると,面白いことになります. |
|
はじめに、flockについて質問した者です。 CGIをダウンロードした人にプロバイダ来たメールで、 やはり、「NFSがらみで、flockが利用不可能な状態」とのことでした。 CGIの方は、WIN95も考慮して、ロックファイルの有無で対処いたしました。 話は、変りますが、DNSサーバーについて知識として教えて下さい。 rlogin,ftp,telnetなどで、ホスト名を指定した時に、どのようにして、 DNSサーバーとやり取りをしているのですか? DNSサーバーはhttpみたいなデーモンが動いているですか?(私の買った本には、この辺書いていなかった) ちょっと、気になったので、よろしくお願い致します。 |
|
flock の件は後程。 > rlogin,ftp,telnetなどで、ホスト名を指定した時に、どのようにして、 > DNSサーバーとやり取りをしているのですか? rlogin/ftp/telnet などは、ユーザからホスト名を受け取ると gethostbyname(3) などを使って、ホスト名から IP アドレスを 得ようとします。 gethostbyname の内部では、ソケットを使って DNS サーバに アクセスします。で、DNS サーバは UDP の port 42 を listen していて (UDP だから listen という表現は変?)、 クライアントからの問い合わせに応じて IP アドレスを 教えたり、他の DNS サーバに問い合わせたり、見付から ないよと答えたりします。 こういう問い合わせを行う DNS クライアント (この例では gethostbyname) のことを resolver と言います。resolver は 概念的なもので、問い合わせを一手に引き受ける resolver サーバのようなものがあるわけではありません。ただのライブラリです。 なので、自分で外部の 42/udp にアクセスする DNS クライアントを 書く事もできます。 > DNSサーバーはhttpみたいなデーモンが動いているですか? UNIX 界で DNS サーバとして有名なのは bind です。 プログラム名は named。 # apache と httpd の関係と似ています。 |
|
> こういう問い合わせを行う DNS クライアント (この例では > gethostbyname) のことを resolver と言います。 いや、違うか。 res_query, res_search, res_mkquery, res_send, res_init, dn_comp などの DNS サーバへ問い合わせを行うライブラリ 関数群のことを resolver といいます。gethostbyname などは これらの関数を孫請けとして呼んでいます、かな。 # See resolver(3). |
|
回答ありがとうございます。 では、DNSクライアントとnamedデーモンが、 UDPプロトコルでportの42番でやり取りすると理解してよろしいですね。 すっきりしました。 ありがとうございました。 |
|
はじめまして、gongoと申します。 いきなりで申し訳ありませんが質問があります。 私はXアプリケーションの勉強を始めたばかりなのですが XライブラリとXツールキットを用いたプログラムを書こうとして 行き詰まってしまいました。 と言いますのは、例えばXツールキットを用いて表示させた窓に Xライブラリを用いて直線を引いたりする方法がわかりません。 XDrawLine(XtDisplay(w),XtWindow(w),gc,x1,y1,x2,y2); といった感じでプログラムの中に書き込みますとコンパイルは できるのですが、実行させるときにXDrawLineのところで Segmentation faultで止まってしまいます。 本もいろいろと読みましたがどうにもうまくいきません。 作成途中のプログラムは以下のところにあります。 http://www.din.or.jp/~gongo/xtshirt.c(本体) http://www.din.or.jp/~gongo/color.dat(色の数値) どうか宜しくお願い致します。 |
|
> では、DNSクライアントとnamedデーモンが、 > UDPプロトコルでportの42番でやり取りすると理解してよろしいですね。 その通りです。 > 例えばXツールキットを用いて表示させた窓に > Xライブラリを用いて直線を引いたりする方法がわかりません。 非常に興味のある分野なので答えたいのはやまやまなのですが、 Xt を触ったことがないのでわかりません。でも、DrawLineOnWidget 内で drawgc を使ってますが、DrawLineOnWidget を呼び出す前に drawgc に GC をセットし忘れているように見えます。 あと、戻り値を見ると XtWindow(w) で NULL が返ってるのが 問題…なのかなぁ。解決法がわかったら教えて下さい。 |
|
> 非常に興味のある分野なので答えたいのはやまやまなのですが、 素早いご返答ありがとうございます。 > drawgc を使ってますが、DrawLineOnWidget を呼び出す前に > drawgc に GC をセットし忘れているように見えます。 本によると、ウィジェットをリアライズした後にGCを 設定するようなことがかいてありましたもので XtRealizeWidget(toplevel); よりも後にdrawgcをセットすることにしたのです。 もう少し調べてみます。 > あと、戻り値を見ると XtWindow(w) で NULL が返ってるのが すみません、これはどういうことなのでしょうか。 NULLが返ってくるというのはどのように調べたらよろしいのでしょうか。 NULLが返ってるとなるとおそらくここが悪いのだと思います。 う〜ん、もう少し調べてみます。 |
|
> XtRealizeWidget(toplevel); > よりも後にdrawgcをセットすることにしたのです。 うーん、XDrawLine を呼んだ時点で X サーバとの通信が 行われると思うんで、やっぱりセットしておかないと いけないんじゃないかなぁ…。GC は typedef struct _XGC * GC; なので、GC の中身がゴミ (初期化してないので) だと まずいと思うのです。 > NULLが返ってくるというのはどのように調べたらよろしいのでしょうか。 printf("%d\n",XtWindow(w)) としました。他の部分で同じことを すると何か値が入っているのですが、XDrawLine の前で表示させると 0 となってしまうので、XtWindow がこけてるのかと思いました。 まぁ、知識がないのに推測を重ねるのもアレなので、 会社にある本を読んで調べてみます。 |
|
> 他の部分で同じことをすると何か値が入っているのですが、 > XDrawLine の前で表示させると 0 となってしまうので、 > XtWindow がこけてるのかと思いました。 例えばDrawLineOnWidget(label)の書いてあった手前に printf("XtDisplay(label) = %d\n",XtDisplay(label)); printf("XtWindow(label) = %d\n",XtWindow(label)); と書いたところ、XDrawLine の前で表示させるのと同様に 次のようになってしまいました。 XtDisplay(label) = 67584 XtWindow(label) = 0 やはり0というのはまずいのでしょうか。labelを使い回して いくつかの窓を表示させようとしているのがまずいのか・・・。 あとdrawgcのセットをDrawLineOnWidget(w)の中で下記のように 行ってみたところ、 drawgc=XCreateGC(XtDisplay(w),XtWindow(w),0,NULL); XSetForeground(XtDisplay(w),drawgc,pixel[1]); XSetBackground(XtDisplay(w),drawgc,pixel[0]); DrawLineOnWidget(label)は抜け出て、ok6までは到達したのですが X Error of failed request: BadDrawable (invalid Pixmap or Window parameter) Major opcode of failed request: 55 (X_CreateGC) Resource id in failed request: 0x0 Serial number of failed request: 35 Current serial number in output stream: 48 となってしまいました。 お手数お掛け致しまして申し訳ございません。 |
|
> labelを使い回していくつかの窓を表示させようとしているのがまずいのか・・・。 各窓がだぶらないようにlabel1,label2,・・・といったように してみましたが結果的にうまくいきませんでした。 |
|
根本的には何がまずいかと言うと、 1. GC をセットしていない (その結果 core dump) 2. Window がマッピングされる前に XtWindow を実行している (その結果 X Error) だと思います。1は先に述べた通り。2は XtWindow の前に XtRealizeWidget が必要なんでしょう。 で、そういえば一応 Xt の本を持ってたな〜と思い出したので読んでみると、 a. Form ウィジェットの上に Simple ウィジェットを作成 b. Simple ウィジェットに、Exposure イベントへの コールバック関数を設定 c. XtAppMainLoop でイベント待ち d.コールバック関数が呼ばれて、その中で XDrawLine という手順を踏んでました。 実際には何も試してませんが、上の通りにやってみては いかがでしょう。なお、a は必須かどうかわかりません。 Label ウィジェットに直接 XDrawLine できるのかもしれません。 flock の件はまたまた後程。うーん、調べる時間がない…。 |
|
> 実際には何も試してませんが、上の通りにやってみては > いかがでしょう。なお、a は必須かどうかわかりません。 ありがとうございます。いろいろ試してみます。 |
|
> a は必須かどうかわかりません。 必須ではありませんでした。以下のような感じで一応描画はできました。 正しいかどうかはわかりませんが。 void repaint(){ XDrawLine(XtDisplay(label),XtWindow(label),gc,0,0,100,100); } main(){ ... XtAddEventHandler(label,ExposureMask,FALSE,repaint,NULL); XtRealizeWidget(toplevel); ... } 現実的には、Pixmap に書いておいて、Expose が発生するたびに Pixmap から Window にコピーするのが効率的です。 # それ用の Widget が Xt にあったりするんだろうか。 うーん、やっぱり UNIX 使いとしては、基礎知識として、Xt は 抑えておかねばなぁ…。 |
|
はじめまして。初心者にもわかりやすいUNIXのHPでよく利用させて頂いていま す。早速ですが、質問があります。kinput2をバックグラウンドで起動した後、 netscapeを起動しようとすると以下のようなメッセージを残してすぐに落ちて しまいました。どのようにすれば解消できるでしょうか? % kinput2 -canna -jserver remotehost & % netscape & [2] Bus error netscape(core dumped) (↑このメッセージを残してnetscapeが落ちます。) |
|
@68userさん すみません、ちょっと横から質問です。 >> では、DNSクライアントとnamedデーモンが、 >> UDPプロトコルでportの42番でやり取りすると理解してよろしいですね。 >その通りです。 ぼく、ずっとUDPの「53」番(ゾーン転送のときはTCPも)だと思っていたんですが、 これは間違ってたんでしょうか? #うーむ、心配になってきました・・・確認しよっと。 |
|
> 68user様 窓の表示とともにただ線を引くというのが イベントなのかどうかわからなかったため、 今までイベント処理でやろうとは思っていませんでした。 これから試してみます。 |
|
> ずっとUDPの「53」番(ゾーン転送のときはTCPも)だと思っていたんですが、 うぅ、tcpdump で見ると確かに 53 でした。調べもせずに いいかげんなことを言ってはいけない…。 なぜかとてもとても忙しいぞー。なんでだ。 なので、その他については明日に持ち越し。 |
|
現在 Xt の勉強中。 @gongoさん > 窓の表示とともにただ線を引くというのが > イベントなのかどうかわからなかったため、 ご存知かもしれませんが一応説明しておきますと、X では ウィンドウの最初の map 時や、他のウィンドウに隠れていた ものが露出した場合に Expose イベントが飛んできます。 なので、X クライアントは Expose イベントが飛んでくるか どうかを見張っていて、飛んできたら描画/再描画しなくては いけません。これをしないと、ウィンドウ内が真っ白になります。 X サーバ側が再描画をしてはくれませんから (とりあえず バッキングストアのことはおいとくとして)。 なお、最初の Expose が飛んでくる前 (Map する前) に描画 しようとすると、core 吐くか、X Protcol Error になった ような記憶が。 # ↑Xlib のレイヤの話。Xt だけを使っているなら、 # イントリンシクスがよきにはからってくれます。 # http://X68000.startshop.co.jp/~68user/xprogram/xlib-1.html @gaoさん > kinput2をバックグラウンドで起動した後、 netscape を > 起動しようとすると以下のようなメッセージを残してすぐに > 落ちてしまいました。 > % kinput2 -canna -jserver remotehost & canna の場合は、-cannaserver じゃなかったかなぁ。 -jserver は Wnn 用だったような。 # でも kterm などで漢字変換できているのなら、 # これでいいのかも。 > % netscape & > [2] Bus error netscape(core dumped) OS 名と、Netscape をどうやってインストールしたか、 X のリソース設定 (~/.Xdefaults の中身や xrdb -query の 結果) を書いて下さい。 というより、FreeBSD/NetBSD/OpenBSD/Linux あたりなら 日本語リソース付のパッケージが用意されているでしょうから、 それを使うのが簡単です。もしパッケージを使っているのに こういう結果になるなら、変なリソース設定をしている or リソース設定が足らない、あたりが怪しいかと。 |
|
また、質問させてもらいます。 $aaa = 20000728; $datedata=substr($aaa,0,4) . "/" . substr($aaa,4, 2) . "/" . substr($aaa,6, 2); print "datedata=$datedata\n"; のように、20000728 を 2000/07/28のようにyyyy/mm/ddに変換していますが、 上記以外のスマートな方法を教えて下さい。 「perlでVBのFormat関数みたいのはないですか」って質問されたもので...。 よろしくお願い致します。 |
|
スマートでないやり方です. 修飾子での簡単な型式変換をつけました. print &format('20000728','yyyy mm dd',"yyyy/mm/dd\n"); print &format('20000728','y1 y2 mm dd',"'y2年mm月dd日\n"); print &format('20000726','yyy! m! d!',"m!月d!日\n"); $M{'m#07'}='July'; print &format('20000726','yyyy m# d!',"m# d!, yyyy\n"); sub format{ local($src,$format,$template)=@_; local(@format,$ptr,$s,$d,$len); @format=split(/ /,$format); $ptr=0; foreach $s(@format){ $len=length($s); $d=substr($src,$ptr,$len); if ($s=~/!/){$d+=0;} if ($s=~/#/){$d=$M{"$s$d"};} $template=~s/$s/$d/g; $ptr+=$len; } return $template; } |
|
> VBのFormat関数 というものを知らないので外しているかもしれませんが、普通は $date = 20000728; printf "%04d/%02d/%02d",$date=~m/^(\d\d\d\d)(\d\d)(\d\d)$/; か $date = 20000728; $date =~ s|^(\d\d\d\d)(\d\d)(\d\d)$|$1/$2/$3|; printf $date あたりかなぁ。 もし表示形式を指定できるようにするなら、date コマンドと同じ書式の http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=strftime&dir=jpman-3.1.0%2Fman#toc0 にするかも。 |
|
すいません、返答がずいぶん遅れてしまいました。 68userさん、いろいろアドバイスありがとうございます。 それで、いろいろMewについて見ていったのですが、 たまたま見ていたEmacsのINFOの中にMewという単語を見つけ、 中を見ていったら、何と既にMewがインストールされていました。 色々お手数おかけしてすいませんでした。 ただ、色々試みているのですが、いまだにMewを起動させる事ができません。 M-x Mew と入力すると起動すると書いてあるのですが、 これをどこで(どういう場面で)入力すればいいのかが解りません。 教えて頂けますか? それから、最近、Netscape をkill した時に Bus error という表示が出て、.netscape フォルダの中に、 lock ファイルができてしまいます。 以前はこんな事はなく、Done という表示が出て lock ファイルも作られませんでした。 僕は最近、不必要だと思われるファイルを色々消していっているのですが、 その過程で、何か必要なファイルまで消していってしまったのでしょうか? |
|
@68user様 > X ではウィンドウの最初の map 時や、他のウィンドウに隠れていた > ものが露出した場合に Expose イベントが飛んできます。 ここら辺はなんとなくわかっていたのですが、 最終的にできてほしいプログラムのことを考えるあまり 頭の中でごちゃごちゃになっていました。 まだ線をひくのを確認していないのでやってみます。 |
|
@68user様 度々すみません。27日のご説明でイベントハンドラを 用いていましたが、呼び出されるイベントハンドラは あらかじめ決められた関数の形式(XtEventHandler型)で なくてもよろしいのでしょうか。 |
|
>68userさんへ 確認し、理解できました。ありがとうございました。 >Netboyさんへ 確認し、ちょっと理解できないところがありましたが、ありがとうございました。 引数2と引数3の関係がイマイチわかりません。 とりあえず、これで、失礼いたします。 ありがとうございました。 |
|
>引数2と引数3の関係がイマイチわかりません。 引数2は,引数1の切り分け方の指定です. print &format('28/07/2000','dd x mm x yyyy',"yyyy年mm月dd日\n"); のように使えます. 混乱させてしまって済みません. 関数名に予約語(format)を使ったのもまずかったです... |
|
@68userさん >うぅ、tcpdump で見ると確かに 53 でした ぼくも確認しなおしました。 記憶違いでなくてよかった・・・。 #68userさんが断言してらっしゃると、 #自分の記憶に自信があっても、ビビッちゃいます(笑 |
|
@gongo さん > 呼び出されるイベントハンドラはあらかじめ決められた > 関数の形式(XtEventHandler型)でなくてもよろしいのでしょうか。 void repaint(void) としたのは、てきとーに書いただけで、 void handler(Widget,XtPointer,XEvent*,Boolean*) が正しいです。まぁ XtEventHandler は typedef void (*XtEventHandler)( Widget /* widget */, XtPointer /* closure */, XEvent* /* event */, Boolean* /* continue_to_dispatch */ ); なので、void repaint(void) でも動くはずです。C言語では 呼び出し側が渡した引数を、呼び出された関数側で受けなくても 構わないからです (…ほんとかなぁ。動くかどうかは環境依存かも)。 @ちゃいぱさん > 「perlでVBのFormat関数みたいのはないですか」 ちなみに、この問いが「perl に strftime のような関数はないのか」 という意味なら、答えは「perl5 標準では、ない」です。 ただし Time::CTime モジュールをインストールすれば strftime 関数が使えるようになります。 @いちさん > M-x Mew と入力すると起動すると書いてあるのですが、 > これをどこで(どういう場面で)入力すればいいのかが解りません。 emacs を起動して、ESC キーを押して、x を押して、 mew とタイプして Enter です。コマンドラインから % emacs -f mew としても同じことになります。 > Netscape をkill した時に Bus error という表示が出て、 > .netscape フォルダの中に、lock ファイルができてしまいます。 常套手段として、rm -rf ~/.netscape で設定ファイルをクリア してから、再度 netscape を立ち上げて下さい。preferences.js、 bookmarks.html などのバックアップは忘れずに。 |
|
@68userさん ありあまる回答をして頂き、感謝いたします。 あがとうございました。 ただ、元々の質問者のレスがなく、ちょっと残念...。 @Netboyさん 理解できました! 関数名を変えれば、結構使えそうですね。 ありがとうございました。 |
|
需要があるかどうかは知らないけど、BBS の全文検索の試運転。 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard/namazu.cgi namazu-2.0.4 でやってますが、replace に正規表現使えるし、 filter いじれば この BBS のデータ形式にも対応できるし、 いい感じ。 まだ自動更新はされません。 @hsj さん > #68userさんが断言してらっしゃると、 > #自分の記憶に自信があっても、ビビッちゃいます(笑 僕はかなりいいかげんな回答をしてます。 そもそも DNS サーバの設定をしたことがないくらいだし :-) |
|
> http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard/namazu.cgi あら、検索すると、データファイル中の remote host が丸見え。 filter で削るように設定したつもりだったんだが。というわけで、 いったん引っ込めます。 |
|
68userさん> 御回答ありがとうございます。 仰せのとおり Mew を起動させようとしましたができませんでした。 どうやら、Mew の help があるものの、Mew 自体はインストールされてないみたいです。 そこで、Mew と im をインストールしました。 次に、アーカイブを展開するというように説明に書いてあったのですが、 これって、圧縮されたファイルを解凍するという事ですよね。 そう思って、gzip で圧縮されていたので、gunzip で解凍しようとするのですが、 gzip: mew-1.94.2.tar.gz: unexpected end of file という表示が出て、うまくいきません。 どうしたらよいのでしょうか? それと、.netscape/ のことについてですが、 その中にあるファイルの bookmarks.html は何となく解りますが、 preferences.js はどういうファイルなのですか? その他の、cache/(ディレクトリ)内にある index.db そして、archive/(ディレクトリ)、cert7.db 、history.dat、 history.list 、key3.db 、plugin-list 、plugin-list.BAK、 registry 、secmodule.db はそれぞれどういったファイルなのでしょうか? 教えて下さい。 それから僕は、ディスク容量を節約するために、cache/ フォルダの中に、 99/ というフォルダを作り、その中に必要なキャッシュファイルを移動し、 他のキャッシュファイルは、全て自動削除するように設定しているのですが、 その 99/ フォルダに入れたキャッシュファイルの効果があるか、良く解らないのです。 (どうやらキャッシュフォルダは 00〜0f、10〜1f までしか作られないみたいなので、 99にする必要は別段ないのですが) これって、意味ありますか? もしくは、もっといい方法がありましたら教えて下さい。 |
|
FTPについての質問なのですが、 FTPでデータを転送するさい、失敗することはありえるのでしょうか ある場合、正しく転送されたか、チェックすることは可能なのでしょうか? ネットワーク関係は初心者なもので、よくわからないのですが FTPはTCPの上位プロトコルなので、 データのチェックはTCPレベルでやっているのでしょうか? 突然の質問、失礼しました。 |
|
返答ありがとうございます。 >> % netscape & >> [2] Bus error netscape(core dumped) >OS 名と、Netscape をどうやってインストールしたか、 >X のリソース設定 (~/.Xdefaults の中身や xrdb -query の >結果) を書いて下さい。 ~/.Xdefaults の内容は以下のようになっています。 kterm,netscape当りの設定内容のみを書き出してみました。 設定ミスなどがありそうですか? ---------------------------------------------------------------- kterm*VT100.translations: #override \ Shift <Key>space: begin-conversion(_JAPANESE_CONVERSION) KTerm*KanjiMode: euc KTerm*SaveLines: 1000 KTerm*ScrollBar: on KTerm*IMProtocl: kinput2 KTerm*Modifiers: @im=kinput2 *inputMethod:kinput2 *VT100*translations: #override\ Shift<Key>space: begin-conversion(_JAPANESE_CONVERSION) Netscape*useStderrDialog: False Netscape*international: True Netscape*inputMethod: kinput2 Netscape*XmTextField.fontList:\ -*-courier-medium-r-*--14-*-*-*-*-*-iso8859-1;\ -*-*-medium-*-*--14-*-*-*-*-*-jisx0208.1983-0;\ -*-*-medium-*-*--14-*-*-*-*-*-jisx0201.1976-0;\ -*-*-medium-*-*--14-*-*-*-*-*-jisx0212.1990-0: ---------------------------------------------------------------- xrdb -query ↑このコマンドは意味がわからないのですが、何を行うのでしょうか? |