|
> ただ、/newhomeと/homeが両方存在しています。/newhome は > 消しても構わないと判断できるでしょうか。 多分よいと思いますが、df -k して、別パーティションで あることを確認して下さい。また、本当にコピーできたか どうか du や diff などで確認して下さい。 > `mkdir /home`は不要だったか? /dev/hda2 を /home にする、ということなのでマウントポイント /home はマウントする前に mkdir で作成しなければなりません。 なお、マシンが手元にあるなら、シングルユーザモードで起動してから 作業をするのが正しいやり方です。 > perlやCによるプログラムでヘッダやフッターを処理したメールを、 > SMTPサーバーで送信しているのか、それともSMTPサーバーのどこかで、 > ヘッダやフッターを設定できるのかな、と思いまして。 SMTP サーバがヘッダやフッタに関与することはないと思います (そういうサーバが世の中に絶対ないとは言い切れませんが)。 ちなみにメーリングリストサーバの fml なんかは、ポリシー として、フッタを付けるような機能は実装しない方針だった ように思います (今はどうか知りません)。 |
|
はじめまして。 pl(cgi)で $A="abc"; この$Aに入っている“abc”をクリプト化したいのですが どのようにすればよろしいですか? |
|
Xwindowのソフト開発をやらなければいけません。が、まったく分かっていない状態だと思います。 サンプルプロを入力して起動させると、画面は表示されないままだんまり状態になります。 fputsのstdoutで処理通過点を表示させると、XtMainLoop()のところでだんまりになってる様です。 しかし、どのように原因を究明していいのか、ディバッグツールは何があるのか全く分かりません。 古いUNIXの本にadbと言うディバッグツールが乗っていたのでmanで説明を見て(と言っても英文なので見たつもり) いろいろ表示させて見ましたが、内容を見ても分からない状態です。 一体何をどうすれば、いやいや、何からどう始めれば、はたまたどんなマニュアルを購入すれば、少しはましな状態になるでしょうか? どうかお願いします。どんなヒントでもいいので教えてください。 順序が後先になりましたが、OSはSolaris7、言語はC、マシンはSUNです。 掲示板に書き込むのは初めてなのですが、これでよろしいでしょうか? でれでは・・・。 |
|
> この$Aに入っている“abc”をクリプト化したいのですが お望みのものかどうかわかりませんけど、 http://X68000.startshop.co.jp/~68user/webcgi/cryptogram.html など。 > fputsのstdoutで処理通過点を表示させると、 > XtMainLoop()のところでだんまりになってる様です。 僕は Xt のプログラムを作ったことがないのですけど、 XtMainLoop で戻ってこないのは正しいのではないですか? その中でイベント待ちをしているわけだから。 |
|
お返事どうもありがとうございます。 確かにおっしゃる通りです。正確に自分のQを伝えていません。ごめんなさい。 XtMainLoopでだんまりになっているのに、画面が表示されないのです。 色々悩んでリソースファイルと言う物が間違っているのかとか思うのですか・・ 自分が起動かけてる状態で、どのリソースファイルを見にいってるのかも分からないんです。 だから、本当にリソースファイルが問題なのかどうかも??? マニュアルによると、/usr/lib/X11/app−defaults と言うファイルだと書いてありますが/usr/libの下にはX11なるディレクトリはありません。 ではapp−defaultsはというと、いくつものフォルダーに存在しています。(ざっと40個位) はたしてどのファイルなのやら・・・・ こんな状態ではいつになったらソフトが完成するのやら・・と思うと気がめいってきます。 が、やらねば。 何かヒントをお願いします。 |
|
「僕の血の半分は地球人の血です!僕の父は地球人です!」「目を覚ませ!エイジ!」「基地の中には僕と同じ位の年の人もいるのです!」・・・レイズナーは一部が面白かったですね。エイジが全裸でカプセルに閉じ込められてる姿はドキドキものでした!二部のエイジはなんかオヤジっぽくてイマイチだと思ったのは私だけ? |
|
> レイズナービデオに取って見ていた女 すいません、おそらく あなたが見たコンテンツは SEGA BBS の過去ログです。 SEGA BBS は http://www.sega.co.jp/sega/p_cafe/bbs.html でやってますので、 そこに書き込んでみて下さい。 > XtMainLoopでだんまりになっているのに、画面が表示されないのです。 つまり、ボタンなどの簡単な部品を表示するだけのプログラムが 動作しない、と解釈していいですか? ソースが短いなら、見せて もらえばわかるかもしれませんが、わからないかもしれません。 > 自分が起動かけてる状態で、どのリソースファイルを見に > いってるのかも分からないんです。 truss コマンドで、どのファイルを open(2) しているか わかるでしょう。 > /usr/libの下にはX11なるディレクトリはありません。 ディレクトリは環境依存なので /usr/X11R6/lib/X11、/usr/X/lib/X11 など に置いてある場合もあります。 > ではapp−defaultsはというと、いくつものフォルダーに > 存在しています。(ざっと40個位) はたしてどのファイルなのやら・・・・ app-defaults/KTerm は何のファイルかご存知ですか? kterm が 起動時に読み込むリソースファイルです。 なんで kterm が app-defaults/KTerm を読むかというと、kterm の クラス名が KTerm だからです。そのクラス名というのは、 XtAppInitialize (古い Xt なら XtInitialize) の引数で指定します。 なので、「app-defaults/あなたの作ったプログラムのクラス名」という ファイルが存在すればそれが読み込まれますし、存在しなければリソースが 空になるだけです。 > はたまたどんなマニュアルを購入すれば Xt の本は結構あります。秋葉原などが近いなら、ちょっと覗いてみれば 結構見付かります。ただし、古い本が多いので、既に obsolete な関数 (例えばさっきの XtInitialize とか) を紹介していたりするのが難点。 あと、少し前の UNIX USER で、数回 Xt の説明が載ってました。 |
|
> XtAppInitialize (古い Xt なら XtInitialize) 違った。XtAppInitialize も obsolete でした。少なくとも X11R6.3 なら XtOpenApplication を使いましょう。 # From XtOpenApplication(3Xt) # XtAppInitialize and XtVaAppInitialize have been superceded # by XtOpenApplication and XtVaOpenApplication respectively. # # be supereded ≒ be obsolete と解釈してよいのだろうか? |
|
毎日どうもありがとうございます。感謝感謝です。 たくさんのコメントどうもです。 まず、app-defaultsファイルの件はtrussと言うコマンドで分かりました。 次に、XtOpenApplicationを使ってコーディングしてみましたが、(以下) disp=XtOpenApplication(app1,"xmfonts",NULL,0,&argc,argv,NULL, applicationShellWidgetClass,NULL,0); パラメータの値がよく分かりません。でもこれでコンパイルしたところ 以下のようなエラーでコンパイル出来ません。 内のX11のバージョンは分かりません。 cc /export/home1/sakou/srclib/cstlib/xmfonts.c -c -g -I /usr/openwin/include -I /usr/dt/include "/export/home1/sakou/srclib/cstlib/xmfonts.c", line 78: warning: improper pointer/integer combination: op "=" cc -o xmfonts xmfonts.o -lXm -lXt -lX11 -lm Undefined first referenced symbol in file XtOpenApplication xmfonts.o ld: fatal: Symbol referencing errors. No output written to xmfonts *** エラーコード 1 make: 致命的エラー: ターゲット `xmfonts' の構築用コマンドが失敗しました。 最後に、マニュアルは、地方にいるので書店にいってもX-windowsのマニュアル なんてほとんど皆無です。 どんなマニュアルがあるかも分からないのでネット上で一生懸命探しているのですが 内容が分からないのと、価格がPCの物と比べて高価なのとでなかなか 自分では決められない状況です。 もう一つ、自分の無知さがまた一つ分かりました。 X-windowsのプログラムはXlibだけでもコーディング出来るのですか? XツールキットとかMotifルーチンとかが無くても出来るのですか? XツールキットとかMotifルーチンは簡単にコーディングするための ライブラリーなのですか? ほかにOpenGLとかXveiwとかも聞きますがそれらの位置関係が全く 分かっていない事が分かりました。(今まではすべて使って初めてプログラムが 完成する。と思っていました。それなのにサンプルプロは様々な関数を 使ってあるのでなぜ???って) ではまた。byebye。です。 |
|
すいません、Xt のつもりで書いてました。Motif なんですよね。 Xt* のくだりは無視して下さい。その他は後ほどまた書きます。 |
|
> X-windowsのプログラムはXlibだけでもコーディング出来るのですか? > XツールキットとかMotifルーチンとかが無くても出来るのですか? > XツールキットとかMotifルーチンは簡単にコーディングするための > ライブラリーなのですか? 答えは全て YES です。Xt も Motif も最終的には Xlib の API を呼びます。 http://www.ainet.or.jp/~inoue/im/basic.html#api が参考になるでしょうか。ただし、Xlib だけでやろうとすると 入力フォーム一つ作るのにも相当苦労するでしょう。 # この方のページはとても質が高いので、UNIX を使う人は # 一通り目を通しておいた方がよいと思います。 ちなみに、 > 極端な話、Xlibを使わずソケットプログラミングで直接 X protocol を > 話すXクライアントアプリケーションを作ることも原理的には可能です。 というのは、/tmp/.X11-unix/X0 に対して UNIX ドメインソケット経由で X プロトコルを話すとか、ポート 6000 に対して X プロトコルを話す、 ということです。 > ほかにOpenGLとかXveiwとかも聞きますがそれらの位置関係が全く 僕もわかってません。なので、偉い人に聞いてきました。 http://www.energy.ee.ehime-u.ac.jp/~flathill/FreeBSD/chat/log/200006/20000610.html の (Jun 10 00:26)[go] を読んで下さい。 # …全然わかってなかったんだなぁ。 あと、OpenGL は 3D を描画するためのライブラリです。 > 最後に、マニュアルは、地方にいるので書店にいってもX-windowsの > マニュアルなんてほとんど皆無です。 こっちも http://www.energy.ee.ehime-u.ac.jp/~flathill/FreeBSD/chat/log/200006/20000611.html をどうぞ (6/11 07:00 あたりにならないと作成されません)。 > 次に、XtOpenApplicationを使ってコーディングしてみましたが やはり Motif であっても XtOpenApplication を使うべきだとは 思いますが、お使いの openwin が X11R6.3 より古い規格に準拠して いるのではないかと思います。 > 内のX11のバージョンは分かりません。 man X とすると、最後に X Version 11 Release 6.3 などと書いてあると思います。 以下、ひとりごと。Perl/Tk 800.xxx 系の日本語化パッチ。 http://opinion.nucba.ac.jp/~tsutomu/perltk/jp-patch.html やっと見付けられた…。 |
|
グラデゥウスの基盤手に入ったがどうしても無敵技で来ません 教えてください 4面でフォースフィールドつけながらクリアーして そのあとまたはりなおすんですか?? |
|
私は課題研究という授業で ゲーム業界についてというテーマで いろいろ調べています。 その中で、ここが検索に引っかかりました。 日付から見てかなり前のものだったようですが、 中古ゲーム販売についての論争、 とても参考になりました。 当然、こんなテーマで調べているのですから 私自身ゲームもやりますし、 中古店も利用しています。 いろいろ考えさせられました。 参考といってもあの内容をそのまま引用したり するわけではありません。 調べる範囲に中古市場を加えることを 視野に入れて・・・変な文章・・ とにかく、それを加えることを決めました。 報告書作成まで、日にちが余りないのですが がんばってみようと思います。 勝手ながら少しばかりご挨拶をさせて いただきました。 |
|
おひさしぶりです。いつぞやは、お世話になり、ありがとうございます。 早速ですが、質問がございます。 echo-3.htmlには、 > このように SOMAXCONN を指定すると、 OS が許す最大値を意味します。 とあって、且つ、 > FreeBSD2.2.7 では /usr/include/sys/socket.h で > #define SOMAXCONN 128 >と定義されているので、 とあります。 で、以下の1)と2)のどちらに解釈していいのか悩んでいます。 1) この例の128は、クライアントや言語に依らず(?)、OSによって 一意に決定されるもの。 2) この例の128は、クライアントや言語に依って、決定されるもの。 (∵128と書くということは、減らすのはもちろん、増やすのも可能?) (これが真なら、いじる方法はありうるでしょうか?) なぜ、このような質問をするかというと、 a) 事の発端は、自作proxy( http://henika.virtualave.net/view.cgi?0 ) で、 http://henika.virtualave.net/japanese/browsers.htm を (厳密に言うとローカルマシン上でテストしてます)見に行くと、画像の 枚数が多いせいか、全ての要求を受付てくれない(logで確認済み)。 b) でも、自作proxyを経由しないと、ちゃんと表示される。 c) そこで、SOMAXCONNをいじれないか? と、思ったからです。 多分、いじれそうにないな、とは思っているのですが、もし、いじる 方法(perlのコンパイルを除く)をご存知でしたら、ご教授願いたく、 よろしくお願いします。 因みに、環境はwindows98, perl -vでは、 This is perl, version 5.005_03 built for MSWin32-x86-object と表示されます(失礼ながら、windowsをご存知ではないのは、過去ログ から、承知しておりますので、perlでいじれる方法、ということで、 お願いします)。 ・・・とかいいつつ、delegateのように、delimiter(但し/-_-ではなく/)で imgタグをproxy経由させないように改定してしまいましたが、気になって 気になって仕方がない・・・ |
|
すいません、先の自作proxyは、あれ単体では動作しないので、 もし、眺めるのでしたら、お手数ですが、 http://henika.virtualave.net/view.cgi?0 を適当な名前に、 http://henika.virtualave.net/view.cgi?1 をfilter.plに、 http://henika.virtualave.net/view.cgi?2 をhtrans.plに してください。 宜しくお願いいたします。 参照 http://henika.virtualave.net/japanese/proxy.htm |
|
> グラデゥウスの基盤手に入ったがどうしても無敵技で来ません わからないです。というか、無敵技があったのか。 # ちなみに基盤じゃなくて基板です。 > 参考になりました。 と言っても、僕が書いた文章ではないので扱いには お気をつけ下さい。まぁ、 > 参考といってもあの内容をそのまま引用したりするわけではありません。 ということなので、心配はしておりませんけど。 > 1) この例の128は、クライアントや言語に依らず(?)、OSによって > 一意に決定されるもの。 です。 (FreeBSD では) この数はカーネル内部に書かれており、動的に数を 変更する仕組みもないので、一般ユーザでも root でも変えられません。 どうしてもというならカーネルの再コンパイルでしょうか。 とはいえ、他の UNIX 系 OS では動的に変更できたりする *可能性* はあります。 # ioctl とかで変更できても不思議ではないけど、できなくても不思議ではない。 > 画像の枚数が多いせいか、全ての要求を受付てくれない(logで確認済み)。 なお、FreeBSD では SOMAXCONN は128で、128*1.5=192 なので、待たせて おけるクライアント数は最大 192 になります。しかし、本当にそれくらいの コネクションが張られているのでしょうか? netstat で見ると ESTABLISHED に なっているのが そんなにたくさんありますか? あと、お使いの環境での最大接続数を調べるには、1つのポートにがんがん 接続してみればわかると思います。 なお、http://X68000.startshop.co.jp/~68user/net/echo-3.html には > もし backlog 以上のクライアントが同時に connect してきた場合は、 > サーバは接続を拒否するか、何もレスポンスを返しません。 とありますが、おそらくこれは間違いで、拒否することはありません。 カーネルレベルで無視するだけで、サーバプログラム側はクライアントが やってきたことすら検知できません。 一方クライアントからは TCP の 3way handshake の1発目の SYN に対する 返事が返ってこないので、そのうち SYN を再送、という挙動をすると思います。 |
|
> ioctl とかで変更できても不思議ではないけど、できなくても不思議ではない。 ioctl はありえないですね。デバイスじゃないんだから。 |
|
ご回答、ご指導、どうもありがとうございます。 >カーネルの再コンパイルでしょうか。 こ、この時点で、止めが刺された気がしました。A^^; 多分、windowsでもあてはまるのでしょう。 >しかし、本当にそれくらいのコネクションが張られているのでしょうか? > netstat で見ると ESTABLISHED になっているのが そんなにたくさんありますか? 早速、試してみました。 netstatで、ESTABLISHEDとなった本数(数回やった場合の最大)を以下に示します。 Local Address = n:80 は、 2 Local Address = n:8080 は、 5 Local Address = n:15xx は、 7 (15xx=1500番台) http://henika.virtualave.net/japanese/browsers.htm には、このページ+36枚画像 あるので、ブラウザと思われる1500番台が、想像ですが、20近くないとおかしいような 気がします。この時点で、SOMAXCONNの値は1桁台と推測しました。 この時点で、自動的に、 >あと、お使いの環境での最大接続数を調べるには、1つのポートにがんがん >接続してみればわかると思います。 を、満たしてしまっているような気がします・・・ 因みに、SOMAXCONNをperlで表示させると、 5 でした(以下を実行)。 use IO::Socket; print SOMAXCONN; (思いつきで試したので、あまり意味がないかもしれません・・・) これが正しければ、待たせておけるクライアント数は、5+alphaで、先の推測には 合致してるなぁ、と思い込んでいます。 う〜ん、windowsって、少ないのかなぁ? なんかうそっぽいなぁ。 >カーネルレベルで無視するだけで、サーバプログラム側はクライアントが >やってきたことすら検知できません。 なるほど。windowsでも同様であれば、当方の現象(全ての要求を受付てくれない) も納得いきます(logにクライアントから要求されるはずのイメージ・ファイルが 要求されていないようになっている)。 >一方クライアントからは TCP の 3way handshake の1発目の SYN に対する >返事が返ってこないので、そのうち SYN を再送、という挙動をすると思います。 申し訳ないのですが、このあたりは、まだよくわからないので、確かめられません。 今後の課題・勉強材料とさせてください。 |
|
> これが正しければ、待たせておけるクライアント数は、5+alphaで、 > ... > う〜ん、windowsって、少ないのかなぁ? なんかうそっぽいなぁ。 うーん、ちょっとうそっぽいですねぇ。いくらなんでも一桁ってのは…。 SOMAXOCNN が誤って5になってしまったから、それ以上接続できない という可能性はないですか? backlog に 10 や 100 を渡すと どうなりますか? 僕はこれ以上わかりませんが、もし Winsock に詳しい方が おられましたら教えて下さい。 |
|
お久しぶり(?)です。 色々情報をもらって少し頑張って見たつもりですが、もーイヤ!と言う感じです。 やっぱり自分にはX−windowのプログラム作成は無理なんでしょうか? そんなに簡単に出来るとは思っていませんが、でもいまの状態では全く持って・・ でも一つだけ決めた事があります。それは、Xlibだけで作成するのはやめよう と言う事。馬鹿げた事を、と思わないでください。この結論を出すのもとっても 大変な位にX−windowに関して無知なんです。 まだ迷っているのはMotifを使うか使わないかと言う事。 で、とりあえず何かを始めないと、と思い、XtとMotifをこだわらずに( これがまた問題なのですが)サンプルプロをアレンジして、自分の作りたいアプリ に近づけようと努力しました。が、もーイヤと言うかダメと言う感じです。 Xlibだけを使用したサンプルプロにイベント処理(具体的にはPointerMotionMask) があったので、そのサンプルを加工して、画面に現在のカーソル座標を表示させる 所はOKになったのです。でもXtで作り直そうと思って関数を探して(これも 大変な作業です 自分には)XtAddCallback、XtAddEventHandlerを使おうと思ったまでは 良かったのですが、パラメータ中のイベントマスク名が何を見ても一部しか載って いないのです。PointerMotionMaskに相当するベントマスク名が・・・・・・・!! これじゃー全然はかどらないよ!!って訳です。 やっぱり絶対にマニュアル不足ですかね? それともマニュアル以前の問題ですかね? どう思われます? 率直な意見を教えてください。 (でも「あなたには無理です」と言う究極の意見は勘弁してください。首が かかっているんです) 愚痴になってしまいました。ごめんなさい。 ここしか頼るところ無くって、申し訳無いと思っているのについ書かずに いられないんです。 また来週元気出して頑張るぞ!! じゃあまたネ!! |
|
はじめまして。 ずっとROMオンリーだったのですが、書きこんでみます:) @へにかさん >因みに、SOMAXCONNをperlで表示させると、 5 でした winsock-ver1のSOMAXCONNはホントに5です。ネタじゃなく。 winsock-ver2になってはじめて0x7fffffffになりました。 思うに、perlはwinsock-ver1のヘッダを使っているのではないでしょうか。 さらに、テストされているブラウザはIEかネスケだと思いますが、 どうもブラウザ側が、5より多くのコネクションを張らないようですね。 これはおそらく、前述のwinsock-ver1にも対応させるためだと思われます。 #自信は無いです(笑 なので、プロキシ側でいくらbacklogを増やしても、 ブラウザ側が接続しに来てくれないんだと思います。 @jamesさん XとMotifを使っての開発は、かなり昔にHPとSolarisで行った事があるのみなのですが、 #もうほとんど忘れています(苦笑 その時に非常に役に立った書籍として、 ・日刊工業新聞社「X-Window Ver.11 プログラミング」 ・日刊工業新聞社「OSF/Motifプログラミング 」 の2冊をあげてみます。 見た目がかなり初心者向けっぽいのですが、 なにもわからなかった頃から、だいぶ理解できてきた頃まで、 ずっと役に立ってくれました。 オススメです。 #ちょっと検索かけたら片方だけでてきました↓ #http://www.pro.or.jp/~fuji/computerbooks/unix-x/osfmotif.nikkan.html @68userさん どうも、はじめまして。 いきなりでアレなのですが、:) httpサーバがContent-Lengthを返してくれないコンテンツには、 クライアント側からどのように対処するべきでしょうか。 現状の自作proxy(この書き込みもコレ経由です)では、 サーバ側からの切断を待っている状態ですが、 どうもこちら側から切らなければいけないようで、 毎回タイムアウトで自分から切るハメになっています。 #例えば、下でへにかさんが示しておられるURLから示されているGIF画像もそうですね。 IEやらネスケやらのブラウザはやってくれているようなので方法はあると思うのですが、 探し方が悪かったのか見つかりませんでした。 なにか、普通こうするだろ、って言うような方法というのは有るのでしょうか? もし知っていらっしゃったら、ぜひ教えてください。 よろしくおねがいします。 ・・・でも、画像ファイルの中を見て長さを取得してたりしたらイヤだなぁ(笑 |
|
68user様、hsj様、ご教授、どうもありがとうございます。 68user様>backlog に 10 や 100 を渡すとどうなりますか? backlogを、思い切って128に増やして、netstat 1 で、1秒刻みで出力した結果を 以下に示します。 前回、netstatを、(間抜けなことに)手動で何回も実行した結果を示しましたが、 そのためか、前回とは異なる結果になってしまいました。すみません・・・ backlog = 128 Local Address = n:80 は、 7 Local Address = n:8080 は、 5 Local Address = n:14xx は、 12 (14xx=1400番台) backlog = SOMAXCONN Local Address = n:80 は、 8 Local Address = n:8080 は、 5 Local Address = n:15xx は、 12 (15xx=1500番台) Local Address = n:ingreslock は、 1 (←ほとんど出ない) 上記の結果から、backlogを増やしても、大差ないみたいです。 hsj様のご示唆から考えて、proxyを経由しない場合を調査しましたので、以下に 示します(上記の結果に対応しています)。 Local Address = n:80 は、 5 Local Address = n:16xx は、 5 (16xx=1600番台) (但し、Netscape3.0) 確かに、おっしゃるとおり、 hsj様> 5より多くのコネクションを張らない ようですね。 でも、proxy経由しないほうが、ちゃんと画像が表示されるので、今、僕は 混乱の極みです(今までも混乱してますが)。 proxy経由すると、コネクションが張られっぱなしみたいなので、どうも、 backlogが怪しいわけではない??? となると、proxyが黒ですね。 hsj様>httpサーバがContent-Lengthを返してくれないコンテンツには、 hsj様>クライアント側からどのように対処するべきでしょうか。 このご質問が、良い示唆になって、ありがたいです。ここを対処すれば、 >へにか@箇条書き [URL] 2000/06/14 (水) 23:02:08 >a) 事の発端は、 {略} >全ての要求を受付てくれない(logで確認済み)。 が、うまく解決できそうな予感がします。 追伸1: だんだん、わかってきたような気がして(実際にわかってるかどうかはおいといて)、 嬉しいです。こちらの掲示板でお世話になって、よかった、と思っています。 追伸2: 明日(日曜)から、1週間(弱?)程度、出張に行ってきますので、書き込みが 遅れるかも知れません。色々アドバイス頂いているのに、大変申し訳ないです。 |
|
@james さん > それは、Xlibだけで作成するのはやめようと言う事。 賢明な選択でしょう。 > やっぱり絶対にマニュアル不足ですかね? だと思います。この前のチャットのログや hsj さんの情報を 元にして何か本を買わないと苦しいと思います。 UNIX で GUI アプリを作るなら、Gtk+、Qt、Perl/Tk などの 選択肢もあります。入門書は結構出てます。ただ「困っても その本を読めば絶対にわかる」といったレベルまで 徹底的に 解説した本はないですね。 ただ、仕事に使えるほど熟成しているかというと、ちょっと不安ですが。 # Gtk+ や Qt って、もう API の仕様は固まったのかしら? @hsj さん > winsock-ver1のSOMAXCONNはホントに5です。ネタじゃなく。 > winsock-ver2になってはじめて0x7fffffffになりました。 なるほど。どうもです。 > サーバ側からの切断を待っている状態ですが、 > どうもこちら側から切らなければいけないようで、 HTTP/1.0 なら常にサーバ側から切ってくれますので、 while (<SOCKET>){ print } でいけるはずです。 マルチスレッドなら select で待って、 $len = read(SOCKET,$buf,8192); if ( ! $buf ){ 切断された } # $len==0 の方が better かな? てな感じでどうでしょうか。 @へにかさん > proxy経由すると、コネクションが張られっぱなしみたいなので、どうも、 > backlogが怪しいわけではない??? となると、proxyが黒ですね。 ですね。本来、proxy がやってきたクライアントをさくさく accept していれば、SOMAXCONN が 1 でも影響は出ないはずですから。 うまくマルチスレッド化できているかどうか調べてみて下さい。 なお、 > Local Address = n:8080 は、 5 というのは accept 済のコネクションと accept 前の OS がキューイング しているコネクション、両方の合計が 5 ということです。なので、 この調べ方はあくまでも目安にしかなりません。念のため。 厳密に調べたければ > あと、お使いの環境での最大接続数を調べるには、1つのポートにがんがん > 接続してみればわかると思います。 をやってみてください。 |
|
@68userさん >HTTP/1.0 なら常にサーバ側から切ってくれますので はい、そのハズなのでそれを待っているのですが、 #ちなみにCでつくっています どうも、なかなか切ってくれないようなのです・・・ ・・・というのが疑問だったのですが、解決しました:) つくった機能のうち、環境変数の追加と削除で、 深い考え無しに、「Connection: Keep-Alive」を追加していました。 さらに追い撃ちで、HTTP/1.0にもかかわらず、 httpdによってはコレを解釈してくれているようで。 基本に戻ってrfc2616ながめてて気が付きました・・・あぁマヌケ。 そこで、この環境変数を「Connection: close」に修正したところ、 期待通り、httpd側からサクサク切ってくれるようになりました。 なにはともあれ、ありがとうございました。 @へにかさん もしかして、へにかさんのおっしゃっておられる、 「プロキシを通すとコネクションが張られっぱなしになる」というのも、 この辺りと関係がないでしょうか? |
|
はじめて書き込みます.UNIX初心者のものです. ソース環境がひとつで2つのアプリを作っているのですが, 毎回できたオブジェクトを手作業で退避・圧縮しています. この作業をmakefileに記述したいのですが,次の記述でよい でしょうか. BAKDIR2 = /tmp/backup2/ test2.o.gz: test2.o cp -p test2.o $(BAKDIR2) gzip $(BAKDIR)/test2.o ご指導よろしくお願いします. |
|
> 深い考え無しに、「Connection: Keep-Alive」を追加していました。 なるほど。HTTP/1.1 まわりではまるのは よくありますよね。 # Host ヘッダを付けず HTTP/1.1 を使ってはまるとか。 > この作業をmakefileに記述したいのですが,次の記述でよいでしょうか. よいように見えますが、そちらではうまく動いていないんですか? |
|
どっかのホームページを読み込んできて タグ以外と、コメントを削除する ということをやりたいんですが、 http://www.din.or.jp/~ohzaki/perl.htm で タグを削除する というのがあったので、これをタグ以外を削除 にしてみたのですが、 コメントタグが消えてくれません、、 <!-- -->で囲まれている中身と、<!--、-->も消えてほしい。。 消したいんですが、どのように改造するといいで しょうか? ---ソース--- $tag_regex_ = q{[^"'>]*(?:"[^"]*"[^"'>]*|'[^']*'[^"'>]*)*}; #'}}}} $comment_tag_regex = '<!(?:--[^-]*(?:(?!--)-[^-]*)*--(?:(?!--)[^>])*)*(?:>|(?!\n)$|--.*$)'; $tag_regex = qq{$comment_tag_regex|<$tag_regex_>}; $text_regex = q{[^<]*}; $result = ''; while ($str =~ /($text_regex)($tag_regex)?/gso) { last if $1 eq '' and $2 eq ''; $result .= $2; } ------ あ、本当はとほほラウンジに書きたかったのですが、 書き込みできなかったので、、 |
|
こちらで質問をさせて頂きたいのですが、unix commandで、OS及びHWが 32bitか64bitと知るにはどの様なコマンドを打てばよろしいのでしょうか? 教えていただきたいと思います。 |
|
> <!-- -->で囲まれている中身と、<!--、-->も消えてほしい まずタグ以外を消して、再度 <!-- --> を消すような正規表現を 使うというのはダメですか。 # ちょっとその正規表現を読む気力がないので…。 > OS及びHWが32bitか64bitと知るにはどの様なコマンドを > 打てばよろしいのでしょうか? 思い付くのは printf("%d\n",sizeof(int)); くらいですかねぇ。 これが「OS及びHW が32bitか64bit」という判断の基準として ふさわしいかどうかはわかりません。 |
|
68userさん、 回答ありがとうございました。 |
|
初めましてです。このサイトはとてもわかりやすく書かれていて嬉しいです。 ところでHTTPクライアントを作りたいのですが、その前にブラウザがどんな環境変数やデータを吐いてるか尻たいです。 tcpdump -i ul0 などとやってみましたが意味不明でしたです。 GET / HTTP/1.0 Referer: http://hoge/hoge っていうようなテキストベースでのデータや相手の送信内容を知るにはどしたらいですか? |
|
http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=658 でいいですか。 あと、tcpdump の吐く hex データから tcp 部分を抽出する スクリプトを作るというのも、TCP と IP の勉強になります。 |
|
質問させて下さい。 こちらのホームページで、アクセス状況をグラフ表示していますが、 これはどうやったら出来るのでしょうか。 DBからデータを取得し、グラフ表示をしたいのですが、具体的な 方法が分かりません。 何か参考に出来るのではと思い、お尋ね致します。 宜しくお願いします。 |
|
1時間に一度 (cron で実行) http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/countup.hour で http://X68000.startshop.co.jp/~68user/count/total.top にその時点でのカウンタ値を追加し、さらに1時間に一度 http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/make-count で http://X68000.startshop.co.jp/~68user/count/out/day.top を作成してます。 画像表示用 CGI は http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/view-count.cgi です。 GIF の生成には fly コマンドを使っていますが、例の GIF 圧縮の 特許の問題で Unisys からクレームが付く可能性があります。png 版に 入れ換えようと思ってはいるのですが、なかなか時間が取れず ほったらかしになってます。 画像データ生成が面倒なら、 http://www2s.biglobe.ne.jp/~cru/library/zddbbs/cgi-bin/wwwboard.cgi の投稿コードの画像のように、xbm (モノクロ) や xpm (カラー) 形式を 使う手もあります。xbm も xpm もただのテキストファイルです。 |
|
68userさん、ご丁寧に回答いただき感謝します。 参考にさせていただきます。 どうもありがとうございました。 |
|
初めて書き込みます。 皆さんにひとつ教えていただきたいことがあります。 実は、ある会社でメールサーバーを作ってるのですが外部からのリレー を許可したいのです。 ところがSPAM対策も大事ということで行き着いた答えは 「POP before SMTP」です。 http://www.venus.dti.ne.jp/~phashim/fmv/POPbeforeSMTP.html を参考にと思ったのですが、私のQpopperは バージョン3.02すでにPOP認証のログを吐き出しています これを利用すると書いてあるのですが どのようにすればいいのでしょうか どなたか、アドバイスお願いします |
|
はじめまして、UNIX始めて2週間くらいたちました。 で、いきなり躓いてしまい先輩方に教えていただきたい事が在ります。 cシェルで、複数件のファイルを一つずつ読みたいのですが、 どうしてもうまく行きません。 とりあえず、リストファイルを作ったまでは良いのですが、 ls -1 > TAR.list awk 'substr($1,8,3)~ /tar/ {print}' TAR.list> TAR.result そのファイルを頭から一件づつ読むやり方がわかりません。 何か良い方法が在ったら教えてください。 |
|
@ookubo さん > バージョン3.02すでにPOP認証のログを吐き出しています という意味がわからないです。3.02 なので修正点が違うから 困っているということですか? 既に認証リストはあるので POP before SMTP 用の無駄なログを吐きたくないということですか? @sawaさん > awk 'substr($1,8,3)~ /tar/ {print}' TAR.list> TAR.result awk なんてすっかり忘れてしまったなぁ。最初見たとき 書き間違いかと思った。 > そのファイルを頭から一件づつ読むやり方がわかりません。 foreach fn (`cat TAR.list`) ls -l $fn end てな感じでいいですか? ファイル名に空白や *、? などを 許すなら、事前に sed あたりで変換しておく必要があります。 # まぁ、csh スクリプトでこだわっても仕方ないですけどね。 |
|
突然ですが質問させてください 初心者なんで的外れかもしれませんが・・・ あるサーバソフトを作成中ですが、そのサーバソフトが起動時に 読込む設定ファイルのパスってどうすればいいんですかねぇ・・・ fopenする時ってフルパス指定するじゃないですか(違います?) でサーバソフトはInetdで起動されるんです。 だから何処で動いているかわかりませんよね どーすればいいのかなぁ・・・ 教えてくださーい inetd.confの起動時オプションですか??? |
|
お聞きしたい事があるのですが、 使っているOSは、FreeBSDで viで作成したファイルをフロッピーディスクに 保存したいのですが、どのようにすればよろしいのですか? あと、その保存したフロッピーをWin98でも見れるように するには? よろしくお願いします。 |
|
> fopenする時ってフルパス指定するじゃないですか(違います?) フルパス指定でもいいし、カレントディレクトリからの 相対パスでもいいです。 > だから何処で動いているかわかりませんよね getcwd(3) でカレントディレクトリを取得して、 どこかに出力させてみればわかるでしょう。 > その保存したフロッピーをWin98でも見れるようにするには? - Windows98 でフォーマットして、mount_msdos して cp して umount - Windows98 でフォーマットして、mcopy file a: どちらでもよいです。 http://www.jp.FreeBSD.ORG/QandA/HTML/640.html FreeBSD で DOS フォーマットしたいなら http://www.jp.FreeBSD.org/QandA/HTML/350.html |
|
こんにちは。初めて書き込みするtakuroという者です。 このbbsでは、ユーザー同士の疑問や知識の交換がされていると知って書き込みしたんですが、ページの趣旨にあっていない質問だったら、無視して下さい。 winzipの事なんですが、解凍する時に、パスワードを入れるように設定して圧縮したんです。そしたら、長い間そのファイルをほうっておいたせいで、パスワードを忘れてしまい、解凍できなくなってしまったんです。 中身は重要な物が入っているんですが、必要なときに取り出せなくなってしまって、大変なんです。どなたか、解決の方法を教えて下さる方、いらっしゃいませんか?メールでも何でもいいので、どうか連絡をよろしくお願いします。 |
|
>takuro PikaZipとか?? http://nagoya.cool.ne.jp/pusa/ パスワードはどのくらいの長さ? ローマ字の小文字なら、、速いかな、、(謎 |
|
航空機事故で検索していたらこの掲示板にたどり着きました。 「日航機墜落事故 東京大阪123便 新聞見出しに見る15年間の記録」 のホームページです。 |
|
ネットワークに関して教えてください。 ホームルータ経由でISDN回線に接続し、モデムとつながれている端末にアクセスすることはできるのですが、モデムでつながれている端末はホームルータないの端末にアクセスすることができません。 ルーティングテーブルの設定が必要なのかと思いますが、どのように設定したらよいかわかりません。 ホームルータのグローバルアドレスとかみることとかできるのでしょうか。 これについて詳しい人がいたら、教えてください。よろしくお願いします。 |
|
つまらない質問でごめんなさい。 perl 5.004_04について教えてください。 スクリプトの最初にifを書くと、その後のスクリプトが どうであろうがCompilation errorになって実行できないのですが、 これはバグなんでしょうか? もしバグだとしたら、広く知られたものなんでしょうか? 以下余分に長いサンプル(split.pl)です。 #!/usr/local/bin/perl if(#$ARGV != 1) { die "Usage: split.pl keyword file\n"; } $keyword = $ARGV[0]; $infile = $ARGV[1]; open(IN, $infile); $prefix = "$infile-split-"; $suffix = "000"; $file = ">$prefix$suffix"; open(OUT, $file); while($line = <IN>) { print OUT $line; if($line =~ /^\s*$keyword\s*$/) { $suffix = sprintf "%03d", $suffix+1; $file = ">$prefix$suffix"; open(OUT, $file); } } |
|
@has > if(#$ARGV != 1) { #$ じゃなくて $# っすね。 > これはバグなんでしょうか? ちなみに (言うまでもないかもしれませんが) ちょっと前までの stable は 5.005_03 です。今の perl5.6 はかなり buggy だとか # と perl の偉い人が fj で言ってた。 あと、7/22 か 8/12 か 8/20 あたりにそちらに寄りますので、 もし居るならよろしく。 @流れ星 > ネットワークに関して教えてください。 NAT もルーティングも、ソフトウェア (FreeBSD) でしか やったことがないので、アドバイスできません。 NAT かましてるかどうか、ルータの型番、モデムの端末が LAN 内にあるのか外にあるのか、などを書いて fj.net.lan など に投稿するといいでしょう。 # でも、最近のってほとんど http://ルータのIPアドレス/ で # 設定できるんでないの? |
|
はじめまして perl(CGI)でAccessLogを取るScriptを 作っています。 HTTP以外の情報って取得できるのですか? 例えば、FTPなどのAccessLogとか... |
|
> 例えば、FTPなどのAccessLogとか... 無理です。FTP と HTTP は別物だから。 |
|
@68user >#$ じゃなくて $# っすね。 ふぇえ、おはずかしい。 真っ先に人のせいにしてしまうなんて…。 >今の perl5.6 はかなり buggy だとか 冷静に人のシステムを批判できる人って やっぱ偉いですよね〜。 |
|
68userさん皆さんはじめまして 早速なんですが、CGIを自分のNTマシンで開発してUNIXの本番環境でTESTしているのですが、 先頭行の#!〜の記述がNTとUNIXで違うので毎回直しているのですが 面倒なのでNT側のアパッチで自己完結型を使わないでCGIを動かしたいのですが なにか方法をご存知無いでしょうか? |
|
> 先頭行の#! Windows 使ってないのでわからないです。 多分 Windows では #!/bin/sh というような書き方ができない、って ことなんだろうと思いますが、もし単にパスが違うだけならやりようは あります。もしそうなら再度質問して下さい。 |
|
> もし単にパスが違うだけならやりようはあります。 > もしそうなら再度質問して下さい。 すみません、おっしゃる通です Windowsが #!C:/Perl/bin/perl で UNIXが #!/usr/local/bin/perl です どうにかなるでしょうか? |
|
よしださん Win機の 1.Apacheをインストールしたのと同じドライブに 2.\usr\local\bin\を掘って 3.Perl一式(Perl.exeとDLL類)を入れれば #!/usr/local/bin/perlで参照できると思います. お試しください. |
|
UNIX,CGI,ネットワークについての事ではないので、この掲示板の趣旨に合わない かも知れませんが、下記の事についてどなたか知っていましたらお教え下さい。 実はMOについてですが、これまで認識していたメディアが急に認識されな くなり、他のメディアで試しても同じ現象が出るようになりました。 クリーニングしても直りません。たまに認識する事もあり、なにがおかしい のか見当もつかず、途方に暮れています。 何か方法があるでしょうか。 |
|
YOSHIさん 次のようなページをご紹介します. MO掲示板: http://www.zob.ne.jp/%7Ekanai/mo/bbs/bbs.pl MOにこだわるページ: http://www.zob.ne.jp/~kanai/mo/ MOS331E 遍歴: http://www1.sphere.ne.jp/squilla/comp/mos331al.html 悪名高いオリンパスドライブの清掃方法です. # 私もジャンクの331(Logitec LMO-230H)を手に入れ, # 清掃して問題なく使っています. 参考まで. |
|
現在、さくらインターネット<http://www.sakura.ad.jp>で専用サーバを借りています。OSはFreeBSD 3.4です。大した知識もないのに大丈夫かな、と思っていたところ、ついに困った事態になりました。 chsh -s でログインシェルを変更したのですが、誤った名前を指定してしまったのです。それからというもの、スーパーユーザになろうとしても su: +++: No such file or directory と出てしまい、rootによる作業が一切できない状況です。 root権限で chsh -s /bin/sh でも実行できれば済むのですが、どうすればいいものやら。セキュリティホールを利用できないか、などと本気で考えましたが、そんな技量もありませんでした。 きちんと業者に頼むべきなのでしょうが、Telnetでできる作業は1万円、Telnetでできない作業は2万円と、勉強料としても学生にはかなり惜しくなる出費なのです。 何かいい方法があるなら教えていただけないでしょうか。 |
|
> su: +++: No such file or directory むぅ…多分無理だと思います。一旦 shutdown して シングルユーザモードで再起動するしかないので 2万円コースだと思います。 あきらめきれなければ、 http://www.energy.ee.ehime-u.ac.jp/~flathill/FreeBSD/chat/chat.html で聞いてみて下さい。そこの方々が無理だと言ったら絶対無理です。 あと、回答してもらっても返答する気がないなら、最初から 書き込まないで下さい>返答する気のない人々 |
|
またまたperlについてお聞きします。 連想配列をうまく使って、キーに対して文字列リストを 保持したいと思うのですが、何かよい方法はありますでしょうか。 現在は、文字列を共通のリスト配列に順に格納して、 キーに対する文字列リストの中の最初の文字列へのインデックスを 連想配列に格納する、という方法をとっています。 うまく伝わらないかもしれませんので、少々サンプルを書きます。 $store = 0; foreach $file (@files) { open(IN, $file); @contents = <IN>; $index{$file} = $store; $numlines{$file} = $#contents + 1; @lines[$store..$store+$#contents] = @contents; $store += $#contents + 1; } |
|
要は、ファイル名と行番号を与えると、その行が得られるデータ 構造は?、ということでいいですか? なら、 while (<IN>){ $data{$file}{$line}=$_; $line++; } とやってもいいし (perl4 的にするなら $data{"$file$line"})、 あるいは @contents=<IN>; $index{$file}=\@contents; と、配列へのリファレンスをハッシュに入れてもいいと思います。 参照するときは $file = 'abc.txt'; $line = 123; print ${$index{$file}}[$line]; とか (abc.txt の 123行目を表示。先頭が0行目)。 |
|
Netboyさんありがとうございました > #!/usr/local/bin/perlで参照できると思います. > お試しください. 試してみたんですが、 #!E:/usr/local/bin/perl だと動くんですが、 #!/usr/local/bin/perl だと駄目なので どうもapachの自己完結型がドライブ名の指定が必要みたいでした、 結果は残念でしたけど、どうもありがとうございました。 >あと、回答してもらっても返答する気がないなら、最初から > 書き込まないで下さい>返答する気のない人々 すみません、原因が解ったら書き込もうと思っていたので 返答が遅くなってしまいました 以後気をつけます。 |
|
よしださん 次のようなショートカットからApacheを実行してみてください. '作業フォルダ'のパスにあるドライブ名が,Perlの参照先ドライブになります. 動作を確認後にオプションを追加して,サービスとして実行させてください. リンク先: e:\usr\local\sbin\apache\Apache.exe -f e:\usr\local\etc\apache\conf\httpd.conf -s 作業フォルダ: e:\usr\local\sbin\apache # 2つとも,Apache.exeがe:\usr\local\sbin\apacheにあるとき - - - - - - - - - - - - - - - 参考になるURLをご紹介します: NTでIISやApacheのPerlの参照の設定: http://www.hi-ho.ne.jp/lina/httpd.html#apache-pl Apacheのレジストリ操作,NTサービスとしての実行など: http://www.apache.org/docs/windows.html |
|
Netboyさん ありがとうございます ApachとPERLのドライブを合わせる必要があったんですね、 おかげさまで思いどおりの動作をしてくれるようになりました 本当に色々とありがとうございました。 |
|
@68user どうもありがとうございました。 リファレンスというのを勉強しときます。 それと、こちらに来られるかもということですが、 予定を確認しておきます。 |
|
@よしださん > すみません、原因が解ったら書き込もうと思っていたので > 返答が遅くなってしまいました 別に1週間くらいはいいと思いますよ。「わかりました。試してみます」 と書くより、試してから結果を書こう、というタイプの人もいるでしょうから。 それ以前の人に向けていったことなので、気になさらないで下さい。 > もし単にパスが違うだけならやりようは > あります。もしそうなら再度質問して下さい。 cygwin 入れて #!/bin/sh で振り分け、とか言わなくてよかった (笑) @has > リファレンスというのを勉強しときます。 赤ラクダ本には載ってません (念のため)。でもって、青ラクダ本の 説明はわかりにくいです。ちなみに $hoge{fuga}{ura} ってのも 実はリファレンスです。 > 予定を確認しておきます。 いや、いつ行くかも未定なので、いつも通りに過ごしてて下さい。 雨降ったら行けないし :-) |
|
>あと、回答してもらっても返答する気がないなら、最初から >書き込まないで下さい>返答する気のない人々 ・・・すみません。 以前、telnetで30個ほど繋げたら、フリーズしてしまったので、 perlで繋げる方法を考えつつ、先に進んでいないのと、まだ、 bugの原因が不明(というか、お手上げに近い)ので、返事できない 状態でした。 返答が遅れてすみません。 |
|
へにかさんに向けて言ったのでもありません :-) |
|
ご無沙汰しております、以前にお世話になったyujiです。(^^) 現在、FreeBSD 2.2.8-RELEASEのカーネルなどをPentium3に最適化させたいと 考えているのですが、この場合、どういった部分を変更すべき なのでしょうか? 自分で調べてみたところ、 http://www.goof.com/pcg/index.html に、Pentium用パッチ(pgcc)があるのですが、 gccが現在2.7.2.1でして。(^^; portsコレクションを探してみたのですが、 pgcc2.95.1のものがあるみたいですが、 プルダウンメニューが3.0以上のみになっています。 PGCCは、EGCSのパッチということで、 2.7.2.1のような古いバージョンには、 使えないのかもしれませんが。(^^; FreeBSD 2.2.8-RELEASEを用いて、 マシンの能力を最大限に引き出す方法はなにかありませんでしょうか? どうぞよろしくお願いします。 |
|
お返事ありがとうございました。 >> su: +++: No such file or directory >むぅ…多分無理だと思います。一旦 shutdown して >シングルユーザモードで再起動するしかないので >2万円コースだと思います。 管理会社に連絡したところ、今回のように原因がはっきりしていて復旧が容易な場合は1万円だそうです。まあ仕方がないと思います。これからはもっと慎重に作業をしなければ……。 |
|
携帯電話に対してこちらの電話番号を表示しないためにはどうすればいいですか? |
|
perlでのサブルーチンの質問です。 お願いします。 #!/usr/local/bin/perl $Z = 1; &abc(); print "$Z$Y"; sub abc{ &A(); &B(); &C(); } sub A{ if($Z == 1){ $Z = $Z + 1; &C(); } } sub B{ $Z = $Z + 5 ; } sub C{ $Y = "!"; } こんなカンジなのですが結果を"2!"になるようにしたいのですが どうすればよろしいでしょうか? このまま実行すると"7!"になってしまいます。 教えてください。 |
|
@yujiさん > 現在、FreeBSD 2.2.8-RELEASEのカーネルなどをPentium3に最適化させたいと > 考えているのですが すみませんが、http://www.jp.FreeBSD.org/search.html#doc で キーワード pgcc で検索する、以上の情報はわかりません。 cvsweb で ports/lang/pgcc を見ると、2.2.8 時代は (pgcc 側の) gcc->egcs の切り替え時期なようで、その時代の gcc 対応 pgcc は ないと思います。最新の egcs を入れて pgcc パッチを当てるのは ダメかなぁ。いろんなところではまりそうですけど。 # あ、最近のは a.out 形式吐けないんだっけ。 @STさん > これからはもっと慎重に作業をしなければ……。 telnet 2つ開いて、片方はつなぎっぱなしにして いつでも /etc/master.passwd を修正できるようにしておくとよかったですね。 @mmさん # biglobe な mm さんとは別の mm さんですか? > 結果を"2!"になるようにしたいのですがどうすればよろしいでしょうか? sub B{ $Z = $Z + 5 ; } の部分で $Z==7 になってほしい、でも &B から戻ると $Z==2 としたい、 ということなら、呼び出し側で &B($Z) として引数を渡して sub B{ my ($abc)=@_; $abc = $abc + 5 ; } とか ($abc は $Z としても同じ)、単順に変数名を変えて sub B{ $X = $Z + 5 ; } とか、って感じでいいですか。 望んでる答えじゃないかもしれないけど、なぜ 2! にしたいのか、 &A と &B ではどういう違いがあるのかを説明してもらわないと、 これ以上はなんとも言えません。 |
|
私にも意味が分からないので、別人かと思われます。 ひょっとして、sub A {...} 中で &C(); を呼び出したら、 sub abc{...} 中の &C(); に帰って来る、と誤解されてるとか…? # goto &NAME に関係あるのかとも思ったけど… |
|
># biglobe な mm さんとは別の mm さんですか? mm@biglobeさん、失礼しました。 説明不足ですみませんでした。 sub A の処理で $Z == 1 の場合sub C へ行きたいのです。 その後、sub B へは行かずに処理を終了させたいのですが、、、 |
|
もしかして #!/usr/local/bin/perl $Z=1;&abc;print "$Z$Y"; sub abc{ if (!&A){ &B; } &C; } sub A{ if ($Z==1){ $Z++;return 1; } 0; } sub B{ $Z+=5; } sub C{ $Y="!"; } な感じですか...? 文章のままだと sub abc{ if (!&A){ &B;&C; }} sub A{ if ($Z==1){ $Z++;&C;return 1; } 0; } な感じです.関数の戻り値を使わないなら sub abc{ &A; if ($Z!=2){ &B; } &C; } sub A{ if ($Z==1){ $Z++; }} 延々と続きそうですね.こんな話題じゃ無さそうな気も... |
|
あれ?mmさんの反応がないなぁ… Netboyさんの回答で、出尽くしてると思うんだけど。 |
|
そーいや、名前に機種依存文字を入れると、何かが起こったっけ。 多分まだ なおしてなかったなぁ。 # 現在機種依存文字が見えない環境なので、勘で入力。 |
|
そうか、名前の欄が <INPUT ... VALUE="<FONT COLOR="red">(6)(8)</FONT>user"> となってしまうんだった。今度直そう。 ところで、LASER5 Linux 6.0 でも /etc/services は pop-3 でした。 |
|
@68user 名前に機種依存文字入れたときの不具合、 直ったら修正部分をおしえてください。 #うちのにも同じ不具合があるってことですよね? |
|
了解。でも、ちと忙しい日が続きそうなので9月頃になるかも…。 |
|
こんばんわ。ちょっとお聞きしたいことがありまして。。。 うちの掲示板はmmさん(ここにいる人かどうかはわかりませんが)が作った掲示板を使っているんですが、 crypt関数が使えなくて削除パスとかが出てこないんです。それで、サーバ管理者に連絡しましたら、 >弊社サーバーでも、crypt関数はもちろんご利用頂けます。 >ただし、サーバーの暗号処理にMD5方式を搭載しておりますので >MD5以外のサルト係数を使用したスクリプトでは、そのままでは動作致しません。 >(cryptはサーバーのライブラリに依存している為) >cryptをMD5方式のサーバーでお使いになるには、salt係数をMD5の >$1$ 固定で指定する必要がありますので、スクリプト内の >該当部分を書き換えてご利用ください。 と教えていただきました。でもどこをどう直せばいいのかさっぱりなんです。 忙しいと言っていますけどもし時間が空きましたら、教えていただけますでしょうか。お願いします。 ちなみにhttp://whitenight.org/etc/bbs/Readme/crypt.cgiにcryptを実行するCGIがあります。 ソースはhttp://whitenight.org/etc/bbs/Readme/crypt.txtにありますんで、どうかみてやってください。 長文すいませんでした。 |
|
あっ、crypt.cgi はMD5には対応してないですね(^^; MD5を使える環境にないので、詳しくは、68userさんのご助言を頂きたいのですが、 とりあえず、ソースの以下の行を削除して、 if ( $salt !~ m%^[\./0-9A-Z]{2}$%i ) { print "<H2>エラー</H2>\n"; print "SALTが不正です\n"; exit(0); } SALTの入力欄の2文字の前に「$1$」を挿入して実行してみて頂けます? |
|
まず OS 名は何ですか? >>(cryptはサーバーのライブラリに依存している為) 僕の知る限りでは (少なくとも FreeBSD では) 誤りです。 なんにも考えずに salt を渡せば、ライブラリ (libcrypt) の 方で DES でも MD5 でも勝手に処理してくれます。 # ただ、FreeBSD 以外の環境 (例えば Linux で MD5 な環境) だと、 # ライブラリがそこまで対応しているかどうかはよくわからんなぁ。 # 明日試してみよう。 しかし、http://whitenight.org/etc/bbs/Readme/crypt.cgi の 結果が $PassWord = ''; と空になるのは謎ですね。 > print crypt( $pwd, $salt ); これを print crypt( $pwd, "\$1\$$salt\$" ); とするとどうですか。あるいは print crypt('secret','ab'); だとどうなりますか。 |
|
おっと少々かぶりぎみ。 crypt.cgi は FreeBSD (MD5) 上ではうまく動きました。FreeBSD の libcrypt では crypt('secret','xx') と crypt('secret','$1$xx$hogehoge') は同じものとして扱われるからです。 ということは、智慧さんの環境ではそうではないということで しょうから、$1$..$ を追加すればいけるんじゃないかと思います。 |
|
あっ、なるほど。(最後の $ も忘れてた) 68user さんの指示に従って対処して下さい>智慧さん |
|
>mm@biglobeさん >68userさん あ、ごめんなさい。 こんなに早くお返事してもらえるとは思ってもいませんで・・・。 じゃ今から早速やってみます。 レスありがとうございました。 |
|
あ、順々にやらせてもらったんですが、もう最初のmm@biglobeさんの言ったとおりに、 一部分削除して、 >$1$ これを前に入れて5文字で実行したらちゃんと生成されました! >まず OS 名は何ですか? あとこれは結局わからないです・・・(汗) お手間を取らせまして・・・。ほんとどうもありがとうございました。 |
|
ラウンジでは、いつもお世話になっていました。ありがとうございました。 ラウンジで質問ができないので、こちらへ質問させてもらいます。 UNIXにおいてflockを使用するデメリットを教えて下さい。 また、flock使用のCGIを見つけるコマンドなど存在しますか? 自サイトでCGIをフリー配布していますが、使っている人から、プロバイダでflockは、やめてくださいと通知されたそうです。 よろしくおねがいいたします。 |
|
ついでに、もうひとつ。 私の vi では、テキストファイルに一行 1024バイト以上の行があるとき 途中で切れて、全部見れません。 このような場合、「編集できない」と「多少のデータ欠落」はOKですが、 とにかく、全体を見れて、検索できるような、コマンドってないですか? |
|
LASER5 Linux (標準で MD5) では、 crypt('secret','$1$xx$') -> $1$xx$r/r0qx2Q7FpBQWOTZk2Nc. (MD5) crypt('secret",'xx') -> xxWAum7tHdIUw (DES) となりました。こういう環境があるとは知らなかった。 > UNIXにおいてflockを使用するデメリットを教えて下さい。 NFS 環境下で flock が動作しないそうですが、僕のまわりでは NFS 環境でも正常にロックできていたように見えました。 それ以外はわかりません。プロバイダが「使うな」と言うほどの デメリットはないように思います。 > また、flock使用のCGIを見つけるコマンドなど存在しますか? これは質問の意図がわかりません。 > 私の vi では、テキストファイルに一行 1024バイト以上の行があるとき > 途中で切れて、全部見れません。 nvi という vi ファミリのエディタでは、その手の制限はなかった ように思います。ちなみに FreeBSD の vi は nvi だったりします。 > とにかく、全体を見れて、検索できるような、コマンドってないですか? nvi 以外だと less かなぁ。less で 1024バイト/行なファイルを 見られるかどうかは確かめてませんが。まぁ、fold してその出力を 眺めるっつーのもアリかもしれません。 |
|
大学では、UNIXを使っているので、いつもこのHPにはお世話になっております。 それで、質問があるのですが。 UNIXでは、Windowsなどから送られてくる添付ファイルを 受けとる事はできますか? また、添付ファイルを送る事はできますか? よろしければ、そのやりかたも教えて頂けると嬉しいです。 ちなみに、使用機種は、SunOS 5.6です。 |
|
>68userさんへ foldコマンドでいけました! ありがとうございました。 >>また、flock使用のCGIを見つけるコマンドなど存在しますか? >これは質問の意図がわかりません。 ただ、プロバイダがどうやってflock使用のプロセスを見つけたのかなぁっておもったもので...。 では、これで、失礼いたします...。 |
|
> プロバイダがどうやってflock使用のプロセスを > 見つけたのかなぁっておもったもので...。 grep? > UNIXでは、Windowsなどから送られてくる添付ファイルを > 受けとる事はできますか? また、添付ファイルを送る事はできますか? メーラー次第です。Mew や Wanderlust あたりなら できますが、emacs の rmail とか mail コマンドでは 難しい…というか多分無理でしょう。 # Mew ... http://www.mew.org/index-j.html # Wanderlust ... http://www.gohome.org/wl/index.ja.html |
|
NFS上のファイルをflockすると,複数マシンから 同時にロックできてしまう(場合がある)と思いますが... Perlで普通にflockを使っていると,たいがい まともにロックできないうえ処理速度が遅くなります. open (LOCK, "> $file")||&error flock (LOCK,2)||&error とか書いた時点で終わってます.2箇所直せば使えますけど 普通そんなこと気付きません. あと,デッドロックの発生を検知するのが難しいです. |
|
68userさん> 御回答ありがとうございました。 僕のメーラーはemacsのrmailなので、受けとれないみたいですね。 文章の添付ファイルならば、その文章は一応表示されますが。 それで、御紹介頂いた Mew と Wanderlust のHPに行ってみたのですが、 その2つの違いというものがよく解りません。 よろしければ教えて頂けますか。 用途は、添付ファイルを受けとるだけなので、それに適しているのは どちらなのかというのも教えて頂けると嬉しいです。 あと、もう一つ質問なのですが、 あるファイルのシンボリックリンクを作った時に、 そのシンボリックリンクの元となるファイルから、 そのファイルのシンボリックリンクがどこに作られているかを 見つけ出す事はできますか? なんか解りにくい文章ですみません。 |
|
> それで、御紹介頂いた Mew と Wanderlust のHPに行ってみたのですが、 > その2つの違いというものがよく解りません。 両方ともメーラーなわけで、できることは自然と似てきます。 一応僕の思う特徴をあげると Wanderlust のいいところ ・見栄えがきれい (スクリーンショット参照) ・IMAP4 対応 ・ニュースリーダの機能もある Mew のいいところ ・im と mew を入れるだけなので、インストールが簡単 (Wanderlust だと semi やら apel やら入れて、さらに それぞれのバージョンにも気をつけなくてはいけない) てな感じ。インストールに自信がないなら Mew の方がいいかも しれません。 ちなみに「添付ファイルを受け取る」という一点に関して言うと、 Mew の方が使いやすいように感じます。 > そのファイルのシンボリックリンクがどこに作られているかを > 見つけ出す事はできますか? 無理です。全ファイルを調べるしかないです。これはハード リンクも同じです。 > NFS上のファイルをflockすると,複数マシンから > 同時にロックできてしまう(場合がある)と思いますが... んー、なるほど。複数マシンからの flock というのは全く 思いつきませんでした。一つの NFS クライアントマシンから flock して、「ああ、NFS でもうまくロックできるのね」と 思ってました。 試してみたいけど、NFS 環境がないなぁ・・・ |
|
はじめまして。 勉強になるのでちょくちょく見させてもらっています。 crypt化した文字を復元することはできるのですか? |
|
申し訳ないです。先ほどの追加です。 crypt化するのにperlでやっています。 #!/usr/bin/perl $A ="AAAAAA"; #←crypt化する文字 $B ="BB"; #←KeyWord print crypt ($A,$B); |
|
> crypt化した文字を復元することはできるのですか? できないです。復元ができないようなアルゴリズムを採用している からです。なので、辞書を使ったり、総当りで調べるしかありません。 ちなみに keyword じゃなくて salt と言います。 |
|
unixはぜんぜん知らないのですが、 flockに関しては以前から疑問があったので、 ちょっとお伺いします。 >とか書いた時点で終わってます.2箇所直せば使えますけど >普通そんなこと気付きません. open の時点で $file が破壊されるってことですね。 これは、確かにしっかりしたドキュメントが必要だと思います。 >あと,デッドロックの発生を検知するのが難しいです. flock でデッドロックが発生したら、意味ないのでは…? flock がセマフォを使ってるのか、別の何かを使ってるかは知りませんが、 デッドロックを回避できるからこそ flock の価値があるんではないでしょうか? それとも、セマフォとかの待ち行列の状態が検知できないという意味でしょうか? >Perlで普通にflockを使っていると,たいがい >まともにロックできないうえ処理速度が遅くなります. こういう文章を読んで、flockはダメだと勝手に判断して、 もっと酷い、訳の分からない排他制御手段を考える人が出て来るような気が… ただ、flockを使えばOSが対象ファイルごとに待ち行列を 用意することになるんでしょうから、チャット等が沢山使われるサーバーでは、 リソースを大量に消費して、レスポンスも悪くなるような気はします。 先のプロバイダの制限は、そういうことを嫌ったのではないでしょうか? |
|
>open の時点で $file が破壊されるってことですね。 はい,あと引数'2'だと,待っている間何も出来なくなるので マズイ,ということで2箇所...としました. シグナル起こしはあてにならないということで. >デッドロックを回避できるからこそ flock の価値があるんではないでしょうか? デッドロックは起きます. flockには価値なんかありません.BSDでの互換性だけです. 言葉遊びでなく,確率というか危険度と考えてください. flockして成功したプロセスが無限ループに入ったとき, 解除にはたいがいプロセス殺しが必要です.うまく殺せるか どうかは不確実なので,この時点でデッドロックといえます. symlinkやmkdirでの排他処理だとまだ通常のファイル操作で済みます. >それとも、セマフォとかの待ち行列の状態が検知できないという意味でしょうか? はい,検知と制御ができません.同じ意味でfcntlやセマフォも 使うのは難しいです.OSリソースを隠れて消費し,工夫しないと システム全体の速度が低下します. OSに付属する排他処理機構を,よく検証せずに使うのはまずいです. 私の経験だと, - いつどのプロセスが何をロックして - それを参照する何個のプロセスがどれくらいの時間待機しているか 外から判るようにしなければだめな感じです. >訳の分からない排他制御手段を考える人が出て来るような気が 他人の手法を参考のうえ,排他処理の仕組みを自分で考えるのは 結構なことだと思います. |
|
>解除にはたいがいプロセス殺しが必要です.うまく殺せるか >どうかは不確実なので,この時点でデッドロックといえます. なるほど、もし解除できないということが起こるなら、 確かにデッドロックですね。 unixを触ったことがないため、そのヘンは、何となくシステムを 信頼していました(^^; >flockには価値なんかありません.BSDでの互換性だけです. う〜ん、それが現状だとすると、問題ありそう… >言葉遊びでなく,確率というか危険度と考えてください. 確かに、私の先の書き込みは、スパゲッティを食べる哲学者のレベルでの 話かも知れません(^^; >OSに付属する排他処理機構を,よく検証せずに使うのはまずいです. 検証する能力がない人間が下手なことをするよりは、 システムが用意した機能をそのまま利用した方がマシ、 というスタンスでいたのですが、少なくともflockに関しては、 考え直さないといけないみたいですね。 >symlinkやmkdirでの排他処理だとまだ通常のファイル操作で済みます. 今後は、作成時からの経過時間検査による解除機能付きsymlink/mkdirあたりで 検討してみたいと思います。 >他人の手法を参考のうえ,排他処理の仕組みを自分で考えるのは >結構なことだと思います. これは、あくまでもっと低次元の話です。 「他人の手法」を正確に理解し、問題点を的確に把握した上で、 「自分で考える」のであれば、仰る通りすばらしいことだと思います。 |
|
Netboy さんは、ノンブロッキングの flock なら OK、 という立場ですよね? で、いくつか疑問があります。 > flockには価値なんかありません. fcntl には価値がある、という話でしょうか。それとも 両方価値がない、という話ですか? > flockして成功したプロセスが無限ループに入ったとき, という状況って、起こり得ますか? (現象事態は root が SIGSTOP 送れば容易に発生しますが) Netboy さんは、どういうプログラムを想定しておられます? ちなみに僕が考えたのは、カウンタとか web BBS とかです。 > Perl で普通にflockを使っていると,たいがいまともに > ロックできないうえ処理速度が遅くなります. 僕の環境では「まともにロックできない」というのは 経験したことはありません (1000回カウントアップしたつもりが、 カウンタデータファイルを見ると998回しか実行されていない というのはあった。原因は不明)。 それと flock は、symlink・mkdir よりは速かったです。 しつこいですが、僕の環境では、です。 # あと、排他処理はいつも symlink でやるので、flock を # 使いこんだことはないです。 > 訳の分からない排他制御手段を考える人 http://www2q.biglobe.ne.jp/~terra/cgi/lockfile.htm (笑) |
|
>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 ↑このコマンドは意味がわからないのですが、何を行うのでしょうか? |
|
> gzip: mew-1.94.2.tar.gz: unexpected end of file mew-1.94.2.tar.gz のダウンロードに失敗したんでしょう。 ブラウザで落としたなら、別の HTTP/FTP クライアントを試す。 ftp の ascii モードで落としたのなら、binary モード。 > それと、.netscape/ のことについてですが、 自分でエディタなどを使って覗いてみましたか? > その 99/ フォルダに入れたキャッシュファイルの効果があるか、 > 良く解らないのです。これって、意味ありますか? ls -lud 99/ で、最終アクセス時刻が得られます。その結果で 判断できるでしょう。 > FTPでデータを転送するさい、失敗することはありえるのでしょうか ユーザ認証の失敗とか、コネクションが張れないとか、ascii/binary の 設定ミス以外にビット化けするか、ということですか? IP データグラムでは、そもそもデータ部のチェックサムが存在しませんので、 ノーチェックです。一方、TCP データグラムはチェックサムがありますが、 「化けてもチェックサムが同じで、検出できない」ということがどれくらいの 確率で起こるのかはわかりません。おそらく論文のネタになっているでしょうね。 |
|
僕の回答を再掲します。 > OS 名と、Netscape をどうやってインストールしたか ちゃんと読んでますか? あと、原因の切り分けを行ってください。~/.Xdefaults の 各行をコメントアウト (リソースのコメント開始は `!' ) して動けば、原因はリソースなんでしょう。rm -rf ~/.netscape して動けば、原因は netscape の設定ファイルがおかしくなって しまったんでしょう。 |
|
> TCP データグラム TCP セグメントでした。 |
|
どうも、ご無沙汰しております、yujiです。(^^) 今、指定されたディレクトリ以下のファイル一覧を表示させたい、 と考えているのですが、再帰関数を使った場合、 ファイルハンドルがグローバルのため、値の上書きになって しまい、うまくいかないようです。ローカルなファイルハンドルというのは、できるんでしょうか?myやlocalで試してはみたのですが。(^^; なにかよい方法は、ないでしょうか。 また、$home/$fileのカタチで出力する場合、どのようにするのがよいでしょうか? "$home/$file"とすると、/$で変数ではなく文字として解釈されると 思うのですが。"$home/".$fileとして逃げたりしているんですが。(^^; こちらのほうでも、別の方法などありましたら、よろしくお願いします。 #!/usr/bin/perl GetFiles("."); exit(0); sub GetFiles(){ local($dir)=@_; print "In $dir\n"; opendir(DIR,$dir); while($file=readdir(DIR)){ if(-d $file && $file ne '.' && $file ne '..'){ &GetFiles($file); }else{ if($file ne '.' && $file ne '..'){print "$file\n";} } } close(DIR); } |
|
@68user様 ご回答、ありがとうございました。 もう少しTCP/IPについて勉強してみます。 |
|
local(*DIR); とします。なお、ハンドル DIR だけでなく $DIR も @DIR も %DIR も 全て localize されます。あるいは $handle = 'unique string'; opendir($handle,'.'); とか。あと、こういう疑問が出てくるなら、 http://www.oreilly.co.jp/BOOK/adperl/ をお勧めしておきます。 > "$home/$file"とすると、/$で変数ではなく文字として解釈される /$ でも問題ないです。\$ と勘違いされてませんか? |
|
すばやいお返事、どうもありがとうございました。 おかげさまで、うまくいきました。(^^) 書籍の情報、参考にさせていただきますので。 そうですね。すいません。(^^; >勘違い スラッシュとバックスラッシュを使っていまして。 FTPで、指定したディレクトリ以下を決まった時間に、 指定したFTPサーバーのディレクトリに、自動的にアップロードするスクリプトを 作成していまして。これで次のステップに進めそうです。(^^) 今後とも、どうぞよろしくお願いします。 #!/usr/bin/perl GetFiles("."); exit(0); sub GetFiles(){ local($dir)=@_; local(*DIR); local($file); print "In $dir\n";#ディレクトリの作成などに。 opendir(DIR,$dir); while($file=readdir(DIR)){ if(-d "$dir/$file" && $file ne '.' && $file ne '..'){ &GetFiles("$dir/$file"); }else{ if($file ne '.' && $file ne '..'){print "$file\n";}#ファイルごとの処理 } } close(DIR); } |
|
近況報告ですが、回線が専用線になりまして。(^^) 今後は、apache+php+データベースに取り組んでいきたいと考えております。 Xt、おもしろいですよね。以前、ちょっとだけ取り組みました。 ディレクトリには、1個以上のファイルが含まれることが 多いですから、こっちのほうがスマートでしたね。(^^; それでは、また。 #!/usr/bin/perl GetFiles("."); exit(0); sub GetFiles(){ local($dir)=@_; local(*DIR); local($file); print "In $dir\n"; opendir(DIR,$dir); while($file=readdir(DIR)){ if(-d "$dir/$file"){ if($file ne '.' && $file ne '..'){ &GetFiles("$dir/$file"); } }else{ print "$file\n"; } } close(DIR); } |
|
御回答ありがとうございます。 ちなみに僕の使っているOSはSunOS 5.6で、 Netscape はバージョン4.7です。 HTTP/FTP クライアントについては、 ネットワークプログラミングの基礎知識で今勉強中なのですが、 ftp の ascii モードと binary モード というのがなんなのか良く解りません。 .netscape/ については less で覗いてみて、 bookmarks.html は、ブックマークに登録してあるもの、 history.list は、 URLを入力する所の右の下向き矢印をクリックすると表れるURL一覧、 preferences.js は、設定ファイルだと思うのですが、 plugin-list 、plugin-list.BAK については解りません。 その他のファイルについては、見ようとすると "ファイル名" may be a binary file. See it anyway? という表示が出てきて、yesと答えても意味の解らないものが出てくるだけでした。 netscapeのキャッシュの事に関しては、 ls -lud 99/ と入力すると、99/ディレクトリにアクセスされていましたが、 その99/ディレクトリの中のファイルに関して、そのコマンドを入力すると、 アクセスされていませんでした。 これって、だめなのでしょうか? あと、umask というコマンドについてなのですが、 ファイル、ディレクトリ作成時に、 ファイルのパーミッションを -rw------- ディレクトリのパーミッションを drwx------ としておきたく、umask の値を変更したいのです。 umask が0の時のパーミッションは、 ファイルが -rw-rw-rw- で、 ディレクトリが drwxrwsrwx なのです。 groupの部分に s の表示があるため、umask 2067 としたらうまくいかないので、umask 77 としたら、 ディレクトリのパーミッションは drwx--l--- となりました。 groupの l も消すようにしたいのですが、どうしたらいいですか? |
|
@いちさん > ftp の ascii モードと binary モード > というのがなんなのか良く解りません。 http://X68000.startshop.co.jp/~68user/unix/pickup?ftp のように どこかの ftp サイトから mew-1.94.2.tar.gz をダウンロードして下さい。 get の前に binary とタイプすればいいです。 > .netscape/ については less で覗いてみて、 ね、自分で調べればそれなりにわかるでしょ。まずは 自力で調べて、それでもわからなければ質問して下さい。 その他については、strings で見ればわかるかもしれません。 それでもわからないものについては、多分僕にもわからないです。 > 99/ディレクトリの中のファイルに関して、そのコマンドを > 入力すると、アクセスされていませんでした。 > これって、だめなのでしょうか? ダメなんでしょう。ということは、おそらく % strings ~/.netscape/cache/index.db で、ファイル名が出ないでしょうから、そもそも URL と キャッシュファイルとのマッピングが出来ていないということです。 > あと、umask というコマンドについてなのですが、 umask 77 で、mkdir でディレクトリを作成したら drwx--l--- になりますか? SunOS 環境が今手元に ないので試せませんが、本当ですか? # l の意味は ls のマニュアルを参照のこと。 @yujiさん > 近況報告ですが、回線が専用線になりまして。(^^) 実はうちも専用線になったので Postgres をいじって遊ぼうと 思ってたら、仕事のせいで暇が全くなかったりします。 機能仕様書や詳細設計書を書いたり、Word や Excel に 苦しむ生活はもう嫌 (-_-# |
|
はじめまして。 私は今プログラマーの仕事をしております。 今回の質問というのはcronについてです。 現在、UNIXを使って「指定した時間にプログラムを実行させる」 ということをしようとしています。 crontabに日時などの情報とコマンドを記述するらしいということは わかったのですが、どうも思ったようにいきません。 crontabに日時、echoコマンドを記述したところ mailで返ってきました。 インターネットからの情報ではechoコマンドやエラーが出たときは mailで返って来るということなので、それはそれでよかったのです。 しかし、いざ実行したいシェルを書きますと、 シェルが起動してくれませんでした。 cronはシェルを起動することもできるんですよね? シェルはフルパスで指定しましたし、chmodで実行を許可しておきました。 そして、何せシェル単独では動くのです・・・。 cronを使ってシェルを起動させるのに、ほかに何か注意する点はありますか? お忙しいところすいません。 もし何かわかることがございましたら、お答えいただきたく思います。 それでは、よろしくお願いいたします。 |
|
> ほかに何か注意する点はありますか? 必要な環境変数が設定されているか、例えば PATH は 通っているか、などをチェックしましょう。cron で env コマンドを実行すればわかるでしょう。 |
|
この掲示板を観ていて、 ソース類を頻繁に書き込む掲示板では、独自タグでtextareaを表示できるようにすると 1.ドラッグによるテキスト選択がやりやすい(普通の表示だと異様にやりずらいブラウザがあります) 2.1ページのログの縦幅が減る という利点があると思ったのですがどうでしょうか。 #独自タグは人によって意見が全然違うのでしょうが ##「違うのでしょうが」っていうのは日本語としておかしいのでしょうが |
|
はじめまして、教えて下さい。 Apache 1.3.12 TurboLinux 6.1 の環境で cgi-bin フォルダがあります。 .cgi のファイルは正しく実行されるのですが、 .html のファイルまで実行しようとする様子で、エラーになってしまいます。 多分、Apache の設定だと思うのですが、資料がなくてわかりません。 ご教授よろしくお願いします |
|
perlでローカルタイムと標準時との間の相互変換をする方法について 質問です。 $t = time; ($sec,$min,$hour,$day,$mon,$year,$wday) = gmtime($t); または ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime($t); とすると、現在の時刻に関する情報(秒、分、時、日、年、月、曜日)が 得られますが、この($sec,$min,$hour,$day,$mon,$year,$wday)がわかっているときに $tを得るにはどうしたらよいのでしょうか。 |
|
@じょんさん > .html のファイルまで実行しようとする様子で、エラーになってしまいます。 おそらく http:// hostname/~foo/cgi-bin/ でなくて、 http:// hostname/cgi-bin/ の話だろうと思いますが、デフォルトでは httpd.conf で ScriptAlias /cgi-bin /usr/local/www/cgi-bin などとなっているので、全てのファイルが CGI プログラムとして 認識されます。なので、 Alias /cgi-bin /usr/local/www/cgi-bin にすればよいです。ただし根本的には /usr/local/www/cgi-bin に CGI プログラムしか置かないというのが (apache の思想としては) 正しいです。 @Syuichi.K さん > ソース類を頻繁に書き込む掲示板では 空白の話ですよね。空白を に変換しようかなと考えて いたのですが、それだと > 1.ドラッグによるテキスト選択がやりやすい(普通の表示だと > 異様にやりずらいブラウザがあります) > 2.1ページのログの縦幅が減る というのは解消できないのでしょうか? 「ドラッグしづらい」 「縦幅が減る」の意味がちょっとわからないです。 @has > この($sec,$min,$hour,$day,$mon,$year,$wday)が > わかっているときに $tを得る Time::Local モジュールを使います。perldoc Time::Local を 参照のこと。perl4 なら require 'timelocal.pl' です。 ところで、お盆には行けない可能性が大になりました>has 今の状況だと、夏休みを取れるかどうかも怪しいという…。 |
|
@68user ありがとうございました。 調べてみますです。 お仕事大変そうですな。 時間のとれたときにでも、 ゆっくりお話ししましょう。 |
|
68user さんありがとうございます。 アドバイスを元に、試行錯誤してうまくいきました Apache って面倒ですね (^^;) 今後も、よろしくお願いします。 m(_'_)m |
|
@68user様 どうも、ご無沙汰しております。Xアプリケーション作成中のgongoです。 前回68user様に教えていただいた通り、イベントハンドラを用いて 線を描くことができました。そこで今度はXDrawLineだけではなく、 他のXlibの関数を用いて絵を描こうと思い実行してみたのですが 問題が生じてしまいました。前回のプログラムからちょこっと直したので 次のようになっております。 http://www.din.or.jp/~gongo/xtshirts.c (プログラム本体) http://www.din.or.jp/~gongo/color.dat (色設定) http://www.din.or.jp/~gongo/outline.dat (絵の輪郭のための座標) http://www.din.or.jp/~gongo/polygon.dat (絵を塗り潰すための座標) 今回やろうとしたのは、 1.絵を描くための窓を白で塗りつぶす(最初のみ) 2.窓に影をつける(見た目を格好よくしたかったため) 3.全ての窓に同じ絵を描く 4.その絵に輪郭をつける です。で、問題というのはこれらすべてはExposeイベントによって 処理されるようにしたのですが、どうも窓の名前(window1,window2など) が表示されてしまいます。窓に何も描いていない場合でない限り 窓の名前は表示されないものと思っていたのですが、今回絵を描いても 窓の名前が表示されたりされなかったりします。Exposeを何度も起こして (上に他の窓を持って来たりして)動作を確認していたのですが 窓の名前が表示されるときもさればそうでないときもあるため 原因がいまいちわかりません。 どうかよろしくお願い致します。 |
|
まず、 - Window?? というのは Xt のラベル - その下の服やらなんやらは Xlib です。 Xlib の方は Expose が発生すると再描画するように EventHandler を 設定しています。しかし、Xt の方は Xt が勝手に Expose を取得し、 再描画しています。 で、表示される/されないの現象を見るに、 - Xlib の方は、ウィンドウの一部が露出しただけで常に 再描画するようになっています。なぜならウィンドウ全体である form に Expose イベントハンドラとして、全ての Xlib な画像を 再描画するように設定されているからです。 - Xt のウィジェットの方は、自分自身のウィジェットが 露出しない限り、再描画しません なので、xtshirts のウィンドウの半分を別のウィンドウで覆い、 その後 xtshirts ウィンドウを露出させると、隠れていなかった 部分のラベルが消えます。これは、隠れていなかった部分の ウィジェットは再描画しなかったのに、Xlib の方が再描画 してしまったからでしょう。 対策としては、 - Xlib の方でも本当に関係ある Expose だけを拾うようにする。 - Xlib の方で Expose を受けたら再描画し、その後 XClearArea (だったかなぁ?) で隠れてしまったウィジェットの方に Expose イベントを送る でしょうか。あるいは重ね合わせを簡単に指定できる方法が あるのかもしれません。 以上、Xt 素人の意見でした。大外しの可能性もありますので、 盲目的に信用しないで下さい。 ちなみに initflag の部分は - 結局一度しか実行されない (main だから) - コールバックやイベントハンドラは一度設定したら、ずっと その設定が残る (再設定しない限り) なので、意味はないと思います。 |
|
@68user様 本当にありがとうございます! どうしてあのような状況になったのかだいたい理解できました。 >form に Expose イベントハンドラとして、全ての Xlib な画像を これについては最初は各ウィジェットごとにExposeイベント処理をしよう かとも思っていたのですが、アプリケーションの見た目のために 意味もなくつけた影となる窓もXlibを用いて色を塗っていたため 全部のウィジェットについてExposeを設定するよりもformの方が 簡単かなぁと思ってしまったためです。 ご提案してくださった対策法につきましては2つ目の方がちょっと まだわからないところがあるのでいろいろやってみたいと思います。 基本的にはXtのラベルには出てきてほしくないものなのですが・・・。 |
|
@68user様 Xtのラベルを表示させないようにするのは成功しました。 結局各ウィジェットごとにExposeイベントの処理を行うことにしました。 そこで次に各ウィジェットごとに服の色を変えようかと思い、 DrawOnWidgetの中でdrawgcの属性値を変えようとしたのですが どうもうまくいきません。1つのGCを各ウィジェットに対して 属性値を変えつつ使い回すのは無理なのでしょうか。 どうしても最初の窓用に設定した色で全て塗りつぶされてしまいます。 プログラムはこちらです↓ http://www.din.or.jp/~gongo/xtshirts.c http://www.din.or.jp/~gongo/color.dat http://www.din.or.jp/~gongo/fixedcolor.dat http://www.din.or.jp/~gongo/polygon.dat http://www.din.or.jp/~gongo/outline.dat まだ先の話ですが、いずれは1つの窓をクリックすることで 全ての服の色に影響を与え、再描画するようにしたいと考えております。 どうか宜しくお願い致します。 |
|
たぶん、DrawOnWidget の fscanf で、バッファオーバーランを 起こしています。そのため windownum が上書きされ、値が常に 0になってます。例えば POLNUM の数を増やすと動作しました。 開発初期段階のうちから if ( j >= sizeof(polpoints)/sizeof(polpoints[0]) ){ オーバーラン } というような自動チェックのコードを仕込んでおくこと をお勧めします。 あと、デバッグは、もうちょっと注意深くやってみましょう。 XChangeGC 周辺で windownum や pixelnum[windownum] の 値を表示させるだけで、おそらく気づいたことでしょうから。 |
|
ちゃうな。POLNUM は正しいのか。というわけで、 誤: fscanf("%d%*c%d%*c",&polpoints[j].x,&polpoints[j].y); 正: fscanf("%hd%*c%hd%*c",&polpoints[j].x,&polpoints[j].y); ですかね。XPoint のメンバ x,y は int でなく short int です。 |
|
@68user様 お手数おかけ致しまして申し訳ございませんでした。 DrawOnWidgetに入った時点でwindownumがきちんと受け渡されて 表示されていたので、てっきり大丈夫なのだと思いこんでいました。 以後もう少し気をつけてデバック致します。 |
|
よく参考にさせてもらってるのですが、発言ははじめてです。 よろしくお願いします。 今環境変数に興味を持っているのですが UGTOPの「確認くん」で一部の携帯電話で クライアントの電話番号が取得できる欄が ありました。この環境変数名(HTTP_???)は何かご存知ですか? もしかしてCLIENT_IPとかでしょうか? |
|
> この環境変数名(HTTP_???)は何かご存知ですか? http://www.zdnet.co.jp/news/0003/29/ido.html HTTP_X_UP_SUBNO だそうで。まぁおそらくデータの流れは 携帯←→センタ←→WWWサーバ でしょうから (かな?)、今はセンタ側で対応されてて、電話番号は 取れないのかも。 ところで、相変わらず http://www.ugtop.com/ って、Shift-JIS なのに Content-Type: text/html; charset=iso-2022-jp を を出してますな。なので、うちでは化け化け。何か意図があるんだろうか。 |
|
はじめまして perlで以下のことをやりたいのですが教えてください。 $aaa = 10000000; これを 10,000,000 というようにしたいのですか? 1000の場合は、1,000 です。 どうすればよいですか? よろしくお願いします。 |
|
> どうすればよいですか? どうすればよいと思いますか? # 考えるのがめんどくさい人はこちら。 # http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma |
|
どうも、おひさしぶりです! wrapperを使って色々テストしていたのですが、wrapperではエラー表示がなく 実際に実行すると得意の500 Internal Server Errorがでます。 ちょっと変なことをやってるんですが...。 (日付を数値で保存して差をみたかった) #!/usr/local/bin/perl $temp0 = 966500000; $temp1 = localtime($temp0); $temp2 = localtime(966000000); print "$temp1/$temp2"; 以上がテストした全文です。(属性は755) この調子だとプログラムに組みこんでもエラーですよね? 日付表示もしたいのでlocaltime($temp0)とかしてみたんですが...。 何処がマズイのでしょうか? |
|
> 空白の話 それはどういう不都合なのでしょうか? ドラッグというのは、マウスでソースを選択する時の事です。 |
|
@R-N さん > wrapperを使って色々テストしていたのですが、wrapperではエラー表示がなく > 実際に実行すると得意の500 Internal Server Errorがでます。 Content-type ヘッダを出力していない、ってことかな。 @Syuichi.K さん > ドラッグというのは、マウスでソースを選択する時の事です。 これはちょっと後ほど。というか、空白はなにかしらの 方法で画面に反映するようにするつもりではいます。 |
|
ぐはっ、そうでした...。 あいかわらず基本がおろそかでもうしわけない...。 ありがとうございました、でなおしてきまする。 |
|
@68user様 どうも、gongoです。 前回発言したときよりさらに進めて、今度は真ん中に表示される服を除く 服が選択されたときに、選択された服の色によって選択されなかった 他の服の色を塗りなおすということをやろうとしています。 そこで、あるウィジェットがマウスでクリックされるとWidgetChoice という関数に入るようにして、その中でChangeColorという関数を 呼び出すことで色のRGB値を書いたファイルcolor.datを書き直すことに しました。そして新たな色で再描画するようにExposeイベントを送る ことにしました(ただし、まだ実験段階なのでlabel1だけ 書き直そうとしています)。 ところが、Exposeイベントを送っても新たなカラーで描き直されません。 XtRealizeWidgetではだめで、XtUnmapWidgetをやってからXtMapWidget をやるとマウスでクリックした時に一瞬label1がチラッとするので Exposeイベントは送られているような気がします。しかし、新たな色が 有効になりません。また、XClearWindowをやってみたりもしましたが これだと服が消えてしまったままで再描画されません。 こういった場合は、DrawOnWidgetと同様のことをChangeColorの後に 書くべきなのでしょうか。できればExposeイベントを意図的に 起こすことで再描画してほしいのですが・・・。 どうか宜しくお願い致します。 |
|
@68user様 よくよく考えると、maninに入ってすぐにColor()を呼び出したっきり だからまずいのでしょうか。そうなるとExpose云々よりもまず クリックしてcolor.datが書き直された後にColor()を呼び出すべき なのでしょうか。う〜ん、お盆あけないと確認できません・・・。 |
|
ここでははじめましてです。どぞよろしく。 早速質問ですみませんが、 ・Cygwinで動くApacheのバイナリーパッケージを見かけた方か、 ・CygwinでApacheのコンパイルに成功した方か ・Windows用ApacheでCygwinのPerlのスクリプトを動かす方法を知っている方は いらっしゃいますか? いつもは会社でFreeBSDでCGIの開発、メンテをしているのですが、 (一般ユーザーで管理者ではなく、UNIXくわしくありません) 夏休み家人のWindows98マシンで作業をしなければならなくなり、 Cygwin、Perl、Meadow(Emacsですな)は入れて快適に使えているのですが、 肝心のApacheがどうしてもインストールできません。 具体的な現象でいうと、makeで「no rule for targat all. stop」とか言われます。 成功した人のページ(男塾の塾長さんらしいです ^^;)のマネをしているのだが、、。 ActivePerlを使うのが常道らしいですが、会社に最終的には持っていくのでUNIX互換にしたいし、 DOS窓とかWindowsのエディターは慣れてないので憂鬱です。 ぶしつけで申し訳ありませんがよろしくお願いします、、。 ああっでもペケロクの部屋なのにPCの質問ですいませんっ ではでは。 |
|
すいません、解決しちまいました、、。 pastyというフランス人のサイト(http://persoweb.francenet.fr/~pasty/cygport/)に B20(というCygwinのバージョン)用のバイナリーがあって、ぼくのはv1.1なんだけど、 動かしてみたら、動いた。 http://localhost/index.htmlに自分が書いたページ置いたら見えます。イエー! ただ、ここでまた問題がー。 /usr/local/apache/cgi-bin/の下に自作のcgi、hello.cgiを #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<html><body>聞こえますか</body></html>\n"; とか書いて動かしてみたんですが、奇怪な現象が、、。 ブラウザがページを一生懸命ロードするんですけど、 いつまでたってもロードがおわりません。 で、停止ボタンを押すと 聞こえますか> ================================================ 転送を中断しました! とか表示されて、ページのソースを見ると、 <html><body>聞こえますか</body></html> と書いてある。ううん、動いてはいるようなんだけどなー。 コマンドラインで hello.cgi を動かしても、 Content-Type: text/html <html><body>聞こえますか</body></html> と出てくるし、Content-type のあとの改行を1個減らすと ちゃんと Internal Server Error になるんですけど。(^^;;; どなたか同様の経験を克服された方はいらっしゃいますか? 何回も聞いてすいません。 うーん、惜しい。惜しいんだけどなー、、、。 |
|
ホームページ開設のお知らせ・・・ ■残暑お見舞い申しあげます。さて、一風変わったサボテンホームページができましたのでご参笑ください。これで子供たちやご婦人方のサボテンファンがひとりでも増えれば幸いです。どうか今後ともいろいろご教示くださいね。 |
|
はじめまして、skel.103Mです。いつもこのホームページを参考にさせて いただいてます。 @ふくし さん >print "Content-type: text/html\n\n"; print "Content-type: text/html\r\n"; か print "Content-type: text/html\n\r"; にすれば動くかも、と思ったりしました。 |
|
IP unreachable な環境にいたので、しばらく書き込め ませんでした。で、ネット外でいろいろあって、これから しばらくは書き込まないと思います。ご了承ください。 とりあえずはこの掲示板はそのまま置いておきますが、 一時的に書き込み不可にするかもしれないし、しないかも しれないです。要は未定ってことです。 |
|
はじめまして。にゃと申します。 @ふくし さん おそらく接続がKeep-aliveのままに なっているのではないかと思います。 Connection: close というヘッダを追加して試してみてください。 ローカルでCGIのテストをするときはLinuxでApacheを動かしていますが、 こちらではCGIを動かすと自動的にこのヘッダを付けてくれるようです。 あとskel.103M さんも指摘されてますがヘッダの部分は 改行コードを"\r\n"にしたほうが良いかもしれません。 ヘッダの部分だけ書くとこんな感じかな? print "Connection: close\r\nContent-type: text/html\r\n\r\n" |
|
skel.103Mさん、にゃさん、お返事ありがとうございました。 \r\n も、\n\r も、\r\n\r\n も、\n\r\n\r もダメでした。(;.;) ちなみに httpd.conf で KeepAlive Off にしています。 Telnet でたたいてみると(この発想がなぜかありませんでした ^^;)、 $ telnet localhost 80 Trying 127.0.0.1... Connected to tokumei.kibou.catv.ne.jp. Escape character is '^]'. GET http://localhost/cgi-bin/test.cgi HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 18 Aug 2000 13:25:42 GMT Server: Apache/1.3.12 (Cygwin) Connection: close Content-Type: text/html <html>どうなんでしょうね</html> とここまで表示して端末の動きが固まってしまい、 Ctrl-Z を押すと、 Connection closed by foreign host. $ と出て終わります。 (ふつうの html を表示させるときは固まりません) また、上のように、Connection: close は Cygwin でも挿入されるようですねー。 (KeepAlive On にしてみても挿入されました) とまれ、どうもありがとうございます。 引き続き何かありましたらよろしくおねがいします。 ちなみに、勉強用に使っているのはオライリーの「ねずみの本」ですが、 これでは \n\n になっているんですが、\r\n が正式なんでしょうか? あるいは Cygwin だから Windows 改行にした方がいいということですか? これも合わせてよろしくおねがいします。 質問ばかりで申し訳ありませんが、ご無理のない範囲でどうぞよろしくお願いします。 |
|
> これからしばらくは書き込まないと思います。 と言いながら、早々に復帰してみたり。 Windows も cygwin も詳しくありませんが、スクリプトの最後に close(STDOUT); を入れるとどうなりますか? でもまぁ、どの方法で解決したとしても挙動が変なわけで、 > 肝心のApacheがどうしてもインストールできません。 > 具体的な現象でいうと、makeで「no rule for targat all. stop」 をなんとかするか、別の WWW サーバを入れるのが 正しい道のような気もします。 |
|
68userさん> お忙しいところ、お返事ありがとうございます。 close(STDOUT); を早速入れてみましたが、ダメでした。 うーむぅApache以外のhttpdかー、考えませんでした。 どんなもんがあるんでしょうね(自分でも調べますが) とまれ、どうもありがとうございましら。 |
|
@gongo さん 作成したプログラムをそのまま投げてデバッグしてもらおうと するのはやめましょう。回答者の負担が大きすぎます。 例えば、color.dat を書き換えるとか、10個のウィジェットを使う、 なんてのは Xt の理解とは関係ないはずです。問題が発生する 最小限のプログラムを作ってから質問して下さい。 また、最小限のプログラムを作る過程で、自力で解決してしまう ともあるはずです。例えば前の fscanf の件は、ファイル操作部分を 切り離して定数化しようとしていたなら、自力で原因を突き止められて いたかもしれません。 あと、web にプログラムを置く際、改行コードを 0x0D に直しておくとか、 文字コードを EUC にしておくなどの気遣いがあるといいですね。 本題ですが、WidgetChoice の中に DrawOnWidget(label1,client_data,NULL); と書いてみるといかがですか。当方の環境では、選択したウィジェットの 色が label1 に反映されていました。 |
|
@68user様 本当に面倒ばかりおかけして申し訳ございませんでした。 今まで状況をどうやって伝えたらよいのかわからず 全部お見せするという形をとってしまいましたが、 これからは良く考えます。 で、プログラムについてですが、結局、68user様のご返事を いただく前に自分で試した方法でなんとかなりました。 方法としてはWidgetChoice()内でChangeColor()をやった後に Color()をやって、あとは再描画したいウィジェットについて XtUnmapWidget()とXtMapWidget()を行いました。 これによって新しい色が有効になってExposeイベントが 発生し再描画できました。 68user様がご提案してくださった方法についても実行してみます。 とにかく本当に御忙しいところすみませんでした。 何卒これからも宜しくお願い致します。 |
|
Yuukiです。 ふくしさん > 肝心のApacheがどうしてもインストールできません。 > 具体的な現象でいうと、makeで「no rule for targat all. stop」 ここのバイナリを使うっていうのはどうですか? 一番楽だと思います。 http://www.apache.org/dist/binaries/win32/ http://www.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe |
|
>Yuukiさん 情報ありがとうございます。 これも知っていて、インストールしてみたんですが、結局Cygwinとは共存できないんですよね? (Cygwin の / から始まるファイルシステムにDocumentRootを乗せてCygwinのPerlを実行することができない) 会社でFreeBSDのApacheを使っていて、もうだいぶUNIX用のCGIスクリプトを書いていて、 プログラム内のパス名とか全部UNIX風に書いてしまっているし、flockやsystemなどのUNIXコマンドも使っているので、 できればCygwinにApacheを入れたいんです。 あるいは、Windows用のApacheをCygwinで使う方法があるんでしょうか? 今は別のPCにLinuxを入れてハブでつないで作業してるんですけど、 やっぱりどうしてもノートに入れて出先でデバッグとかしたいので、 またmakeから再挑戦しています。 いずれにせよ、ありがとうございます。 |
|
はじめまして > 肝心のApacheがどうしてもインストールできません。 > 具体的な現象でいうと、makeで「no rule for targat all. stop」 この件ですが、試しにソース(1.3.12)を持ってきてコンパイルしてみました。 結果、多少の問題があるものの、以下手順でインストールまで出来ました。 ・./configure --prefix=/usr/local/apache ・以下のパッチを当てる ・make EXTRA_LIBS=-lcrypt ・make install INSTALL=install.exe ただ、「no rule for targat all. stop」ってエラーには遭遇しませんでした。 Makefileの作り方を間違えていませんか? >ふくしさん また、下のhello.cgiも動いているようです。(^^; ---- ▽パッチ ここから diff -ru old/apache_1.3.12/src/main/http_main.c new/apache_1.3.12/src/main/http_main.c --- old/apache_1.3.12/src/main/http_main.c Sat Feb 5 21:01:54 2000 +++ new/apache_1.3.12/src/main/http_main.c Sat Aug 19 07:29:30 2000 @@ -116,7 +116,7 @@ #endif #ifdef WIN32 #include "../os/win32/getopt.h" -#elif !defined(BEOS) && !defined(TPF) && !defined(NETWARE) && !defined(OS390) +#elif !defined(BEOS) && !defined(TPF) && !defined(NETWARE) && !defined(OS390) && !defined(__CYGWIN__) #include <netinet/tcp.h> #endif #ifdef HAVE_BSTRING_H diff -ru old/apache_1.3.12/src/support/logresolve.c new/apache_1.3.12/src/support/logresolve.c --- old/apache_1.3.12/src/support/logresolve.c Wed Jan 26 13:36:02 2000 +++ new/apache_1.3.12/src/support/logresolve.c Sat Aug 19 09:09:00 2000 @@ -101,7 +101,7 @@ * statistics - obvious */ -#ifndef h_errno +#if !defined(h_errno) && !defined(__CYGWIN__) extern int h_errno; /* some machines don't have this in their headers */ #endif ---- △ここまで |
|
@ふくしさん ううっ、外してましたか。 一応答えられるところだけ。 >ちなみに、勉強用に使っているのはオライリーの「ねずみの本」ですが、 >これでは \n\n になっているんですが、\r\n が正式なんでしょうか? 確か調べたことのある範囲ではHTTPの1.0と1.1で ヘッダの改行はCR LF(\r\n)が正式だったと思います。 ただ改行が\nで不具合を起こした経験はないですし 多分問題はないと思います。 |
|
> 確か調べたことのある範囲ではHTTPの1.0と1.1で > ヘッダの改行はCR LF(\r\n)が正式だったと思います。 ですね。 > ただ改行が\nで不具合を起こした経験はないですし > 多分問題はないと思います。 ですね。WWW サーバ君が勝手に変換してくれます。 でも、少し前の apache ではどうやっても (\r\n を 出力しても) \n になってしまって、なんでかなぁと 思った記憶があるんですが、今やってみたら再現しない。 記憶違いか。 ところで、勝手に他人のリンク集にリンクチェック かけてしまうという、かなり無礼なページを作りました。 http://X68000.startshop.co.jp/~68user/links/ しかし、よいリンク集ってのは簡単には見付からないものだなぁ。 |
|
T.T.さん、ありがとうございました! 教えていただいた通りにビルドしたら、インストールできました!(^o^)/ ただし、CGI がなかなか表示されない問題はそのままです。まとめると、 ・普通の HTML を表示すると、すぐ表示され、流星もすぐ止まる。 ・CGI で text/plain だと(cgi-bin に入ってる TEST-CGI とか) 表示はされるものの、流星は止まらない。 ・CGI で text/html だと、表示じたい待たされる です。 \r\n問題、Connection: close 問題、KeepAlive 問題も試しましたが、無効だったようです。 あと、apachectl stop でたまに死んでくれず、そうするとapachectl start で生き返ってくれない問題がありました。 これは、apache/logs/httpd.pid が消えずに残っているせいで、手動でぶち消してやると再度生き返りましたが、 同様の問題に遭遇された方はいらっしゃいますか? ときに、T.T.さんはhello.cgiを無事動かされたそうですが、 WindowsはNTですか、98ですか? CygwinはB20ですか、v1.1ですか? 教えていただけると幸いです。 なんだか掲示板を私物化しているようで心苦しいですが、CygwinでApacheが動くと使い道があると思うので御寛恕ください。 あらためてみなさんありがとうございます。(_ _) |
|
@ふくし さん 私の環境は Windows2000 + Cygwin-1.1.4 です Cygwinを使うなら、NT系の方がいいですよ。 特に、外部プロセスの呼び出し辺りは95/98だと怪しいから... おそらく、ふくしさんの問題も外部プロセス呼び出しに起因する問題でしょう。 Windows98で作業を行いたいのであれば、割り切って使うしかないと思います。 Netscape6だと</html>までを読み込んだ時点で表示してくれるようなので、 読み込みが完了しないことさえ気にしなければどうにかなるでしょう。 |
|
うーん、そうかぁ、、。 NTも2000も持ってないし、使いたいマシンはノートなんで、 あんまりネイティブ インストールしにくいものがあるんですよね。 (ハイバネの設定とかいろんなドライバーなど、めんどくさいので、、。 メーカー、サポートしてくんないし。 最近のノートは「プロダクト リカバリー ディスク」とか入ってるけど OSのディスクじたいついてこないんだもんなー、、、) プロセスの問題というのは納得がいきますね。 ということでどうやらCygwin固有の問題でだらだらと引っ張ってきたようですね。 どうもすいません。(_ _) NC6 を入れてみます。重ねてどうもありがとうございました。 |
|
たびたびすみません。 CGIがなかなか出てこない問題で、10分ぐらいたつと表示されると書いていたのは、 ApacheのTimeoutで表示が中断させられていたということがわかりました。 Timeoutをデフォルトの300(秒)から1とかにすると、見かけ上は1秒で表示されます。(^^;;; |
|
T.T.さま> NC6試してみました。いいビルドに当たったのか、意外と安定しててビックリ。 ということで今回のソリューションとしては 「NC6でみて納得したら読み込み停止」で納得することにします。 すいません、今回の情報の公開について打ち合わせしたいことがあるので、 わたしあてに E-Mail いただけるでしょうか。お手間は取らせません。 他のみなさんも、情報をいただき大変ありがとうございました。 ここ数日でずいぶん物知りになりました。 今後もよろしくお願いいたします。 |
|
全然関係ない話題ですが、FYI ということで。 > NC6試してみました。いいビルドに当たったのか、意外と安定しててビックリ。 僕も数日間使いましたが、一度も落ちませんでした。 1998 年の末に、NC4 のコードを捨てて再出発したときは どうなることかと思いましたが、まぁよくもここまできたもんだ。 Mozilla5 の最新 Milestone は M17。Netscape Communicator 6 PR2 は、 これに Netscape 社が Plug in などの付加機能を付けたもの。 Mozilla5 は http://www.mozilla.gr.jp/download.html から自分の OS 用アーカイブを落としてきて、 % tar zxvf mozilla-*-M17.tar.gz % cd package % ./run-mozilla.sh これだけで動きます。mozilla5 は ~/.mozilla を使うので、 ~/.netscape の退避は必要ありません。 mozilla を使って http://www.mozilla.gr.jp/jlp/ を見て、 M17-langjajp-ja.xpi か M17-langjajp.xpi をクリックするだけで、 メニューなどが日本語化 (これをしなくても日本語ページは閲覧可)。 FreeBSD ユーザは (ports-current を追っかけているなら) ports で入れるのもいいでしょう。 # http://www.gnome.gr.jp/~yatt/mozilla/index.html まぁ元々重い上にデバッグ情報を吐くので、かなり重いです。 自分で build するなら HDD を 1GB くらいは 空けておいた 方がいいかもしれない。 興味を持ったなら、 http://www.mozilla.gr.jp/ からいろいろ辿って下さい。 |
|
ふくしさん 全然解決にはなってませんが、一応参考までに。 Content-Lengthヘッダ等でサイズを指定してやれば ブラウザの方で接続を切ってくれるようです。 まあ、あまり役には立たないかもしれませんが・・ |
|
> Content-Lengthヘッダ等でサイズを指定してやれば またまた全然関係ないんですけど、頭の体操でも。 お手軽に Content-length を出すにはどうすればいいかなと 考えてみて、 http://X68000.startshop.co.jp/~68user/tmp/content-length.txt というスクリプトを書きました。BEGIN と END の部分を挿入すれば、 どんな CGI スクリプトでも Content-length が出せるはずでした。 コマンドラインからだとうまく動きます。でも、web 経由だと http://X68000.startshop.co.jp/~68user/tmp/content-length.cgi と、Content-length が後に出力されてしまいます。 暇な人は原因を考えてみてください。僕は1時間悩みました。 Windows だとちゃんと動くのかもしれない。UNIX だと 動く環境もありますが、動かない環境の方が多いと思います。 |
|
>にゃさん をーホントだ(^^)。 ではじぜんに Content-length を計測して、それをはさむ仕組みを考えればいいですね。 どうもありがとうございました。 |
|
@68userさん >暇な人は原因を考えてみてください。 perlは「何となく読める」ぐらいしかわからないのですが、 考えてみました。 原因がわかったとき脱力しました(笑 |
|
@68user様 Xウィンドウでの色の扱い方についての質問です。 Xアプリケーション工房のXlib編(3)で、RGBの値を0から255の範囲で指定して いらっしゃいますが、これはどうしてなのでしょうか。 XColor構造体のred、green、blueのメンバは色のRGB値が入りますよね。 そして実際これらのメンバはunsigned shortのはずだから0から65535までの 値になるはずなのになぜ0から255の範囲で指定していらっしゃるのでしょうか。 試しに自分で簡単なプログラムを作ってみて、 同じように値(例えば"rgb:00/00/F0")をいれて見たのですが、 結果的にXAllocNamedColor後に各RGB値を見たところ、Red=0 Green=0 Blue=63420 となっていたので、きちんとunsinged shortになっています。 よって動作としては問題ないと思うのですが、どうして0から255の範囲で指定して いたものが勝手に0から65535の範囲に直されたのかがよくわかりません。 それとXAllocNamedColorの一番後ろの引数には指定した色の正確なRGB値が入る とのことなので調べたところ、Red=0 Green=0 Blue=61680 となっていました。 ということは指定した色に最も近いRGB値が入ったということなのでしょうか。 (厳密に同じRGB値になってほしいのですが) そもそも自分の環境が一体何万色中何色同時発色できるのかというのが いまいちよくわかりません。RGBの各々の強度を8ビットで表現すると 組合せとして約1677万色(フルカラーというのでしょうか)になりますが 実際はどうなのでしょう。前述のようにXColor構造体のRGBの各メンバは unsigned shortです。ということはRGBそれぞれが16ビットで表現されるので 組合せとしては大変な数になってしまいます。 また同時発色についてはカラーマップが問題となってくる(?)のでしょうか。 本には、同時に画面に表示できる色の数はプレーン数から決まる と書いてありました。で、私の使用しているディスプレイの情報を調べたところ --------------------------------------------------- *Information of Visual Class* -visual class : TrueColor -red_mask : 00007c00 -green_mask : 000003e0 -blue_mask : 0000001f -bits_per_rgb : 5 -map_entries : 64 *Other Informations* -depth :16 -the number of cells in the colormap : 64 -the number of planes : 16 --------------------------------------------------- となりました。プレーン数が16ということはカラーマップのエントリは 最大65536色まで作れる(ということは65536色同時発色できる!?)とも 思ったのですが、カラーマップのセルの数は64という情報まで出てきました。 いくらなんでも64色ということはないと思うのですが・・・。 色に関してかなり頭の中が混乱しているのですが 何卒宜しくお願い致します。 |
|
質問なのですが… 皆様はじめまして。今回初歩的な質問なのですが、 どうしてもわからなく投稿させて頂きます。 UNIXコマンドでuptimeがあると思うのですが ロードアベレージ部の1分、5分、15分のところに表示される 0.09などといった値は何を基準に表示されるのでしょうか? 申し訳ありませんがお答え頂きたく思います。 よろしくお願いいたします |
|
@hsj さん > 原因がわかったとき脱力しました(笑 僕と同じ思いをしていただいたようで、なによりです :-) @gongo さん > Xアプリケーション工房のXlib編(3)で、RGBの値を0から255の範囲で指定して > いらっしゃいますが、これはどうしてなのでしょうか。 一言で言えば X の仕様です。X(1) に rgb:<red>/<green>/<blue> <red>, <green>, <blue> := h | hh | hhh | hhhh h := single hexadecimal digits とあります。たぶん、rgb:f/f/0 = rgb:ff/ff/00 = rgb:ffff/ffff/0000 ですね。 ちなみに rgb 表記は X の色が指定できるところならどこでも使えます。 # Ex. kterm -background rgb:00/33/55 > 本には、同時に画面に表示できる色の数はプレーン数から決まる > と書いてありました。で、私の使用しているディスプレイの情報を調べたところ > -depth :16 depth って、1色ごとの bit 数じゃなかったかなぁ。 なので、この環境だと 256*256*256 で 1677万色 出…ないかなぁ。違うかなぁ。 正直カラーマップのことはわかってないので、ちょっと調べて みますが、あまり期待しないで下さい。 @YAGI さん > ロードアベレージ部の1分、5分、15分のところに表示される > 0.09などといった値は何を基準に表示されるのでしょうか? これは後ほど。というか、正しい & わかりやすい説明をする 自信がないので、誰か答えていただけるとありがたいです。 |
|
>68userさん あれー、会社のApache1.3.9と自宅に構築中のApache1.3.12は 期待通り(というか期待を裏切ってというか)Content-length:13 を返しますねー。 これって最近話題になった改○○ー○を勝手に変えてくれる問題ですか? |
|
@68user様 カラーマップについては私も調べているのですが、 どうもよくわかりません。ただ、少なくとも私の環境では ビジュアルクラスがTrueColorとなっているため カラーマップを書き換える事ができないようです。 >とあります。たぶん、rgb:f/f/0 = rgb:ff/ff/00 = >rgb:ffff/ffff/0000 ですね。 >ちなみに rgb 表記は X の色が指定できるところならどこでも使えます。 〜省略〜 >なので、この環境だと 256*256*256 で 1677万色 ということはrgbを二桁(00やF0)で表せば必ず指定した通りの色が でるのでしょうか。そうなるとなぜ四桁(FFFFなど)で表現する方法も あるのでしょうか。逆に四桁だとカラーマップにないという事態に なる確立が高まってしまうのでしょうか。 それと256*256*256というのはどこからわかるのでしょうか。 う〜ん、もう少し考えてみます。 |
|
いつもながらおかしな質問だったらごめんなさい。 perlでプログラムを作っていて、whileの中に置いたdo-whileの中で ある条件のときはlastでdo-whileを抜けようとしていたのですが、 うまくいきませんでした。 結局いろいろ調べているうちに、lastはdo-whileをループと見なして いないらしく、その外にあるwhileを抜けてしまっているということが わかったのですが、これはそういうものなのですか? |
|
@ふくしさん > 改○○ー○ ではないんです。答えを書いちゃうと - $tmp = "tmpfile.$$"; + $tmp = "/tmp/tmpfile.$$"; です。あほらしくて泣きそうです。 @has そういうものだと思います。perl では do { block } while (expr) の do は直後のブロックを実行するための命令で、 while は修飾子です。要は foo if ( expr ); と同じ形なわけですね。これはループではないので last も next も redo も使えません。まぁ、 { do { block } while (expr) } とすれば大丈夫ですが、そこまでして do〜while を 使いたいかという話になりますか。 @gongo さん > ということはrgbを二桁(00やF0)で表せば必ず指定した > 通りの色がでるのでしょうか。 じゃなくて、X の内部では RGB それぞれ16ビットだけど、 16ビット×3なんていちいち指定するのがめんどくさいだろうから、 1. ユーザは色名 (red とか) で指定できる 2. ユーザは rgb:x/x/x rgb:xx/xx/xx rgb:xxx/xxx/xxx という 簡略化した形式で色を指定できる とした、ということだと思います。どの指定方法でも XAllocNamedColor の内部で RGB それぞれ 16ビットの 色情報に展開されると。 # X のソースを持ってるなら GetColor.c あたりを # 追っかけると、展開方法はわかると思います。 > XAllocNamedColorの一番後ろの引数には指定した色の > 正確なRGB値が入るとのことなので調べたところ、 > Red=0 Green=0 Blue=61680 となっていました。 ということは、rgb:00/00/f0 は rgb:0000/0000/f0f0 に 展開されたということですね。 で、その 16ビットに展開した色情報が本当に使えるかどうかは、 カラーマップや X サーバ次第、ということです。 > ビジュアルクラスがTrueColorとなっているため > カラーマップを書き換える事ができないようです。 TrueColor だと XAllocColorCells でプライベートカラーセルを 取得できないんでしたっけ? もしできないとしたら XCreateColormap と XInstallColormap を使うんですかね (わかってない)。 > depth って、1色ごとの bit 数じゃなかったかなぁ。 これは違いました。多分。depth は1ドットごとのビット数です。 ところで、gongo さんはカラーセルを使って何をしようと 思っておられるんですか? |
|
>68userさん あそっかぁ、、ぼくはこれを動かすために cgi-bin を 733 にしました。(^^; >has さん 68user さんも書かれてますが、do の外側をさらに { } で囲むとあら不思議、 実行できるようです。 |
|
68user & ふくしさん、どうもありがとうございました。 {}でくくればいいなんて、なんか不思議な感じがします。 |
|
@68user様 > じゃなくて、X の内部では RGB それぞれ16ビットだけど、 > 16ビット×3なんていちいち指定するのがめんどくさいだろうから、 ということは二桁で表現するというのは本来0から65535なものを 大雑把にわけているということでしょうか。だとしたら大雑把に 分けているやつぐらいカラーマップに必ずあってほしいものですが・・・。 > # X のソースを持ってるなら GetColor.c あたりを こ、これってどこにあるのでしょうか。 > 取得できないんでしたっけ? もしできないとしたら XCreateColormap > と XInstallColormap を使うんですかね (わかってない)。 確かプライベートカラーセルは取得できなかったような気がします。 XCreateColormap や XInstallColormap についてはまだちょっと 詳しいことがわかりませんので本を見てみます。 > ところで、gongo さんはカラーセルを使って何をしようと > 思っておられるんですか? 色を正確なRGB値で自由自在に扱いたいと思っております。 そして最終的には色の探索をするようなプログラムを作りたいと考えております。 以前お見せしたプログラムでは中央に窓を1個、 周りに10個の窓を表示しました。 で、各窓にはいろいろな色の服を表示しました。 具体的には中央の窓の服をターゲットとして、 周りの10個の服からユーザーがターゲットに最も近いと思われる 1つの服を選び、それによってあるアルゴリズムを通して 10個の服の色のRGB値をターゲットの色に近づけるように 改善したいと考えております。 1.服の提示(各窓の描画) 2.ユーザーによる選択 3.あるアルゴリズムを通して10個の服の色のRGB値を改善 この1から3の操作を繰り返すことで、提示されている10個の服の色が ターゲットの服の色に収束していくようにしたいと考えております。 また実験段階なのでターゲットを表示しますが、 最終的にはターゲットの表示をやめ、ユーザーが心に思い描いた色へ 収束するようなアプリケーションを作りたいと考えております。 ここで問題なのは正確なRGB値を入れてもその色がカラーマップにない場合です。 近い色で勝手に代用されてしまうと、3で用意したアルゴリズムでの有効性 (いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに 別のところで収束する要因がうまれてしまうことになってしまいかねないからです。 |
|
@68user様 カラーマップの内容を知るための例みたいなのが本に載っていたので 試してみました。以下のtmp[k]はXColor構造体です。 尚、この例はRGB各32階調カラーマップのカラーセル内の表示色値を得る といったものだそうです。 ----------------------------------------------------------------------------- cmap = DefaultColormap(dummy_dpy,dummy_screen); for(k=0; k<32; k++) { tmp[k].pixel = k | k << 5 | k << 10; tmp[k].pad = 0; tmp[k].flags = DoRed | DoGreen | DoBlue; XQueryColor(dummy_dpy,cmap,&tmp[k]); } ----------------------------------------------------------------------------- で、結果的に ----------------------------------------------------------------------------- Red=0 Green=0 Blue=0 Pixel=0 Red=2114 Green=2114 Blue=2114 Pixel=1057 Red=4228 Green=4228 Blue=4228 Pixel=2114 Red=6342 Green=6342 Blue=6342 Pixel=3171 〜省略〜 Red=61306 Green=61306 Blue=61306 Pixel=30653 Red=63420 Green=63420 Blue=63420 Pixel=31710 Red=65535 Green=65535 Blue=65535 Pixel=32767 ----------------------------------------------------------------------------- といったようにPixel値が32767まできました。 ということは私の環境では 32*32*32=32768色 が カラーマップにエントリされているようです。 実際 Red=61306 Green=4228 Blue=6342 などのように 色を指定したところ、XAllocColorを通してもRGB値が 変化しませんでした。 TrueColorということでカラーマップを書き換えられないので この範囲内でうまくやりくりするしかないのでしょうか・・・。 XCreateColormap と XInstallColormap について 本を見てみましたが、まだよくわかりません。 |
|
>あほらしくて泣きそうです。 なるほど。やはりopenの返り値は常にチェックすべきなのですね。(^_^; しかし、こういうライブラリを作っておくと便利そうですね。 勉強になりました。 |
|
えっと、手短に返答をば。 @has > {}でくくればいいなんて、なんか不思議な感じがします。 そうか、よく考えてみれば、変な仕様なんだな。 でも、ちょっと試してみましたが、next/last/redo が そのまんま使えるわけでもないようで。 @gongo さん > ということは二桁で表現するというのは本来0から65535なものを > 大雑把にわけているということでしょうか。 です。ちと調べてみたところ、rgb:e/8/2 ってのは e は 14/15 なので、ffff の 14/15 = 61166 8 は 8/15 なので、ffff の 8/15 = 34952 2 は 2/15 なので、ffff の 2/15 = 8738 で、rgb = 61166/34952/8738 になるようです。 > 確かプライベートカラーセルは取得できなかったような気がします。 これはやはりできないようですね。 > こ、これってどこにあるのでしょうか。 例えば http://www.ring.gr.jp で「R6.4」などというキーワードで 探せば、http://ring.etl.go.jp/pub/X/opengroup/R6.4/tars/ に 行けます。 XFree86 など各種 X サーバというのは、(基本的には) これに X サーバの 実装を追加したものです。こっちのソースは例えばここ。 http://ring.etl.go.jp/pub/XFree86/ > 近い色で勝手に代用されてしまうと、3で用意したアルゴリズムでの有効性 > (いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに > 別のところで収束する要因がうまれてしまうことになってしまいかねないからです。 なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。 @にゃ さん >なるほど。やはりopenの返り値は常にチェックすべきなのですね。(^_^; ですね。ちなみにこれまでで一番はまったのは CGI やりはじめの頃。 open(IN,"foo |"); ってのが動かない。理由は foo が core dump してたから、ってのです。 コマンドラインからは動くし、nobody 権限で動いていたから core が できないので core 吐いてることがわからないという…。 @YAGI さん > ロードアベレージ部の1分、5分、15分のところに表示される > 0.09などといった値は何を基準に表示されるのでしょうか? FreeBSD の w(1) から引用すると、 平均負荷は、最近の1分、5分、15分間における実行キュー内の ジョブ数の平均値を表します。 です。すいませんが、わからなければ再度質問して下さい。 # これを説明し出すと長いんだわ、これが。 |
|
@68user様 いろいろありがとうございました。 >なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。 なので、カラーマップに存在する色だけを使って動くように 頑張ってみます。今後とも宜しくお願い致します。 |
|
>> なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。 > なので、カラーマップに存在する色だけを使って動くように 最初は TrueColor でも XCreateColormap/XInstallColormap で いけるんじゃないか思いました。でも、手元のサンプルプログラムが ことごとく動かないので、やっぱり TrueColor でもダメなのかと あきらめかけました。ところが、X の設定を 8bpp (depth8) に 変えて PseudoColor にしても同じくサンプルプログラムが動きませんでした。 というわけで、サンプルプログラムがダメなのか、もともと TrueColor だと不可能なのかはわかりませんでした。 ちなみに何をしたかったかと言うと、 - netscape の起動時に -install オプションを付けると、 マウスが netscape の中に入ったときだけカラーマップが 変更され、netscape だけが色を独占できる - その代わり、netscape 以外の部分の色はちょっと変になる。 - マウスを netscape から外すと、netscape の中の色が変になり、 それ以外の色が正常に戻る というようなやつです。 |
|
@68user様 > 最初は TrueColor でも XCreateColormap/XInstallColormap で > いけるんじゃないか思いました。 私も本をみて XCreateColormap/XSetWindowColormap/XInstallColormap といった感じで動かしてみようと思いましたが、うまくいきませんでした。 本の例をまねてXCreateColormapの2番目の引数(window)を DefaultRootWindowにしたがまずかったのか、実行すると窓が画面左上に出て 動かせなくなってしまいました(ウィンドウマネージャが動いていない!?)。 窓の表示位置がおかしいのはともかくとして、肝心のRGB値がどうなったかというと XAllocColorの後にやはり近い値に置き換えられたと思います。 しかも、プログラムを終了して、そのプログラムを書き換えようとmuleで 開いたらmuleが勝手に画面左上に行って動かせなくなってしまいました。 で、あわててXUninstallColormapをプログラムに書き加えて 再度実行したら元の状態に戻りました。 う〜ん、難しいです・・・。 それとちょっと思ったのですが、showrgbで表示される全ての色は本当に カラーマップに存在するのでしょうか。結構数値が細かく変わっている ところもあるので、本当にあるのかなぁと疑問に思いました。 それとも256*256*256を本当に表示できる環境を想定して 細かく用意されているのでしょうか。 |
|
>68user様 レスありがとうございます。 大体のイメージは浮かぶ事が出来ました。 ただ、また質問となってしまうのですが、 その数値(0.01)はどれくらいの値になっていれば 高負荷がかかっているといえるのでしょうか? やはり、1.00以上だと高負荷なのでしょうか? |
|
以下の説明には多分何個・何十個もの嘘がありますが、「ここは 嘘かもしれない」と注釈を付け出すと、全部に注釈を付けるはめに なるので、略。ツッコミは歓迎します。 まずは基礎知識。 プロセスにはいくつかの状態がありますが、簡略化して、以下の4つを考えます。 実行状態 … まさに CPU がそのプロセスの処理をおこなっている状態 実行可能状態 … CPU は同時に複数の処理をできないので、CPU が現在 実行しているプロセスの処理を終えるまで待っている状態 入出力待ち … ディスクに書き込む/読み込む命令を出した後、ディスク コントローラからの「終わったよ」という知らせを 待っている状態 sleep 状態 … sleep を使っているか、デバイスやソケットを見張っている (listen や select や read している) が、まだデータが 届いていない) 状態 プロセスは必ず上記のうち1つの状態を取ります。 さて、本題。 load average というのは、ある瞬間の「実行可能状態のプロセスの個数」 の平均です。個数ですから整数なんですが、平均を取るので、0.12 などと いった小数になります。 例えば 0:00:00 の時点での実行可能状態のプロセス数が3 0:00:01 の時点での実行可能状態のプロセス数が0 0:00:02 の時点での実行可能状態のプロセス数が1 なら、load average は 4/3 = 1.33 です。これは3秒間だけプロセス数を 数えましたが、最近1分、5分、10分のそれぞれのプロセス数の平均を 取ったものが、top や uptime で表示される load average です。 つまり、 - load average が 1 なら、常に CPU が何かしらの処理をしている。 CPU が遊んでいる時間がない。 - load average が 1 未満なら、実行可能状態のプロセスがない 瞬間がある。その間、CPU は遊んでいる。 - load average が 1 超なら、実行可能状態のプロセスが多く、 待たされているプロセスがある。 ということです。 # あくまでも平均なので、本当はそうでない瞬間が多くあるでしょう。 だからといって、1 を閾値 (いきち) として負荷が低い/高いと 言っていいかというと、多分違うと思います。 なお、 A.「変数を1ついじくって 1秒 sleep する」という処理を永遠に繰り返す というプロセスと、 B.「変数の内容を1増やし続ける」という処理を永遠に繰り返す というプロセスでは、負荷が全く違います。 A は、実行可能状態から実行状態に移ると、変数を1ついじくって、 すぐに sleep 状態に入ります (実行可能状態でなくなる)。1秒経つと 再度 実行可能状態に移ります。 B は、実行可能状態から実行状態になると、変数の内容を1増やし 続けます。一定時間が経過すると、カーネルが強制的にプロセスを 実行状態から実行可能状態に戻します。 B のようなプロセスを実行すると、load average は大体 1 だけ 上がるはずです。なぜなら、B のプロセスは入出力待ちも sleep も しないため、「常に実行可能状態になり得るプロセス」だからです。 たとえば C でもシェル上でもいいので、無限ループするだけの プログラム % while (1) while ? end を実行すると、load average が大体 1 上がり、もう1つ同じのを 実行すると さらに 1 上がるでしょう。 |
|
つかぬことをお聞きしますが,"リンク集のリンク集"のSSIはいつ動作するようになるのでしょうか。 |
|
おろ、いつのまにか止まってやがる (笑)。というか、SSI が効いてないのか…。 ウチに帰ったら直します。御指摘どうもです。 |
|
> SSI が効いてないのか…。 8/28 AM8:30 ごろから5時間ほど、SEGA BBS の過去ログの CGI に 199.172.149 あたりから怒涛のアクセスがあったようです。 apache のログを見ると、500 エラーが 9000件ほど記録されてました。 # トップページのカウンタも、壊れてもうた。 どうもそれ以来 apache の動作がおかしく、一部のページで SSI が 動作していないようです CGI 側で同時起動の制限が必要なのかもしれませんね。 ま、こういうこともあるということで。 |
|
皆様 始めまして。 ともと申します。 UNIX暦 3ヶ月の超初心者です。 スクリプトを書いておりますが、そのスクリプトのあるステップでどうしてもユーザーをスイッチしなくてはいけない事になってしまいました。 現在 su コマンドを使ってその部分だけわざわざパスワードを入れて、またスクリプトを実行するという 2スクリプト制になってます。 もしユーザーの変更も自動的にスクリプト上でできればとても楽なんですが、よい方法ありませんでしょうか? 当分はスクリプト自体にパスワードをハードコードしてもいいと思ってます。 どなたか お知恵をお貸しください! とも |
|
最も簡単なのは root 権限でスクリプトを動かし、適時 su で 特定のユーザ権限を得るか、su username command とすることです。 それが無理なら、suid なプログラムを作ればよいです。 http://X68000.startshop.co.jp/~68user/unix/pickup?setuid > 当分はスクリプト自体にパスワードをハードコードしてもいいと思ってます。 su は端末 (/dev/tty) からパスワードを読もうとするので、 標準入力などからデータを流し込むことは不可能です。 |
|
> 8/28 AM8:30 ごろから5時間ほど、SEGA BBS の過去ログの CGI に > 199.172.149 あたりから怒涛のアクセスがあったようです。 今日も同じ時間帯に同じところから。うっとうしいのので、 SEGA BBS の CGI をしばらく止めます。 ところで、またカウンタが壊れました。/var/log/messages を 見るに、オープンしたファイル数が OS の最大値を越えたため だと思われます。 # よく見ると、カウンタで open のエラーチェックを # 全くしてなかった。そりゃ壊れるわな。 > su username command とすることです。 su username -c command でした。 |
|
シェルを創っているのですがSyslog(/var/log/messages) にログを出力したいのですがコマンドでできないのでしょうか?教えてください。 よろしくお願いします |
|
以前から気になっていたことなんですが、 NTじゃなく一般のWindowsがTCP上で行っているサービスには、 どんなものがあるんでしょうか。 もし知っておられたら教えて下さい。 また、こういった類の情報はどうやったら入手できるものなのか、 よろしければあわせて教えて下さい。 |
|
眠い。ので、手短に。 netstat -a とか。少なくとも Win98 にはあります。 標準では netbios 関係くらいしか listen してないと思います。 logger(1) など。 |
|
「httptalker(http-client)について」 とてもわかりやすいサイトで unixでいろいろできるんだなぁ、と感心してます 使い始めて三ヶ月位です(vinelinuxを使ってます httptalkerでうまくget出来ないところがあるので 質問させてください httptalker.pl -getに続けて 1:news.yahoo.co.jp/headlines/top/ 2:username.hypermart.net/hoge/huga.html この二つに関してですが1,2とも wgetでは問題無く取れますが httptalkerでは404や「そのページは存在しない」 となります。サイトにある telnetでgetする方法だとでは1のみ問題無し 2ではやはり404となります 何か別の(httpdなどの)知識 が必要なのでしょうか? 何かアドバイスがあれば よろしくお願いします |
|
> なむさむ さん うーむ、ハイマは、バーチャルホストがなんたら.. Host: username.hypermart.net(CRLF) つければいいのかな。。 |
|
>やままさん アドバイスありがとうございます バーチャルホストについて勉強してみます 確かにhost付けてなかった・・・ ところで(CRLF)っていうのは \r\nとか、そんな意味ですか? |
|
バーチャルホストについては。 http://x68000.startshop.co.jp/~68user/net/http-4.html ここにあったよ。 CRLFはUNIXなら\r\nでいいみたいです。 |
|
hypermart は Host ヘッダです。 > 1:news.yahoo.co.jp/headlines/top/ こっちは yahoo の WWW サーバが悪いです。 WWW サーバの返すヘッダとボディの間のセパレータが CR LF LF (もしくは CR LF で、最後の LF はボディの 一部かもしれない) となっているので、httptalker が ボディ部もヘッダの一部だと解釈しています。 まぁ、セパレータが CR でも LF でも CR LF でも 認識できるようにするのがダウンローダとしては正しい道でしょう。 |
|
su についてのご返答ありがとうございました。 早速挑戦してみます。 |
|
あ゛・・・きちんと読んでなかった 取り敢えずhost付けてやってみたら 上手く行きました yahooの方はちょとむつかしくて ヘッダーの役割とかがいまいち解ってないので、 もう一度きちんと読んでからやってみます 取り敢えずありがとうございました |
|
@68user > netstat -a とか。 > 標準では netbios 関係くらいしか listen してないと思います。 なるほど、どうもありがとうございました。 |
|
ところで やままさんへ。 1時間に一度くらいこのページにリンクチェックをかけておられる ようですが、このページは Last-modified を GMT で出しています。 しかし、そちらのページでは JST として扱っているようで、 常に 9時間前に更新されたものと見なされています。 |
|
はじめまして、カワエといいます。今受験生です。 私は将来プログラマーになりたいのですが、PCを買ってまだ半年、まともに触ったこともない超初心者です。 プログラマーの具体的なことについても知らず、ネットで検索したりしているのですが、 他の掲示板で「大変だ」「引退が早い」「プログラミングは趣味にしておくべきだ」等の発言をよく見ましたが、実際のところどうなのでしょうか? それと、やはり女性差別があったりするのでしょうか? 68user様、プログラマーの方、教えてください。 |
|
あらら、進路相談ですか。 ゲームプログラマになりたいのなら、ここより http://www.lares.dti.ne.jp/~yagiyama/ で聞くのがいいでしょう。 でなくて、いわゆる SE を目指すならば http://village.infoweb.ne.jp/~watany/selink/index.htm を読むといいかもしれません。 僕は一応 SE ですが、社会人一年目なので、軽々しくアドバイス するのはやめておきます。 |
|
有り難うございます。 では、そっちに行ってみることにします。 |
|
すみませんが、HPの紹介をさせてください。 ゲーセンはゲーマーだけの物って誰が決めた!! もっとゲーセンを楽しもう!!をテーマに ゲームセンターのゲームをゲーマーのみならず カップルや女の人も楽しめるように、 情報をセレクト&紹介するページです。 内容は音ゲーの手ほどきや僕のホームグラウンドの ゲーセンの最新機種入荷情報などです。 是非おいでください。 この書き込みが掲示板の意に反する内容でしたら、 お手数ですが削除してください。 |
|
はじめまして。 インフォシークからとんできました。 今、一生懸命UNIXのことを書いたHPを作っています。 ここに書いてあることがとっても役立ちました。 また参考にさせていただきます。 学校でunixを使っていて、けっこうはまってきました。 家はまだウィンドウズですが・・・ もしよろしかったら私のHPにも足を運んでください。 けっこう頑張って勉強しています。 |
|
> 今、一生懸命UNIXのことを書いたHPを作っています。 ほほぅ、一番オジサンっぽいコマンドが cal ですか (笑) 僕は cpio と vi じゃないかと思います。なんとなく。 |
|
@68user様 どうも、gongoです。 Xウィンドウ・システムのことで質問があります。 以前見ていただいたプログラムなどで画面に表示される窓を なんらかの形で保存して、texなどにはりつけたいと考えております。 そこで画面を保存するにはどのようにしたらよいのでしょうか。 xwd というコマンドを用いると窓の内容を保存できるようなのですが 自分の環境ではこの方法で保存した .xwd ファイルを xv で 表示しようとすると真っ黒になっていました。 で、他のマシンでもやってみたところ、中には窓を取り込めるものも ありました。しかし、そのマシンだと今度は以前見ていただいたプログラムが 期待通りに動きません(カラーマップのインデックスがすくない模様)。 自分のマシンと xwd がうまくいったマシンでは OSは一緒です。 ちなみにOSはFreeBSD 2.2.8Rです。インストールした人間が違うので ひょっとすると何かX関連で細かい設定がまずいのかもしれませんが そこら辺の確認の仕方もよくわかりません。 なにか良い方法はないでしょうか。 また xwd 以外に窓を取り込む良い方法はないでしょうか。 よろしくお願い致します。 |
|
@68user様 度々すみません、gongoです。 >また xwd 以外に窓を取り込む良い方法はないでしょうか。 自分で書いておいてあれなのですが、xvの機能でGrabというのが あるようなので試してみます。 |
|
> 自分の環境ではこの方法で保存した .xwd ファイルを xv で > 表示しようとすると真っ黒になっていました。 原因や正しい回避方法は知りません。ただ、display や xwud で 見ると正しく表示されるので、僕は特に困ってないです。 おそらく xwd 形式で保存しておく必要はないのではないでしょうから、 (TeX に貼るということなので) % convert foo.xwd foo.eps しておけばいいでしょう。 > xvの機能でGrabというのがあるようなので試してみます。 あと、import ってのもあります。display, convert, import は ImageMagick に含まれています。 |
|
@68user様 xvのGrabで保存でき、表示もうまくできました。 >% convert foo.xwd foo.eps こちらについても試させていただきます。 >ImageMagick に含まれています。 このImageMaickというのは何なのでしょうか。 標準でインストールされるもの(?)なのでしょうか。 何はともあれなんとかTexにはれそうです。 ありがとうございました。 |
|
> 標準でインストールされるもの(?)なのでしょうか。 されないです。FreeBSD なら ports か packages でインストール しましょう。結構有名なプログラムなので、NetBSD でも Linux でも パッケージは作成されているはずです。 |
|
@68user様 >FreeBSD なら ports か packages でインストールしましょう。 なるほど、わかりました。 あぁ、でも勝手にマシンに入れちゃうとまずいかも・・・。 私のマシンではないので様子を見てインストールできたらやってみます。 |
|
HTTP クライアントを作ってみよう(2) http://www2.startshop.co.jp/~68user/net/http-2.html のhttp-client.plを実行すると下記のエラーで止まってしまいます。 Use of uninitialized value in subroutine entry at http-client.pl line 14. Use of uninitialized value in concatenation (.) at http-client.pl line 21. 対策方法をお知らせください。 perlはperl, v5.6.0 built for MSWin32-x86-multi-threadを使っています。 OSはWin98SEです |
|
こちらの perl-5.6 では動いているので、おそらく 7行目の $port = getservbyname('http','tcp'); で値が取得できていないんでしょう。 $port = getservbyname('http','tcp') || 80; でどうですか。 |
|
>$port = getservbyname('http','tcp') || 80; >でどうですか。 うまくいきました。ありがとうございました。 ところでこのスクリプトを会社の2台のUNIXで走らせたら 1台は動作してもう一台はUse of uninitialized valueの エラーで止まってしまいました。それではとWINDOWSでやって みたら同じエラーで止まってしまいました。原因がわからないので 質問をさせて頂きました。WSによって動いたりそうでなかったり する原因は何なのかな?っと言う新たな疑問がありますが 宜しければお知らせください。 |
|
man getservbyname すればわかりますが、この関数は /etc/services (NIS を使っているなら ypcat services の 結果) を読むだけの関数なので、/etc/services がオープン できないとか、ファイルはあるけど中身に http 80/tcp というエントリがない、などというときポート番号の取得に 失敗します。 サンプルとはいえ、本来は getservbyname に失敗したら 80 に 決め打ちするか、あるいは die すべきですね。次回更新時に 直しておきます。 |
|
お返事ありがとうございました。 perl http-client.plとするとうまく動作するのですが ブラウザから起動するとInternal Server Errorとなります。 起動例(http://www.???.ne.jp/cgi-bin/http-client.pl) もともとそういうスクリプトなのかもしれませんがスクリプト内 もしくは引数でわたされたアドレスのhtmlやjpg,gif等を ブラウザに表示するのはどうしたらよいのでしょうか。 よろしくお願いします。 |
|
#!/usr/bin/perl print "Hello world"; は CGI 経由では動きません。しかし #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello world"; は動きます。そういうことです。 |
|
くだらないことですが・・・ HPを置いているサーバにbashのファイルがありますが、 これはunixシェルが使えるということなのでしょうか。 そして、Apacheを使うときにはDNSの設定を行う必要がありますか? もしよろしければお答えください。 よろしくお願いします。 |
|
> HPを置いているサーバにbashのファイルがありますが、 どこにどういうファイルがありますか? /bin/bash や /usr/local/bin/bash ですか? また、どうやってその ファイルを見付けましたか? > Apacheを使うときにはDNSの設定を行う必要がありますか? ローカルでテスト用に使うのですか? なら必要ありません。 # ってこともないんだけど。自ホストさえ引ければ問題なし。 apache を使って web を一般に公開するにしても、普通に telnet や nslookup が使えているなら、DNS の設定は不要 です (それは DNS が設定済ということだから)。 |
|
ftpソフトでファイルを取得すると、 一覧のところに .bash_logout .bash_profile .bashrs というファイルが置かれています。 ちなみに、binディレクトリ内には何もありません。 (これはcgiが使えないということ?) bashファイルに関しては所有者が私になっているので、 (rootではないということ) ・・・・どういうことなんでしょう。 なんか、よくわからない質問で申し訳ありません。 |
|
@68user様 どうも、gongoです。 X関連(というよりもC言語かもしれませんが)で質問があります。 label = XtVaCreateManagedWidget(name,・・・) と書けば、labelというウィジェットを生成できますが 複数個のウィジェットを生成したい場合 for文などでこの文章を繰り返して生成することは可能でしょうか。 例えばlabel00,label01,label02,・・・、そしてname00,name01,name02,・・・ などのように変化させていくつもりで unsigned char labelname[]="label00" unsigned char widgetname[]="name00" といったように最初のlabel00とname00をchar型の配列に入れて for文で回るたびに数値のところだけを書き直すといったことを やろうとしたのですが、どうもうまくいきませんでした。 for(i=0; i<NUM; i++){ labelname = XtVaCreateWidget(widgetname,・・・); labelとnameの数字をカウントアップする; } といった感じでウィジェットを生成できれば簡単なのに・・・と思ったのですが やはり個々に宣言しないとまずいのでしょうか。 labelnameのところは本来Widget型じゃないといけないからうまくいかない のでしょうか。widgetnameのところは本来String型ですがこちらもよくわかりません。 また、同様にイベント処理でイベントハンドラを用いる時も for文で回すことは可能でしょうか。 つまりは以前見て頂いたプログラムのようにlabelをいくつも用意し、 それぞれの窓にButtonPressをイベントハンドラとして登録するという一連の文を 書くと結構大変ですし、後々窓の個数を変える時のことを考えると for文で回せたらよいなぁと考えた次第です。 何卒宜しくお願い致します。 |
|
@gongo さん > label = XtVaCreateManagedWidget(name,・・・) むむ? 前のソースではそこらへんをやっておられたと思いましたが…。 Widget label[10]; char name[256]; for( i=0; i<sizeof(label)/sizeof(label[0]) ; i++ ){ snprintf(name, sizeof(name), "name%02d", i); label[i] = XtVaCreateWidget(name, ...); } ではダメですか? > 最初のlabel00とname00をchar型の配列に入れて for文で > 回るたびに数値のところだけを書き直すといったこと はできません。C 言語では、変数名や関数名などのシンボルを 動的に生成することはできないからです。 # …という表現は正しいかな? > unsigned char labelname[]="label00" > labelname = XtVaCreateWidget(widgetname,・・・); また、「labelname の*内容*」と「メモリ領域」には何の関係も ないので、XtVaCreateWidget の戻り値を格納する領域がどこにも ない、ということになります。 @みちこさん > これはunixシェルが使えるということなのでしょうか。 一言で言えば、 「~/.bash* がある、ということだけでは何とも言えない」 です。相手側に telnet サーバが上がっているか、IP アドレスにより telnet の接続元を限定していないか、パスワードエントリが適切に 設定されているか、ログインシェルが適切に設定されているか、 などを全てクリアすればログインできるでしょう。 逆に言うと、プロバイダが客にリモートログインさせないように するには、たくさんの方法があるということ。その情報がない 以上、ログインできるとも できないとも判断できません。 > ちなみに、binディレクトリ内には何もありません。 > (これはcgiが使えないということ?) bin と CGI には関係はありません。 あと、質問の仕方がいまいちですね。例えば、「binディレクトリ」 というのは、/bin なのか、ホームディレクトリの bin なのか 判断ができません。何を書けばよいかがわからない、というのは 理解できますが、その場合は調べた情報を全て書いて下さい。 |
|
最近うちに届いたメール。 From: * <*@mti.biglobe.ne.jp> Date: Sat, 2 Sep 2000 00:24:57 +0900 (内容なし) From: * <*@da.mbn.or.jp> Date: Wed, 6 Sep 2000 21:24:05 +0900 (内容なし) From: * <*@calltoweb.com> Date: Fri, 8 Sep 2000 12:43:55 +0900 (内容なし) From: *@themis.dricas.com Date: Sat, 9 Sep 2000 12:49:08 +0900 (JST) (内容なし) From: * <*@d7.dion.ne.jp> Date: Sun, 10 Sep 2000 09:11:30 +0900 Subject: あの ホームページみました。何とかしてください。 From: * <*@f7.dion.ne.jp> Date: Sun, 10 Sep 2000 10:29:26 +0900 届きました? From: *@nifty.ne.jp Date: Tue, 12 Sep 2000 00:05:51 +0900 (JST) このホームページはどうなっているんですか? From: *@aol.com Date: Tue, 12 Sep 2000 09:44:30 EDT Subject: エラー表示ありとでました。 和議申請について 和議申請とは この人たちにはコミュニケーション能力というものがないのだろうか。 好意的に解釈すると、「SEGA BBS 過去ログが見れません」 と言いたいのかとも思うのだが、本当にそうなのか。 うちにイタズラメールを送ろうという活動でもやっているのでは ないか。あるいは、どこかの web をクリックするとここにメールが 送られてくるような仕組みになっているのではないか、とも思えてくる。 謎である。真実を知っている人がいたら教えてください。 |
|
@68user様 素早いお返事ありがとうございます。 >むむ? 前のソースではそこらへんをやっておられたと思いましたが…。 たしか前のではすべてのlabelに対してXtVaCreateManagedWidget()やXtAddEventHandler()などをやっていたと思います。(^^; >Widget label[10]; >char name[256]; >for( i=0; i<sizeof(label)/sizeof(label[0]) ; i++ ){ > snprintf(name, sizeof(name), "name%02d", i); > label[i] = XtVaCreateWidget(name, ...); >} snprintfというのが使ったことがないので明日調べて 試させていただきます。 ありがとうございました。 |
|
質問の仕方がうまくなくて、ごめんなさい。 これからもっと磨いていきますので、 よろしくお願いいたします。 初心者にはココに質問するのはちょっと高度なことなのでしょうか。 とかちょっと思ってしまった。 なにか超初心者向けのページがあったらご紹介ください。 ご迷惑おかけしました。 というわけで今日も本を読むばかりです。 コンピュータって難しい・・・ 聞く人もいないのがホントにつらいところです。 |
|
> 質問の仕方がうまくなくて、ごめんなさい。 というところにさらに説教くさいことを書くのもアレですが、 回答をもらったときに「理解できたかどうか」「解決したか どうか」をちゃんと書くことも重要です。 「ありがとう」と、お礼のみを書かれてもこっちは何も得る ものがないわけですが、 「〜が理解できた/できなかった」 「〜と〜の関係がわからない」 「言われた通りにやってみたら〜というトラブルが出たが、 〜とすることで解決できた」 という返答が得られると、回答者が「こういう解説の仕方で 相手に理解させることができた」「この部分で嘘を言ってしまった」 「わかりにくい表現をしてしまった」などということに気づく ことができます。 で、みちこさんは apache の件も bash の件も、解決したのか、 理解できたのか、を書いておられません。これでは回答した 僕には何のメリットもありません。 要は「お礼よりも結果報告」です。 これは初心者向けのコミュニティでも上級者向けのコミュニティでも 同じですので、今後は注意されることをお勧めします。 > なにか超初心者向けのページがあったらご紹介ください。 逆に、fj やメーリングリストなど、ここよりもずっとレベルの 高いところに行くのもいいでしょう。しばらく読み続ければ、 「よい質問の仕方とはどういうものなのか」がわかってくると 思います。 > @68user様 ところで、「様」はご勘弁を>gongo さん |
|
@68userさん > snprintfというのが使ったことがないので明日調べて > 試させていただきます。 と思っていたら、マシンが起動しなくなってしまいました。 試す以前に修理手続きやら何やらやらなければ・・・。 D◯S/Vパラダイスというお店で去年の6月に購入したマシンなのですが、 昨日突然フリーズして以後起動しなくなりました。(泣) HDDのランプとかはつくのですが一瞬HDDのカラカラって音が鳴って それ以後進まなくなってしまいました。 それとsnprintfというのはsprintfのことでよろしいのでしょうか。 今日、本を見た感じではsnprintfというのがなかったもので。 どっちにしろsprintfも使ったことがなかったので 他のマシンで試してみます。 |
|
@68userさん sprintf()を使ってやってみたらうまくいきました。 といっても、最初はうまくいかなくて labelを生成するところで segmentation fault で 止まってしまったので、2番目の引数である sizeof(name) というのを 削除したら通るようになりました。 |
|
>apache を使って web を一般に公開するにしても、普通に >telnet や nslookup が使えているなら、DNS の設定は不要 >です (それは DNS が設定済ということだから)。 やはりDNSの設定はいらなかったようです。 Perlがうまくインストールされていなかったため、 動作しなかったようでした。 しかしながら、単にパソコンの調子が悪いだけだったかも、 という疑問も捨て切れません。 というのも、Apacheを立ち上げると、突然フリーズしたりするので。 詳しい理由はちょっと見当がつきません。 >相手側に telnet サーバが上がっているか、IP アドレスにより >telnet の接続元を限定していないか、パスワードエントリが適切に >設定されているか、ログインシェルが適切に設定されているか、 >などを全てクリアすればログインできるでしょう。 IPアドレスによってtelnetの接続もとの限定をしているかどうかは、 向こうに聞かないとわからないのでしょうか。 特にそのような項目はメール確認の時にはふくまれていなかったのですが。 またログインシェルが適切に設定されている、とはどういう状態をいうのですか。 >例えば、「binディレクトリ」 >というのは、/bin なのか、ホームディレクトリの bin なのか >判断ができません。 おっしゃるとおりです。 私が言ったのはホームディレクトリのbinのことです。 少しはましになったでしょうか。 MLも探してみることにしました。 もう少しうまく質問できるようになったら またこちらにこさせてください。 お世話になります・・・ |
|
@gongo さん > それとsnprintfというのはsprintfのことでよろしいのでしょうか。 失礼ながら、man の見方はご存知でしょうか? man snprintf です。 日本語訳はこちら。 http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=printf&dir=jpman-3.1.0%2Fman§=3 なお、(FreeBSD なら) section 3 の日本語訳は現在の jman には 含まれていないので、web 上でしか見られません。 @みちこさん > IPアドレスによってtelnetの接続もとの限定をしているかどうかは、 > 向こうに聞かないとわからないのでしょうか。 基本的にはそうですが、まぁ実際に telnet で接続して みればわかる場合もあります。 Connection refused とか Connection closed by foreign host とか、 言われたら、無理ということです。 # Connection refused だからといって、IP アドレスによる # 制限をかけている、とは断言できませんが。 あと、こういうことはプロバイダに確認すべきことです。 ちゃんとお金を払っているのでしょうから「telnet 接続は 可能か」と堂々と問い合わせましょう。 > またログインシェルが適切に設定されている /etc/passwd (あるいは /etc/master.passwd, /etc/shadow など) の話です。 username:*:1001:1001:HOGEHOGE:/home/username:/bin/csh username:*:1001:1001:HOGEHOGE:/home/username:/nonexistent 前者はログインできますが、後者は /nonexistent というシェルは 存在しないので、結果的にシェルが起動せずログインできません。 |
|
@68userさん >> それとsnprintfというのはsprintfのことでよろしいのでしょうか。 >失礼ながら、man の見方はご存知でしょうか? man snprintf です。 manの見方は知っていましたがほとんど使ったことがなく、C言語辞典の ようなものにも載っていなかったものでてっきり近くに載っていた sprintfだと思っていました。 >snprintf(name, sizeof(name), "name%02d", i); お教えいただいた日本語マニュアルHPの方を見ました。 で、読んだ結果snprintfの前にprintfもなんだか わからなくなってきてしまったので、"name%02d"の部分について 確認させてください。まず、「%d」と書けば整数を表示させると 思いますが、その前の「2」というのは整数二桁の精度ということですか? あと、その前の「0」はiが一桁の時、01、02、・・・のように「0」を いれてくれるということでしょうか。 そしてsizeof(name)についてですが、これがあるsnprintfと、 ないsprintfの違い(両方ある必要性?)がいまいちよくわかりません。 snprintfではsizeof(name)の容量を超えるものを 一番目の引数のnameに入れることを許さない ということなのでしょうか??う〜ん・・・。 |
|
はじめまして。 Perlで質問があります。 パケットを送るときにその容量を どうやって指定するのですか? 例えば1000バイトをUDPで送りたい場合 どうすればいいんでしょうか? そのパケットの作成方法がわかりません。 よろしくお願いします。 |
|
@gongo さん > manの見方は知っていましたがほとんど使ったことがなく わからなければ、とにかく man です。まずマニュアルを読まないと、 理解できる/できないというレベルにさえたどり着けませんから。 > printfもなんだか わからなくなってきてしまったので、 ま、これは宿題ということで。いろんな値を %d, %2d, %02d で 表示させてみればわかるでしょう。 # printf(3) は、よく使うわりにわかりにくいマニュアルの # 代表だと思うので、あまり気にしなくてよいと思います。 > これがあるsnprintfと、ないsprintfの違い snprintf だと、適切な値を第二引数に与えれば、いかに 生成される文字列が長くても、その領域を越えて書き込む ことはありません。要は、バッファオーバーラン対策です。 strncat/strncpy/strlcat/strlcpy も同じです。 @ケイさん > パケットを送るときにその容量をどうやって指定するのですか? > 例えば1000バイトをUDPで送りたい場合どうすればいい > んでしょうか? C の send/sendto と違い、perl の send では長さを与える 必要はありません。perl 君がよきにはからってくれます。 > そのパケットの作成方法がわかりません。 まさか IP データグラムを自前で作る、とかいう話じゃないですよね? |
|
@68userさん > ま、これは宿題ということで。いろんな値を %d, %2d, %02d で で、やってみたところ %d は左寄せで0,1,2,・・・というようになり、 %2d は二桁分書く場所を確保しつつ、値が一桁なら十の位を 空白で埋め(見ため右寄せ)、%02d は二桁分書く場所を確保しつつ、 値が一桁なら十の位を0で埋めていました。 > snprintf だと、適切な値を第二引数に与えれば、いかに > 生成される文字列が長くても、その領域を越えて書き込む > ことはありません。要は、バッファオーバーラン対策です。 なるほど、わかりました。 プログラムは snprintf でうまくいきました。 |
|
68user-sanこんばんは、 HTTPクライアントのサンプルコードを少し変更してある特定のサイトの CGIに任意のデータを渡しリードしたHTMLを表示するCGIファイルを作り ました。リードしたHTMLをブラウザに出力する前にリンク先等を変更 して出力したいのですが良い方法がありましたらお知らせください。 例)リードしてきたHTMLのファイル等のリンク先が ./hogehoge/hoge/hoge1.jpgの場合ブラウザに出力する前に ./hoge_hoge/hoge1.jpgに変更してブラウザに出力する。 |
|
@konanさん 68userさんでなくて申し訳無いですが・・・ #しかも多分役に立たない内容です。スミマセン ただのテキストのやり取りなワケですから、 いったん読み込んだHTMLをブラウザに渡す前に 内容を書き変えてやれば良いだけですよね? そう言う話でなくて、その書き換えのやり方を聞いてらっしゃるのなら それは答えようの無い話だと思います。 それを考えるのがプログラマの仕事なワケですから。 |
|
>まさか IP データグラムを自前で作る、とかいう話じゃないですよね? IPデータグラムって要はパケットのことですよね? 自前で作ることになるのかな?よく分かりませんが 例えば、適当なゴミパケットを送りたい時はどうすればいいですか? そのゴミパケットの作り方を教えて頂きたいです。 別に中身のあるデータじゃなくていいんです。 |
|
@konan さん > ./hogehoge/hoge/hoge1.jpgの場合ブラウザに出力する前に > ./hoge_hoge/hoge1.jpgに変更してブラウザに出力する。 s|\./hogehoge/hoge/|\./hoge_hoge/|g とかそういうことですか? @hsj さん > 68userさんでなくて申し訳無いですが・・・ 言うまでもないですけど、どなたでもご自由に回答して いただいて結構でござんす。 @ケイさん 普通、パケットを自前で作ると言えば GET /index.html HTTP/1.0 というようなアプリ層のプロトコルに、TCP ヘッダを付けて TCP セグメントを作ったり、さらに IP ヘッダを付けて IP データグラムを作ったりすることを指すような気がします。 こういうレベルの処理は、普通 OS がやってくれるものです。 > 例えば、適当なゴミパケットを送りたい時はどうすればいいですか? こういうアプリケーション層のプロトコルは、クライアントと サーバが協調して動けばいいので、クライアントとサーバ 両方を作るならば、プログラマが勝手に決めればよいです。 send(SOCKET, 'hoge', 0, pack_sockaddr_in(1234,inet_aton('10.0.0.1'))); というふうに。 ところで UDP の解説って需要あるのかしら。Perl/Tk で IP Messenger http://www.asahi-net.or.jp/~VZ4H-SRUZ/ipmsg.html を作りかけたんだけど、途中で飽きちゃってそのまま… (実用レベルではありません)。UDP の解説を書こうとしたんですが、 あんまり読みたい人もいないかなと思って、未着手です。 ちなみにこの IP Messenger を作ろうとすると、UDP は理解できるわ、 ブロードキャストもバッチリだわで、とても勉強になります。時間の ある方、チャレンジしてみては。 |
|
昨夜68userさん宛てにメールで質問してしまい、失礼しました。 掲示板なるものがあるんですね。 さっそくですが、 もしどなたか知ってる方がいらっしゃったら教えてほしいのですが。 GETの場合 HTTPアクセスするときに http://www.foo.com/bar.cgi?data1=hoge&data2=fuga とすることで結果(HTMLソース等)を取得できますよね。 でも、 POSTの場合 このdata1=hoge&data2=fugaを見せないようにするために ストリームでサーバに送信しますよね。 でも、この送信部分を自分で作成した時にどのように 送信すれば良いのかが不明です。 言語はJavaです。 Javaだと、どのストリームに変換すれば良いのか、データにヘッダ情報 のようなものが必要なのかも不明ですし、実際の通信ではどのソケットを 開いてサーバ側と接続すれば良いのか全く分かりません。 他の言語でも良いのですが(可能であればJava)、 プログラム自身がPOSTでデータを送信して結果(HTMLソース等)を取得する ようなサンプルコードってないものでしょうか? |
|
Java のことなら、まずは java house にあたってみる のがいいでしょう。 http://java-house.etl.go.jp/ml/archive/j-h-b/015871.html#body で POST できることは確認しました。 # アプレットではなくアプリケーションから、ですが。 ここらへんに詳しくなるには http://java-house.etl.go.jp/ml/archive/j-h-b/015872.html#body で紹介されている tutorial を読むのがよさそうですね。 |
|
ありがとうございましたー。 これでおそらくブラウザの代わりにプロキシからjavaでリクエストを POSTできると思われます。 相手(webサーバ)がCGIでも何で書いていても、同じだと思っていい んですよね?httpで標準化されてるんでしょうから。 |
|
ありがとうございました! アドバイスのおかげで処理方法が浮かびました。 >ところで UDP の解説って需要あるのかしら。 あります! もし時間があるなら是非解説をやって頂きたいです! |
|
@osa さん > 相手(webサーバ)がCGIでも何で書いていても、同じだと思っていい > んですよね?httpで標準化されてるんでしょうから。 そういうことです。 # 1年ぶりに Java を使ったので、僕の知識はあやしいですが。 @ケイさん >> ところで UDP の解説って需要あるのかしら。 > あります! へい、暇を見付けて書いてみます。 多分「IP Messenger を作ってみよう」になると思いますけど。 # 他に UDP でおもろいネタってあるかなぁ。resolver を作っても # あんまりおもしろくなさそうだし、NFS なんて全くわからんし。 ただし、最近人生に疲れていて (笑) 書く気力がないので、 気長にお待ち下さいまし。 |
|
はじめまして。 Kshについて質問があります。 シェルスクリプトの中で設定した変数、例えば、x=300とかを 別のスクロリトで参照することはできないのでしょうか? export x=300 と、言うようにしてもだめでした。 もう少し具体的に書くと、script1の内容は x=300 print "設定した値は$x" script2の内容は print "設定した値は$x" と、言ったようにscript1で設定したxをscript2で参照したいのです。 ご回答、よろしくお願いします。 |
|
どうも、いつもお世話になっております。 今 Bourne SHELL のスクリプトを書いたり解析したりすることができる ようになりたいのですが、最適な本はないでしょうか。man shでは分 かりにくい部分を例で示しながら文法を解説した本をご存じでしたら 教えていただけませんか。ちょうど C SHELL でいうところの 「csh & tcsh Manual & Reference」(秀和システム) みたいな本です。書店を探したけどなかなか見つからなくて…。68user さんが Bourne SHELL について勉強したときにどんな本を読んだのでしょうか。 #bash については秀和システムの「bash Manual & Reference」がありますが… |
|
>skel.103Mさん これなんかどうですか? 良さそうですよ。 Bourne Shell 自習テキスト http://www.tsden.org/takamiti/shText/index.html |
|
@skel.103M さん 僕はこのまえ sh スクリプトを初めて書きましたが、 > Bourne Shell 自習テキスト > http://www.tsden.org/takamiti/shText/index.html と man で乗り切りました。 あと、UNIX USER 10月号 (最新号) に 20 ページ程度ですが、 シェルスクリプト講座が載ってます。結構勉強になると思います。 ただ、sh スクリプトの決定版、というような本は知らないです。 http://www.oreilly.co.jp/BOOK/bash2/contents.htm ってのがありますが、読んだことはないです。 # 結局 bash と sh は別物だし…。 @やすさん > シェルスクリプトの中で設定した変数、例えば、x=300とかを > 別のスクロリトで参照することはできないのでしょうか? export して環境変数にセットしておけば、子プロセスからも 参照できるはずです。それができないということは、script1 から script2 を呼んでいるのではなく、あるプロセスから script1 を呼び、script1 の終了後に script2 を呼んでませんか? そういう場合は、ファイル経由で情報を渡すのがいいと思います。 |
|
管理人様 はじめまして、黒揚羽というものです。 私は UNIX に興味のある者で、今度とある IRC チャンネルで、 『UNIX 雑談会』を毎週催すことになりました。 それで、この掲示板にはことに UNIX 等のオペレーティングシステムに 興味のある方が集っておられると思い、ここでその IRC での 雑談会の紹介をしたいのですが、よろしいでしょうか? もちろん、商業的・営利的なものではなく純粋に個人の趣味の範囲で 行っているようなものであることをあらかじめお断りしておきます。 |
|
> ここでその IRC での雑談会の紹介をしたいのですが、 > よろしいでしょうか? よいですよ〜。僕も暇があれば、参加させていただこう かなと思います。 ただ、「文字コードは Shift_JIS で」というのは 参加者にとって ある意味ハードルが高いのでは ないかなと思いました。 # そこに至った事情を知らないので、ただ思っただけです。 |
|
よいですよ〜。僕も暇があれば、参加させていただこう >かなと思います。 ご配慮有難うございます。それから、68user さんに参加して頂くと とても話がはずむと思っています。本当に、お暇な折にで結構ですから、 お話したいと思っておりました。 それでは、お言葉に甘えて案内を掲示させて頂きます。 以下の要領で、毎週土曜日深夜から日曜日にかけて UNIX に関する雑談会を催しています。UNIX を肴に くつろいだお話をするのが目的で、会話に参加して 頂ければ現在の使用 OS などの参加資格はありません。 win による参加も OK です。 詳しい要領とIRC クライアントの設定方法は http://members.tripod.co.jp/ageha/irc にあります。これらの説明は読んだ方が無難かと思います。 ○日時: 毎週土曜日 23:00 〜日曜 2:00 ○サーバ: irc.fef.net:6667 他 ○チャンネル: #tsu ○禁止事項 (1) perl およびセキュリティに関する話題 (2) ログとりのみの参加 (一般的な意味での away などは問題ありません。 また、のべつまくなし喋らなければならないというのでありません。) ○注意事項: #tsu は Shift JIS 限定です。 # Shift JIS は、mIRC のためらしいです。 # 個人的には iso2022-jp か euc が良いんですけど。 # とにかく、チャンネルの founder は別の方なので、 # その方の主義にあわせることになりました。 |
|
どうも、skel.103Mです。 Bourne SHELLに関するアドバイス、どうもありがとうございました。>68userさん・Yuukiさん さっそく、 Bourne Shell 自習テキスト http://www.tsden.org/takamiti/shText/index.html を見てみました。なかなかいいですね、このページ。ブックマークにも 登録しときましたし。このページを見ながら勉強していこうと思います。 > あと、UNIX USER 10月号 (最新号) に 20 ページ程度ですが、 > シェルスクリプト講座が載ってます。結構勉強になると思います。 私も買って少し読んでみました。いわゆるハンドブックとしてはちょっと 不適だと思いました。(←個人的な意見なので気にしないで下さい)ひと 通り文法を知った後で実践として使おうと考えています。 > ただ、sh スクリプトの決定版、というような本は知らないです。 > http://www.oreilly.co.jp/BOOK/bash2/contents.htm > ってのがありますが、読んだことはないです。 このWebページによると bash に関するもののようですね。 明日(っていうか2時間後)秋葉原へ行くので、そのときに見てみよう と思います。 > # 結局 bash と sh は別物だし…。 そうなんですよね。例の秀和システムの「bash Manual & Reference」でも 似たようなことを書いてました。もちろんスタイルは似ているんです けれど、やはり違いがあるらしいです。。。 それでは。 |
|
こんにちは。 68userさん、Ksh変数のご回答ありがとうございました。 しかし、私はまだ、初心者なので、ファイル経由で情報を渡すということがよく分かりません。 ^^^^^^^^^^^^^^^^^^^^^^ もう少し詳しく教えて頂けないでしょうか。 よろしくお願い致します。 |
|
こんばんは。 ここには初めててきました。 質問があるのですが、Cシェルで、 サーバー日付より2日前のファイルを削除するとかっていう ことはできるのでしょうか? 教えてください。 お願いします。 |
|
@ノヴァさん > 質問があるのですが、Cシェルで、 > サーバー日付より2日前のファイルを削除するとかっていう > ことはできるのでしょうか? 使っているシェルにかかわらず可能です。 findというコマンドを使えばいいです。「UNIXの部屋」からfindの概要 や使い方を見たあと、詳細を「man find」で調べればいいと思います。 ではでは。 |
|
@ノヴァさん > ファイル経由で情報を渡すということがよく分かりません その前に > script1 から script2 を呼んでいるのではなく、あるプロセスから > script1 を呼び、script1 の終了後に script2 を呼んでませんか? に対する回答はどうなっているのでしょうか? 引数で渡すとか、環境変数で渡すとか、ファイル経由で 渡すとか、パイプで渡すとか、やり方はいろいろありますが、 どういう呼び出し方をしていて、どれだけの量のどういう内容の データを script2 に渡したいかがわからないとなんとも言えません。 |
|
> @ノヴァさん じゃなくて、やすさんでした。 ところで、make world 中に 家の FreeBSD を ぐっちゃんぐっちゃんに壊してしまったので、もし週末 までに復旧できれば IRC に参加させていただきます。 # が、なかなかうまくいかず…。 |
|
教えていただきありがとうございました。 さっそく、色々やってみます。 |
|
はじめまして、もりやと申します 実は今、シェルスクリプト(でいいんですかね?DOSでいうBATファイルの ことです)でやろうとしていることがあるのですが、やり方が今ひとつ分 かりません。ファイルの複製を作るのですが、複製されるファイルの名前 には、別のテキストファイルのレコードの先頭の4バイトが付加され、そ のテキストファイルは何レコードあるか分かりません。レコードの数だけ 複製を作ります。awkなど使えばよさそうに思って本を読んだりいろいろ試 しましたが、うまくいきません。教えていただければ幸いです。 OSは、HP-UXでバージョンの見方がわからないのですが、ここ2、3年のも のではあると思います。 |
|
はじめまして。 MXレコードを調べたいと思っているんですが、モジュールが使える状況にありません。Net::DNSなどのモジュールを使わずにMXレコードを引く方法があればヒントだけでも教えていただけるとうれしいです。 よろしくお願いします。 |
|
Hmm... I have recovery FreeBSD. But canna server doesn't accept a connection. Something is wrong. sign.... @moriya I can't understand what you want to say. Please show examples of the file and the record. To know OS version, type `uname -a'. @Q > get MX record without Net::DNS There is a sample script to get MX with nslookup. http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/expn.cgi Another way, connect DNS server (port 53/udp), talk DNS protocol. # I hate multipost. You have to reply in 2ch, don't you? |
|
説明不足で申し訳ありませんでした。 org.datというファイルがあるとします あと、tencd.txtというテキストファイルがあり、その中身は 000420000101 002320001010 034320001020 とします この場合、 org.datをコピーしてorg004.dat、org0023.dat、org0343.dat という3つの複製ファイルを作成したいのです。 tencd.txtは何レコードあるかは不定です。 因みにHP-UXのバージョンはB.10.20でした。 よろしくお願いします |
|
What do you mean? hahaha... |
|
sh なら exec < tencd.txt while read line do set -- $line num=`echo $line | sed 's/^\(....\).*/\1/'` cp org.dat org$num.dat done csh なら foreach line (`cat tencd.txt`) set num=`echo $line | cut -c-4` cp org.dat org$num.dat end てな感じでしょうか。 # シェルスクリプトと言っても、シェルにはいろいろ種類が # あるので、sh か csh かそれ以外かを明記してください。 先頭4バイト取得には、sed でも cut でも awk でも お好きな方法をどうぞ。 もちろん全体を awk スクリプトで書くこともできます。 でもまぁ、perl を覚えた方がよいとは思いますね。 |
|
すいません、Perl一般の話ですいませんが、 サブルーチン リファレンスを使うとコールバック関数が作れる、 という場合の、コールバック関数ってどんなもんなんでしょうか? どんなときにどう使うと便利なんでしょうか? リファレンスの勉強をしていて、そこだけピンと来る例題のある章が なくて困っています。 御無理のない範囲で教えてくださいー。 |
|
Perl/Tk で何かアクションがあったときの動作を記述する関数 sub pushed { print "ボタンが押されました\n"; } $top->Button( -text => 'Push me', -command => \&pushed, )->pack(-side => 'left'); とか、シグナルハンドラ、たとえば SIGALRM による タイムアウトが起こったときの動作を記述する関数 sub signal_handler { print "1秒待ちましたが、入力がありませんでした\n"; alarm(1); } $SIG{ALRM}=\&signal_handler; alarm(1); $buf = <STDIN>; などをコールバック関数といいます。 後者は、より実践的に書けば http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=889 てな感じです。 なお、関数へのリファレンスを使わず、$SIG{ALRM}=sub {...} などと 無名関数を使ってコールバックを設定することもできます。 |
|
ありがとうございます。このふたつの例はわかりました。 他に、ユーザープログラムが呼び出すサブルーチンを 「コールバック」と呼ぶことはないんでしょうか。 「コールバック」という言葉じたいの定義が本によってあやふやな気がして、、。 たびたび申し訳ありません、、。 |
|
> 「コールバック」という言葉じたいの > 定義が本によってあやふやな気がして、、。 その本の記述例を見せていただけますか? |
|
すいません、、。 −−−−−−−−−−−−−−− 「Perl 5 パワフルテクニック大全集」(インプレス) 、、コード参照は、おもに、コールバック関数(後で呼び出してもらう関数)を指定するときに使う。、、 #! /usr/local/bin/perl # コールバック関数の定義 sub callback { my $mesg = shift; print "$mesg\n"; } # 関数への参照を作成 my $coderef = \&callback; # 異なるパラメータで関数を呼び出す &$coderef("Hi Mike!"); &$coderef("How are you?"); −−−−−−−−−−−−−−−−−−−− 「Perl 5 マスターブック」(翔泳社) サブルーチン関数の一般的な用途としてはコールバック関数があります。コールバック関数では、サブルーチンの配列をテーブル内に作成し、Perl プログラムから1つまたは複数呼び出します。、、 sub central_greeting { print "Hello!"; } sub eastern_greeting { print "Yo!"; } sub western_greeting { print "Howdy!"; } %greetings = ( "Central" => central_greeting, "Eastern" => eastern_greeting, "Western" => western_greeting, ) (中略、どこの土地のひとかを $where に入れて) $hash_ref = \%greetings; $sub_ref = $hash_ref=>($where); &$sub_ref(); −−−−−−−−−−−−−−−−−−−− 「実用Perlプログラミング」(オライリー) コールバック関数とは、リファレンスとしてあちこちに渡され必要に応じて呼び出されるようなサブルーチンです。そうしたものが構文的に用意されているわけではなく、使い方としての名称に過ぎません。呼び出す(リファレンスを使用する)側のコードでは、そのサブルーチンが何をするものかを意識する必要はありません。本節では、ディスパッチテーブル、シグナルハンドラ、描画関数の3つの例を通して、コールバック関数の使い方を説明します。 −−−−−−−−−−−−−−−−−−−− うーん、用例にしても呼び出しのレベルがいたずらに増えてるだけで、いまいち便利になった実感が。 |
|
こんにちは。 @ふくしさん ぼくの少ない経験でしか言えませんが、 今までぼくは「コールバック関数」(もしくはハンドラ)の名称は、 「何らかのアクションを要求した際に呼び出される関数」 に対して使ってきました。 #ボタン押下のイベントに対して呼び出されるモノであったり #シグナルイベントに対して呼び出されるモノであったり ふくしさんが例に出されている、それぞれの本では、 >「実用Perlプログラミング」(オライリー) の説明がほぼ的確だと思います。 >「Perl 5 パワフルテクニック大全集」(インプレス) や >「Perl 5 マスターブック」(翔泳社) の説明は、これらの部分だけを見ると コールバック関数と呼ぶのはおかしいような気はしますね。 どちらかと言うと、コールバック関数として使う際に便利に呼び出せるように 準備をしているところに見えます。 あくまでもそれぞれ、コード参照とサブルーチンの説明なのではないでしょうか。 |
|
全くもって同感です<hsj さん > 「何らかのアクションを要求した際に呼び出される関数」 あと、このアクションは「非同期に発生する」というのも 重要な要素なのかな? (違うかも) |
|
なるほどー(知恵熱) ひとつわからないのが、Tkやシグナルハンドラのように、 そのアクションをキャッチする機構がシステムによって用意されているもの (BASICのON命令みたいなもんですね) だけをコールバックと呼ぶんでしょうか? それとも、呼び出し元も自前のPerlコードで書いた例がなにかあるでしょうか? あと非同期ってどういう意味なんでしょう。 あとなんでコールバック(電話を掛けなおすこと)っていうんでしょね。 すいませんずうずうしくお伺いして、、。 |
|
ん〜、こういうのは自分の中で納得できるかどうかなので、 うまく説明するのは僕には難しいなぁ。 > あと非同期ってどういう意味なんでしょう。 プログラム側から「いつそのアクションが起きるか」を 知ることができないということです。たとえば、マウスの クリックがいつ発生するだとか、シグナルがいつ飛んで くるかを、プログラムの側から予想することはできません。 > Tkやシグナルハンドラのように、そのアクションをキャッチする機構が > システムによって用意されているものだけをコールバックと呼ぶんで > しょうか? そうだと思います。というより、システム (OS) の手助けを 借りなければ、非同期なアクションに応答することはできません。 signal は非同期でやってきますので、シグナルハンドラという 機構が OS にあります。 ボタンの押下は、結局は X Window System のイベントとして socket 経由でデータが送られてきます。これは select で データが送られてきているかどうかを調べます (たぶん)。 結局どちらも OS の手助けを借りている (=システムコール を使う) わけです。 |
|
にゃるほどー、わかりました。 非同期というのがユーザープログラムでわからない、 システムがキャッチする、 それを処理するのがコールバック、というのであれば納得できます。 あとはシグナルハンドラやTkのプログラムを勉強するなかで 勉強しようと思います。 どうもありがとうございます!>68userさん、hsjさん |
|
FreeBSDでネットワークプログラミング(カーネル)を しているのですが、たくさんの構造体が でてきてすこし混乱しています。 わかりそうでわからないので 構造体を日本語で具体的に説明しているHP、本などを 知っている方がいらっしゃいましたら どうか教えてください。HPの方がありがたいです。 乱文ですが、よろしくお願いします。 |
|
はじめまして、UNIX見習いです。 今まではke◯t氏の有名な掲示板や、ゆいチャ◯トのソース等を参考に Perlの勉強をしていましたが、68userさんのスクリプトを見て 目からウロコが落ちた感じでした。 変数のネーミングセンスも良く、可読性も高いスクリプトを初めて見て、 今まで参考にしていた人のスクリプトって何だったんだろうと思っちゃいました。 あと、Perlでネットワークプログラミングが出来るとは知らなかったし(爆) さっそくechoサーバのサンプルスクリプトを使わせてもらって勉強していますが、 IO::Socketを使ったechoサーバの場合、外部からのアクセスが出来なくて悩んでいます。 現在の状況は、 echo-server.pl・echo-server-fork.pl・echo-server-select.pl は外部からのアクセスでも動きますが、 IO::Socketを使ったechoサーバのサンプルスクリプトは全部 外部からのアクセスには反応しません。localhostからだと、ちゃんと機能するのですが…。 サーバの環境は、Perl 5.005_03 on Linux2.2.14で、 echoサーバのサンプルスクリプトは全てデフォルトのまま設置です。 IO::Socketを使った場合、なぜ外部からのアクセスが出来ないのか 原因が分からずに悩んでいます。 あと、標準モジュールの使い方の学習で効果的なリソースって何でしょうか? 私の手持ちの書籍では、標準モジュールの利用に関して載っていないので 何かオススメの書籍、もしくはネット上のリソースで参考になるところがあれば 紹介していただきたいと思います。なるべく日本語のリソースで(←贅沢かな?) 長々と書いちゃってすみませんが、ご指導の程、よろしくお願いいたします。 |
|
こんどは canna が かんじに へんかんしてくれなくなりました。やれやれ、 こどもみたいな ぶんしょうだ。 > IO::Socketを使ったechoサーバのサンプルスクリプトは全部 > 外部からのアクセスには反応しません。 おお、ほんとだ。というわけで しらべてみたところ、 LocalAddr => 'localhost', がわるいです。 ふつう、マシンには じぶんじしんあてへのインタフェイスがあります。 これをループバックとよび、127.0.0.1 という IP アドレスがふられて います (127.0.0.1 がループバックという きまりはありません。 (IPv4 では) ただのかんれいです)。 そして、インターネットにつながっているならば、さらにインターネットへ つながるインタフェイスがあります。これには 210.249.139.22 のような グローバル IP アドレスがふられています。 つまり、つうじょう、マシンには 2つのインタフェイス/IP アドレスが あるわけです。 たいていのサーバプログラムは2つのインタフェイスを くべつしません。 しかし、くべつできるような しくみは いちおうあります。それが http://X68000.startshop.co.jp/~68user/net/func.html#bind のさいごにかいてある、bind でどちらの IP あどれすをつかうかを えらべる、ということです。 で、LocalAddr => 'localhost' は、この bind のひきすうに IP アドレス (localhost にたいおうする 127.0.0.1) を あたえたのと おなじいみです。 これは LocalAddr をしていするときと しないときで、それぞれ netstat -an をじっこうすると わかりやすいでしょう。 tcp 0 0 127.0.0.1.5000 *.* LISTEN (LocalAddr してい) tcp 0 0 *.5000 *.* LISTEN (LocalAddr していない) と、LocalAddr をつけると、127.0.0.1:5000 しか みていないのが わかります。だからローカルホストからしか せつぞくできなかったわけです。 > 今まではke◯t氏の有名な掲示板や、ゆいチャ◯トの > ソース等を参考にPerlの勉強をしていましたが、 ゆいチャットはしりませんが、kent とか rescue などと くらべられるのは しんがいです :-) まぁ、こっちもそんなにレベルが たかいわけではないので (こんかいの ようなミスもあるし)、これいじょうは えらいひとからの つっこみが こわいので いいません。 ちなみに perl って、しょしんしゃでも なんとか うごかせるから でしょうか、うそだらけのページがおおいですね。ぼくがぜんめんてきに しんらいしているサイトは http://www.context.co.jp/perlnews/ http://www.din.or.jp/~ohzaki/perl.htm の2つだけです。 > あと、標準モジュールの使い方の学習で効果的な > リソースって何でしょうか? perl モジュールガイドとかいうほんが しゅっぱんされていません でしたっけ? しょうさいは わかりませんが。 ただ、もくてきのモジュールがわかっているならば、perldoc を ながしよみして、けっこうなんとかなるかとおもいます。 よみにくいぶんしょうで しつれいしました。LocalAddr の ぶぶんは、じかいこうしんじに さくじょいたします。 @yuji さん カーネルの TCP/IP まわりのこうぞうたいのことですよね? ぼくもしりたいです。だれかおしえて。 |
|
そうなんですよ。なかなかネットワークの構造体について わかりやすい説明って詳しいないんですよね。 特にFreeBSDの場合は・・・ 誰か知っていたら教えてください。 |
|
残念ながら、僕は知らないです。僕の持っている UNIX カーネル 関連の書籍にも、TCP/IP は載ってませんでした。 BSD Magazine No.4 に、IP の話が少し載ってますが、 構造体の説明はありません。 というわけで、解説書いて(笑)>yuji さん |
|
そうですね。つくってみますか! っていってもなかなか・・・ 理解した分だけ作っていくのは いいかもしれません。あとあと 役に立ちますし。 ええ、BSD Magazine No.4 に書いてありましたね。 どのような流れでデータが動いているのかは 理解するのに役に立ったと思います。 |
|
LocalAddr => 'localhost'を削除したら、外部からのアクセスに反応することを こちらでも確認できました。 #しかし普段からLinux使ってるのにnetstatしなかった私って…ごめんなさい(汗) それから、Perldocというものが自分のマシンに入っていることも実は知りませんでした。 昨日からネット上で検索かけまくって、やっとPerldocの存在を知りました。 さっそくperldoc -m IO::Socketして読んでみます。 68userさん、早急な解答ありがとうございました。 |
|
はじめてここに書きこみさせていたただきます よろしくお願いします。 今メーリングリストを開設しようと思っています サーバーはLinuxで aliasesファイルに転送先のメンバーリストファイルを指定したのですが 開かず、悩んでいます ----- The following addresses had permanent fatal errors ----- <aki@my-member.com> :include: /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list (expanded from: <aki@my-member.com> ) ----- Transcript of session follows ----- 550 :include: /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list... Cannot open /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list: Group writable directory 554 <aki@my-member.com> ... aliasing/forwarding loop broken -------------------------------------------------------------------------------- のようなメッセージが帰ってきます。 ファイルのパーミッションは644です すでに1週間と一日・・・私くじけそうです・・・ もしわからる方いらっしゃいましたらお願いします。 |
|
> Group writable directory グループが書き込めるディレクトリ、だから危険なので 実行するのはや〜めた、と言ってます。 |
|
68userさんありがとうございます パーミッションをいろいろ試したのですが・・・開きません ファイルやディレクトリのパーミッションを もしよろしければ、どうすればファイルを開いてくれるのか教えてください よろしくお願いします・・・ |
|
すみません、私のミスでした・・・ ディレクトリのひとつのパーミッションがおかしかっただけです う〜んこんなこと気づかないなんて・・・ ありがとうございました〜 |
|
質問させてください。 perlで、ログをファイルではなくDBMで管理するBBSを作っています。 ところが、プロセス間でDBMの排他制御を行う方法が分かりません。 もし知っていたらご教授ください。 おねがいします。 |
|
申し訳ございません もう一度同じような質問させてください メーリングリストを作っていまして パイプを通してプログラムに渡したのですが ----- Transcript of session follows ----- sh: mysite-filter not available for sendmail programs 554 | "/usr/local/lib/mailing-list/mysite-filter"... Service unavailable のようなメッセージがきまして メールがプログラムに渡っていません・・・ この場合、どのようなミスが考えられるのでしょう? 多分初歩的なミスだと思いますが よろしくお願いします・・・ |
|
はじめまして。 perlでradiusの認証クライアントを作成したいのですが、 perlのモジュールでAuthin::radiusというものがあって、 それを使用して作成したのですが、二重ログインしようとしてしまい、 二重ログインは不可の設定にしていますので、ログインできません。 と言う経緯で、1から作成しようと思います。 Sokcetのモジュールで、ポートを指定して、 ソケットを生成するのは一緒だと思うのですが、 radiusサーバに送るリクエストをどのように記述していいのかがわかりません。 radius サーバはDTC Radius Ver 2.03です。 どなたかご存じの方は教えていただけないでしょうか。 よろしくお願い致します。 |
|
ミワと申します。 シグナルについて質問させてください。 レンタルサーバーなどでは、スクリプトが一定時間動き続けていると、 TERMシグナル?が飛んでくるよ と聞いたことがあるんですが (クライアントがブラウザを閉じたり、中止をしたときも) 私が使っているサーバーで実験してみたんですが 全く飛んできませんでした。 無限ループとかになってしまった場合どうするのか など心配になってきたんですが(telnetでkillすればいいんですが)、 これはサーバー側の設定がなにかあるんでしょうか? #環境は Cobalt Linux & Apache です。 お分かりになる方、ご教授お願いします。 #実験で使ったPerlスクリプトはここにあります。 http://www.offside.ne.jp/~icon_store/sig/signal.txt |
|
TCP/IPの構造体についてなら http://www.kurasc.kyoto-u.ac.jp/plasma-group/data/misc/doc/koala にて概要はつかめるのではないでしょうか。 ただ,話がUNIXよりなのは fj.lecture だからかしらん。 |
|
@aki さん > sh: mysite-filter not available for sendmail programs /etc/sendmail.cf に P=/foo/bar/smrsh という部分がある なら、P=/bin/sh として、sendmail を再起動してください。 それでもダメならわかりません。 もしうまくいったなら、see smrsh(8)。smrsh を使い続けるならば、 /usr/libexec/sm.bin/ 以下にコマンドを置くべきでしょう。 @ノリスケさん > ところが、プロセス間でDBMの排他制御を行う方法が分かりません。 おそらく DBM には排他の仕組みはないと思います。flock/symlink/mkdir などを使って、自前でロックするしかないと思います。 @tam さん > perlでradiusの認証クライアントを作成したいのですが、 これはさっぱりわかりません。radius 自体あまり理解していないので…。 @の さん > http://www.kurasc.kyoto-u.ac.jp/plasma-group/data/misc/doc/ko じゃなくて、カーネルソースを読む際に参考になるドキュメントは ないだろうか、という意味じゃないでしょうか。 @ミワさん > シグナルについて質問させてください これは後ほど。というか、忘れちゃったので実験しないと。 # 時間がないなぁ… なお、apache では httpd.conf で、Timeout 300 などと 設定されています。 |
|
ご教授ありがとうございます。 >なお、apache では httpd.conf で、Timeout 300 などと >設定されています。 サーバー管理者に”TELL”シグナルを送って確認したところ デフォルトのまま触ってないので、Timeout 300 になってるっス という返答が帰ってきました。 なぜでしょう?? 何かほかの部分がマズいのでしょうか? よろしければ、ご教授お願いします。 |
|
基本的に、ブラウザを中断しても SIGTERM は飛んできません。 が、子プロセスがいる場合などに飛んでくる場合もあります。 前に調べたときはたしかそういう結論になったような覚えがあります。 # つまりよくわからなかったということ。 |
|
68userさんありがとうございました /usr/adm/sm.bin/ に置いたらできるようになりました! また何かあったらよろしくお願いします。 |
|
@tamさん RADIUSはRFCで規定されていたはずなので 認証パケットのフォーマットやプロトコルの詳細はそれを見ればわかると思います。 #ぼくはつくったことはありません アクセスサーバとの連携が必要だと思うので、ちょっとばかりめんどくさい事に なりそうですが・・・。 @ミワさん ぼくも詳しくないのですがアレですが、 Apache1.3.12のソースをナナメ読みした限りでは、 タイムアウト後にSIGTERMとSIGKILLが飛んでくるように なっているようにみえました。 で、FreeBSD4.0-RELEASE + Apache_1.3.12で実験してみたところ、 その通りに動作しているようにみえます。 #ちなみに、SIGKILLはトラップできないのが正しい動作ですね もしかしてですが、ログをつくるディレクトリの 書き込み権限が落ちてるとかはないですか? |
|
@68user さん 68user さん、hsj さん、ご教授ありがとうございます。 >基本的に、ブラウザを中断しても SIGTERM は飛んできません。 >が、子プロセスがいる場合などに飛んでくる場合もあります。 >前に調べたときはたしかそういう結論になったような覚えがあります。 ># つまりよくわからなかったということ。 なるほど。そうなんですか。 前に見た情報は間違っていた可能性がたかそうですね。 >もしかしてですが、ログをつくるディレクトリの >書き込み権限が落ちてるとかはないですか? それはlogディレクトリのことでしょうか? 私が使っているサーバーは、自分のアカウントで入ると 最初の階層にはwebというディレクトリしかないんです。 (web内はweb領域になってます) なので、エラーログなど見たことがないんですよ。 これっておかしいですよね。 logディレクトリを作れば、その中にエラーログやアクセスログが書き込まれて 今回の問題も解決するものなのでしょうか? (.htaccessなどで設定する?) |
|
@ミワさん >それはlogディレクトリのことでしょうか? いえ、そうではなくてsignal.logが書き込まれるディレクトリです。 web(nobody?)権限での書き込みができなければ動きませんよね。 ・・・が、よく考えると >全く飛んできませんでした。 とおっしゃってますし、とくにエラーになるとも書かれてませんね・・・。 と言うわけで、コレはハズしてそうです。 かき混ぜてスミマセン。 >これっておかしいですよね。 それは、ftpdがchrootされてるのでしょう。 セキュリティの確保が目的だと思います。 #CGIが使えるんだから、あまり意味が無いと言えば無いのですが(笑 |
|
@hsj さん >>全く飛んできませんでした。 >とおっしゃってますし、とくにエラーになるとも書かれてませんね・・・。 エラーにはなってないと思うんですが、ちょっと自信がないです。 >それは、ftpdがchrootされてるのでしょう。 >セキュリティの確保が目的だと思います。 なるほど、セキュリティの為に意図的に設定してあるんですね。 もしかして KeepAlive は関係しているのでしょうか? http://japache.infoscience.co.jp/japanese_1_3/manual/keepalive.html KeepAliveがoffに設定してあると、KeepAliveTimeoutが適応されて Timeoutに移行する という解釈でいいのでしょうか? #はずしてそうですが... |
|
@aki さん > /usr/adm/sm.bin/ に置いたらできるようになりました! で終わってしまうと、スキルアップにつながらないので、 僕がどうやって調べたかってのを書いておきます。 パーミッションを落としたりして適当にいろいろ試してみるが、 FreeBSD 4.0-RELEASE では同じエラーを出せない。 というわけで、sendmail のソースを探す % locate /sendmail/ どうやら /usr/src/contrib/sendmail らしい。 % cd /usr/src/contrib/sendmail ソースから available for sendmail という文章を探す % grep "available for sendmail" */* smrsh/smrsh.c: fprintf(stderr, "%s: %s not available for sendmail programs\n", smrsh って何? コマンドのようだが… % man smrsh 「smrsh - sendmail用に制限されたシェル」だそうな。特定の ディレクトリに置いてあるプログラムしか、~/.forward や /etc/aliases から呼び出せないらしい。 sendmail.cf から sh か smrsh を探す % egrep '/bin/(sh|smrsh)' /etc/mail/sendmail.cf Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, なるほど。FreeBSD のデフォルトでは /bin/sh を使っているので 同じエラーは出ないわけね。 あと、最初に質問した掲示板に、解決したことを書き込んでおく べきでしょう。 |
|
はじめまして。 よろしくお願いします。 wwwboard.cgiを拝見して、これは...! と思っていただきました。 些末なことなのですが、自分の間借のWebスペースにテスト設置してみて 気付いたことを報告します。 コメントアウトしてスクリプトのご説明をされている部分で、 ディレクトリ配置のご説明でlockとされているディレクトリ名が my変数の定義ではlockdirとなっていました。ありがたいことに 細かく動作チェックできるのですぐに修正できましたが、為念。 --- wwwboard.cgi設置に際して、自分の方に別の問題があります。 こちらでお聞きしていいものかどうか判断せずに書き込みしていますので、 不適当であれば無視してください。 問題 スクリプトの実行権限の種別が、所有者権限(個人のアカウント名)、 nobody権限のいずれでもなくwwwの権限となる。 書き込みはできるが、生成されるログのOwnerがwwwとなり、 ぼくのアカウントではログの削除ができなくなる (^^; ぼくの方の環境 (ISPにWebページ用の領域を間借している形態です) ・WebサーバのOS : RS/6000 ・CGI設置場所の制限 : 個人のhomeディレクトリ以下であればどこでも可 ・wwwboard.cgiで使用するコマンドのうちnamazuとmd5が使用不可 動作チェックの出力の結果 http://www.ad.il24.net/~noiz/bbs/wwwboard.cgi?test |
|
フォローありがとうございます。 radiusのこともまだ知ったばかりですので、 知らないことがいっぱいです、もっと調べなければ... |
|
@noizさん はじめまして。 私も同じ掲示板を使っています。 削除に関しては、管理モードなどの追加(自作)をするのが 一番かも妥当なのかも知れません。 掲示板のログファイルの形式を見ていただくと、 一括方式にしろ分割方式にしろ、1件ごとの書き込みは わかりやすい形式で保存されていると思いますので、 単純なサブルーチンでもって管理可能なのではないかと思います。 # 本当はどうするのがいいですかね>68user |
|
ああ、僕を含めて 3人目のユーザを確認。ちゃんとサポートなんか してみたりして。 > スクリプトの実行権限の種別が、所有者権限(個人のアカウント名)、 > nobody権限のいずれでもなくwwwの権限となる。 www は nobody と同じようなものだと思ってください。そのサイト 全てのユーザの CGI が www 権限で動きますので、状況は nobody と 変わりません。 > 書き込みはできるが、生成されるログのOwnerがwwwとなり、 > ぼくのアカウントではログの削除ができなくなる (^^; ファイルの削除ができるかどうかは、ファイルのオーナーとは 関係ありません。そのファイルの置いてあるディレクトリに Write パーミッションがあるかどうかです。 現状では umask 002 としていますので、 separate_log/000/ (ディレクトリ) separate_log/000/00001 (ファイル) のパーミッションは、それぞれ 775,664 になるはずです。 で、OS が BSD 系ならば削除はできるはずです。なぜなら、 separate_log/ は owner:group が 68user:realuser で、パーミッションが 757 という状況で、ユーザ www が separate_log/000/ (ディレクトリ) separate_log/000/00001 (ファイル) を作ろうとすると、 separate_log/000/ は owner:group=www:realuser で、パーミッションが 775 separate_log/000/00001 は owner:group=www:realuser で、パーミッションが 664 となるはずです。親ディレクトリのグループを引き継いでいる ところがミソですね。 ところが、SysV 系では、作成したファイル・ディレクトリの グループは、ファイル・ディレクトリ作成者の実効 GID となるので、 仮に CGI の実行が uid:gid=www:www で行われるとしたら separate_log/000/ は owner:group=www:www で、パーミッションが 775 separate_log/000/00001 は owner:group=www:www で、パーミッションが 775 となり、separate_log/000/00001 は、CGI 経由でないと 消せなくなります。 # ここらへんの動作を決める要素は、他にも sgid bit があるけど、略。 # なお、Linux だと mount 時のオプションでどちらの挙動をするかを # 決められます。 というわけで、まずは削除ができるかどうか試してみてください。 RS/6000 の OS が BSD 系ならば消せるでしょう。 # でも多分 AIX だろうから、SysV だよなぁ…。しかし、RS/6000 を # 使っている ISPか。金持ちだ (いくらか知らんけど)。 > 削除に関しては、管理モードなどの追加(自作)をするのが > 一番かも妥当なのかも知れません。 へい、作りまっせ〜。何か要望があれば今のうちに言ってください。 数日経ってやる気が失せる前に (笑) > my変数の定義ではlockdirとなっていました こちらも直します。 |
|
68userさんありがとうございました 大変勉強になりました! おかげさまでだんだんコツがつかめてきました〜 またひとつ、同じ流れで質問させてください メールをプログラムに落とし、perlで処理をして転送と言う簡易な処理はできるようになったのですが、 ファイルのオープン処理やファイル作成などができません デバックではうまく出来ているのですが・・・?? よろしければまた、お願いします |
|
hasさん、68userさん、ありがとうございます。 ははあ、とりあえず www 権限は nobody 権限と考えていいんですね。 68user さんのご指摘通り、生成された分割ログのパーミッションは、 ディレクトリ=775、ファイル=644、となっています。で、結論から 言って削除できませんでした (泣笑)。Web サーバは FTP ポート しか開放されていないので、Mac/Win の FTP クライアントで ログファイルの削除を試してみましたが、Permission Denied で はねられました。 >> 削除に関しては、管理モードなどの追加(自作)をするのが >> 一番かも妥当なのかも知れません。 > へい、作りまっせ〜。何か要望があれば今のうちに言ってください。 > 数日経ってやる気が失せる前に (笑) 厚かましいのですが、ぜひぜひお願いします。ぼくはプログラム全般 ぜんぜん分からないので、ログまわりの改造をしていただけると使うのに 何のハードルもなくなってありがたいです。 また質問があるのですが、検索で使用する namazu は Perl 版で良いのでしょうか? |
|
煩瑣になってすいません。ログファイルのパーミッションは以下のとおりです。 ×644 ○664 |
|
> へい、作りまっせ〜。何か要望があれば今のうちに言ってください。 > 数日経ってやる気が失せる前に (笑) んじゃあ、キャッシュのほう、情報を表示のに加えて、 削除とかもできるようにしといてもらえますか? # ここのキャッシュ、合計100MBってちゃんと消さないと:-p うちの方は、携帯から見やすいようにしたり、カレンダーなどと 組み合わせてみたりといろいろいじってしまい、 追加された機能を自分のに反映するのに苦労しそうです…。 |
|
せっせと作っております。機能設計書も詳細設計書も、 テスト仕様書もないプログラミングはなんと楽しいことか…。 @has > んじゃあ、キャッシュのほう、情報を表示のに加えて、 > 削除とかもできるようにしといてもらえますか? あい、了解です。あと、ソース送ってちょーだいな。 採り入れられる機能は採り入れます。 @noiz さん > 検索で使用する namazu は Perl 版で良いのでしょうか? namazu (の一部) は C言語で書かれているため、コンパイルが 必要です。ログインできないなら、あきらめた方がよいでしょう。 # プロバイダのマシンにコンパイラがあるかどうかわからないし、 # もしあったとしても namazu 環境を構築した経験がない # なら、とても苦労するでしょう。 簡易検索機能でも付けるかなぁ…。 @aki さん > メールをプログラムに落とし、perlで処理をして転送と言う > 簡易な処理はできるようになったのですが、 メーリングリストサーバを自作しているんですか? > ファイルのオープン処理やファイル作成などができません > デバックではうまく出来ているのですが・・・?? 実行権限が違うとか、環境変数が足りないとか、原因はいろいろ 考えられますので、これだけの情報ではわかりません。 /tmp あたりに適当にファイルを作ってみて、ファイルの オーナーを確認したり、環境変数を全部表示させたりすれば わかるかもしれません。 |
|
68userさん ありがとうございます。結局 CGI の改造をお願いすることに なってしまいましたが、嬉しいです。 はい、namazu で検索はあきらめます :-) でも検索機能がなくてもぼくにはもったいないくらいです。 |
|
いつもお世話になっています。 私の質問掲示板に.htaccessのdenyについての質問がきたのですが..,。 68userさん、ちょっと見てもらえますか。よろしくお願い致します。 http://www.parkcity.ne.jp/~chaichan/qanda/qa246.htm |
|
どうも、ご無沙汰しております、yujiです。^^ 現在、ソケットファイルを作成したいのですが、 その方法がわからず、困っております。 UNIXドメインソケットファイルの使い方はいろいろなサイトに記述されて いるのですが、根本となるUNIXドメインソケットファイルの作成の 仕方について触れているサイトを見つけることができませんでした。^^; もしなにかご存知でしたら、どうぞよろしくお願いします。 それでは、また。^^ |
|
どうも、yujiです。^^ 下の記事の訂正なのですが、 簡単にUNIXドメインソケットファイルを 作成するコマンドはないのかなと思いまして。 すいませんが、よろしくお願いします。 |
|
@ちゃいぱさん > 私の質問掲示板に.htaccessのdenyについての質問がきたのですが..,。 > 68userさん、ちょっと見てもらえますか。 えっと、こういう形での回答依頼はご勘弁を。答えたければ 答えるし、興味がなければ/知らなければ答えない、ということで。 今回の件に関しては、既にどなたかが書いておられますが deny from .XXXXX.ocn.ne.jp というふうに先頭に . を付けるか、ホスト名が逆引きされて いないならIP アドレスでの制限をする、くらいしか思い 付きませんでしたが、 deny from dion.ne.jp がうまくいっているなら外れっぽいですね。後は「どうやって うまくいかないと確認したのか。その確認方法が間違っている のではないか」くらいでしょうか。 @yuji さん > 簡単にUNIXドメインソケットファイルを作成するコマンドは > ないのかなと思いまして。 多分ないと思います。FIFO (名前付きパイプ) とは違って、ソケット ファイルはサーバ側のプロセスが必ず存在していなければいけない ので (必ずソケットに bind されていないといけない)、仮に 「作成するコマンド」があったとしても、その「ソケットファイルを 作成したプロセス」が終了した瞬間にソケットファイルは無効となります。 # という説明でいいのかしら…。FIFO は mkfifo や mknod コマンドで # 作れます。念のため。 |
|
いつもお世話になっています。 > こういう形での回答依頼はご勘弁を。 すみません、ついあまえちゃって、68userさんに振ってしまう私です...。 切り札使いすぎました。以後、気を付けます。 > その確認方法が間違っているのではないか 質問者に尋ねて見ます。 いつもながら、アドバイスありがとうございます。 違う意味で、今後もよろしくお願い致します。 |
|
http://virtys.virtualave.net/cgi-bin/so.cgi こーゆー、SNMPに外部からアクセスできるかどうかを調べるには、 どしたらいいですか? Perlでやりたいんですが。。 UNIXのコマンドとかあるのかな? |
|
掲示板ですが、こんな感じでどうでしょうか。 http://X68000.startshop.co.jp/~68user/tmp/wwwboard.cgi 「管理者モード」というのを追加しました。パスワードは 「abc」です。管理者モードからは、記事の削除、キャッシュの削除、 各種カスタマイズができます。 テスト用なので、好きにいじっていただいて構いません。 has からは > 消したいキャッシュをマークしてから[削除]とかのボタンを > 押すと消せる、というような感じがいいです。 という要望を頂いておりますが、使いやすいインタフェースが 思い付かず、未実装です。よさげな案があれば提案してもらえますか? 動作チェック・キャッシュ情報は、web 上からの設定変更で 一般に公開しないモードにできるようにしました。 それと、管理者用のパスワードですが、CGI 経由で設定 できるようにすると、CGI が nobody/www 権限で動く場合、 どうやってもセキュリティホールが出きてしまうので、 面倒ですが直接スクリプトを手で書き換えるようにしています。 あと、ちょっと手を広げすぎて、バグがたくさん残ってますので、 現在のバージョンは未完成品です。 @yamama さん > SNMPに外部からアクセスできるかどうかを調べる 残念ながら SNMP は全くわからないのでパスです。 |
|
掲示板、さっそくテスト書き込み・削除をしてみました。 管理モードで一気に堕落しそうです :-P 自分のところでもテストで設置して試してみます。 |
|
@yamamaさん おそらく対象サーバのSNMPのポートにアクセスして、 publicで情報が引っぱれるかどうかチェックしているだけでしょう。 要はSNMPクライアントの簡易版を実装しているんだと思います。 多分コマンド一発でお手軽に、みたいなのは無いと思いますが ほぼ決め打ちで行けると思うのでそんなに面倒でもないと思います。 もちろんperlでも可能ですが、最低SNMPの認証部分のプロトコルを 解っていなければいけないでしょうね。 |
|
@68user > という要望を頂いておりますが、使いやすいインタフェースが > 思い付かず、未実装です。よさげな案があれば提案してもらえますか? たとえば"checkbox"を使って、 <INPUT NAME="check" TYPE="checkbox" VALUE="1">キャッシュ1<BR> <INPUT NAME="check" TYPE="checkbox" VALUE="2">キャッシュ2<BR> 連想配列/パーサの都合で困難そうであらば、 <INPUT NAME="check1" TYPE="checkbox" VALUE="x">キャッシュ1<BR> <INPUT NAME="check2" TYPE="checkbox" VALUE="x">キャッシュ2<BR> なんていう風なのを想像してたんですけど、どうですかね? # "checkbox"なのに名前が全部違うってのはきれいじゃないか… |
|
> たとえば"checkbox"を使って、 やってみました。削除するなら最近の発言を削除することが 多いだろう、ということで http://X68000.startshop.co.jp/~68user/tmp/wwwboard.cgi http://X68000.startshop.co.jp/~68user/tmp/wwwboard.cgi?mode=admin&passwd=abc こんな感じ。どんなもんでしょ? さらに前のは「前の50件」ボタンで 表示できるようにするつもりですが、未実装です。 あと、 > 消したいキャッシュをマークしてから[削除]とかのボタンを > 押すと消せる、というような感じがいいです。 これって s/キャッシュ/ログファイル/ の typo じゃないかと 思っていたのですが、キャッシュも checkbox で選択して 消したい、ということですか? スクリプトに書いてある「TODO」の部分が今後の課題です。結構増えました。 http://X68000.startshop.co.jp/~68user/tmp/wwwboard.txt というわけで、どうも2、3日中に完成しそうにはありませんねぇ。 |
|
現在、cronが自由に使えるレンタルサーバを探しています。知っている方いませんでしょうか。プロバイダは別に入っているので、ホームページ作成用として考えています。 |
|
@68user > 思っていたのですが、キャッシュも checkbox で選択して > 消したい、ということですか? きちんと説明していなくてスミマセン。 そうです、キャッシュの削除の話でした。 ところで、発言の編集については実装なしですか? あと、閲覧者の側から出力文字コードの指定(km=euc|jis|sjis等)が できるようになると、携帯からも見られるようになるのでうれしいです。 > というわけで、どうも2、3日中に完成しそうにはありませんねぇ。 ゆっくりやっていただければ、と思います。 「やる気が失せた」という言葉を聞くのが一番恐いです;-) |
|
こんばんわ。 HTTP クライアントを作ってみようで書かれてたものを そのままをコピーしてCGIとしてvirtualave.netに設置したんです。 そこで問題が! 設置したサーバーと同じサーバーに置かれてるファイルは ちゃんとダウンロードできないんですよ。 404になってしまいます。 これは一体どういうことなんでしょうか? 考えられる事がありましたら教えて頂きたいです。 |
|
書き忘れです。 他のサーバーに置かれてるファイルは ちゃんとダウンロードすることが出来ます。 |
|
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1131から始まる一連のトピックで、同じ問題が取り上げられています。 |
|
どうもありがとうございました。 おかげで出来ました。 過去ログに書いてあった、 セパレータが CR でも LF でも CR LF でも認識できるようにする ってのはどうすればいいんでしょうか? ちょっと頼りすぎですかね?(^^; |
|
シスログについての質問です。 よろしくお願いします。 サーバが現在UNIXサーバ2台(サーバA、サーバB)があり、 サーバAのシスログの一部をサーバBに転送するように syslog.confの設定を行なっています。 こうすると、サーバBに転送されるログのうち 日本後でメッセージが記述されたものは 文字化けを起こしてしまいます。 転送されないログに関しては日本語のメッセージも うまく読むことができるのですが、、 もともと日本のメッセージを書く事自体間違って いるのでしょうか? 解決策をしっておられる方がいましたら よろしく御願いします。 |
|
@has > ところで、発言の編集については実装なしですか? > あと、閲覧者の側から出力文字コードの指定(km=euc|jis|sjis等)が > できるようになると、携帯からも見られるようになるのでうれしいです。 キャッシュファイルを作るようにした時点で、「シンプル」なんて 形容詞はどこかに飛んでいってしまったので、こうなったら全部 実装しまっせ。 文字コードの指定ってのは、どういう風にするのがよいですか? 携帯から文字コードを指定するときに、どういうインタフェースに したらよいか、いまいち想像できんです。 @あつしさん > 日本後でメッセージが記述されたものは文字化けを起こしてしまいます。 UNIX と言ってもいろいろありますが、OS は何ですか? エンコーディングには EUC/JIS/SJIS などがありますが、 どれを使っていますか? 他のエンコーディングにしても ダメですか? あと、どういうふうに化けますか? > もともと日本のメッセージを書く事自体間違っているのでしょうか? どうなんでしょうねぇ。個人的には気持ち悪いので日本語は使い ませんが、いまどき 8bit スルーじゃない syslogd もどうかと思います。 # あっちの人たちも 8bit 目が立ってる iso-8859-1 (Latin-1) を # 使ったりしないのかしら。 |
|
おっと見逃してた。 > セパレータが CR でも LF でも CR LF でも認識できるようにする > ってのはどうすればいいんでしょうか? m/^\r\n$/ and last; # 改行のみの行ならループを抜ける で、CR (\r) LF (\n) がくるとヘッダの終了とみなしています。 なので、CR か LF のみの行でもヘッダの終了とみなすように すればよいです。 # chomp して last if $_ eq '' でもいいんですが。 |
|
はじめまして。 私は今、Redhat linux6.2を使用し、パスワード変更プログラムを作成しています。 expectスクリプトをCGIより起動させ、コマンドレベルでユーザーアカウントを変更しようとしているのですが、簡単すぎるパスワードだと変更することができません。端末から普通にコマンドを入力しても拒否されるpasswdコマンド。これを簡単なパスワードでも受け入れられるようにするにはどうしたらいいのでしょうか。ぜひお教えください。 |
|
@68user > 文字コードの指定ってのは、どういう風にするのがよいですか? > 携帯から文字コードを指定するときに、どういうインタフェースに > したらよいか、いまいち想像できんです。 携帯の場合、sjisであれば日本語として表示することができるので、 USER_AGENTなどから携帯からのアクセスかどうか判定して、 勝手にsjisにしてくれる(私の場合は表示形態も切り替えている)、 ってのも便利かと思いますが、 wwwboard.cgi?km=sjis とかって指定するのでもいいかと思います。 |
|
@68userさん HTTPはResponseヘッダとボディの間はCRLFで区切るって 規定されてませんでしたっけ。 #さっきnews.yahoo.co.jpのうち一つで試してみたら、 #ちゃんとCRLFで区切られてました。 ちょっとだけ気になったので。 #もちろん、内容のわかっている規定違反をしているサーバには #対応しておくべき、というのが正しい道なのはわかります。 #できれば歩きたくない道ですが(笑 @超初心者さん おそらくPAMでcracklibが有効になっていると思われるので、 これを無効化するか、パスワード変更プログラムをsuid rootすれば できるようになるでしょう。 その辺を調べてみてください。 ただ、セキュリティ的には間違いなく「改悪」なので 止めておくことをお勧めします・・・。 |
|
ほんとしょうもない質問ですみません。 Print Screen機能を使って画面を印刷したいんですが、 どうしたらいいのでしょうか。 教えてください。 |
|
-u 同一内容の行は1度しか表示しない。 % cat sample | sort abc def def ghi % cat sample | sort abc def (同じ行は一度しか表示しない) ghi 2回目に-uが入ってないのでは 初心者なので違っていたら済みません。 |
|
> 簡単すぎるパスワードだと変更することができません。 root なら「パスワードが簡単すぎるぞ」と怒られても、再度 同じパスワードを入力すればムリヤリ変更できますが、一般 ユーザでは hsj さんの書かれたようなことをしない限り、 無理でしょうね。 > HTTPはResponseヘッダとボディの間はCRLFで区切るって > 規定されてませんでしたっけ。 です。 http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1135 の書き方はちょっとアレなので、書き直すと、 http://news.yahoo.co.jp/headlines/top/ のヘッダ/ボディのセパレータは LF になってます。 00000000 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0a |HTTP/1.0 200 OK.| 00000010 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 |Content-Type: te| 00000020 78 74 2f 68 74 6d 6c 0a 43 6f 6e 74 65 6e 74 2d |xt/html.Content-| 00000030 4c 65 6e 67 74 68 3a 20 31 39 31 30 33 0d 0a 0a |Length: 19103...| 00000040 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a 3c 21 |<html>.<head>.<!| > Print Screen機能を使って画面を印刷したいんですが、 Print Screen キーを押したら、xwd コマンドを実行するように、 ウィンドウマネージャを設定するのが一番簡単そうです。 > 2回目に-uが入ってないのでは ですね。御指摘どうもです。次回更新時に修正しておきます。 |
|
はじめまして。 今、procmailを用いて転送制限の設定を行っているのですが 添付ファイル付きのメールを転送しない設定ができません。 ある雑誌に載っていた方法を試したのですが、どうもうまくいきません。 :0 c * !Content-Type:.*multipart !転送先メールアドレス 資料に目を通した限り、うまくいきそうな感じがするのですが 間違いなり、さらにうまい方法があるならばお教えください。 お願いします |
|
追記します。 下記の例は、添付ファイルがついていた場合 メール転送しないという意味で書いています |
|
68userさん、hsjさん。返信ありがとうございます。 やはりそうですか・・・。 さすがにセキュリティを下げると問題があるので、コマンドレベルから やることは破棄せざるをえなくなりました。 その代替となると、passwdコマンドのソースを研究するしかないのかもしれませんね。どこかにそんなことを詳しくのっている場所はないでしょうか? 現在自分自身でも検索中です。 |
|
@68userさん スミマセン、ぼくの確認方法が正しくなかったようです。 確実な方法で確認したところ、確かにnews.yahoo.co.jpは LFしか返してきませんね。はー > http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1135 > の書き方はちょっとアレなので、書き直すと、 > http://news.yahoo.co.jp/headlines/top/ > のヘッダ/ボディのセパレータは LF になってます。 こっちの意味は取り違えてなかったんですが(苦笑 @超初心者さん いやそうではなくて、ユーザが任意の文字列を選ぶ際に、 その文字列のパスワードとしての強度を(ある程度)判定してくれる物を 取り除いてしまうこと自体が「改悪」だと言う意味です・・・。 |
|
お礼が遅れてすいませんでした。 てっきり頼り過ぎたので無視されたと 思って掲示板を見てませんでした(^^; なるほど、良く分かりました。 ありがとうございました |
|
> 超初心者 > 超メール初心者 > 超ビギナー こういうハンドルはやめてください。そこまで匿名性を 求めるならば、www.2ch.net などを利用してください。 > 今、procmailを用いて転送制限の設定を行っているのですが > 添付ファイル付きのメールを転送しない設定ができません。 まずは ~/.procmailrc の先頭に LOGFILE=$HOME/procmail-log などと書いて、ログを取りましょう。原因究明はその後です。 > passwdコマンドのソースを研究するしかないのかもしれませんね。 まぁそうなりますが、passwd は人間様が対話的に使うコマンド なので、*BSD ならスクリプト向きの pw コマンドってのが あります。これは root での使用を前提としているので、 指定したパスワードをそのまま設定してくれます。Redhat Linux にも、その手のコマンドがあるかもしれません。 で、以下のようなスクリプト #!/usr/bin/suidperl $username=$ARGV[0]; $newpasswd=<STDIN>; chomp($newpasswd); echo $newpasswd | pw usermod -n $username -h 0 を passwd_change という名前で保存して、 # chmod 4755 passwd_change # chown root passwd_change しておけば、誰でも % echo newpasswd | passwd_change username で変更できます。 もちろんこのままでは、セキュリティもへったくれもないので 何かしらの制限を付けないといけません。 @has 文字コードの件、了解です。 |
|
どうも皆さん始めまして。 私は最近Cygwinでプログラミングの勉強を始めました。 Linuxのことはまだほとんどわからないので2つ同時に 勉強しなければならないので大変です(^_^;) で、インターネットで拾ってきたいろんなサンプルソースを コンパイルして遊んでるんですが、LinuxとWin32での ソースレベルでの互換性に疑問があります。 たとえば、あるサンプルソースの場合、シリアルポートにアクセス するのに #makefile SERIALDEVICE = /dev/ttyS0 #tool.c /* setup serial port */ void open_serial(char *devicename) { struct termios newtio; dfd = open(devicename, O_RDWR | O_NOCTTY); if (dcfd < 0) { perror(devicename); exit(-1); } open_serial(SERIALDEVICE); という具合にデバイスをオープンしているのですが、 このソースをWin32アプリとしてコンパイルしても当然(?)動きません。 で、SERIALDEVICEの部分を COM1 に変えて見たのですが、これも 動きませんでした。 他のファイルやソースを眺めてみても、良くわからないのですが、 この場合、Win32で動作させるにはどのようにすべきなのでしょうか? |
|
ども、はじめまして。雅人と言います。 質問なのですが 掲示板をつくろう(1)でperlを書くならEUCで書くべきと 書かれてたのでSJIS(CRLF)からEUC(CRLF)に変換したところ 逆に文字化けが起こってしまいました。 ローカルな環境(win95)でもアップロード先(virtualave.net) でも文字化けが起こってしまいます。 これの原因とは一体なんなのでしょうか? よろしくお願いします。 |
|
超メール初心者あらため宗佑です。 procmailの転送設定、自己解決しました。 記述が足りなかっただけでした。 うーん、奥が深いですね、メール転送。 これからスクリプトを徐々に複雑にしていこうと思います。 でもprocmailを記述しているHPって少ないものなんですね。 載っている例も基本的なものです。 私も自分で試している途中ですが、procmailの達人みたいな例の 載っているHPをどなたかご存知内でしょうか? お願いいたします |
|
@雅人さん > ローカルな環境(win95)でも メモ帳などのエディタで化ける、ということならば EUC を読めるエディタを入手して下さい。 > アップロード先(virtualave.net) でも ブラウザの文字コード設定を「日本語 EUC」として直るならば、 CGI の出力する日本語部分が短かすぎるため、ブラウザが 文字コードを正しく解釈していないのでしょう。その場合は、 print "Content-type: text/html\n\n"; を print "Content-type: text/html; charset=EUC-JP\n\n"; として下さい。 @宗佑さん > でもprocmailを記述しているHPって少ないものなんですね。 > 載っている例も基本的なものです。 確かに少ないですね。僕もあまり見かけたことがありません。 ただ、基本的なところをわかっていれば procmailrc(5) と procmailex(5) でなんとかなることも多いです。 @Madstar さん うーん、さっぱりです。シリアルポートの操作さえしたことがないので…。 |
|
> print "Content-type: text/html; charset=EUC-JP\n\n"; > として下さい。 というより、Content-type ヘッダには EUC-JP/Shift_JIS/ISO-2022-JP などの charset を付加 *すべき* です。 僕のところの CGI プログラムには一部にしか付いていませんが、 これは悪い CGI の見本です。必ず charset を付けましょう。 |
|
どうも、ありがとうございました! 無事できました。 |
|
みなさん、はじめまして。海苔王と申します。 現在、ソラリス7でサーバーを構築しています。 apache,sendmail,popper と動かしてきて、昨日までは メールが動いていたのですが、突如、受信ができなくな ってしまいました。電八で出たエラーは以下のとおりです。 +OK QPOP (version 3.0.2) a ******starting. C: USER *** S: +OK Password required for ****** C: PASS ******** S: -ERR [SYS/TEMP] maillock error 3: '/usr/mail/*****' といった内容でした。sendmail.def からいろいろ見直したのですが、 うごきませんでした。どうかアドバイスお願いします。 |
|
チェック項目を思い付くままに。 1. /var/log/messages や /var/log/maillog に詳細なエラーは出ていないか 2. /usr/mail/ のパーミッションがおかしくなったのではないか (ls -ld /usr/mail) 3. /usr/mail/ にロックファイルらしきものは残っていないか (ls -lA /usr/mail) 4. ディスクの残り容量は (df -k)。i-node space が枯渇していないか (dk -ki) 5. ソースから grep maillock して、エラー箇所を捜し出す あと重要なのが、全ユーザでメールを取得できないのか、 一人だけメールを取得できないのかってこと。全ユーザなら 1,2,4 あたり。一人だけなら 3 をチェック。 ってな感じでしょうか。 |
|
>うーん、さっぱりです。シリアルポートの操作さえしたことがないので…。 残念です(T_T) まぁシリアルポートなんて今更余り使わないですよねぇ(^_^;) いろいろ検索かけてるんですが、さっぱりです。 |
|
>まぁシリアルポートなんて今更余り使わないですよねぇ(^_^;) DOS時代には、awkで print "AT" > "AUX" みたいな感じでモデムとお話してましたが、 Windowsではどうなんだろう…試してません(^^; |
|
> シリアルポート ぼくの当てにならない記憶によると、 winでシリアルポートを開くときはAPIのCreateFile()を使うはずです。 その辺を調べてみてください。 で、この辺のソースはwin系と*nix系での互換性を維持するのは 難しいところだと思います。 ぼくはCygwinは使ったことありませんが、おそらくopen()を実装するのに このAPIを使ってると思うので、もしかしたら開けるかもしれません。 が、結局フラグが違うでしょうからあまり意味無いと思います・・・。 #そもそもLinuxのopen()ってシステムコールですしね |
|
初めまして。 Perlの勉強をし始めたばかりなのですけど、ソケットを使ったクライアントプログラムの作り方とか…全くの初心者な私にはすごく解りやすくて、それに読みやすかったです。 全部説明しよとう難しくなってるサイトや、簡単に説明しようと補足説明が抜けてるサイトも多いですけど、このサイトの説明はとても解りやすいです。 えっと感想をここに書いて良い物かどうか解りませんが、本当に参考になりました。ありがとうございます。 |
|
少なくともNTであれば C:\> type CON > COM1 といった方法でシリアルポートとお話できます。 parityやbaud rate、タイムアウト等の設定は、MSDOSと同じ modeコマンドで行います。 Windows95/98のことは知りませんが、似たようなものだと思いますよ。 |
|
@ありしあさん お褒めの言葉ありがとうございます。でもありがたくは思いますが、 もっとありがたいのは「ここは間違っている」「ここの記述が 理解しにくかった」などの指摘です。もちろん「こういうサンプル プログラムがあるとよい」とか、単なるタイプミスのご報告でも 大歓迎です。 何かしら気づいた点がありましたら、よろしくお願いします。 と言っておきながら、これまでいくつかプログラムの不具合や 記述ミスのご指摘を頂きましたが、忙しくて web に反映できず、 誠に申し訳なく思っています。手元にあるファイルは修正して いますので、暇ができ次第更新するつもりです。 # なのに、また忙しくなってきてしまった…。 |
|
procmailについてあるツールformailについての 質問です。 formailを使用して自動返信設定を作成中なのですが from句を任意で指定したアドレスに変更して、返信したいのです。 今の状態を見るとユーザー名+サーバーのドメイン名といった具合になってしまいます。 これを"xxx@xxx.yyy.zzz"といった指定したメールアドレスをfrom句に入れて自動返信したいのです。そういった方法はあるのでしょうか? よろしくお願いいたします |
|
追記です。 現在、procmailの設定は :0 h c * !^FROM_DAEMON * !^X-Loop:your@own.mail.address | (formail -r -A"Precedence: junk" \ -A"X-Loop: your@own.mail.address" ; \ cat resmsg) | $SENDMAIL -t これだと、送信者名がUNIXのユーザー名になってしまう。 最後の$SENDMAILで送信しているから当然なのですが・・・ ので、この送信者をxxx@xxx.yyy.zzzとしたいのです。 なにとぞ、よろしくお願いします。 追伸 どなたか、linuxサーバー(Redhat 6.2)で使用可能なお勧めの 自動返信ツールをご存知でしたら教えてください。 smtpにはsendmail8.9.3を使用しています。 |
|
むにむに。。思ったこと。 link-check.pl 114-115行目。 &check_link(SITES=>[@sites], MAX_CHILDRED=>20); 138-143 if ( defined $args{SITES} ){ @sites = @{$args{SITES}}; } if ( defined $args{MAX_CHILDREN} ){ $max_children = $args{MAX_CHILDREN}; } MAX_CHILDRED -> ? |
|
>68user 様 アドバイスありがとうございました。 どうやら容量の枯渇が原因でした。 余計なものを移動したら、動くようになりました。 ありがとうございました。 |
|
Perlのネットワークプログラムで、サーバーとの接続が 切れた状態を検出したいのですが、LANケーブルがつながった状態で 通信できなくなった状態は検出してPerlプログラムを終了出来るのですが LANケーブルを引きぬくことによって、通信できなくなった状態はどのようにして検出したらよいのですか? 一応、Perlの中でPingをうって帰ってきた値を見て検出しようと したのですが、Perlの中のPingはRoot権限でないとエラーに なってしまいます。 Root権限以外でPingを実行する方法か、あるいは違う方法を 知っていたら教えて下さい。お願いします(v_v) |
|
@宗佑さん > "xxx@xxx.yyy.zzz"といった指定したメールアドレスを > from句に入れて自動返信したいのです。 これは、単に From ヘッダが xxx@xxx.yyy.zzz になっていれば いいのですか? それとも envelope from が xxx@xxx.yyy.zzz と なっていて、例えば転送途中でメール送信に失敗した場合、 エラーメールが xxx@xxx.yyy.zzz に送られることを意図して いますか? 前者ならただ単に From: を置換するだけなので、formail -i や formail -I でできそうです。後者なら sendmail -f xxx@xxx.yyy.zzz でしょうか。 なお、僕は formail を使ったことはありませんし、できるか どうか試してもいません。 @やままさん > MAX_CHILDRED -> ? む、typo ですね。直しました。御指摘ありがとうございました。 @ありさわさん ケーブルを抜いた状況だとどうなるんですかね。多分僕なら一定時間で タイムアウトさせて unreachable かどうかを判断すると思いますが、 本当はどうすべきなのかは わかりません。 それはそれとして、以下は ping で判断するという前提の話。 ping は ICMP プロトコルを使いますが、これは root 権限が ないと実行できません。その証拠に ping コマンドは root に suid されています。 % ls -l /sbin/ping -r-sr-xr-x 1 root wheel 195956 Jul 27 23:31 /sbin/ping* というわけで、素直 (?) にping コマンドを使うのがいいのでは ないでしょうか。 |
|
>ケーブルを抜いた状況だとどうなるんですかね。多分僕なら一定時間で >タイムアウトさせて unreachable かどうかを判断すると思いますが、 >本当はどうすべきなのかは わかりません。 OS 依存ですが、ifconfig -a とすると表示されることがあります。 下は FreeBSD の場合です。 dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::xxx:xxxx:xxxx:xxxx%dc0 prefixlen 64 scopeid 0x1 ether xx:xx:xx:xx:xx:xx media: autoselect (none) status: no carrier supported media: autoselect 10baseT/UTP <full-duplex> 10baseT/UTP none no carrier というのがケーブルが抜けたことを意味していると思っても だいたいあたっているはずです。一方、Solaris のように抜けた瞬間に /var/adm/messages などに記録されるものもあります。 Solaris がでたついでなので、 >1. /var/log/messages や /var/log/maillog に詳細なエラーは出ていないか Solaris の場合 sendmail のログは通例 /var/log/syslog に記録され、 BSD の /var/log/messages にあたるものは /var/adm/messages です。 |
|
No.1299の ありさわ です。 いろいろご回答いただきありがとうございます。 掲示板に書き込みしたのが初めてだったので、 返答が有ったことにチョット感激してます。 この件については結果的に、僕の技術不足で違う方法によって 対処をすることになりましたが、今後のためにこの件について 前の書き込みで説明が足りなかった分の説明をさせていただきます。 切断を検出して子プロセスをKillする一連の作業は コマンドラインからではなくPerlプログラム内で行いたいです。 ついでに何を作成したかというと、ここのサンプルプログラムを 利用してネットワーク対戦のロビーサーバーを作成しました。 Q.LANケーブルを抜いたらどうなるのか? まずこれは、クライアント側のLANケーブルを抜いた時のことです。 ※LANケーブルを抜いた時の様子 ・最初にケーブルがつながった状態でサーバーに接続をしにいきます。 ・サーバーはこのクライアントに対して子プロセスを作成します。 ・接続が確立した状態でクライアントのケーブルを引きます。 ・子プロセスはクライアントとの接続が切れたことを認識できず 残ったままになります。 ・この作業(嫌がらせ)を何度もされると子プロセスが溜まっていって 結果、サーバーがダウンするんじゃないか?って思ってます。 あたたかいご回答、本当にありがとうございました。 |
|
ありがとうございます。 formailによる自動返信完了しました。 errorメールに関しても、本文に細工をしてなんとか解決しています。 こういうことが、やりたかったのも、UNIXのアカウント名とメールアカウント名が、まったく一致しない仕様のシステムを使っているので、外部に対する送信者が誰であるかを混乱させないようにする目的があったからです。 ありがとうございました |
|
はじめまして。 GOOで検索してきました。 perlの事について質問があるのですが。。。。 perlを使ってActiveXのDLLファイルを舐めようと思っているのですが、全くもって方法が解りません。 ここの過去ログや、その他色々探して見ましたがそれらしいものは見当たりませんでした。 どうぞお解りになる方がいらっしゃいましたら御指導宜しくお願いします。 |
|
@rosegarden さん > OS 依存ですが、ifconfig -a とすると表示されることがあります。 なるほど、勉強になりました。どうもです。 @ありさわさん > 子プロセスはクライアントとの接続が切れたことを認識できず > 残ったままになります。 という用途なら、TCP のタイムアウトを待つか、自前で タイムアウトの機構を作るのが普通のような気がします。 @Taka さん > perlを使ってActiveXのDLLファイルを舐めようと思っているのですが 「ActiveX の DLL を舐める」の意味からして さっぱりわかりません。 google で検索すると http://www.union-net.or.jp/~cgifaq/Archive/msg13177.html Subject: [cgi:13180] Re: Perl からActiveX のDLL を呼び出すには というのが引っかかりますが、現在サーバの容量オーバーにより公開を 中止しているようで。あと perl モジュールの Win32::COM ってのが ありますが、関係あるのかなぁ…。 http://www2s.biglobe.ne.jp/~cru/library/zddbbs/cgi-bin/wwwboard.cgi に行くと、その道の偉い人が教えてくれるかもしれません。 |
|
初めまして。 上條と申します。 かなり困っております。 どなたかお知恵を拝借願います。 現在Windows98にFTPサーバソフトをインストールしてあり、カスタマイズチューンナップされた シェルのないFreeBSDにファイルをダウンロードさせたいのです。 FreeBSD側のコントロールはTelnetでコマンドを入力することにより、FreeBSD側は指定された IPのFTPサーバに(この場合Windows98)接続をしてダウンロードを開始する仕組みなっています。 この際のFTPサーバへの21番にどういったコマンドが流れているのか不明ですが、様々なFTPサーバソフトを 試した結果、NDMTというコマンドがFTPサーバソフト側で処理できないこと、winftpdeamonの コミュニケーションタイムがオーバーになるというエラーが出て、FTPサーバ側で切断をしてしまいます。 一度、Win98+wftpdでの成功例を聞いたことがありますが、色々設定を変えてみましたが、うまくいきません。 接続の形態としてはルータ支点に同ノード内の10BASE-T接続です。 Freebsd側とは全てのPORTで接続は出来ます。 プロトコルはTCP/IPを使用しています。 もっとも最初からLinuxやFreeBSDにFTPサーバをたてることが出きれば問題なく接続できることは マニュアルに明記してあるのですが、私がFTPをたてるだけの技術がないことと、本日中という時間の中で 手元に使用できるLINUXなどがなく、大変困っております。 詳しい説明でなくても結構ですので、何か妙案がございましたら、どなたかお教えいただけないでしょうか。 よろしくお願いいたします。 |
|
AnHTTPD で HTTP 使ってダウンロードするのは? FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。 FreeBSD の 4.0-RELEASE 以降だと ftp クライアントの類は passive mode で動作しますが、これはチェックしました? passive mode をオフにするには /etc/login.conf の default エントリで FTP_PASSIVE_MODE という環境変数を セットしているから、そのファイルを書き換えて、NO にすれば 良いですよ。 思い付くのはこれだけですね。カスタマイズされているのだから、 これ以上答えようがないですね。 |
|
> FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。 失礼、/usr/bin/fetch ですね。 それから wget でも良いかも知れません。 もっとも、FreeBSD がわで IPv6 の設定(デフォルト)してあると最近の wget は IPv4 のオプションつけないと no route to host って エラーを出すこともありますが。 |
|
> FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。 失礼、/usr/bin/fetch ですね。 |
|
はじめまして。 時々68userさんのページ拝見させていただいてます。 いろんなことが書いてあってとてもためになります。 場違いかもしれないんですがXについて少々よろしいでしょうか? このページでHello World のソースをとってきて、 gcc -o test test_hello_world.c -I /usr/X11R6/include -L /usr/X11R6/lib -lX11 -lm とコンパイルしたところ、正常に動作したのですが、 右上のバツボタン押してもちゃんと終了してくれず、 X connection to :0.0 broken (explicit kill or server shutdown). と、怒られてしまいます。 ちなみにVine Linux2.0CRを使用しております。 あと、右上のバツボタンがそのHello Worldのみに関しておかしい 表示になってしまいます。 と、いうか自分で書いてみたやつは全部なんですが。 もし心あたりがあったらご教授いただけませんでしょうか? お願いします。 でわまた寄らせていただきます。 |
|
@いえろーばっくすさん > X connection to :0.0 broken (explicit kill or server shutdown). これはクライアント側の Xlib が出力しているメッセージです。 # 個人的には、あまり気にするほどのメッセージではないと # 思っています。 よくわかってませんが、多分ウィンドウマネージャの「×」を 押すと、X サーバとのコネクションが切断されるのでしょう。 X クライアントは、コネクションが切断されたので X サーバと 通信できなくなり、エラーとなって終了しているわけです つまり、「×」ボタンを押すと X クライアントのプロセスが直接 kill されるわけではないということです。 これを直したいなら、まず Atom a1,a2; アトムを宣言します。次に a1 = XInternAtom(display, "WM_PROTOCOLS", False); a2 = XInternAtom(display, "WM_DELETE_WINDOW", False); XSetWMProtocols(display, window, &a2,1); とすれば、「×」ボタンを押すと、ClientMessage イベントが 送られてきます。後は switch 文の中で case ClientMessage: if ( event.xclient.message_type == a1 && event.xclient.data.l[0] == a2 ){ XCloseDisplay(display); exit(0); } break; とすればいいでしょう。 「×」を押しても終了しないアプリや、終了する前に後始末を するアプリを作るときは、こういうふうにします。 @rosegarden さん > FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。 FreeBSD なら ftp コマンドでも落とせますね。 % ftp http ://foo.bar.com/hoge.html % ftp ftp ://foo.bar.com/hoge.tgz などなど。Solaris にもこういうコマンドがあればいいのに。 @上條さん > 私がFTPをたてるだけの技術がないことと シェルがないということなので今回は無理かもしれませんが、 ftp サーバを立てるだけなら、/etc/inetd.conf に ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l と書いて、kill -HUP `cat /var/run/inetd.pid` でおしまいです。 # FreeBSD のデフォルトでは、ftpd は使用可能です。 anonymous ftp サーバなら、さらに (FreeBSD なら) jman ftpd に 書いてあるとおりにやればよいです。 「ネットワークプログラミングの基礎知識」に「HTTP の並行アクセス」 http://X68000.startshop.co.jp/~68user/net/http-parallel-1.html というページを置きました。お暇な方、ご笑覧くださいませ。 |
|
perl CGIの実行権限について質問させて下さい。 CGI内部でこれを調べる方法を探してて、 ここの掲示板のソースを参考にさせてもらおうと思ったのですが、 ここでは、(getpwuid($>))[0]で、実行権限が誰かを表示してますよね。 これを -o $script_name の検査で、 直接、所有者権限か(真の場合)、それとも他の権限か(偽の場合)を 検査することはできないのでしょうか? @ActiveX の DLL を舐める ウチのURLが出てるなぁ…でも、私宛じゃない(笑い) これ、単にDLLの内部データを読み出したいだけじゃないんでしょうか? (そういう、ツールがあったと思う) それなら、perlで注意するのは、binmodeを使うことくらいでしょう。 後は、DLLのバイナリ構造をどこかで調べればいい(私は知らないですが)。 |
|
おそらく -o $filename は $> == stat($filename)->uid ? 1 : 0 と同じだと思うので、それで問題ないと思います。 getpwuid を使ったのは特に意味はないので (強いて言えば -o の存在を知らなかったから)、今後は if ( -o $0 ){ 所有者権限 } で判別しようかと思います。 |
|
>と同じだと思うので、それで問題ないと思います。 UIDとかは自信がないので、ありがとうございました。 ウチもそれで行きます♪ |
|
> FreeBSD なら ftp コマンドでも落とせますね。 これは知りませんでした。勉強になりました。 > などなど。Solaris にもこういうコマンドがあればいいのに。 Solaris は /usr/local/bin に GNU コマンドとか BSD コマンドとか インストールしないと日常的な作業は確かに辛いですね。 |
|
UNIXの/var/adm/crashディレクトリについての質問です。 最近仕事でHP−UNIXを使用しているのですが、/var/adm/crash ディレクトリに、「core〜」、「bounds」のディレクトリが作成されて しまい、/var の領域が100%になってしまいます。 「core〜」については、削除しても良いと本に載っていたのですが、 「bounds」については、削除してよいか分からないです。 どなたかご存知の方いらっしゃいましたら、お教えください! よろしくお願いします! |
|
HP-UX は知りませんが、マニュアル savecore(1M) には > savecore saves the core image in the file > dirname/hp-core.n and a copy of dumpsystem, which contains the > namelist, in the file dirname/hp-ux.n. The trailing n in the path > names is a number that increases by one every time savecore is run in > that directory. This number is kept in the file dirname/bounds, which > is created if it does not already exist. とあるので、消してもいいんでないでしょうか。 |
|
「SSLプログラミング」に関する質問です。 サーバー・クライアント間でSSL通信を行っている状態のものに、 「プロキシプログラム」なるものを両者の中間に介在させた場合 について・・。 サーバー・クライアントの「メッセージのやりとり」をログファイル等に 出力したいのですが、当然この両者は「暗号」によるデータのやりとりを している為に「メッセージ」に関しては???と言った状態です この暗号を「解読」と言った事は出来ないものでしょうか? |
|
どうも。いえろーばっくすです。 68user様、windowの件ありがとうございました。 今やってみたところちゃんと閉じることができました。 ボタンの表示もちゃんと直りました。 これからもいろいろと質問することがあるかもしれませんが、 どうぞよろしくお願いします。 |
|
はじめまして。 日付,時間,なまえ,・・・ 日付,時間,なまえ,・・・ 日付,時間,なまえ,・・・ といったようなログから当日分のみを抜き出し他のファイルに保存する。 といったようなバッチを作りたいのですが、 UNIX初心者でさっぱりわかりません。どなたか教えていただけませんか? |
|
@みーたんさん 盗聴できるかということならば、無理です。なぜなら SSL は 公開鍵と秘密鍵を使うから。盗聴によって公開鍵を盗めても、 秘密鍵はクライアント・サーバそれぞれが保持していますので、 データは守られます。 # という説明でわかってもらえるかしら。 @M.K さん sh スクリプトで書きたいとか、perl を使いたいくらいは 書きましょうよ。こちらがサンプルを書いても、「いえ、 そうじゃなくて…」という返事はもらいたくないので。 まぁ 一言でいうと、date コマンドで現在日時を取得し、それを キーとして grep です。date と grep のマニュアルを読みましょう。 |
|
はじめまして。 当方cshシェル環境にてUNIXを利用しております。 その環境設定で「カレントディレクトリをプロンプトに追加」というのがありますが、 ディレクトリの移動によって「今現在どこに居るか」というのを表示させたいのです。 set prompt = "`whoami`@`hostname -s`[\!][`pwd`]%" のように `pwd` をつけてもsourceコマンドによって.cshrcを再有効に した時点でのカレントディレクトリが格納されたまま変化してくれません。 ディレクトリの移動に応じてプロンプト上に表示されるカレントディレクトリを 逐次変化させるためにはどの様に.cshrcを書き換えれば良いのでしょうか? `pwd`の部分を$cwdとかに変えてもダメだったし...ほとほと困っております。 参考までに、現在の.cshrcの内容を書いておきます。 alias dir 'ls -alF' alias less 'jless' setenv LANG japanese setenv EDITOR vi setenv PAGER less setenv BLOCKSIZE K setenv EXINIT 'set showmode' setenv LESSCHARSET japanese set prompt = "`whoami`@`hostname -s`[\!]%" なお、FreeBSD3.4R上での環境です。 どうかよろしくお願いします。 |
|
C言語を覚えたいのですが どなたかC言語を教えに来ていただけませんでしょうか。 兵庫県姫路市 ho-muzu@mui.biglobe.ne.jp メールください。 |
|
> ディレクトリの移動によって「今現在どこに居るか」というのを表示させたいのです。 とりあえず、こんなんでどうでしょうか? テストは tcsh でやったので、 断定的なことは言えませんが、古い csh と互換性のある構文を使っています。 alias sp 'set prompt=`whoami`@`hostname -s`\[`pwd`\] ' alias cd "cd \!* ; dirs -l ; sp" alias pushd "pushd \!* ; sp" alias popd "popd ; sp" ポイントは set prompt の alias をシングルクォートで囲むところですかね。 あと、cd, pushd, popd のごとに prompt の set をするということですね。 4.1-RELEASE 以降だと /bin/csh は tcsh なので、もっと簡単に出来ます。 たしか %/ とかいうのを使えば、良いだけだったと思います。 |
|
rosegardenさんへ> >ポイントは set prompt の alias をシングルクォートで囲むところですかね。 >あと、cd, pushd, popd のごとに prompt の set をするということですね。 なるほど。cdコマンドを使うたびにset promptするんですね。 ためしてみたところ、確かに出来ました。 >たしか %/ とかいうのを使えば、良いだけだったと思います。 これは知りませんでした。tcshの利用が可能なマシンがあるので 試してみましたが、ホントですね。うーん、こっちの方が簡単だなぁ。 でもメインのマシンはシェルの変更を許可してくれないので、 alias方式で行きます。どうもありがとうございました。 |
|
> でもメインのマシンはシェルの変更を許可してくれないので 僕は sh・csh のような非人間的なシェルを使うのは耐えられない ので、そういうときは勝手に tcsh を入れて、~/.cshrc に if ( ${?tcsh} == 0 ) then exec /usr/local/bin/tcsh endif などと書いてます。 前にちょっとはまったことを書いておきますと、これをするなら ~/.cshrc に setenv TERM vt100 などと書いてはいけません。 普通にログインするときはいいのですが、もし端末がない場合 (rsh を使う場合など) は、tcsh が端末があると勘違いして 入力待ちになってしまい、rsh が効かなくなるからです。 Solaris などで、デフォルトだと TERM=kterm になってしまい、 さらに /etc/termcap に kterm のエントリがないため、vi や emacs を実行すると文句を言われるので仕方なく setenv TERM vt100 と書いている人もいると思いますが、それをするなら if ( ${?TERM} ) then setenv TERM vt100 endif と書けばいいです。これなら rsh のときは TERM が設定されません。 |
|
はじめまして。今UNIXにおいてのプロセス間通信として、 FTPをモデルとして調べていて、ここのHPにたどりつきました。 ものすごく参考になってます。で、聞きたいことがあります。 聞きたいことは、FTPクライアントのプログラムでのことですが、 C言語版での、GET及びPUTなのですが、GETの場合は、Perl同様に soketより手に入れたデータをfopen関数を用いてのそのデータをGetしたファイルと同じ名前で保存することでGETされるのですか?PUTも同様ですか? また、FTPサーバーでは、LESTやGETやPUT のプログラム上では、どのような動きをしてるのでしょうか? 自分なりには、イメージがあるのですが自信がないので教えてもらい たいです。 こちらの勝手なお願いですが、今週中までに返事を掲示板のほうでいただけると大変助かります。 |
|
初歩的な質問ですが, AIXを触り始めたのですが, telnetでrootのログオンを許容しているのを やめたいのですが, 設定ファイルがわかりません。 どのファイルにその設定が書いてあるのでしょうか? あと,tcshをmakeするとEUCコードで作成されてしまいますが AIX用(SJIS)での作成方法もご存知の方,お教え願います。 よろしくお願い致します。 |
|
> telnetでrootのログオンを許容しているのをやめたいのですが, AIX は管理したことも使ったこともありませんのでわかりません。 init, pam, login, tty, ttys などのマニュアルを探してみてください。 FreeBSD なら /etc/ttys Solaris なら /etc/default/login Linux なら /etc/security あたりなので、/etc の下に片っ端から grep かけてみる のもいいでしょう。 cd /etc; egrep -i 'secur|root|login' * */* */*/* > soketより手に入れたデータをfopen関数を用いてのその > データをGetしたファイルと同じ名前で保存する そうです。C でも perl でもやることは同じです。 > FTPサーバーでは、LESTやGETやPUT > のプログラム上では、どのような動きをしてるのでしょうか? コマンド用コネクションから RETR hoge が送られてきたら、 データコネクションを確立し、hoge のファイルを fopen して データコネクションに hoge の内容を流します。 コマンド用コネクションから LIST/NLST が送られてきたら、 データコネクションを確立し、/bin/ls の結果 (別に ls を 使わなくてもいいけど) をデータコネクションに流します。 > 自分なりには、イメージがあるのですが自信がないので > 教えてもらいたいです。 自分なりのイメージを書いた上で、それが合ってるか間違ってるか たずねるのがスジというものでしょう。 |
|
質問というか、ご意見頂きたいです。 掲示板が荒らされたなら、制限したり削除できますが メールが大量に届いたり本文が最悪なタグの羅列だった場合 どうすればいいんでしょうか?明日も変なメールきそうで カナリ、不安です。これって警察に言えたりするものなのでしょうか? 迷惑防止条例とか。 http://www.alles.or.jp/~tll/toc/hino.html |
|
Perlの質問です。 2000/10/01の三日まえを表示したいのですが どのようにやれば良いでしょうか? 宜しくお願いします。 |
|
> 2000/10/01の三日まえを表示したいのですが Time::Local で time_t 形式に変換し、3日分の秒数を引いてから、 再度 localtime で年月日の形式に戻します。 use Time::Local; $time = timelocal(0,0,12,1,10-1,2000-1900); $time -= 60*60*24*3; ($sec,$min,$hour,$day,$mon,$year) = localtime($time); printf "%4d/%02d/%02d",$year+1900,$mon+1; > メールが大量に届いたり メールが何通届いていて、それぞれサイズはどれだけか、という ことは、メール本文を取得する前に調べることができます。 また、これはメールサーバにもよりますが、あるメールの先頭 何行のみを取得、ということもできます。そういう機能を持つ メーラーを探してみてはどうでしょうか。 % telnet メールサーバ名 110 USER your_user_name PASS your_password LIST (メール一覧とサイズ表示) TOP 1 3 (1通目のヘッダと本文3行のみを表示) QUIT (終了) > 本文が最悪なタグの羅列だった場合 Windows はよく知らないんですが、HTML メールが送られて きたら、HTML として開くか plain text として開くかを 確認してきませんか? 聞いてこないなら、まともなメーラーに かえましょう。 |
|
68userさん > こないだは説明が足りずに済みません。助かりました。 またしても質問なんですが、 sh スクリプトで2つのファイルの内容が完全に一致した場合に aというファイルに 日付,"一致"(文字列)を出力して、 一致しなかった場合には 日付,"不一致"(文字列)を出力したいんですが 全然わかりません。よろしかったら教えてください。 |
|
ファイルの比較には cmp か diff を使います。一致 したかどうかはコマンドの戻り値を見ればよいですが、 sh なら $? で参照できます。あとはマニュアルを よく読んでみてください。 |
|
No.1269で、超初心者さんがやってたのと同じように、CGIからexpectスクリプト を呼び出して、他のマシンにtelnetしてパスワードを変更するシステムを作って いるんですが、telnetで戻ってきた文字が一部うまくexpectに渡されないようで 途中で止まってしまい、上手くいきません。 そこで$|=1にして出力を見たら、以下のところで止まっている事が分かりました。 spawn telnet server Trying xxx.xxx.xxx.xxx ... Connected to server.xxx.xxx. Escape character is '^]'. ”Escape character is '^]'.”の後に、CRLFが来るんですが、それから先が上手 くexpectに渡されていない(?)ようです。 HTTPdがCRLFだから止めてしまっているんでしょうか? それってHTTPdの仕様なんでしょうか? exec 'expect';の後のprint文はexpectのtimeout後に出力されます。 どこで止めてしまってしまっているかを調べる方法や解決方法など、アイディア がありましたら教えてください。 |
|
僕は expect 使ったことありませんのでわかりませんが、せっかく perl を使っているんですから、Net::Telnet モジュールでやって みてはいかがでしょう。 use Net::Telnet; $t = Net::Telnet->(Timeout=>10, Prompt => '/\w+?@\w+?: /'); $t->open('hostname'); $t->login('yourname', 'password'); @lines = $t->cmd("/bin/ls -l"); print @lines; $t->close(); 言うまでもないかもしれませんが、Prompt のところは適切に 変更しないと動きません。詳しくは perldoc Net::Telnet をどうぞ。 |
|
うーん、むずかしい…。全然理解してないことがよくわかった。 すごく汚くて変な書き方ですがこんな感じ。 use Net::Telnet; $username='yourname'; $oldpasswd='secret1'; $newpasswd='secret2'; $t = new Net::Telnet (Timeout => 5, Prompt => '/\w*? /', Dump_Log => 'telnet-log'); $t->open("localhost"); $t->login($username, $oldpasswd); $t->prompt('/Old password:/'); $t->cmd("/usr/bin/passwd"); $t->print("$oldpasswd\n"); ($prematch,$match) = $t->waitfor('/[a-zA-Z ]+:/'); print "[$prematch] [$match]\n"; $t->print("$newpasswd\n"); ($prematch,$match) = $t->waitfor('/[a-zA-Z ]+:/'); print "[$prematch] [$match]\n"; $t->print("$newpasswd\n"); ($prematch,$match) = $t->waitfor('/[a-zA-Z ]+:/'); print "[$prematch] [$match]\n"; $t->close(); 適当に $match の結果に応じて、パスワードが違うやら、 新しいパスワードが短いやら出力すればいいのかな。 expect の方がすっきり書けるような気も。 |
|
やっぱ僕がやるとしたら pw コマンドの wrapper 作って、 それを root に suid するなぁ。passwd の挙動を 全て把握するのは厳しい。 |
|
結局、68userさんのおっしゃる通りpasswdの挙動を全て把握するのは 厳しいので、telnetされる側のServerにID,Passwordを変数として受け 取って、passwdファイルを直接編集するperlを置き、それをCGI(Perl) からtelnetして、rootで実行させるようにしました。 結局何故expectで動作しないのかは不明なままですが、要求を満たす 物は出来ました。 アドバイスありがとうございました。 |
|
私の場合、次のような感じのスクリプトで動きます。 一応、ログインしてコマンド実行程度なら、大丈夫のようです。 環境は perl 5.00503 + Expect-1.08 + FreeBSD 4.2-BETA です。 #!/usr/bin/perl use Expect; my $user = 'rose'; my $password = 'password'; my $prompt = 'host\{rose\}\d+\s'; my @cmdlist = ( 'ls -alF', 'ps -auxw', 'exit', ); my $telnet = Expect->spawn("telnet localhost"); $telnet->expect(30,"login: ") || die "NO login prompt"; print $telnet "$user\r"; $telnet->expect(30,"assword:") || die "NO password prompt"; print $telnet "$password\r"; my $match = $telnet->expect( 30, "closed by foreign host", "-re", $prompt ); die "refused by server\n" if $match == 1; die "NO shell prompt, ".$telnet->exp_error()."\n" unless $match; foreach $cmd ( @cmdlist ) { print $telnet "$cmd\r"; my $match = $telnet->expect( 30, "closed by foreign host", "-re", $prompt ); last if $match == 1; die "NO prompt after command\n" if $telnet->exp_error(); } $telnet->hard_close(); exit; |
|
最近Unixを始めたのですが、サブルーチンの作り方がわかりません。 (呼び方、書き方) 簡単な例を教えていただけると幸いです。 |
|
awk scriptを使って下の様なことがしたいのですが、方法を教えて下さい。 Input File1: 10 abcde 9 bcdef 12 cdefg Input File2; 3 abcde 5 cdefg 12 defgh ファイル1と2を比較し、$2の内容が同じ場合、file1 と file2 の $1 $2 を output file の $1 $2 $3 $4に出力する。 比較して見つからない 場合はスペースを出力する。 Output file 10 abcde 3 abcde 12 cdefg 5 cdefg 3 abcde 12 defgh よろしくお願いします。 |
|
> サブルーチンの作り方がわかりません。 言語がわからないと何とも言えません。 > awk scriptを使って下の様なことがしたいのですが #!/usr/bin/awk -f BEGIN{ while (getline< ARGV[2] >0 ){ hash[$2]=$1 } while (getline< ARGV[1] >0 ){ if ( hash[$2] ){ print $1,$2,hash[$2],$2 } else { printf "%s %s \n",$1,$2 } delete hash[$2] } close(ARGV[2]); while (getline< ARGV[2] >0 ){ if ( hash[$2] ){ print $1,$2 } } } FreeBSD の awk と Solaris の nawk では動きましたが、 Solaris の awk では動かず。 うーん、awk らしくない…(笑) まぁ awk スクリプトを 書いたのは4年ぶりくらいなので、これで勘弁して下さい。 # 見本求む。 |
|
すみません。 Perlです。 |
|
> # 見本求む。 見本かどうか分かりませんが、私は次のように書きました。 #!/usr/bin/awk -f { array[$2] = sprintf("%s %s", array[$2], $1); } END { for( key in array ){ split(array[key], tmp); if( 2 in tmp ) printf("%s %s %s %s\n", key, tmp[1], key, tmp[2]); else printf("%s %s\n", key, tmp[1]); } } 起動は % awk -f script file1 file2 としてください。連想配列に記録して、最後に出力という感じです。 ただし、次のような $2 が同じだが $1 が違う値を含む形式のデータは 仮定していません。 10 abcde 11 abcde どちらかを捨てるようになっているかと思います。実際にはデータの形式の チェックが要るかと思います。あと出力の順が不定になります。出力の 順番に依存する処理には向きません。動作チェックはしていません。 多分、本家の awk じゃ無理かな。動作チェックは gawk でやっています。 |
|
># 見本求む。 単なるバリエーションということで… #!/usr/bin/awk -f NR == 1 { f = FILENAME } f == FILENAME { hash[$2]=$1 } f != FILENAME { if ( $2 in hash ) { print hash[$2], $2, $1, $2 delete hash[$2] } else print $1, $2 } END { for (r in hash) print hash[r], r } |
|
もう他人の書いた awk スクリプトを見ても意味がわからん (笑) > Perlです。 で、どういう処理をするサブルーチンの例を見たいのですか? あと、素人とか初心者とかいうハンドルはやめてください。 それから、誰に向けて言うわけでもないですが、回答をもらっても 返事をする気がないなら、最初から質問しないでね。 |
|
沢山の回答、どうもありがとうございます。 あとお礼が遅くなってどうもすいません。 試してみてから出そうと思っていたのですが、家にUNixがないので 月曜になってしまいます。 このページを発見して間もないのですが、これから色々質問することもある思うので、その時はまたよろしくお願いします! |
|
行頭のスペース、全角スペースを に置換するように してみました。 if ( m/^(<BR>)?(\>|>)/ ){ $_ = qq(<FONT COLOR="$color{QUOTE}">$_ </font>); } の後に s|^( +)|' ' x length($1)|e; s|^( +)|' ' x length($1)|e; を追加しただけです。 現状でこれをしちゃうとまずい UA ってありますっけ? |
|
こんにちは、はじめての書込ですが... http://tsu.virtualave.net/TSU/whimsy.html 今週上のようなのをやることになったので お時間のある方はどうぞ。(ちなみに日本語コードが 前のようなSJIS固定から、普通の日本語チャンネルと 同様のJISになってます) GUIクライアントは、FreeBSDだとportsにGTK+使うXchat の日本語化版があるそうです。 Linuxだとhttp://dns.manabi.gr.jp/~blend/の辺りが よいかと(FreeBSDでこれrpmから出して使う場合は GNU makeが要ります)。 いずれにせよJISになったので一般に配布されている 日本語化パッチの類が簡単に使用できるようになりま した。 |
|
えっと、早い話が「エポ」の場所教えて下さい!! sachiyo@viola.ocn.ne.jp までメールで教えて下さいっす! |
|
どうも、おひさしぶりです。 > 現状でこれをしちゃうとまずい UA ってありますっけ? 現状の解釈が、わからなかったので、手元のブラウザで 調査しました。 OK win98 IE2 IE4 w3m(cygwin) FreeBSD Nestcape3 chimera w3m NG win98 Netscape3 とりあえず、こんな感じです。 ※ ディスク容量が足りなくなって、だいぶuninstall したので、この程度位までしか調査できませんでした。 |
|
> 68user さん > 行頭のスペース、全角スペースを に置換するように > してみました。 おかげで助かります。今まで、unexpand して投稿していましたが、 インデントが崩れるのが悩みの種でした。 どうもありがとうございます。 |
|
DATを初期化するコマンドって、UNIXでありますか?? |
|
> 行頭のスペース、全角スペースを に置換するように > してみました。 やっぱ、これが一番現実的みたいですね。 ウチでやらなかったのは、当時、使ってたWin95 NN4.1 が カット&ペーストで全角スペースに変換してたからだけど、 今のNN4.73では、ちゃんと半角になります。 ところで、 タブ も変換して貰えると助かるんですが… |
|
> NG win98 Netscape3 なるほど。よく知らないんですが、 が中黒になる んでしたっけ? UNIX 系の NN3 も表示できないと思って いたんですが、OK なんですね。では、Win+NN3 環境は 残念ながら泣いていただく、ということにします。 > ところで、タブも変換して貰えると助かるんですが… tab stop はいくつがお好みですか? (僕は4です) でもこれをやるなら、書き込み時に置換しないと いけないので、 TAB が発見されました。tab stop=4 だと以下のように表示されます。 [OK TAB=2にする TAB=8にする] てな感じ? (笑) ところで行頭以外のスペースを に置換するのって 意味ありますかね? > DATを初期化するコマンドって、UNIXでありますか?? テープ関係はよく知りませんが、mt erase あたりではダメでしょうか。 > http://tsu.virtualave.net/TSU/whimsy.html 僕も何度かおじゃまさせていただきました。お暇な方はどうぞ。 |
|
> が中黒になる そうです。目も当てられないです。 >UNIX 系の NN3 も表示できないと思って 少なくとも、Version 3.04 [ja_euc]はそうでした。 |
|
すいません、追加です。 winで確かめたNetscapeは、Version 3.01です。 .01と.04の差か(不明)? ←信じられん ※ win+NN3は、サポート外でいいと、思います。 ほとんどNN4/IE4以上だろうし・・・ |
|
どなたかP内部のCPUやメモリーやモデムなどに詳しい方 色々教えて下さい。 仕事上、自らバージョンアップをしたいと考えていますのでよろしくお願いします。 またこのURLは現在の仕事上のものです。 興味がある方はアクセスしてください。 |
|
No.1343,1345、1346の例を参考にやってみたのですが、SolarisのAwkでは動きませんでした、、、、 そこで、InputFile1の$2だけをInputFile3にcopyして、InputFile2の$2を、InputFile4にCopyし、単純にINputFile3、と4を比較し、同じ内容はOutputFile1へ、違う内容はOutputFile2へ出すようにするのであれば、Awkでもできるでしょうか? |
|
nawk では動きませんか。 # の話はまた明日…。 |
|
>tab stop はいくつがお好みですか? (僕は4です) 基本的には、私も4です…でも、最近は2なんてことも…(^^; >てな感じ? (笑) インデントさえあれば、結構見易くなると思うので、 1個でもいいんじゃないでしょうか?(笑い) >1346の例を参考にやってみたのですが、SolarisのAwkでは動きませんでした、、、、 The AWK Proramming Language 準拠のスクリプトが動かないなんて、どんなAWKだ(笑い) |
|
こんばんわ。またXについてわからないところが出てきました。 EXPOSEイベントについてです。 例えば、windowの一部が画面の外側に出ている状態で、 そこからwindowを現在ある位置から移動したとき、 EXPOSEイベントがたくさん飛んで来るようで、 飛んで来た回数だけ再描画されてしまいます。 この再描画を一回だけで終わらせる方法はないでしょうか? 自分で書いてみたのは全部書くと長いので 省略して書くとこんな感じです。 while( done == 0 ) { XNextEvent( display, &event ); switch( event.type ) { case Expose: if( myevent.xexpose.count == 0 ) { ..... ..... ..... ..... } break; case .... .... .... .... .... } いつもお世話になります。 ご教授おねがいします。 |
|
はじめまして。某企業でイントラネットの担当をしています。 本日、某ソフトメーカーのホームページ作成ツール(Go**ve ver5)を 導入したのですが、コンテンツをFTPでサーバにアップしようとしても 接続するのですが、既存のファイル名やディレクトリ名が、一切表示されないのです。 しかたなく、ユーザサポートに電話しても、「そんな馬鹿な・・・」と 冷たく言われる始末。。。 押し問答の末、担当者が「ブラウザから ftp://(username):(password)@(server)/(directory) と 入力すると、何が表示されますか?」というので、やってみると アクセス権表示(rwxr--r--)しか表示されないのです。 担当者曰く、「本来は、ファイル名やタイムスタンプが表示されるべきですが、 サーバの設定がおかしいみたいですね!」と冷たい回答。 サーバ担当者に問い合わせても、「他のホームページ作成ツールじゃ、 問題なくFTP出来ますから、そのツールのバグじゃないですか?」と 言われました。 ちなみに、マシンはSun, OSはSolaris 2.6, WWWはNetscape Enterpriseです。 何を調べればよいか、見当もつきません。 よろしくご教示ください。 |
|
> ちなみに、マシンはSun, OSはSolaris 2.6, WWWはNetscape Enterpriseです。 server 側の ftpd は Solaris 付属の ftpd ですか? Solaris の ftpd のファイルリスト表示って癖があったように思います。 Fetch という Mac の ftp クライアントでもファイル一覧は まともに表示されなかったことがありました。 これは、日本語版の Fetch なら対応しているんですが。 LIST か NLIST か詳しいことは忘れましたが、その表示が変わっていて 少なくとも古い Solaris の一部にはそういう癖があるので、別の ftpd 入れて見て試されては? NcFTPd とか UW_ftpd とか。 > SolarisのAwkでは動きませんでした、、、、 今度試してみます。 |
|
手抜きして、表示時に TAB を変換することにしてみました。 s|^(\t+)|' ' x length($1)|e; > 「ブラウザから ftp://(username):(password)@(server)/(directory) と > 入力すると、何が表示されますか?」というので、やってみるとアクセス > 権表示(rwxr--r--)しか表示されないのです。 rosegarden さんのおっしゃるとおり ftpd の問題なんでしょうが、 考えられるのは ・NLST だとファイル一覧がうまく取れないのかもしれない。 ・inetd が LANG=ja で実行されているため、inetd から呼ばれる ftpd も LANG=ja になり、日付が日本語になってしまう (11月14日など) てなところでしょうか。 で、他の ftp サーバを相手に試してみるとか、その ftp サーバに ftp -d で anonymous login して、プロトコルを見てみる (うまく いく ftp サーバとプロトコルの内容を比較する) などなど。 ちなみに ftp のファイル一覧の形式は、RFC で規定されていません。 一般的には ls -l の表示形式であることが多いですが、ls -l の 形式にすべしとはどこにも書いてありません。 > 例えば、windowの一部が画面の外側に出ている状態で、 > そこからwindowを現在ある位置から移動したとき、 > EXPOSEイベントがたくさん飛んで来るようで、 うーん、状況がよくわからんです。 http://X68000.startshop.co.jp/~68user/xprogram/xlib-3.html のように、ウィンドウ内に子孫ウィンドウを作ってますか? 子孫ウィンドウで Expose イベントに対応していないため、 上位のウィンドウにイベントが上昇伝播していて、その 結果複数のイベントが飛んできていませんか? もしそうなら、子孫ウィンドウでも XSelectInput して、 イベントが飛んできたら、どこ宛 (親ウィンドウ or 子 ウィンドウ) のイベントかどうかを判定し、適切な ウィンドウを再描画すればよいです。どのウィンドウ宛かは event.window でわかります。 1つのウィンドウでも発生するなら、 Expose が飛んできたとき、XCheckTypedEvent で さらに別の Expose イベントが飛んできていないか 調べる。 という方法があります。 case Expose: while (1){ if ( ! XCheckWindowEvent(display, window, ExposureMask, &event) ){ break; } てな感じ。ただし、根本的な解決方法かどうかはわかりません。 |
|
昨日間違って /var/adm のfileと subdirectoryをすべて削除してしました。、、、、、それが何なのか分からず、後でほかのUnixからコピーすればいいと思って昨日そのままShutDownしてしまったのですが、今朝起ち上げる時にcannot create car/adm/utmp or utmx. Failed to write of untmx entryというエラーが出て起ち上げられません。Ultra5+Solaris1.1.2なのですが、CDRomからそのDirectoryだけInstallする方法はありますか? |
|
Solaris 2.5.1 以降のことしか分からないんですが、 > 昨日間違って /var/adm のfileと subdirectoryをすべて削除してしました。 そこにあるのはログファイルの類だけです。sulog とか loginlog とか messages とかです。ログファイルが決定的な意味を持たないのなら問題ないです。 どっちにしても、CD-ROM にあったとしても元には戻りません。 utmp とか utmpx とかはログインとかの記録を保持するファイルです。当然 boot した時間や shutdown した時間も記録するので、それで文句を言うのでしょう。 私はこれを更新する際には実にアバウトに # cat utmp > utmp # cat utmpx > utmpx とかで済ませています(環境は Solaris 2.5.1 ですが)。だから空のファイルが あれば問題ないかと思います。空のファイルを作っておけば良いだけなので、 スイッチをいれた直後に L1+a で ROM モニタモードに移行してから、 boot -s して、/var をマウントして touch コマンドあたりで空のファイルを 作れば良いかと思います。あるいは、起動時に utmp がないと文句を言われて 止まった時に CTRL-C とか打ち込んでもブートの続きが始まるかも知れません。 CD-ROM にこだわるのなら、やはりスイッチいれた直後に L1+a で ROM モニタ モードに移行してから、OK プロンプトに boot cdrom すれば CD-ROM から たちあがあります。Solaris 1.1.2 は知らないのですが、2.5.1 以降だと Openwin が使えて、cmdtool なんかも好きなだけ使えます。で、適当な ところに手動で /var をマウントしてからコピーすれば良いかと思います。 参考までに Solaris 7 のインストール CD-ROM の /var は次のように なっています。tar でコピーするとか、 手動で同じもの作っても問題ないんじゃないでしょうか? # ls -alRF /tmp/root/var/adm total 8 drwxrwxr-x 4 root sys 2048 Jul 31 1999 ./ drwxr-xr-x 16 root sys 2048 Jul 31 1999 ../ -rw------- 1 kmem kmem 0 Jul 31 1999 aculog drwxrwxr-x 2 tty tty 2048 Jul 31 1999 log/ drwxrwxr-x 2 tty tty 2048 Jul 31 1999 passwd/ -rw-rw-rw- 1 operator kmem 0 Jul 31 1999 spellhist -rw-r--r-- 1 root kmem 0 Jul 31 1999 utmp -rw-r--r-- 1 root kmem 0 Jul 31 1999 utmpx -rw-rw-r-- 1 tty tty 0 Jul 31 1999 wtmp -rw-rw-r-- 1 tty tty 0 Jul 31 1999 wtmpx ./log: total 4 drwxrwxr-x 2 tty tty 2048 Jul 31 1999 ./ drwxrwxr-x 4 root sys 2048 Jul 31 1999 ../ ./passwd: total 4 drwxrwxr-x 2 tty tty 2048 Jul 31 1999 ./ drwxrwxr-x 4 root sys 2048 Jul 31 1999 ../ # 長くってすみません |
|
rosegadenさん 回答どうもありがとうございます。 おっしゃる通り、空のファイルを作っただけで起ち上げに成功しました! あーよかった。 L1というのはKeybordについているのですか? その他色々わからないTerminologyがあるのですが、その辺は またゆっくり調べてみます。 ご指導どうもありがとうございました! |
|
はじめまして 実は今Linuxでデーモンプログラムの勉強をしてるのですけど、 よくわかりません。 デーモンプログラムってループして実行時に&でバックグラウンド でいいんでしょうか? HP探しててもサンプルソースが見つからないし‥ よろしかったら教えて下さい。お願いします。 |
|
> デーモンプログラムの勉強をしてるのですけど まずはここを読んで下さい。結構面倒です。 http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16 実行時に明示的に & でバックグラウンドにしなくても、 自力でデーモンとして常駐 (って UNIX ではあんまり 言わないか) するのが望ましい挙動です。 ところで Netscape6 が出ましたね。 http://www.netscape.com/index.html |
|
68user さんありがとうございました。 自分はデーモンについての知識がまだたりませんね。 HPを見て勉強します。 |
|
お忙しいところすいません。初めまして、はぴおと申します。 ネットワークプログラミング大変分かりやすく、勉強させて いただいております。 このサイトを参考にPerl(CGI)でPOP3クライアントをつくったのですが、 一つだけ分からないことがあります。 色々な本やサイトを見ても、FROMヘッダーにはメール送信者の名前と メールアドレスが入ると思うのですが、自作POP3クライアントで メールを受信した場合、FROMヘッダーにはメール送信者名しか入りません。 同じメールをOutlookで受信してみると、同じメールでもちゃんとFROM ヘッダーに、メールアドレスが付加されてました。 以下自分の推測なのですが、色々と理由を自分なりに考えてみました。 ・自作POP3クライアントが正しくメールを受信できていない。 ・正しくメールを受信できているが、ほかにやらなければいけないこと がある 昨日一日、色々なサイトをまわったり、本を調べたり、MLで聞いて みたりしましたが、分かりませんでした。 藁にもすがる思いでココに書き込んでます。 どうかご意見をお聞かせ下さい。 それでは宜しくお願いします。 以下参考になるか分かりませんが、私の環境です。 -OS: WIndows2000 -Perl : ActivePerl Build 620 -apache_1_3_12_win32 はぴお lovex@bd.mbn.or.jp |
|
初めて投稿させていただきます。 UNIX歴2か月の初心者で 今初めてシェルプログラミングに挑戦してます。 作成したいものは、lastcommで前日のログ履歴を出し、管理者宛にメールを 送るというものなのですが早速つまずいてしまいました。 現在の日付(MON,DAY)を取得するまではできるのですが、”前日”をどうやって表現すればいいのかわからず困っています。 DAYを-1しようとしたのですがうまくいきません。 以下のように記述しています。 どなたかご存知の方、ご教授お願いします。 LANG=C; export LANG BUF= set `date` echo $2 # "Nov"と表示されます echo $3 # "15"と表示されます expr $3 -1 > $BUF # expr: syntax errorになります |
|
68userさんいつも助けていただいて感謝です。 case Expose: while (1){ if ( ! XCheckWindowEvent(display, window, ExposureMask, &event) ){ break; } これを使ってみたところちゃんと一回だけ描画してくれました。 こんな関数もあったんですね。 勉強不足で申し訳ありません。 根本的に解決できなくても動いてくれれば とりあえずは解決したと思っておきます。 本当にありがとうございました。 またお世話になるかもしれないですが、 そのときはよろしくお願いします。 |
|
初めましてbookと申します。 UNIXのgccで作成したライブラリを、CCでコンパイルを行う時に 使用できるのか調査しています。 gcc -c share_test.cc ar cr libtestshare.so share_test.o ranlib libtestshare.so CC test_gcc.cc -L. -ltestshare 現状は、ライブラリ内の関数を呼び出す箇所で、 コンパイルエラーになってしまいます。 そもそも、このような使い方が出来るのかどうか、 ご存知の方がいらっしゃいましたらご教授ください。 よろしくお願いします。 |
|
> ”前日”をどうやって表現すればいいのかわからず困っています。 > DAYを-1しようとしたのですがうまくいきません。 > expr $3 -1 expr $3 - 1 です。- と 1 の間にスペースが必要です。 しかし、これだと毎月1日に実行すると 0日となって しまうので、根本的にまずいです。というわけで、-v オプションを使いましょう。 % date -v-1d で1日前の日付が得られます。ただし、Solaris などの date には -v オプションはないので、sh でやるなら perl などを呼び出すのがいいでしょう。 # なので、最初から perl で書くのも手です。 > 現状は、ライブラリ内の関数を呼び出す箇所で、 > コンパイルエラーになってしまいます。 どういうエラーが出るのかちゃんと書きましょう。 FreeBSD と Solaris ではこの方法でうまく動きました。 あと、これは static link 用のライブラリですので、 拡張子は .so より .a が適切でしょう (違うかなぁ?) > 自作POP3クライアントでメールを受信した場合、 > FROMヘッダーにはメール送信者名しか入りません pop は、ただ単にヘッダとボディを送信するだけです。 From がどうだとか Subject がどうだとか、そういう データ内部には立ち入りません (基本的には)。 Outlook で「メールのソースを表示」したものと、 自作 pop3 クライアントの出力の、From: 周辺を両方 見せて下さい。 |
|
前日の日付取得の件 68userさん、ご教授ありがとうございました。 Solaris環境なのでシェルで作成するのはやめます。 perlも少し触ったことがあるのですがC言語の方が経験が長いので Cで作成しようと思っています。 が、一般的 or perlの方が効率的なのでしょうか? |
|
68userさん、早速のレスありがとうございます。はぴおです。 ちょっと長くなってしまいますが、同じメールを自作POP3クライアントと Outlookのそれぞれで受信したソースを載せておきます。 なんか"<"、">"の部分だけが読み込めてない感じです。 それではよろしくお願いします。 [自作POP3クライアント] ------------------------------------------------------------- Received: from ns.ics.lan ([202.228.221.126]) by bd.mbn.or.jp (8.9.1/bd.mbn.or.jp-2.0) with ESMTP id RAA13962 for ; Wed, 15 Nov 2000 17:26:03 +0900 (JST) Received: from kimura ([202.228.221.125]) by ns.ics.lan (8.9.3/3.7W) with ESMTP id RAA26374 for ; Wed, 15 Nov 2000 17:20:05 +0900 Message-ID: <000501c04ede$6249e4d0$5400a8c0@kimura> From: "kimura" To: "kimura" Subject: test Date: Wed, 15 Nov 2000 17:31:00 +0900 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 X-UIDL: cde5eb4f8ec74762f85d10deccb2a5a3 test [Outlook Express] ------------------------------------------------------------- Received: from ns.ics.lan ([202.228.221.126]) by bd.mbn.or.jp (8.9.1/bd.mbn.or.jp-2.0) with ESMTP id RAA13962 for <lovex@bd.mbn.or.jp>; Wed, 15 Nov 2000 17:26:03 +0900 (JST) Received: from kimura ([202.228.221.125]) by ns.ics.lan (8.9.3/3.7W) with ESMTP id RAA26374 for <lovex@bd.mbn.or.jp>; Wed, 15 Nov 2000 17:20:05 +0900 Message-ID: <000501c04ede$6249e4d0$5400a8c0@kimura> From: "kimura" <lovex@bd.mbn.or.jp> To: "kimura" <lovex@bd.mbn.or.jp> Subject: test Date: Wed, 15 Nov 2000 17:31:00 +0900 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 X-UIDL: cde5eb4f8ec74762f85d10deccb2a5a3 Status: RO test |
|
68userさん、さきほどは説明不足ですみませんでした。 エラー内容と環境を書いておきます。 よろしくご教授お願いします。 gcc -c share_test.cc ar cr libtestshare.so share_test.o ranlib libtestshare.so CC test_gcc.cc -L. -ltestshare test_gcc.ccは読み込んだライブラリ内の関数を呼び出しているだけです。 ###################### エラー内容 ###################### 未定義の 最初に参照している シンボル ファイル ShareTest::get(void) test_gcc.o __builtin_delete ./libtestshare.a(share_test.o) __rtti_user ./libtestshare.a(share_test.o) ShareTest::~ShareTest(void) test_gcc.o ShareTest::ShareTest(void) test_gcc.o ld: 重大なエラー: シンボル参照エラー。 a.out に書き込まれる出力はありません ###################### 使用環境 ###################### Kernel Architecture is sun4u OS Name is SunOS OS Version is 5.6 OS Distribution is Japanese Solaris 2.6 HW:2 s297s_hw2smccDesktop_09b SPARC Kernel Version is SunOS Release 5.6 Version Generic_105181-17 [UNIX(R) System V Release 4.0] |
|
> gcc -c share_test.cc > CC test_gcc.cc -L. -ltestshare ああ、CC って typo かと思っていたら、C++ なのか…。 # C++ は完璧に忘れたなぁ。Hello world さえ作れないです。 おそらく gcc と CC でクラス/メソッドのシンボル名の 命名規則が違うのが理由だとは思うのですが、意図的に gcc と Sun の CC を混在して使っているのですか? gcc (g++) か CC に統一できない理由があるので、調査 しているということですよね? もしそうなら、すいませんがわかりません。gcc の オプションで指定できるのかもしれませんが…。 > なんか"<"、">"の部分だけが読み込めてない感じです。 もしかして CGI として動かして HTML を吐いていませんか? んでもって < > & を (< > & に変換せず) その まま出力していたりしませんか? 根拠は以下の通り。 1. received の <〜> も出力されていない for ; Wed, 15 Nov 2000 17:26:03 +0900 (JST) for ; Wed, 15 Nov 2000 17:20:05 +0900 2. でも Message-ID は出力されている。 Message-ID: <000501c04ede$6249e4d0$5400a8c0@kimura> タグは英文字から始まる。数字が先頭にくることはない。 > が、一般的 or perlの方が効率的なのでしょうか? 僕なら間違いなく perl でやりますが、まぁそれはお好きな方で。 ちなみに sh からだと set `perl -e 'print scalar(localtime(time()-60*60*24))."\n"'` です。 |
|
> % date -v-1d > で1日前の日付が得られます。ただし、Solaris などの > date には -v オプションはないので、sh でやるなら > perl などを呼び出すのがいいでしょう。 このオプションは知りませんでした勉強になりました。 > Solaris環境なのでシェルで作成するのはやめます。 あきらめるのは早いです。 #!/bin/sh LANG=C set `date` year=$6 mon=$2 date=$3 if [ `expr $year % 4` = "0" ] ; then is_leap="YES" fi if [ `expr $year % 100` = "0" ] ; then is_leap="NO" fi if [ `expr $year % 400` = "0" ] ; then is_leap="YES" fi date=`expr $date - 1` if [ "$date" = "0" ] then case $mon in Jan) mon="Dec" date=31 ;; Feb) mon="Jan" date=31 ;; Mar) mon='Feb' if [ "$is_leap" = "YES" ]; then date=29 else date=28 fi ;; Apr) mon="Mar" date=31 ;; # 以下略 *) ;; esac fi echo The yesterday is $mon $date. なんていう面白味も芸もないスクリプトなら Solaris でも動くんじゃないかと 思いますよ。 もっとも、 > 作成したいものは、lastcommで前日のログ履歴を出し、管理者宛にメールを > 送るというものなのですが早速つまずいてしまいました。 この用途なら、日付の計算は不要で前々日分までの lastcomm のログの バックアップをとっておいて、前日分との差分を diff でとるという方法もあります。 (ただし、lastcomm のログなので、GB 単位になってもおかしくないのですが。) FreeBSD なんかのセキュリティチェックは全部前日分までのバックアップと 本日分のログの差分抽出でやっていますね。 # また長くなりすみません。 |
|
> あきらめるのは早いです。 うーん、ごもっとも。恥ずかしながらこういう 方法には全く気づきませんでした。 |
|
68userさん、ご教授ありがとうございました。 gccのオプション調べてみます。 |
|
こんにちは、はぴおです。 68userさんレスありがとうございました。 非常に恥ずかしい話ですが、68userさんのおっしゃる通りです。 何で気が付かなかったんだろうか??? ありがとうございました! HTTP、SMTP、POP3ができたので、今度はFTPをやろうかと 思います。 |
|
お世話になります。 実は今、C言語でCGIの勉強をしているのですけど、 CGIのデバッグってどうやるんでしょうか? もしかして、動作確認はいちいちブラウザで確認するしかないのですか? つ、つらい‥ なにか、効率的なデバッグ方法を知っていらしたら 教えて下さい。お願いします。 |
|
> もしかして、動作確認はいちいちブラウザで確認するしか > ないのですか? まさか :-) CGI というのはインタフェースです。 ブラウザからの情報を、環境変数と標準入力経由で プログラムに引き渡すインタフェース。それが CGI。 だから、 % env REQUEST_METHOD=GET QUERY_STRING='hoge=1&fuga=2' ./foo.cgi とか % set content='number=123&str=%21%22%23' % echo -n $content | env REQUEST_METHOD=POST CONTENT_LENGTH=`echo -n $content|wc -c` ./foo.cgi とかとか、 #ifdef DEBUG #define INPUTFILE_FOR_DEBUG "debug.txt" { char tmp[128]; struct stat sb; setenv("REQUEST_METHOD", "POST", 1); stat(INPUTFILE_FOR_DEBUG, &sb); sprintf(tmp, "%d", sb->st_size); setenv("CONTENT_LENGTH",tmp , 1); freopen(INPUTFILE_FOR_DEBUG, "r", stdin); /* この使い方合ってるっけなぁ… */ } #endif とかとかとか。 |
|
こんにちは。 掲示板のファイルに書きこむ部分で、 「web と CGI のひみつ」の「掲示板を作ろう (2)」の最後にある テンポラリファイルに書き込んでからrenameする方法いいなと思ったのですが、 これだとrenameするときに衝突する可能性ありますよね? http://www.wakusei.ne.jp/twn/wwwlng.cgi?print+200003/00030031.txt ここにあるcheck-lockスクリプト(いつもありがたく使わせていただいてます m(_ _)m ) でやってみようと思うのですが、うまくrename時の衝突を回避する方法があればご教授ください。 |
|
http://x68000.startshop.co.jp/~68user/net/sample/echo-server-1.c このコードのバグを見つけました。 コンパイルして動かすとacceptで失敗するのでこっちの設定が 悪いんだろうと思ってFreeBSD関連のメーリングリストを 検索していたら原因がわかりました。 connected_socket = accept(listening_socket.... の上に len = sizeof( sin ); が必要です。 バグの理由は http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/43141 です。 |
|
はじめまして。 No.1389の指摘のついでですが len = sizeof(peer_sin); は、いらなんじゃないですか? バグの理由でも書かれてるとおり acceptの第3引数は、入出力両用ですので 帰ってきた値をそのまま使うのが正しいと思うのですけど。 |
|
> len = sizeof( sin ); > が必要です。 なるほど、確かに FreeBSD 4.2-BETA で動かすと accept に 失敗していました。これまではたまたま動いていたわけですね。 修正しておきます。ありがとうございます。 > len = sizeof(peer_sin); > は、いらなんじゃないですか? こっちの getpeername のは必要だと思います。以下 getpeername(2) より。 Getpeername() returns the name of the peer connected to socket s. The namelen parameter should be initialized to indicate the amount of space pointed to by name. On return it contains the actual size of the name returned (in bytes). The name is truncated if the buffer provided is too small. > これだとrenameするときに衝突する可能性ありますよね? えっと、あの例では rename は使っていません。あの後 排他処理に ついて書くつもりでしたが、時間がなくて全く手を付けていません。 > うまくrename時の衝突を回避する方法があればご教授ください。 もし rename でやるとしても、それ以前に複数のプロセスが tmp_file へ同時に出力しようとする可能性があるので、あの 部分全体を排他する必要があります。 で、方法ですが、適当なロックファイルを用意して排他処理を 行えばよいです。flock でも symlink でも mkdir でも rename でも 何を使っても構いません。 |
|
返事どうもありがとうです。 > えっと、あの例では rename は使っていません。 よく見てませんでした。申し訳ないです。。 > もし rename でやるとしても、それ以前に複数のプロセスが > tmp_file へ同時に出力しようとする可能性があるので、あの > 部分全体を排他する必要があります。 なるほど。そこで、お教えいただいた通りにちょっと改造してみました。 # 毎回違う名前で作る $tmp_file = 'bbs'.$$.'.tmp'; open(TMP_OUT,"> $tmp_file"); print TMP_OUT "発言者: $from<BR>\n"; print TMP_OUT "$now_date $host<BR>\n"; print TMP_OUT "$message<HR>\n"; open(IN,"$data_file"); while (<IN>){ print TMP_OUT $_; } close(IN); close(TMP_OUT); # tmp_file の内容を $data_file にコピーするだけ #open(TMP_IN,"tmp_file"); #open(OUT,"> $data_file"); #while (<TMP_IN>){ # print OUT $_; #} #close(TMP_IN); #close(OUT); # コピーのかわりに、$data_fileにrename # その前に排他処理。 $lock_file = 'bbs.lock'; touch($lock_file); open(IN,"$lock_file"); flock(IN, 2); rename($tmp_file, $data_file); close(IN); unlink($lock_file); # 必要ない?? これで完璧ですか?? 読みこみ専用でオープンしてるのにflock()のオペレーションが「2」って どうなんですかね。ちゃんと書きこみモードでオープンしなきゃだめですか?? 改善点があればご教授くださいませ。 長文すみませんでした。 |
|
>> len = sizeof(peer_sin); >> は、いらなんじゃないですか? >こっちの getpeername のは必要だと思います。以下 getpeername(2) より。 失礼しましたぁ。。勘違いです。 きっちりしたサイズを指定しなくてもよかったんですね。 小さい場合は切り詰めるって仕様も最初は意味不明でしたが、 よく考えると最低でもアドレスファリは所得できそうなので有用ですね♪ |
|
いつもすいません、ふくしです。 LDAP の使い方でこんなことができるかどうかどなたか相談に乗ってください。 Microsoft Exchange Server のアドレス帳で、集団のアドレス (営業部 <markettng@nantoka.org とか)があって、 そこに送るとたくさんのひとに (yamada.tarou@nantoka.org、satou.hanako@nantoka.net、、)に 行くようになっているとき、組織名を渡してこの構成員一覧を返す アプリケーションを作ろうと思っています。 Exchange は LDAP を受け付けるときいたので、 Perl に Net::LDAP をインストールして、 サンプルをいじって使ってみたのですが、 marketting というメール アドレスが「ある」ことはわかるところまで いったのですが、その内容まではわかりません。 ご存じの方がいらっしゃいましたら、よろしくお願いします。 |
|
ちょっと前にHTTPのセパレータの話がありましたが、 どうも最近の携帯の中には、\r\nにしか対応していないものもあるようで、 友人からの「携帯からアクセスできない」との苦情に対応方法がわからず、 「まさか」と思いつつもこれまで\n\nとしてきたセパレータに\r\nを加えてみたところ、 ちゃんと読んでくれるようになりました。 これはうちのサーバの設定の仕方がおかしいんでしょうか。 (普通は\r\nに勝手に変換してくれるものなんですか?) それともCGIの方で正式な\r\nに対応すべきなんでしょうか。 |
|
どうもこんにちは、 Winsock初心者のYOUと申します。 ソフトバンクの、「Winsock2.0プログラミング」という本を 買ってきたのですが、手始めに、サンプルのCH02->Hostinfo をビルドしようとすると、以下のようなエラーが出てしまいました。 プロジェクトへのリンク等には、特に何も指定していません。 どうすれば、解決出来るのでしょうか。 --------------------構成: Win - Win32 Debug-------------------- リンク中... Hostinfo.obj : error LNK2001: 外部シンボル "_WSACleanup@0" は未解決です Hostinfo.obj : error LNK2001: 外部シンボル "_WSAStartup@8" は未解決です Hostinfo.obj : error LNK2001: 外部シンボル "_inet_ntoa@4" は未解決です Hostinfo.obj : error LNK2001: 外部シンボル "_WSAGetLastError@0" は未解決です Hostinfo.obj : error LNK2001: 外部シンボル "_gethostbyaddr@12" は未解決です Hostinfo.obj : error LNK2001: 外部シンボル "_gethostbyname@4" は未解決です Hostinfo.obj : error LNK2001: 外部シンボル "_inet_addr@4" は未解決です LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です .\Debug/Win.exe : fatal error LNK1120: 外部参照 8 が未解決です。 link.exe の実行エラー Win.exe - エラー 9、警告 0 よろしくお願いします。 |
|
はじめまして。Elmoです。 telnetでポート80を指定して、”GET”と”Host:”を実行するシェルスクリプト(bash)を作成したいのですが、どうやって、シェルからGETとHost:を実行すればいいのかわかりません。ちなみに、”echo”とパイプを使用してみましたが出来ませんでした。 わかる方、教えて下さい!! |
|
has 殿へ。11/25 (土) に行けたら行きます。仕事次第。 では手短に。 > (普通は\r\nに勝手に変換してくれるものなんですか?) apache だと変換してくれないですね。 > それともCGIの方で正式な\r\nに対応すべきなんでしょうか。 です。でもうちではやってません。いけませんなぁ。 > LDAP の使い方でこんなことができるかどうかど LDAP は勉強しようとしたことはありますが、どうやっても LDAP サーバをあげられず断念しましたので、わかりません。 でも、get_values とかでダメですかねぇ。 > .\Debug/Win.exe : fatal error LNK1120: 外部参照 8 が未解決です。 僕は Windows の開発環境を持っていないので、わかる方に おまかせします。 > 読みこみ専用でオープンしてるのにflock()のオペレーションが「2」って > どうなんですかね。ちゃんと書きこみモードでオープンしなきゃだめですか?? 試してませんが、心配ならば open(IN,"> $lock_file") と すればいいでしょう。 あと、ロックを開始する場所は open(TMP_OUT,"> $tmp_file"); です。rename の部分だけロックすると、ファイルは壊れませんが 同時に発言しようとしたとき、一方の発言が反映されないです。 それから、失敗する可能性のある場所では、エラーチェックを 必ずしましょう。例えば、OS によってファイルを同時にオープン できる数というのは決まっているので、それを越える open は 失敗します。もし open(IN,"$lock_file"); が失敗したらその後の flock も無意味になり、ロックが働きません。 > telnetでポート80を指定して、”GET”と”Host:”を実行する > シェルスクリプト(bash)を作成したいのですが (sleep 3; echo "GET /index.html HTTP/1.0"; echo "Host: foo.bar.com") | telnet foo.bar.com 80 てな感じで。 |
|
改行が足りてない。 (sleep 3; echo "GET /index.html HTTP/1.0"; echo "Host: foo.bar.com"; echo ) \ | telnet foo.bar.com 80 でした。 |
|
はじめまして。 プログラミングは超初心者で、ここで質問して回答してもらえるのかどうか もわからないのですが、もし答えていただけるならば教えてください。 HTMLにJPGやGIFを貼り付けているのですが、マウス右クリックで 「画像を名前をつけて保存」ってできてしまいますよね。これを保存できな くする方法ってあるんですか?拡張子を変える、とか。 よろしくお願いします。 |
|
> ちかさま。 表示してる時点で、保存もできます。。 保存しにくくするのなら、JavaScriptとかで、できそうだけど。 |
|
はじめましてフ−ミンと申します。 CGIを初めたばかりで分からない事があるので質問させて下さい。 おそらくものすごく初歩的な事だと思うので悪いのですが…。 今「何とか度鑑定」みたいなのをPerlで作っているのですが、 色々なこういうサイトを参考にしても、質問が多くなってくると、 必然的に画面をスクロールしなくてはなりませんよね。 デザイン的にどうかと思っているのです。 そこで、質問を数ページに分ける方法を教えて頂きたいのです。 VALUE値を次のページまで持ち越すには多分、 INPUT TYPE=hiddenとかが関係しているのは分かるのですが、 具体的にどうしたらいいのか全く分からないのです。 こんな初心者ですみません。ヒント程度でもお答え頂ければ 幸いです。それでは失礼いたします。 |
|
yamamaさん、どうもありがとうございます。 printScreenされちゃうと終わりですよね(^ ^; JavaScript ですか。勉強してみます。 |
|
>YOUさん #include <windows.h>とか #include <winsock.h>とか ヘッダファイルをincludeしてますか? |
|
> 今「何とか度鑑定」みたいなのをPerlで作っているのですが、 他の BBS とマルチポストしているのなら、その旨書くべき だろうと僕は思います。答えを得たいために無節操にいろんな ところで質問しまくるのは、回答してくれる人に失礼でしょう。 > マウス右クリックで「画像を名前をつけて保存」ってできて > しまいますよね。 いろいろと保存しにくくする方法はありますが、 http://www06.u-page.so-net.ne.jp/wa2/mugi/hp/jsindex.htm ある程度知ってる人に対しては無力です。個人的には、 コピーしてほしくないものはインターネット上に置かない のが一番だと思っています。 |
|
>68userさん まったくもってその通りです。 あせって、つい自分の事しか考えられなくなっていました。 反省しています。どうもすみませんでした。 |
|
どうもこんにちわ。 最近Qtに手を出し始めたいえろーばっくすです。 ところが早速わからないことが出てきてしまって・・・・ QStringクラスのtoInt( bool *ok=0, int base=10 )関数 の使いかたをご教授ください。 QLineEditからtext()関数でQStringに読み込んだ値を intに変換したいんですが、読み込んだ値を表示させても 必ず0にしかならなくて困ってます。 どなたかわかるかたいらしたらお願いします。 |
|
> 読みこみ専用でオープンしてるのにflock()のオペレーションが「2」って どうなんですかね。ちゃんと書きこみモードでオープンしなきゃだめですか?? 読み込みモードで「2」だと、Solarisではflockが利かないようです。「1」なら大丈夫です。わたしのページですが、Perlの排他制御についてまとめてあります。 http://homepage1.nifty.com/glass/tom_neko/web/web_04.html |
|
@YOUさん もう解決してらっしゃるかもしれませんが・・・ wsock32.lib(もしくはws2_32.lib)をリンクしてみてください。 もうひとつ、WinMainが未解決だって言われてるのは、 プロジェクトをコンソールアプリでつくって ソースがwin32アプリのものだからじゃないでしょうか。 win32アプリでプロジェクトをつくり直してみてください。 |
|
お答え頂いてとてもありがとうございます。 さっそく (sleep 3; echo "GET http://www.geocities.co.jp/.../rfc2068-ja.txt HTTP/1.0"; echo "Host:") | telnet www.geocities.co.jp 80 でやってみたのですが、telnet後、GET,Host:コマンドを実行せずにそのままtelnetを終了してしまいます。どうしてか、教えて下さい!! どうぞよろしくお願いします。 |
|
どうも。いえろーばっくすです。 この前の質問なんですが、なにやらtoInt関数以外のところで つまづいてるっぽいことが発覚しました。 プログラムを最小単位にして確認してみたところ ちゃんとtoInt関数は使えてました。 確認怠って質問してしまってすみませんでした。 まだ不具合は解消されてないのですが、 とりあえずがんばってみます。 板汚してすんませんでした。 |
|
返事遅れてすみませんでした。 ファイル書き込み(排他処理)の件、勉強になりました。 あとでやってみようかと思います。 ありがとうございました。 |
|
68user殿 アドバイスありがとうございました。 教えていただいたサイトには「障害が多いのでやめます」って 書かれていました。ショック・・・。 ほかにどこかありましたら、アドバイスお願いします。 |
|
> telnet後、GET,Host:コマンドを実行せずにそのままtelnetを > 終了してしまいます。 おろ、最後にも sleep が必要だった。んでもって、echo だけじゃ 改行が出ないのか。 ( sleep 2 ; \ echo "GET /index.html HTTP/1.0" ; \ echo "Host: www.goo.ne.jp" ; \ echo "" ; \ sleep 2 ) | telnet www.goo.ne.jp 80 これでも不完全なような気がする。 まぁ、この方法では所詮完全なクライアントは作れません。 どうしても perl でなくて bash でやりたいなら、except コマンドを使いましょう。 > 最近Qtに手を出し始めたいえろーばっくすです。 ちなみに Qt は全く知りません :-) じゃあ Gtk+ がわかるか というと、こっちもわかりません。でも、Xaw がわかんないが 一番痛い。 |
|
お教え頂き本当にありがとうございました。本当に感謝しています。 さっそくやってみたところ、大成功でした。 ただ、”不完全だ”というコメントが気になります。 manで、exceptコマンドをさがしてみたのですが、見つかりません。 そこで、簡単なexceptコマンドの使用例を教えて下さい。 あともう一点、 awkコマンドで、以下のように全角空白でsplit出来てしまうのですが、これは大丈夫なのでしょうか? kanji_n = split ($44, kanji_name, " ") gawkでなくても大丈夫ですか? 何度も申し訳ありません。よろしくお願いします。 |
|
> これでも不完全なような気がする。 これは多分勘違いです。シェルスクリプトでやる以上は、まぁ ベストに近いでしょう (ベストだと言い切る自信はない)。 ただし、 > まぁ、この方法では所詮完全なクライアントは作れません。 この見解は正しいです。なぜなら telnet の接続に 2秒以上 かかったら、もうおしまいです。telnet を使う方法は、所詮 クライアントもどきでしかありません。 > exceptコマンドをさがしてみたのですが、見つかりません。 普通 expect は標準では入っていません。お使いの OS の パッケージをインストールするか、ソースを手に入れて コンパイルして下さい。で、まずは man をよく読みましょう。 ちなみに僕は expect は使ったことがないので、多分答えられ ないと思います。 > awkコマンドで、以下のように全角空白でsplit出来てしまうのですが うーん、それで動いているのならいいんじゃないでしょうか。 awk って言ってもいろいろ亜種があるので、なんとも言えません。 |
|
初めまして、kmkです。 質問があるのですが、PCからUNIXへftpする際に 2Gを超えるファイルがはじかれたのですが、 limitで見るとfilesizeは無制限で、datasize が2Gチョイの制限になっていました。 マニュアルを見ても、なぜdatasizeでひっかかるのか 理由がわからないので、ぜひ教えてください。 |
|
Linux あたりなら、最近まで1つのファイルの最大サイズが 2GB まで、という制限があったそうですから、それじゃないで しょうか。 FreeBSD だと 5GB くらいは作れたという報告はみかけましたが、 最大サイズはわかりません。ちなみにファイルシステムとしての 最大サイズは、Linux も FreeBSD も 1TB か 2TB (忘れた) です。 商用 UNIX だと 1ファイル 1TB くらいはいくのかな? # でも Solaris2.6 だと最大 2GB だったような気も。 |
|
ありがとうございました。助かりました。 素直に、gzipで圧縮して、送ることにしました。 本当にありがとうございました。 |
|
ん、gzip で圧縮して送って、向こうで伸張できたのですか? なら最大ファイルサイズは関係なかったですね。 |
|
どうもお世話になります。 質問があるのですが、 プロセス中で動的メモリをmallocで取得して、そのプロセスが異常終了 (freeせずに)した時に取得した動的メモリは開放されるのでしょうか? #聞いた話によると確保した動的メモリは開放されずにそのまま #メモリに残ると聞いた事があります。 |
|
> 取得した動的メモリは開放されるのでしょうか? UNIX では必ず解放されます。 # OS のバグがない限り |
|
複数個(MAX100個)のウインドウを開く為に Display *display[100] Widget top_level[100] の行列で宣言して forループで,条件にヒットした場合のみ XtRealizeWidget(top_level[i]);などと コード化してみましたが,WINDOWが1つしか 表示しません.行列でwidgetを宣言するのに 問題があるのでしょうか?? |
|
>> 取得した動的メモリは開放されるのでしょうか? > UNIX では必ず解放されます。 元の質問とは大きく外れますが、共有メモリ(ipcs -mで見える)だと残りますね。 単なるFYIですが。 |
|
詳細はコード見ないと指摘できませんが、 > 複数個(MAX100個)のウインドウを開く為に > Display *display[100] ここだけ見ても、Displayに対する誤解がある気がします。 DisplayはXサーバとの接続ポイントです。 (socketとは限らないですが)分かりやすく言えば、socketを100用意して、それぞれ独立にサーバにつなごうとしているようなものです。 # 原理的には可能ですが、100のイベントループを管理するプログラムを書くのは嫌ですね。 |
|
補足ですが、Xt では XtDisplay(top_level) で Display * が 得られるので、Display を自前で用意する必要はありません。 % grep XtDisplay /usr/X11R6/include/X11/* IntrinsicP.h:#define XtDisplay(widget) DisplayOfScreen((widget)->core.screen) |
|
突然に書き込みで質問させていただく失礼をお許しください。 現在、ソケット通信(TCP/IP、マルチ)を行うプログラムを、 参考書などを調べながら作っております。 正直、概念などが良くわかっておりませんので、的外れな 物言いがあるかもしれませんが、御容赦ください。 現在、作成しようとしているシステム(X:仮名)では、 対向するYシステムと通信します。 また、Xシステム内部のプロセス間でも、クライアント・ サーバ間の通信を行います。 これらの通信に於いて、タイマを用意し、ヘルスチェックを 行おうとしていますが、この場合のタイマを、どのような形で 用意したものかで悩んでおります。 それぞれのプロセスの中から fork()したタイマで、上記のような 動作を行おうとしているのですが、この方法で大丈夫でしょうか? (事前の知識がありませんもので、不安を感じております。) あるいは、このような場合の、なにか、セオリーのようなもの というのは、あるのでしょうか? どうか、教えてくださいませ。 |
|
<AWKを使用した2つのファイルの文字列比較について>ご教授願います サンプルファイルです... <Input File1> <Input File2> <<Output File>> X01 X01 X025 X02 X02 X03 X03 X025 X04 X04 X07 X05 X05 X08 X06 X06 X099 X099 X07 X09 X08 X10 X09 X10 Input File1の文字列と Input File2の文字列の比較をします 結果としてOutputFileの出力を得たいのですが... 条件(雑でスミマセン) InputFile1の文字列が InputFile2の各文字列と一致する=出力しない InputFile1の文字列が InputFile2の各文字列と一致しない=出力する このケースでは InputFile1だけに存在する文字列 InputFile2だけに存在する文字列 がありますが InputFile2内の文字列を優先し (例) InputFile1の”X02"を比較するとき InputFile2”X02” は一致している => 出力しない 次のInputFile1の文字列”X03”を比較するとInputFile2の” 次行”である”X025"は一致していない (※) => X025 X03 の様にInputFile2の文字列”X025"を出力後InputFile1の”X03”を出力 InPutFile1の”X04 - X06"はInputFile2に含まれない =>そのまま出力 "X07 - X08"は双方含まれるので出力しない X09 の処理は(※)と同様に => X99 X09 の順で出力します(数としての比較ではありません) X10はInputFile2に含まれない =>そのまま出力 (AWK本も2冊買い込み(良い参照本があったら紹介願います)さらに同種質問の過去ログ”No. 1342”を参考(goo の"awk"検索でやっとこのHPにたどり着きました...)に考えてみたのですがどうしてもうまく作成出来ませんでした、AWK使いの方々:どうぞ宜しくお願いいたします) |
|
No.1428の修正です 申し訳ありません、サンプルファイルのスペースがおかしく なってました再送させていただきます。 <Input File1>____<Input File2>____<<Output File>> X01________________X01________________X025 X02________________X02________________X03 X03________________X025_______________X04 X04________________X07________________X05 X05________________X08________________X06 X06________________X099_______________X099 X07___________________________________X09 X08___________________________________X10 X09 X10 Input File1の文字列と Input File2の文字列の比較をします 結果としてOutputFileの出力を得たいのですが... 条件(雑でスミマセン) InputFile1の文字列が InputFile2の各文字列と一致する=出力しない InputFile1の文字列が InputFile2の各文字列と一致しない=出力する このケースでは InputFile1だけに存在する文字列 InputFile2だけに存在する文字列 がありますが InputFile2内の文字列を優先し... 以下例文です InputFile1の”X02"を比較するとき InputFile2”X02” は一致している => 出力しない 次のInputFile1の文字列”X03”を比較するとInputFile2の” 次行”である”X025"は一致していない (※) => 025 X03 の様にInputFile2の文字列”X025"を出力後InputFile1の”X03”を出力 InPutFile1の”X04 - X06"はInputFile2に含まれない =>そのまま出力 "X07 - X08"は双方含まれるので出力しない X09 の処理は(※)と同様に =>X099 X09 の順で出力します(数としての比較ではありません) X10はInputFile2に含まれない =>そのまま出力 (AWK本も2冊買い込み(良い参照本があったら紹介願います)さらに同種質問の過去ログ”No. 1342”を参考(goo の"awk"検索でやっとこのHPにたどり着きました...)に考えてみたのですがどうしてもうまく作成出来ませんでした、AWK使いの方々:どうぞ宜しくお願いいたします) |
|
そもそも > ヘルスチェック という言葉を初めて聞いたのですが (health check?)、文脈 からして正しく通信ができているかどうか調べ、一定時間 正常な反応がないならエラーにするという意味でいいですか? 目的にもよりますが、 1. サーバマシンが生きていて、network reachable かどうかを 調べるなら定期的に ping を打つ 2. TCP スタックが生きていることがわかればいいなら、定期的に echo サーバに接続。 3. サーバソフトウェアが生きていることを確認するなら、NOP の ような何も処理をせず返事を返すだけのプロトコルを実装し、 それを使って定期的に確認。 4. 該当スレッドが生きていることを確認するなら、select や alarm でタイムアウト処理をして、一定時間反応がなければ エラー、という処理をする。 ってなところです。どれがお望みですか? 当然 1 が簡単 ですが、信頼性のあるのは 4 ですね。 全然関係ないところに反応するのもアレですが > AWKを使用した2つのファイルの文字列比較について おお、化けてる。しかも元データは… http://X68000.startshop.co.jp/~68user/tmp/01428 http://X68000.startshop.co.jp/~68user/tmp/01429 正しそう。掲示板のバグですね。どこらへんだろう。 さて、本題は…今日は体力の限界に達したので…また後程。 朝起きたら誰か親切な人が答えてくれてるといいなと思いつつ、 おやすみなさい。 # 気になるのは Input File1 と Input File2 の内容は、文字列 # としてソートされていることが保証されているか、ってとこ # ですか。されているなら簡単。されていないなら…それでも # そんなめんどくさいことじゃないかも。 |
|
ほうぼうで話題になってるのでご存知の方も多いでしょうが、FYI。 WXG for Linux/FreeBSD http://www.ekotoba.com/ フリーソフトです。Canna プロトコルをしゃべりますので、 クライアント側の環境設定は必要ありません。 入れ換えるには cannaserver を殺して、/tmp の.iroha-unix や .ki2-unix (kinput2 を使っている場合) を削除し、wxgserver を 実行するだけです。で、どれくらい賢いかと言うと…(fj で見かけた ネタですが)、 cannaserver 貴社の貴社が貴社で帰社した。 (問題外) 帰社で帰社したのは帰社の帰社です (ここまでダメだとすがすがしい) MSIME 貴社の記者が汽車で帰社した。(正しい) 汽車で帰社したのは記者の記者です。(まぁ惜しいか) WXG 貴社の記者が汽車で帰社した。(正しい) 汽車で帰社したのは貴社の記者です。(正しい) うーん、すばらしい。まだバグっぽい誤変換もありますし、 単語登録に問題アリですが、十分実用に使えます。 A.I.SOFT に感謝しつつ、周りの環境を片っ端から WXG に replace 中。 |
|
No.1425,1426のアドバイスありがとうございます. i = 0,1,2,,,100 display[i] = XtOpenDisplay(context2, NULL, NULL, "TestApp", NULL, 0, &argc, argv); とコード化しているのですが,forで回しても,どうも同じwindowが 何度も開いている様です.第1引数が悪いのでしょうか. もう一度だけお願いします. |
|
traceroute.cgiを期待をかけてダウンロードさせていただきました。 なかなか上手く動かないので書き込みに参りました。 上記CGIと、environment.plもFTPしましてディレクトリも変更しました。 ところがscript Errで動きません。Redhat6.2では利用できないのでしょうか? それともDNSやDHCP等が関係して出来ないのでしょうか? 恐らく初心者の私の待ちがいとは思いますが、ご指導宜しくお願いいたします。 |
|
HP−UXでメモリ内のデータをソートしたいのですが、 サイズが大きいため無理なのかなと思っています。 sortコマンドではどれくらいの件数をソート出来るか 知っている方いませんか? |
|
> AWKを使用した2つのファイルの文字列比較について diffの出力をawkで加工、ってのじゃダメなのかな? |
|
> No.1425,1426のアドバイスありがとうございます. 全然通じていないような・・・ Displayを複数オープンする必要はありません。 100のXサーバと接続するクライアントには応用できるので、一応書いてみました。 XtAppContextは内部で複数のディスプレイ接続に対応していますね。 しかし、あくまで、複数のXサーバと接続するクライアントの為の仕組みであって、ひとつのXサーバ相手に、複数のディスプレイ接続は無意味です。 #include <X11/Intrinsic.h> #include <X11/StringDefs.h> #include <X11/Shell.h> int main(int argc, char **argv) { XtAppContext ac; Display *dpy[100];/* ridiculous example */ Widget w[100]; Arg arg[2]; int i; char title[64]; /* Xt initialization */ XtToolkitInitialize(); ac = XtCreateApplicationContext(); XtSetLanguageProc(NULL, NULL, NULL); XtSetArg(arg[0], XtNwidth, 100); XtSetArg(arg[1], XtNheight, 100); for (i = 0; i < 100; i++) { /* ridiculous example */ dpy[i] = XtOpenDisplay(ac, NULL, NULL, "TestApp", NULL, 0, &argc, argv); sprintf(title, "%d", i); w[i] = XtAppCreateShell(title, "TestApp", applicationShellWidgetClass, dpy[i], arg, 2); XtRealizeWidget(w[i]); } XtAppMainLoop(ac); } |
|
#68user氏ではないですが。 @hayataさん traceroute.cgiについて。 私自身 perl をやり始めたばかりなんでアレかのしれませんが、 ・perlが存在するパスは? 確認方法は「which perl」を実行したときの出力を見ることです。これ が「/usr/local/bin/perl」でなければ、perlが別のパスにインストール されているか、そもそもインストールされていない可能性があります。 インストールされていない場合は実行不可能ですが、別のパスが出力 された場合は、このスクリプト(traceroute.cgiとenvironment.plの両方)の 最初の行 #!/usr/local/bin/perl を修正する必要があります。例えば、「/usr/local/perl5/bin/perl」と表示 された場合は、 #!/usr/local/perl5/bin/perl とします。 ・tracerouteが存在するパスは? 確認方法は perl の場合と同様、「which traceroute」を実行したときの 出力を見ることです。これが「/usr/sbin/traceroute」でなければ、ダウン ロードした environment.pl の $traceroute = "/usr/sbin/traceroute"; という部分を修正する必要があります。例えば、「/bin/traceroute」と 表示された場合は、 $traceroute = "/bin/traceroute"; とします。 の2つをとりあえず指摘させていただきます。これ以外にも原因が考えられる でしょうが、少なくともこの2つを確認し、しかるべき対処をしないと実行 できませんので。 あと、このスクリプトは、*これを実行したホスト*と指定されたホストの間の ネットワークのつながりを調べますので、 http://X68000.startshop.co.jp/~68user/Cgi-room/ から直接実行した場合とでは出力結果が異なります。 @68userさん traceroute.cgiで気づいたのですが、 http://X68000.startshop.co.jp/~68user/Cgi-room/ の「www.cs.gunma-u.ac.jpと指定のホストの間の」は誤りで、正しくは 「X68000.startshop.co.jp」ではないでしょうか。 それでは。 |
|
はじめまして。lbと申します。 >AkiAkiさんへ inputfile1, 2ともあのようにソートしてあるならば、 comm -3 inputfile1 inputfile2 | sed 's/[[:space:]]*//g' で近い出力が得られるのではないでしょうか。awk じゃなくて すみませんが、ようするにカラムの間の space を削除すると いうことです。[:space:]という書き方がサポートされていない 場合は s/▲*//g にしてみてください。▲は キーボードのスペ ース の入力です。 |
|
どうも、skel.103Mです。 No.1437の > @68userさん > traceroute.cgiで気づいたのですが、 > http://X68000.startshop.co.jp/~68user/Cgi-room/ > の「www.cs.gunma-u.ac.jpと指定のホストの間の」は誤りで、正しくは > 「X68000.startshop.co.jp」ではないでしょうか。 は、正しくは ---------- @68userさん traceroute.cgiで気づいたのですが、 http://X68000.startshop.co.jp/~68user/Cgi-room/ の「www.cs.gunma-u.ac.jpと指定のホストの間の」は誤りで、正しくは 「X68000.startshop.co.jpと指定のホストの間の」ではないでしょうか。 ---------- ですね。ミスしてしまいました、申し訳ないです m(__)m |
|
No.1436 Display *dpy[100]; -> Display *dpy; に修正しました. わざわざコードまで,書いてもらってありがとう. 参考にさせてもらいます. |
|
こんにちは。 apacheのアクセスログのバックアップファイルを 作成したいと思ってます。 cpでファイルを作成しているときに アクセスログに書かれたログは、 反映されるものなのでしょうか? 知っている方がいらしたら教えていただけませんか? よろしくお願いします。 |
|
1438,1435アドバイスありがとうございます。 結果がこの結果になれば "awk"にはこだわってません (”perlが良いんじゃないか”とか会社の周りの連中は言ってますが..) ●diff を awkで加工... ●comm (Unix歴は長かったつもりですが...こんなコマンドがあったんですね) 来週早々会社のマシンでトライしてみます |
|
はじめまして。atomと申します。 教えて頂きたい事があります。 unixで特定の文字列を含むファイルを 特定の場所から検索するには どのようにすればよいのでしょうか? "unixの部屋"のgrepの説明で grep −−− dir/* というのがありますが これでよいのでしょうか。 どなたか、教えて下さい。 よろしくお願いします。 |
|
> sortコマンドではどれくらいの件数をソート出来るか > 知っている方いませんか? 適当なデータを作って、実験してみましょう。sort できる 限界までいったら、swap の状況を見つつ、sort のせいなのか メモリが足りないのか見極めましょう。 > traceroute.cgiを期待をかけてダウンロードさせていただきました。 補足ですが、まずは web サーバのログを見ましょう。 perl -c traceroute.cgi で文法チェックしましょう。 CGI として動かすのはもっと後の話です。 > 正しくは「X68000.startshop.co.jpと指定のホストの間の」では > ないでしょうか。 へい、その通りです。直します。 # が、CGI の小部屋は技術的に未熟だった頃 (今もたいした # ことはないけど) のコンテンツなので、既にメンテナンス # する気力をなくしております。暇を見付けて修正しておきます。 > grep −−− dir/* というのがありますがこれで > よいのでしょうか。 それでよいです。他人に聞く前に自分で試してみましょう。 試してダメだったのなら、何をした結果どうなったか、 というのが第三者にわかるように質問しましょう。 > cpでファイルを作成しているときにアクセスログに > 書かれたログは、反映されるものなのでしょうか? 試してませんが、恐らく反映されません。なので、 log を適当なタイミングで rotate して、古くなった ログファイルをコピーするのがよいでしょう。 apache なら rotatelogs というコマンドが付属しています。 |
|
>ん、gzip で圧縮して送って、向こうで伸張できたのですか? >なら最大ファイルサイズは関係なかったですね。 ファイルサイズですが、FreeBSD 4.1-RELEASE で 6GB 以上の報告も あるようです。6GB のディスクを dd コマンドでファイル化した なんて話がどこかで書いてありました(URI は失念しました)。 推測の域を出ませんが、2GB で引っかかったというので思い付いたのですが…。 まさかとは思いますが、singed int でファイルサイズを保持しているような 状況だとエラーが出るでしょうね。プログラムのバグかも知れません。 >grep −−− dir/* というのがありますが >これでよいのでしょうか。 この質問は答えにくいですね。dir 以下のディレクトリツリーを トラバースするのなら、これじゃ不足です。 find . -type f -exec grep PATTERN {} \; ですかね。GNU grep 使っているのなら、 grep -r PATTERN * でもすみます。ただし、シンボリックリンクがループしていると死にますね。 質問をみるとファイル名だけが表示されれば良いようにも読めるので、 そういった場合だと、 grep -rl PATTERN * かな? >適当なデータを作って、実験してみましょう。sort できる >限界までいったら、swap の状況を見つつ、sort のせいなのか >メモリが足りないのか見極めましょう。 GNU sort の場合 TMPDIR みていますね。ルートパーティションを 小さめにとっているシステム( 32MB とか 64MB )だと、メモリがあまっているのに ファイルシステムがあふれたりして。256MB メモリのあるマシンで実験したら、 こんな感じです。 % la -alF total 40330 -rw------- 1 root wheel 36666584 Dec 10 05:51 hoge % sort hoge /: write failed, file system is full sort: write error: No space left on device ちなみに、ルートパーティションは 64MB で、のこり 17 MB でした。 >perlが存在するパスは? 蛇足ですが、CGI スクリプトを win から binary mode で転送すると パスが正しくてもアウトですね。一行目が #!/usr/bin/perl^M とかなりますから。^M って CR のことです。つまり ascii の 0x0d |
|
> GNU grep 使っているのなら、 > grep -r PATTERN * あれ、今の GNU grep って recursive option あるんですか。 と思って ChangeLog 見たら、-r が追加されたのは 1998/08/18 でした。結構前なんですね。 |
|
nac と申します。ネットワークプログラミング大変参考になりました。 私も、POP3 クライアントを作ってみて疑問がでてきました。 rfc1939 を読んでみると pop3 サーバーの返答は 512文字まで と書いてありました。そこで、一行が512文字以上のメールを pop3 から落してくると、次のように hogehoge...hoge!CRLF hogehoge....hogeCRCF 途中で ! マークが入っておりました。rfc1939 を読む限りこの、! に ついては言及されていないようですが、これはどこで規定されているのでしょうか。 (もし、rfc の中で書いてあるようでしたら、理解不足です、すいません) |
|
> rfc1939 を読む限りこの、! については言及されて > いないようですが ちらっとしか見てませんが、512 ってレスポンス行 (+OK とか +ERR) の最大長であって、メールの1文の長さとは 無関係じゃないでしょうか? とはいえ、! で fold されていたというのは気になりますね。 現在 IMAP 環境しかないので試せませんが、その POP3 サーバアプリケーションの名前を教えてください。qpopper ですか? |
|
一応インストールは成功しているみたいです。GNOME+enlightenmentで「サウンドを有効にする」ボタンを押したらでは正常に動いたのですが、その後デスクトップのタスクバーが出なくなり、仕方なく再インストールして一からやり直したんですが、GNOM+Sawmillでは無理なんでしょうか? PCはNECのLAVIE「LV16CWS」(ノート型)です。サウンドカードはESS社 ES1869Sで、動作確認の取れたOSSの最新版ファイルをインストール済みです。ディストリビューションは、Turbo Linux6.0です。 音だけじゃなくて、スクリーンセイバーもKDEだと動くのにGNOMEではプレビューでは見れても、実際には動きません。ウィンドウマネージャーとの愛称って在るんですかね???誰かアドバイスお願いします。 あとメモリーの自動認識ができないのですが、方法ありますか?解れば教えて下さい。96MBなのでデフォルトでは認識しないようです。宜しくお願いします。 |
|
skel.103Mさん @hayataです。 No.1437でのアドバイスありがとうございます。 出張でこちらの掲示板を見落としてしまいました。これからアドバイスに沿って再挑戦してみます。 成功しましたは報告いたします。 ではでは |
|
1430の回答、ありがとうございました。 すぐに応答くださったのに、質問を投げた私が、反応が鈍く、 大変失礼いたしました。 「ヘルスチェック」という言い方は、どうやら「職場方言」のようですが、 68userさんの御推測の通りのものです。 回答いただいたうちの、3、及び4を、使用してみようと思っています。 ありがとうございました。 また、なにかの折りには、よろしくお願いいたします。 |
|
>とはいえ、! で fold されていたというのは気になりますね。 qpopper の場合一行の最大は \0 込みで 1024 bytes です。 ソースを見ると早いでしょう。 /* Send the header of the message followed by a blank line */ while (fgets(buffer, MAXMSGLINELEN, p->drop)) { if (!strncasecmp(buffer, "Content-Length:", 15) || !strncasecmp(buffer, "X-UIDL:", 7)) { /* Skip UIDLs */ continue; /* Content-Length is MTA dependent, don't send to MUA */ } \0 込みと言うのは、fgets 使っているための仕様です。 もしも、512 文字というのが 2 バイト文字の意味で、512 文字なら ちょうどこの制限に引っかかります。\0 込みなので、iso2022-jp なら 途中出来られると ! なんていくらでも出て来ます。iso-2022-jp なら 「。」なんて「!#」とかなりますから。 ただ、普通は困りませんね。rfc で決められている一行の推奨値は 70 bytes + αですから。 問題は本当に POP3 サーバだけの制限なのかということです。 実験の際に使った MUA や MTA の制限も関係あります。 sendmail 8.11.1 のソースを見たら行の長さ関係は 2048 bytes でした。 また POP3 サーバなどをinetd を通している場合 inetd 自体の制限も あります。8192 bytes かな? FreeBSD の inted の場合。ヘッダーしか見て いないので断定できませんけど。 もっとも、自分で /var/mail/ のファイルにメールらしきものを手動で append して実験した場合は話は別ですが。 他にも実験を telnet でやったのなら、telnet などの制限も考えられます。 FreeBSD なら ring buffer 使っているので、 そういう制限はありませんが、OS のベンダによってこの実装は変わるでしょうね。 |
|
> qpopper の場合一行の最大は \0 込みで 1024 bytes です。 それはヘッダの出力で、本文はその下の /* Send the message body */ while(fgets(buffer, MAXMSGLINELEN, p->drop)) { /* Decrement the lines sent (for a TOP command) */ if (--msg_lines <= 0) break; pop_sendline(p,buffer); if (hangup) return(pop_msg(p, POP_FAILURE, "SIGHUP or SIGPIPE flagged")); } でないでしょうか。で、pop_sendline は pop_sendline(POP *p, char *buffer){ char * bp; /* Look for a <NL> in the buffer */ if (bp = index(buffer,NEWLINE)) *bp = 0; /* Send the line to the client */ (void)fputs(buffer,p->output); /* Put a <CR><NL> if a newline was removed from the buffer */ if (bp) (void)fputs ("\r\n",p->output); } となっているので (一部略)、fgets で得たデータに改行が 含まれない場合も、余計な改行は付加されないように思う のですがどうでしょう # 改行なしだと bp==NULL になって fputs("\r\n") は実行されない。 rosegarden さんは qpopper-2.x 系列を見ておられるよう ですが、僕が見たのは qpopper-2.2 (ってこりゃまた古いな) の pop_send.c です。 |
|
>rosegarden さんは qpopper-2.x 系列を見ておられるよう >ですが、僕が見たのは qpopper-2.2 (ってこりゃまた古いな) >の pop_send.c です。 私が見たのは、qpopper-2.3 のソースですね。古いことにはかわりないんですが…。 確かに、 >それはヘッダの出力で、本文はその下の > /* Send the message body */ > while(fgets(buffer, MAXMSGLINELEN, p->drop)) { は御指摘の通りです。本質的にソースに差異はありません。でも、 これも結局 #define MAXLINELEN 1024 #define MAXMSGLINELEN MAXLINELEN なんで、結果的には同じですね。ただし、結果的に同じだっただけで、 私の間違いは間違いです。御指摘ありがとうございます。 なお、上のは同じバージョンの popper.h の define です。 >となっているので (一部略)、fgets で得たデータに改行が >含まれない場合も、余計な改行は付加されないように思う >のですがどうでしょう まず、fgets は man 3 fgets すると >The fgets() function reads at most one less than the number of characters >specified by size from the given stream and stores them in the string str. 最大で size で指定された文字から一文字少ない文字をバッファに読み込む とあります。これは \0 をappendしないといけないからです。 サンプルプログラムを次のようにします。 #include <stdio.h> int main( int argc, char **argv ) { FILE *fp; char buff[256]; if( argc != 2 ){ fprintf( stderr, "usage : fgets FILENAME\n" ); exit(1); } if( ( fp = fopen( argv[1], "r" ) ) == NULL ){ fprintf( stderr, "Cannot read %s\n", argv[1] ); exit(1); } while( fgets( buff, 10, fp ) ){ puts(buff); } exit(0); } さらにこれを gcc -g -O -o fgets fgets.c としてコンパイルして gdb で buff の中を見ます。 (gdb) break 18 Breakpoint 1 at 0x8048604: file fgets.c, line 18. (gdb) set arg fgets.c (gdb) run Starting program: /home/user/tmp/fgets fgets.c Breakpoint 1, main (argc=2, argv=0xbfbff740) at fgets.c:18 18 while( fgets( buff, 10, fp ) ){ (gdb) display buff 1: buff = "\201\203 (ゴミのため略) (gdb) n 19 puts(buff); 1: buff = "#include \000\005( 以下ゴミ ) (gdb) q こんな感じですね。 ># 改行なしだと bp==NULL になって fputs("\r\n") は実行されない。 これは違うと思います。bp == NULL なら単に \r\n を append するだけ で bp != NULL なら \n を \0 で潰してから、\r\n を append だと 思います。良く見てください、元のコードを *bp = '\0' となっています。 bp は index が拾って来た \n のあるところのポインタです。 |
|
ん? 失礼しました。 >># 改行なしだと bp==NULL になって fputs("\r\n") は実行されない。 >これは違うと思います。bp == NULL なら単に \r\n を append するだけ これ間違いですね。 >/* Put a <CR><NL> if a newline was removed from the buffer */ > if (bp) (void)fputs ("\r\n",p->output); bp == NULL だと確かに \r\n は付かないですね。 あと、 >となっているので (一部略)、fgets で得たデータに改行が >含まれない場合も、余計な改行は付加されないように思う 改行がつかないのは確かですね。 すると長い行の場合は次の行と連結するんですかね? 大変失礼しました。 ただ指定のバッファサイズより一文字減るのは確かです。 なんかそれを言おうとして、論点ずれた挙げ句に大量のゴミみたいな メッセージを書き込んでしまい申し訳ありませんでした。 |
|
2ch 風にリンク張れるようにしてみました。^(>>|@)\d+ は リンクが張られます。ただ、2ch のように数字に identify を 持たせたくないなぁ。 >>1453 さんの言うように…してみたところ、うまく動きました とかはちょっと嫌。 >>1455 rosegarden さん > 論点ずれた挙げ句に大量のゴミみたいな > メッセージを書き込んでしまい申し訳ありませんでした。 いいえ〜。こういう機会でもないとなかなかソース 読まないタチなので、この手の話は歓迎です。 ちなみに僕はデバッガ使えないようなレベルなので (bt しか知らない)、今後ともいろいろと御教示下さい。 >>1449 kiki@TL さん > GNOME+enlightenmentで すいませんが、GNOME も E も KDE もほとんど使ったことが ありませんので、僕はわかりません。 |
|
こんにちは。 >>1441のmerryです。 68userさん >>1444で質問に答えていただきありがとうございます。 rotateを調べてみたいと思います。 |
|
こんにちは UNIXでsendmailを使ってメールを送信するスクリプトを Perlで作ろうと思っているのですが、 添付ファイルを付けることは可能なのでしょうか? よろしくお願いします。 |
|
はじめまして。 crontabで毎日12:00にabcというスクリプトを 起動するといった設定を現在しているんですが、 これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させるっていう 方法はあるんでしょうか? 教えていただきたく。 |
|
初めまして、辻 です。 HTTPでGETするプログラムを作成しています。HTTP クライアントを作ってみよう(4) を参考にさせていただいて、URLのエンコードしようとしています。 で、 /~user/hoge.cgi?fuga=ABC!"$ DEF+ が /%7euser/hoge.cgi?fuga%3DABC%21%22%5C%24+DEF%20 と書かれています。自分で作ったプログラムで確かめてみると、 /%7euser/hoge.cgi?fuga%3dABC%21%22%24+DEF%2b となりました。 また、URLのエンコードの対象はURL全てですか?それとも、CGIとかで使われる、?の後ろのみなのでしょうか?~が含まれるので、そんなことはないでしょうが。?そのものは、対象にならないようですし、ファイル名に@等がついてたりしたらどうなるのでしょうか? ちなみに、 string yHttpGet::UrlEncode(string url) { char buff[10]; for(int i=0; i<url.length(); i++) { char c = url.at(i); if(((c <'0') || ('9' < c)) && ((c < 'a') || ('z' < c)) && ((c < 'A') || ('Z' < c)) && ('/' != c) && ('?' != c) && (' ' != c) && ('_' != c) && ('-' != c) && ('.' != c) && ('*' != c)) { sprintf(buff, "%%%02x", c); url.replace(i, 1, buff); } else if(c == ' ') { url.replace(i, 1, "+"); } } return url; } 今のところ、このようなコードを書いています。 |
|
@1458 masa さん > UNIXでsendmailを使ってメールを送信するスクリプトをPerlで作ろうと > 思っているのですが、添付ファイルを付けることは可能なのでしょうか? モジュールが使えるなら http://www.parkcity.ne.jp/~chaichan/qanda/qa425.htm?00-12-13-19-49 で、ふじさんが述べておられる方法がお勧めです。 @1459 M.K さん > これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させる > っていう方法はあるんでしょうか? 少なくとも FreeBSD の crontab では、それを実現する簡単な 方法はありません。 金曜日の 11:00 毎日 12:00 という二つのエントリを作って、スクリプト内で 最終金曜日で12時台なら、処理終了 金曜日 && 最終金曜日でない && 11時台なら、処理終了 とするのがいいでしょう。 試してませんが、*BSD や GNU の date なら、 date +%m … 現在の月を求める date -v+7d +%m … 一週間後の月を求める を利用して 0 11 * * 5 [ `date +%m`!=`date -v+7d +%m` ] && run-script 0 12 * * * [ `date +%w'!='5' -o `date +%m`!=`date -v+7d +%m` ) ] && run-script てなことが可能かもしれません (条件合ってるかな?)。 @1460 辻さん foo.cgi?.... という GET 形式は、? 以降の文字が QUERY_STRING (疑問符文字列) という名前で取り出せることからわかるように、 ? はエンコードする必要はありません。疑問符であることが重要なのです。 > URLのエンコードの対象はURL全てですか? 全て、というかパス (/~user...) も含めてエンコードが必要です。 ただし、引数を渡したい場合は ? はエンコードしません。 でなくて、ファイル名の一部に ? が含まれる場合は エンコードが必要です。 この掲示板の上にある発言フォームから文字を入力すると、 Name … 68user Email … 68user@X68000.startshop.co.jp Message … ほげほげ というような、対応関係が生まれます。このようなフォームで 生成されたデータを POST で送るとき、クライアントは application/x-www-form-urlencoded という mime type で 送信しなければいけません。「HTTP クライアントを作ってみよう」 では手抜きして送ってませんが、本来は送るべきです。 で、GET の場合も同様に x-www-form-urlencoded 形式ならば ?foo=bar は ?foo=bar でよいです。= は URL エンコードしません。 しかし、そうではなく 「foo=bar」という引数を渡したいのなら ?foo%3Dbar となります。 というふうに、本当は /~user/hoge.cgi?fuga=ABC!"$ DEF+ という例だけでは、どこをエンコードすべきかは明確には なりません。なので、あの解説はあまりよろしくないですね。 例えば hoge.cgi?foo=bar&def=ghi は、フォームに foo、 bar という要素があるならこのまま送ればよいですが、 foo=「bar&def=ghi」という意味なら foo=bar%26def%3Dghi」 とすべきです。どちらなのかは hoge.cgi?foo=bar&def=ghi だけでは正確には判断できません。 |
|
こんばんは、質問をした本人のレスが遅れて申し訳ありません。 (しかも、ソースまで見て頂いて恐縮です。) >サーバアプリケーションの名前を教えてください。qpopper ですか? 一般のプロバイダで実験したので、わかりませんでした。 今度他の qmail, sendmail が動いているサーバーで実験してみます。 さて、私も手元にあった、qpopper3.0.2 のソースを眺めてみました。 (POP_TERMINATE は '.' buffer は buffer[MAXMSGLINELEN] (MAMSGLINELEN=1024) と宣言されています) pop_sendline ( p, buffer ) POP * p; char * buffer; { char * bp; /* * Byte stuff lines that begin with the termination octet */ if ( *buffer == POP_TERMINATE ) (void)fputc ( POP_TERMINATE, p->output ); /* * Terminate the string at a <NL> if one exists in the buffer */ bp = index ( buffer, NEWLINE ); if ( bp != NULL ) *bp = 0; /* * Send the line to the client */ (void) fputs ( buffer, p->output ); /* * Put a <CR><NL> if a newline was removed from the buffer */ if ( bp != NULL ) (void) fputs ( "\r\n", p->output ); } これをみると、やはり、\n がなければそのまま出力されて しまうようですね。なんとなく、最初から、\n があることを 想定しているような感じも受けます。 |
|
68user さん、何度もありがとうございます。 私は、HTMLにある<A>タグでリンクされているHTMLをGETするプログラムを作っています。フォームに関わるCGIを作ってるわけではないのですが、リンク先が掲示板で?で引数を渡すリンクがある場合は、正しく渡して、取り出したいと考えています。 この場合、GETなのか、POSTなのかはわからないのですが。ブラウザがフォームからの結果以外で単純にリンクから、ページを読み込むときは、GETを使っているのだと思うので、GETでいいのですか? で、よくわかっていないのですが。この場合も、URLを%とかでエンコードすべきかは判断できないのですか?ブラウザはやっているように思えるのですが。。。 |
|
行頭に「>>1461」または「@1461」と書くと、 >>1461 68user というふうにリンクを張るようにしました。このとき、自動的に リンク先の発言者の名前を補完します。「さん」付けは なしですが、御了承下さい。 また、「>>1461 ほげほげ」と、数字の後に何かを書くと、 >>1461 ほげほげ とリンクだけが張られ、名前の補完はされません。しかしスクリプトが どんどん汚くなってきた…。brush up が必要だなぁ。 >>1463 辻 義一 > GETでいいのですか? foo.cgi?hoge.. という形式なら GET でよいです。 要は、HTML を読んで <A HREF="foo.cgi?hoge=fuga">..</A> という 部分から foo.cgi?hoge=fuga という文字列を切り出した場合、どこを エンコードすべきかということですよね。普通は何もエンコードせず デコードせず、そのまま使えばいいと思います。アンカーに書く URL は既に URL エンコードされているはずだからです。 それを無理にエンコードする必要はないですが、あえて行うならば ?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは ないでしょうか。 >>1462 nac > これをみると、やはり、\n がなければそのまま出力されて > しまうようですね。 そうですね。POP3 サーバとしては、本文の行がどれだけ長くても、 改行は付加しないのが普通ではないかと思います。基本的にクライ アントにデータを流すだけですから。 |
|
>それを無理にエンコードする必要はないですが、あえて行うならば >?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは >ないでしょうか。 html の文法的には hoge.cgi?foo=1&bar=2 は hoge.cgi?foo=1&bar=2 と書くそうなので、そういった html の文字参照の変換は 必要になるかも知れません。例えば、$ とか…。 |
|
68user さん。 ありがとうございます、エンコードもデコードもしなくて良いと言うことですか。楽は楽なのですが。~もそのままで良いのかな。。今のプログラムでGETできているので、このままで行こうかと思います。 rosegarden さん。 その変換について走っていますが、、タグ内の文字列(""で囲まれた部分)までは適用しなくても良いと思うのですが。しているのも見たことありませんし。 |
|
>>1466 辻 義一さん http://www.ne.jp/asahi/minazuki/bakera/html/opinion/ampersand が、良くまとまっています。ご参考まで。 ※ 僕のサイトは、どうしてたかなぁ・・・ |
|
たまたま、この件で大ハマリしてました (1時間悩んだ)。 http://X68000.startshop.co.jp/~68user/tmp/amp.html FreeBSD jman へのリンクを張ろうとしていたのですが、 上のリンクは mroff.cgi?.....&dir=jpman-4.2.0%2Fman§=8 と書いていますが、うまくいきません。よく知りませんが、&sec か § という実体参照があるのでしょう。で、ブラウザ (FreeBSD+NN4.75) がその文字に置き換えてリクエストを送るので、mroff.cgi 側に こちらの意図したデータを渡せないのでしょう。 下のリンクは mroff.cgi?.....&dir=jpman-4.2.0%2Fman&sect=8 としているので OK です。 うちのページは何も考えず & のままにしていますね。いかんなぁ。 |
|
>>1467 (自己フォロー) http://www.asahi-net.or.jp/%7Ejy3k-sm/i_net/url.html にも、色々あります。 >>1468 68user 雨が降って、ひまなので、ついでに、調べてみました。 http://www.w3.org/TR/REC-html40/sgml/entities.html によると、sectはsection signだそうです。 因みに、win98/IE4,NN4では§、bidi-mozilla(11-13)では%A1%F8 になりました。 |
|
どうも、お世話になります。 最近、DNSの勉強していて、試しに立ててみようと 思っています。(Redhat Linux) そこで、質問なんですけど、 ・ダイヤルアップ接続でDNSサーバは動かせますか? #もちろん一時的でいいんで‥ ・DNSサーバで必要なものは何でしょうか? 気をつける点等.. #そういうHPを知っていたら教えて下さい。 よろしくお願いします。 |
|
>・DNSサーバで必要なものは何でしょうか? 気をつける点等.. >#そういうHPを知っていたら教えて下さい。 Linux-HOWTO で詳しく書いたものがありましたよ。 |
|
>>1471参照 ついでだったので、調べておきました。 http://www.linux.or.jp/JF/JFdocs/DNS-HOWTO.html JF インストールすれば大抵入っています。 |
|
rosegardenさん有難う御座います。 教えてくれたページを見て勉強します。 これからもよろしくお願いします。 |
|
ども。お世話になってます。 管理モードのパスワードとかって、普通crypt()でハッシュしますよね。 でもDESの場合辞書アタックとかで簡単に破られちゃいますよね。 なのでmd5(md5sum)コマンドで「4fcf95ef97e1b7b248698bca83781902」みたいに ハッシュしているのですが、これはcrypt()のDES、MD5($1$...$)と比べてどっちが セキュリティ的によろしいのでしょうか。 |
|
URLエンコードの件ありがとうございました。 URIですか?に&をそのまま入れているページはたくさんあります。自分のホームページ上のCGIもそうだし、検索エンジンとかもそう。修正しようか迷っています。登録されている実体参照と重なっていないようなので、事実上大丈夫なのでしょうが。勉強になりました。これを、CGIに反映させるかは迷っているのですが。 現在作っているプログラムでは、色々動かして問題がないようですので、このままにしておきます。ブラウザでも正しくエンコードされていない、ページを開くときに支障があるぐらいですから、こちらで変換すれば上手く出来そうですが、ページの責任と言うことで。終わらせます。 ありがとうございました。 今回は、 |
|
こんちはーっす。 ず、ずいぶんまえに、ここに(そのときとはURL違うような気もするが) 永久保存版の過去ログなかったっすか? 久しぶりに見たくなって検索したのですが・・・・ 最近行ってないけどtestボードまだ、げんきなのかなー・・・・ |
|
>>1474 ぷに辻 > 管理モードのパスワードとかって、普通crypt()でハッシュしますよね。 DESやmd5を1方向関数として使用している点は了解していると仮定します。 (余談1 ハッシュ関数と1方向関数は同義と言ってもよいですが、一応別物です。 1方向関数は(結果的に)ハッシュ関数ですが、逆は必ずしも真ではありません。 moduloはハッシュ関数ですが、出力から元の値が容易に推測可能なので良い1方向関数ではありません。) > でもDESの場合辞書アタックとかで簡単に破られちゃいますよね。 辞書アタックと言っているのは、1方向関数でエンコードされたパスワードを奪われて、それに対して、しらみつぶしにパスワードを探索していると仮定します。 (余談2 暗号化パスワードと呼ぶ場合もありますが、復号化するわけではないので、誤用に近いと思っています。) 辞書アタックは、ワードを同じ1方向関数でエンコードして、マッチするものを探すことですから、同じ長さのパスワードなら、探索にかかるコストは、DESでもmd5でも大差無いと思います。 ただ、DESの場合、鍵長が56bitで、パスワード自体を鍵に使うことで(本来、暗号化アルゴリズムであるDESを)1方向関数にしているので、パスワードの長さが8文字に制限されます。 md5は(本来から1方向関数で)元データの長さに(現実的な)制限はないので、もっと長いパスワードが選べます。 この差は大きいですが、弱い(or 短い)パスワードを使っている限り、辞書アタックに対する強さは変わらないと思います。 (辞書アタック以外の探索法に対する強さは分かりません。 DESが簡単に破られる、と言っているのは、3年ぐらい前(もっと前?)のRSAコンテストで、約半年かかって破られたことを根拠にしていると思いますが、逆に言えば、未だ辞書アタックしか有効な手が無いという辺り、腐ってもDESと思わせるものもあります。) |
|
>>1476 SabaCurry > 永久保存版の過去ログなかったっすか? はい、ありました。半永久保存版は1997年9月16日だけですが、 一応 1997/9/29〜1998/09/20 の分は保存してあります。 データはありながらも閲覧用 CGI スクリプトがどっか行っちゃって 見られない状態が続いてましたが、さきほど発掘してきました。 見てたら恥ずかしくなったので (笑)、URL はメールで送ります。 そのうちアナウンスもなくひっそりと公開します。 >>1474 ぷに辻 > crypt()のDES、MD5($1$...$)と比べてどっちがセキュリティ的に > よろしいのでしょうか。 md5 より crypt+md5 の方が、salt という仕組みがある分 強固ではないかと思います。推測にしか過ぎませんが。 >>1477 gixs > RSAコンテストで、約半年かかって破られたこと 専用ハードウェアを使うと、56bit DES 解読に要する時間は 22時間くらいでしたっけ。剣呑剣呑。 |
|
>>1478 68user > URL はメールで送ります。 From: MAILER-DAEMON@lala.v3.com (Mail Delivery System) <tetuya@i.am>: unknown user: "tetuya" ということで、メールが送れませんでした。 |
|
>>1478 68user さん >md5 より crypt+md5 の方が、salt という仕組みがある分 >強固ではないかと思います。推測にしか過ぎませんが。 そう言えば、perl スクリプトなどから crypt 使うと FreeBSD の最近の RELEASE では DES で決めうちになっていることが多いようです。 ことに 4.1.1-RELEASE 以降の暗号解禁リリースの話です。 無論 DES 入れなければ、MD5 ですが。 システム全体では、切替え用のライブラリ関数もあって DES と MD5 を切替えて使えるのに perl が FreeBSD の切替えメカニズムに追従できていないようなんです。 それともできるのかな?ご存知の方いたらスクリプトレベルでの 切替え法を教わりたいです。 断定はしませんが、ソースをちょっと見た印象として、 -current は、login.conf で切替えられて、 デフォルトは MD5 です。今の所。4-stable は DES 入れると 有無を言わさず DES みたいですね。 |
|
>>1480 参照 >ことに 4.1.1-RELEASE 以降の暗号解禁リリースの話です。 正確にはDES が気軽に使えるようになったのは 4.0-RELEASE からですね。 |
|
>>1480 rosegarden > システム全体では、切替え用のライブラリ関数もあって > DES と MD5 を切替えて使えるのに perl が FreeBSD の > 切替えメカニズムに追従できていないようなんです。 あ、そうなんですか。全然知りませんでした。 /usr/lib/libcrypt* -> libscript* というリンクなら MD5、 /usr/lib/libcrypt* -> libdescript* なら DES、くらいの切り替え方法しかないのかと思ってました。 4.2-BETA (make world しなきゃな〜) のソースを見た限りでは よくわからなかったのですが、切り替え用ライブラリ関数とは どれのことでしょうか? |
|
>>1480 参照 >今の所。4-stable は DES 入れると有無を言わさず DES みたいですね。 ちょっと調べて見たら、意外に以前のバージョンで変更されていますね。 知らなかった。 green 2000/08/21 19:15:54 PDT Modified files: (略) usr.bin/passwd local_passwd.c usr.sbin/pw Makefile pw_user.c Log: Add working and easy crypt(3)-switching. Yes, we need a whole new API for crypt(3) by now. In any case: Add crypt_set_format(3) + documentation to -lcrypt. Add login_setcryptfmt(3) + documentation to -lutil. Support for switching crypt formats in passwd(8). Support for switching crypt formats in pw(8). The simple synopsis is: edit login.conf; add a passwd_format field set to "des" or "md5"; go nuts :) Reviewed by: peter ちなみに RELENG_4 だと変更のタイムスタンプは 2000/09/20 04:19:56 PDT 見たいですね。ちょうど、4.1.1-RELEASE のでる前後ですね。 >>1482 68user さん >4.2-BETA (make world しなきゃな〜) のソースを見た限りでは >よくわからなかったのですが、切り替え用ライブラリ関数とは >どれのことでしょうか? 答えは上の commitlog を御覧ください。crypt_set_format ですね。 |
|
失礼しました。転送メールがうまくいってない(?除名された? みたいなので よければ、こちらの方にURLを教えていただけないでしょうか? 久々にセガの過去ログなど見て、懐かしさにひたってしまいました。 |
|
>>1477 gixs >>1478 68user gixsさん、68userさんありがとうございました。 > md5 より crypt+md5 の方が、salt という仕組みがある分 > 強固ではないかと思います。推測にしか過ぎませんが。 なるほど。では全部のスクリプトcrypt+md5に変えようと思います。 # gixsさんのは難しすぎて僕には分かりませんでした(汗) |
|
> # gixsさんのは難しすぎて僕には分かりませんでした(汗) 説明する側の落度です。精進します。 >> md5 より crypt+md5 の方が、salt という仕組みがある分 >> 強固ではないかと思います。推測にしか過ぎませんが。 正しいと思います。 下のぼくの(分かりにくい)説明は、crypt+des vs. crypt+md5の話です。 結論は、パスワード長が同じなら辞書アタックに対する強度に差はないだろう、ということです。 saltありなしに関する余談は・・・、また分からないと言われるのが恐いので止めます。 |
|
>>1483 rosegarden > システム全体では、切替え用のライブラリ関数もあって なるほど。crypt(3) の切り替えではなく、passwd(1)/pw(1) で 使用される crypt ライブラリのフレームワークが追加された ということですね。 > perl が FreeBSD の切替えメカニズムに追従できていないようなんです。 > それともできるのかな? perl も libutil 使えばいいのにってことでしょうか。 でも #ifdef __FreeBSD__ を埋めこむようなものなので (埋めこまないけど、意味としては同じ)、仕組みとしては 美しくないですねぇ。 ここらへんのもどかしさが Yes, we need a whole new API for crypt(3) by now. と言わせるのでしょうか。 > スクリプトレベルでの切替え法を教わりたいです。 安直ですが、MD5 っぽい salt を渡すのはどうでしょう。 % perl -e 'print crypt("secret","salt")."\n"' saHW9GdxihkGQ (DES) % perl -e 'print crypt("secret","\$1\$salt\$")."\n"' $1$salt$ez2vlPGdaLYkJam5pWs/Y1 (MD5) >>1484 SabaCurry > よければ、こちらの方にURLを教えていただけないでしょうか? はい、後ほど送ります。 |
|
マルチプロセスがよく分かっていませんので お願いします ... 今fork関数を使い,二つのプロセス, 1)表示画面にイヴェントが発生したら処理するプロセスと 2)時間監視を行っているプロセス を作成しました. 2)は,ある時間の条件でXtOpenDisplayでメッセージ画面が表示し,OKボタンが押させるか画面右上のXボタンが押されると,メッセージ画面が消えます.しかし,メッセージ画面が複数個,表示されるのに,一画面を消去するだけで,全てのメーッセージ画面が消去されてしまいます. その為,複数プロセスにしよう ー 3つのメッセージ画面が表示されたら,3つのプロセスが 動いている − フ゜ロク゛ラムを作成中なのですが,3つ出力されればいいのに6つ(3つx2回)出力されたり,.... 何か簡単に作成できる方法はないでしょうか? execl命令などを使わずに簡単にできませんでしょうか. |
|
>>1487 68user さん >安直ですが、MD5 っぽい salt を渡すのはどうでしょう なるほど、salt をかえればいいんですね。言われて見れば、 確かにそうですね。もっとも、言われるまでは気が付きませんでしたが。 どうもありがとうございました。 |
|
>>1488 Qさいとう > 今fork関数を使い,二つのプロセス, > 1)表示画面にイヴェントが発生したら処理するプロセスと > 2) 時間監視を行っているプロセス > を作成しました. X サーバとの通信の実態は、ソケット経由でのデータのやりとりです。 大抵は (同一ホスト内なら) /tmp/.X11-unix/X0 経由です。 # つまり UNIX ドメインソケットを使う。 で、ソケットを作成したあと fork して、複数のプロセスが ソケット共有するのは多分うまくいかないでしょう。 # そういう構成であるとは書いてありませんので推測ですが。 クライアント→サーバは OK かもしれませんが、サーバ→ クライアントのデータは親プロセスか子プロセスのどちらに 渡るかが決まっていないからです。 というわけで、そもそも構成がまずいと思います。1プロセスで できませんか? Xt は知らないのですが、何かコールバック関数を 登録できる仕組みがあると思います。 仮に複数プロセスでやるとしても、X サーバと接続する前に fork して、片方は X サーバとの通信、もう片方は監視などと 役割分担し、両プロセスの間はパイプやシグナルやソケット経由で やりとりすべきでしょう。 >>1487 68user >> よければ、こちらの方にURLを教えていただけないでしょうか? > はい、後ほど送ります。 あ、まだ送ってなかったかもしれない。今日明日はちょっと 無理かもしれないので、すいませんが気長にお待ちくださいませ。 |
|
「UNIXの部屋」で telnet リモートホストにログインする という項目がありました。 ここで 自動的にログインし、自動的にコマンドを実行するには sleep の項のサンプルを参照。 (コマンド sleep *) とありますが、sleepの項では、下記のようになってます。 sleep 指定秒数だけ動作を止める 5分間 (300秒) 動作停止するには % sleep 300 とする。sleep コマンドは、スクリプトの中で使うことが多い。 % ( echo username ; sleep 1 ; echo password ; sleep 1 ; echo ls ; sleep 1 ) | telnet foo.bar.com なんてこともできたりする。 (日本語マニュアル sleep) 実際に自動的にログインし、自動的にコマンドを実行したい場合はどうすれがいいのでしょうか 誠に勝手なお願いですが、ぜひ教えてください。 |
|
>>1491 酒井 > 実際に自動的にログインし、自動的にコマンドを実行したい場合は > どうすれがいいのでしょうか そこに書いてある % ( echo ... sleep 1 ) | telnet foo.bar.com ではダメだったのでしょうか。 まぁ普通は ssh や rsh を使いますね。 http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=rsh&target=command#rsh http://www.jp.FreeBSD.org/QandA/HTML/1576.html |
|
古い話ですが >>1380 book > gcc -c share_test.cc > ar cr libtestshare.so share_test.o > ranlib libtestshare.so > CC test_gcc.cc -L. -ltestshare gcc に -g オプションを付ければいける、と fj で読んだような 読んでないような。 >>1484 SabaCurry メールで送りました。 |
|
BIOSの設定画面で、MPSってありますけど Versionの1.1と1.4の違いってなんでしょうか? |
|
ある日突然?起動音が出なくなり、サウンドはすべて聞えなくなりました。[リソースの競合に遭遇し、自己流で、[コントロールパネル]-[システム]- デバイスマネージャー]より、「はてなマーク」のものを削除して、 [サウンド関連のデバイス]を手動設定変更し、競合を避けることができ、 デスクトップ右下にスピカーが表示され音が出るようになったのですが、 再起動するたびに、「PCI Universal Sirial Bus」の入手案内が表示され、キャンセルボタンを押してからでないと、正常に作動を開始しません。起動の度に案内画面が出ないようにするにはどうすればよいでしょうか? |
|
チャトって、どこですか??? |
|
あけましておめでとうございます。本年もよろしくお願いします。 別のことをやっていて偶然発見したんですが、 ------------------------------ foo #! perl use strict; my $n = 17; # 普通の変数 print "---> $\$n\n"; # リファレンスしていきなりデリファレンス ------------------------------ % perl -w foo Use of uninitialized value in concatenation (.) or string at foo line 5. ---> 17 結果は確かに出てるんだけど、なんかundefの変数を二重引用符に入れたときと同じ 警告メッセージが出ます。これはなぜでしょう? |
|
>結果は確かに出てるんだけど、 ↓を試してみて下さい。 my $n = 17; # 普通の変数 $\ = '<OUTPUT RECODE SEPARATOR>'; print "---> $\$n\n"; # リファレンスしていきなりデリファレンス ↓こっちも my $n = 17; # 普通の変数 print "---> ${\$n}\n"; # リファレンスしていきなりデリファレンス |
|
>>1494 CoreFighter > BIOSの設定画面で、MPSってありますけど > Versionの1.1と1.4の違いってなんでしょうか MultiProcessor Specification の略ですが、詳しいことはさっぱりです。 現状では ACPI に取って変わられたんじゃないかな。具体的なことは intel のサイトあたりに仕様書が転がってるかもしれません。 |
|
>mmさん あー、、、(^^;;;;; すいませんでした。 どうもありがとうございます! |
|
UNIXで、C言語で、TCP/IPを使って、クライアント/サーバ(マルチクライアントがアクセスする。非ブロッキングという)プログラムをしています。 selectを使用して、特定の、クライアントが接続しているソケットのタイムアウトを知りたいのですが、その方法が、良くわかりません。 こちらの方が詳しいということなので、ぜひ教えてください。 お願いします。本を読んでも、良くわかりませんでした。 |
|
>>1501 E田 現状はどこまでわかっているんですか? 何もわからないなら、まずは http://X68000.startshop.co.jp/~68user/net/c-echo-1.html を読んでください。で、ソケットを使えるようになると。 で、perl ですが、select の使い方はこんな感じ。イメージをつかんで下さい。 http://X68000.startshop.co.jp/~68user/net/echo-4.html んで、C での select(2) の使い方。 http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/54916 http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/54917 わからなければ、作ってるソースから余計な部分をそぎ落としたソースを 公開して、再度質問してください。 |
|
こんにちは。ネットワークプログラミングについて質問があるのですが…。 現在、Debian Linuxをもちいて、簡単なプログラミングから練習している のですが、いき詰まりました。 PF_PACKETをつかってデータリンクに直接データを渡したいのですが、 ethhdrのh_dest や h_sourceにどうやってMACアドレスを入れて良いか 解らなくなりました。IPアドレスでは、inet_ptonとかあったんですが、 MACアドレスの場合もあるのですか?? 宜しくお願いします。 |
|
>>1503 inpaku > 簡単なプログラミングから練習しているのですが、いき詰まりました。 ははぁ、「簡単なプログラミングから練習」で、いきなりデータリンク層ですか。 僕にはちょっと荷が重いなぁ。 確認ですが、非 TCP/UDP かつ 非 IP のデータを送りたいのですよね? UNIX Magazine 2000年7月号「BSD をハックする - 齊藤明紀」で、 - 非 IP のプロトコルを使うにはどうすればよいか - 送信する Ethernet パケットに含まれる MAC アドレスを自由に 設定することはできるか について、NetBSD での解説が書かれています。 また、「UNIX ネットワークプログラミング第2版 Vol.1」 http://X68000.startshop.co.jp/~68user/net/link-book.html#8 では、データリンクへのアクセス手法として、 - BSD の BPF (BSD Packet Filter) - SVR4 の DLPI (SVR4 Data Link Provider Interface) - Linux の SOCK_PACKET の3つがあげられています。どうやらここらへんは OS により API がまちまちらしいですね。実際、手元の FreeBSD 4.2-BETA では (PF|AF|SOCK)_PACKET という定数は定義されていません。 で、この本によると Linux の SOCK_PACKET を使うなら fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL)); とすると、データリンクからすべてのフレームを受けとれる らしいです。 あと、tcpdump が使用している libpcap というライブラリが 上記3種の方法に対応しているようなので、参考になるかも しれません。 # libpcap は読み出ししかできませんが、送信に対応させるのは # それほど面倒ではないとか。 > IPアドレスでは、inet_ptonとかあったんですが、 > MACアドレスの場合もあるのですか?? BSD には libc に ether_aton とか ether_hostton てのがあります。 Linux はどうですか? くぅ、面白い話題だけど、調べるのに一杯一杯だ。 |
|
68userさんへ 親切にお答え下さって、ありがとうございます。 ether_aton とか ether_hostton ですか、探してみます。 実は僕もUNIX ネットワークプログラミング第2版 Vol.1を 持ってますが、はっきりいって、C言語すらおぼつかない僕 には辛いです(笑) たしかにLinuxではSOCK_PACKETを使うと本には書いてあり ましたが、Kernel2.2以降?からはPF_PACKETを使えと、man ページに書いてあったものですから、それを使ってます。 また、libpcapのソースも落としましたが、書き換えるのは 僕には不可能でした(苦笑) ところで、僕は何をしたかったのかというと、自分で任意の プロトコルをつくってそれで通信させてみようということだ ったんです。無謀とお思いでしょうが、やらなきゃならんの です。卒業のために…。とにかくがんばってみます。 ありがとうございました。 |
|
早速、回答してくださいまして、ありがとうございます。 どこまでわかっているか、ということなので書きますが、 ソケットの生成とかは、できています。 サンプルとかを真似して、クライアント/サーバで動かしてみました。 fork()で、マルチクライアントにもできています。 でも、select()を組み合わせると、よくわかりません。 動作は、教えてもらったページとかで、なんとなくわかるのですが、 それをCでやろうとすると、わからなくなります。 select[1]とかと書いて、タイムアウトの時間を指定してやると、 それをすぎても読み出せない時にはタイムアウトしたっていうことで 検出できるんですか? よろしくお願いします。 |
|
追伸です。 ソースとかは、まだ、ほとんど、サンプルとかのechoサーバとかなので、 書きませんでした。 |
|
すみません、もう一つ質問です。 送信するデータで、データの最初に全データの長さが入っていて、 その次に、データのIDが入っていて、その後にデータの本文が 入っているというものを受信する時の方法についてなんですが、 それを読む時、最初のデータの長さとIDを読んで、その後で データの本文を読みたいのですが、構造体みたいなのを用意して、 そこに格納しようと思っています。 データの長さはu_longで4byteで、 IDは、0x00100101(u_longで4byte)とかという番号で、 データの本文は、u_shortで2byte+longで4byte+char[8]です。 socketでの送信用のchar型からキャストしてみようと しているんですが、最初の00がうまく行きません。 (送信する時のキャストはうまく行っています。受信する時は、 ちゃんと全部、もとのままのデータを受け取っています。) これは、socketの扱い方の方のhton()とかでやらないと いけないのですか? それから、もしかすると、Cの方の書き方が下手糞なせいなのかも しれないのですが、構造体に格納するのがうまく行かないので、 たとえばで良いので、もしも良かったら、例を教えてくれませんか? お願いします。 |
|
> 最初の00がうまく行きません。 うまく行かないプログラムを (余計な部分は削った上で) 公開してください。 はい、C+select の超手抜きサンプル。バグありまくりですが 一応動きます。細部は参考にせず、おおまかな流れを見て下さい。 ------------------ #include <stdio.h> #include <netdb.h> #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> #include <sys/uio.h> #include <unistd.h> #include <sys/param.h> #include <netinet/in.h> #include <arpa/inet.h> #define BUF_LEN 256 /* バッファのサイズ */ int main( int argc , char *argv[]){ int connected_socket[100]; int listening_socket; struct sockaddr_in sin; int sock_optval = 1; int port = 5000; char buf[BUF_LEN]; struct timeval waitval; fd_set fd; fd_set org_fd; int max_sock = 0; /* リスニングソケットを作成 */ listening_socket = socket(AF_INET,SOCK_STREAM,0); /* ソケットオプション設定 */ if ( setsockopt(listening_socket,SOL_SOCKET,SO_REUSEADDR, &sock_optval,sizeof(sock_optval)) == -1 ){ perror("setsockopt"); exit(1); } /* アドレスファミリ・ポート番号・IPアドレス設定 */ sin.sin_family = AF_INET; sin.sin_port = htons(port); sin.sin_addr.s_addr = htonl(INADDR_ANY); if ( bind(listening_socket,(struct sockaddr *)&sin,sizeof(sin)) < 0 ){ perror("bind"); exit(1); } if ( listen(listening_socket, SOMAXCONN) == -1 ){ perror("listen"); exit(1); } printf("ポート %d を見張ります。\n",port); waitval.tv_sec = 1; waitval.tv_usec = 0; FD_ZERO(&org_fd); FD_SET(listening_socket, &org_fd); max_sock = listening_socket; while (1){ int i; struct hostent *peer_host; struct sockaddr_in peer_sin; memcpy(&fd, &org_fd, sizeof(org_fd)); select(max_sock+1, &fd, NULL, NULL, &waitval); for ( i=0 ; i<=max_sock ; i++ ){ if ( FD_ISSET(i, &fd) ){ if ( i == listening_socket ){ int len; len = sizeof sin; max_sock++; printf("connected_socket[%d]\n",max_sock); connected_socket[max_sock] = accept(listening_socket, (struct sockaddr *)&sin, &len); if ( connected_socket[max_sock] == -1 ){ perror("accept failed.\n"); } len = sizeof(peer_sin); getpeername(connected_socket[max_sock], (struct sockaddr *)&peer_sin,&len); peer_host = gethostbyaddr((char *)&peer_sin.sin_addr.s_addr, sizeof(peer_sin.sin_addr),AF_INET); printf("接続: %s [%s] ポート %d\n", peer_host->h_name, inet_ntoa(peer_sin.sin_addr), ntohs(peer_sin.sin_port) ); FD_SET(max_sock, &org_fd); } else { int read_size; read_size = read(connected_socket[i], buf, sizeof(buf)-1); if ( read_size == 0 ){ printf("接続が切れました。引き続きポート %d を見張ります。\n",port); close(connected_socket[i]); FD_CLR(i, &org_fd); } else { printf("メッセージ: %s",buf); write(connected_socket[i],buf,strlen(buf)); } } } } } close(listening_socket); return 0; } |
|
もう、お返事を頂けたとは! すごいです。 ありがとうございます。 参考にして、勉強してみます。 それと、構造体に入れるところのプログラムを、そこのところだけ書きます。 テスト用に、こういう構造体を作りました。 struct test_s{ u_long test_1; u_short test_2; u_short test_3; u_short test_4; u_short test_5; }; struct test_s tes; それから、読み込むところのプログラムです。 while(1){ int len; char *ptr; char buf1[256]; len = read( newsockfd, buf1, sizeof( buf1 )); buf1[len] = '\0'; if( len > 0 ){ if( strncmp( buf1, "end", 3 ) == 0 ){ break; } ptr = buf1; tes.test_1 = (int)ptr[0]; tes.test_2 = (atoi)ptr[1]; tes.test_3 = (atol)ptr[2]; tes.test_4 = (int)ptr[3]; tes.test_5 = (int)ptr[4]; } } こんな感じです。 test_2以降に入る予定のデータは、みんな同じのを送っていますけど、 どれも、変な感じになってしまいます。 (ここには書いていないですけど、printf()で表示させています。) 構造体とかポインタとか、意味は勉強したんですが、 書くのは初めてなので、そのせいかなとも思うんですが、 キャストのやり方が違うのかもしれません。 いろいろやっているうちに、自分ではわからなくなってしまいました。 ほんとうにすみませんけれども、教えてください。 お願いします。 |
|
>>E田 >キャストのやり方が違うのかもしれません。 確かにおかしな部分はあるようです。もっとも、それがどの程度 全体に影響を及ぼしているかは分かりません。参考程度と言うことで。 まず、次のようなサンプルプログラムを用意します。 #include <stdio.h> #include <string.h> struct test_s { unsigned long test1; unsigned short test2; unsigned short test3; unsigned short test4; unsigned short test5; } tes_s; int main(int argc, char *argv[]) { char buff[256]; char *ptr; buff[0] = '\x12'; buff[1] = '\x34'; buff[2] = '\x56'; buff[3] = '\x78'; buff[4] = '\x0'; buff[5] = '\x1'; buff[6] = '\x0'; buff[7] = '\x2'; buff[8] = '\x0'; buff[9] = '\x3'; buff[10] = '\x0'; buff[11] = '\x4'; ptr = buff; tes_s.test1 = ((unsigned long *)ptr)[0]; tes_s.test2 = ((unsigned short *)ptr)[1]; tes_s.test3 = ((unsigned short *)ptr)[2]; tes_s.test4 = ((unsigned short *)ptr)[3]; tes_s.test5 = ((unsigned short *)ptr)[4]; return 0; } なおキャストの仕方がE田さんのとは違いますが、 E田さんの意図を汲むのなら上の方がおそらく良いでしょう。 これをデバッガで検査してみました。最後の手前で break させて 変数を見ます。 (gdb) x/100bx ptr 0xbfbfd6f0: 0x12 0x34 0x56 0x78 0x00 0x01 0x00 0x02 0xbfbfd6f8: 0x00 0x03 0x00 0x04 0x44 0xd7 0xbf 0xbf これを見る限りデータはちゃんとセットされています。 (gdb) p/x tes_s.test1 $1 = 0x78563412 最初の 4 バイトはひっくり返っています。もしも、動作させる予定の 計算機の CPU が little endian なら memcpy などを使って 1byte ずつ コピーした方が無難です。ただし、SPARC とか m68k なら気にしなくて良い 場合もあります。(ただし、完璧に機種依存になるので、その旨コメントで 明記した方が良いでしょう。) (gdb) p/x tes_s.test2 $2 = 0x7856 (gdb) p/x tes_s.test3 $3 = 0x100 (gdb) p/x tes_s.test4 $4 = 0x200 (gdb) p/x tes_s.test5 $5 = 0x0 (gdb) q 次からは、ずれていますね。例えば、tes_s.test2 = ((unsigned short*)ptr)[1] というのは最初から、short が並んでいるとして、最初から 2 番目のものを とりだすことになるので 配列先頭からの 3 バイト目と 4 バイト目をとりだ します。更に、バイトオーダが絡んで来るので、話しは複雑になります。 機種に依存して良いのなら、 union hoge { struct some_struct { .... } hogehoge; char buff[256]; } などとして一気にコピーする手法が典型的ですが、バイトオーダに悩まされま す。これをすると SPARC では動くが intel 系の CPU では動かない、あるい はその逆のプログラムになります。 まるで、馬鹿みたいに思えるかも知れませんが、memcpy で地道に値のコピー を行った方が良いです。 繰り返しますが、これをなおしたとしても、 E田さんの問題の解決になるとは限りませんので、あらかじめおふくみおき下 さい。あくまでも気がついた範囲ではと言う話です。 |
|
>>1509 68user 68userさんはご存知かもしれませんが、他の人がはまらないように。 Linuxのselect(2)は、戻った時、第5引数の値が残り時間を示して戻ってくる(タイムアウトしたら値はゼロになる)ので、waitvalの値の設定はwhileループ内でやる必要があります(manにも書いてあります)。 > コピーした方が無難です。ただし、SPARC とか m68k なら気にしなくて良い > 場合もあります。(ただし、完璧に機種依存になるので、その旨コメントで > 明記した方が良いでしょう。) 教育的観点から言っても、やはり「常にネットワークバイトオーダに」でしょう。 > まるで、馬鹿みたいに思えるかも知れませんが、memcpy で地道に値のコピー > を行った方が良いです。 バイトオーダと構造体のパディングを考えると、これしかありませんね。 参考 http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.15 データ型をやりとりしたいなら、構造体ひとつに対し専用の読みだしと書き出しの関数を作るのが常套手段です。 (内部的には、構造体のメンバ変数をチマチマとネットワークバイトオーダにしながら、バッファにバイト列として書き出します。send側)。 もうひとつの手は(書かなかったら、68userさんが指摘するでしょうが)、数値でもなんでも文字列にしてしまう手です。 クライアント側のテストをスクリプト言語やtelnetを使って簡単にできるので、お薦めです(ただし、簡単すぎて卒業研究っぽくならないかもしれませんが)。 |
|
68userさん MPSの件有難う御座いました。 ところで今疑問に思っている事があるのですが、 NICにはMACアドレスってのがありますよね。 モデムやTAにもMACアドレスってあるのでしょうか? #ものすごい些細な質問で・・すんません。 |
|
はじめまして すいませんが質問です。 vi でヒアドキメントの使い方がわかりません linuxで試しているのですが ex/vi: Vi's standard input and output must be a terminal とエラーになってしまいます。 できないのでしょうか? |
|
>>1514 taka > vi でヒアドキメントの使い方がわかりません ex mode なら大丈夫なようです。ただし ex コマンド使わないと いけませんが。そのまま vi mode で使う方法は分かりません。 #!/bin/sh ( vi -e | sed -e 's/^#/foo: /' ) << 'END' a hoge hoge hoge hoge . 1,$s/^/#/ 1,$p q! END あとシングルクォートかエスケープ使った方が良いです。 最後の行の $ とシェル変数がバッティングしますから。 |
|
有難うございます 以下のシェルで更新できました。 #!/bin/sh vi -e data001 << 'END' i hoge hoge hoge hoge . wq! END ps レスのつけ方がわかりませんでしたすいません |
|
>>1510 E田 構造体の受け渡しに関しては、僕の出る幕はなさげですが、 一応まとめておきます。まず、E田さんはポインタの使い方を 学んで下さい。rosegarden さんのソースは tes_s.test1 = ((unsigned long *)ptr)[0]; tes_s.test2 = ((unsigned short *)ptr)[1]; となっていますが、rosegarden さん自身が説明されている通り これではまずいので tes_s.test1 = *(unsigned long *)(ptr); tes_s.test2 = *(unsigned short *)(ptr+4); の方がいいでしょう。わからなければ再度質問してください。 で、それを理解してからやっとバイトオーダの話になります。これは 今回の件では関係ないかもしれない (エンディアンによってたまたま 問題が顕在化していないかもしれない) ので、参考程度にどうぞ。 以下のソースでは配列 data から変数 test1/2/3 に値を代入しようと しています。 #include <stdio.h> #include <string.h> void my_memcpy(char *dst, char *src, size_t len){ src += len-1; while (len--) *dst++ = *src--; } main(){ unsigned long test1; unsigned short test2; unsigned short test3; char data[] = {0x12,0x34,0x56,0x78,0x0,0x1,0x0,0x2}; char *ptr = data; test1 = *(unsigned long *)(ptr); test2 = *(unsigned short *)(ptr+4); test3 = *(unsigned short *)(ptr+6); printf("普通に代入 0x%x 0x%x 0x%x\n", test1, test2, test3); memcpy(&test1, ptr+0, sizeof(test1)); memcpy(&test2, ptr+4, sizeof(test2)); memcpy(&test3, ptr+6, sizeof(test3)); printf("memcpy 0x%x 0x%x 0x%x\n", test1, test2, test3); test1 = htonl(*(unsigned long *)(ptr)); test2 = htons(*(unsigned short *)(ptr+4)); test3 = htons(*(unsigned short *)(ptr+6)); printf("hton して代入 0x%x 0x%x 0x%x\n", test1, test2, test3); my_memcpy(&test1, ptr+0, sizeof(test1)); my_memcpy(&test2, ptr+4, sizeof(test2)); my_memcpy(&test3, ptr+6, sizeof(test3)); printf("逆順にmemcpy 0x%x 0x%x 0x%x\n", test1, test2, test3); } このサンプルでは char data[] = {0x12,0x34,0x56,0x78,0x0,0x1,0x0,0x2}; となっていますが、これを適当に切り取って変数に代入すると 順序が狂ってしまいます。実行結果は以下の通り。 普通に代入 0x78563412 0x100 0x200 (間違い) memcpy 0x78563412 0x100 0x200 (間違い) hton して代入 0x12345678 0x1 0x2 (正しい) 逆順にmemcpy 0x12345678 0x1 0x2 (正しい) 前の2つは順序が逆になっています。これはリトルエンディアンマシン (x86 など) で発生します。ビッグエンディアン (68000, Sparc など) では起こりません。 後の2つは htons/htonl や自作の my_memcpy でバイト順を置換して 代入しています (もちろん hton を使う方がよい)。 これはソケット経由でデータを送ると、バイト順が狂うという 意味ではありません。エンディアンが異なるマシン間でも、 データは送った順序で届きます。ですから、同じエンディアン 同士でデータを送りあえば問題は顕在化しません。 ただし、 「異なるエンディアン間で変数の値を直接送信したとき」 は、 「一方の CPU 内部ではバイト順の交換が行われるのに、 他方では行われない」 ので、バイト順が狂ってしまいます。ですから、 「事前にネットワークバイトオーダに変換してから送信」 し、 「受信側はネットワークバイトオーダと認識して変数に代入する」 のが望ましいということです。 実際のソースで書くと、以下のような感じになります。 送受信側でバイトオーダが一致していれば OK。異なるなら NG。 (送信側) long send_num=0x12345678L; write(socket, &send_num, sizeof(send_num)); (受信側) long recv_num; read(socket, &recv_num, sizeof(recv_num)); バイト列をソケット経由で変数に代入する。受け手側が リトルエンディアンなら OK。そうでなければ NG。 (送信側) char buf[]={0x12,0x34,0x56,0x78}; /* 0x12345687 を送りたいとする */ write(socket, buf, sizeof(buf)); (受信側) long recv_num; read(socket, &recv_num, sizeof(recv_num)); ネットワークバイトオーダで送信。ネットワークバイトオーダを ホストバイトオーダにして代入。これが一番よい。 (送信側) long send_num = htonl(0x12345678L); write(socket, &send_num, sizeof(send_num)); (受信側) long recv_num; char buf[256]; read(socket, buf, sizeof(recv_num)); recv_num = ntohl(*(long *)(buf)); なお、ネットワークバイトオーダ=ビッグエンディアンのオーダです。 別に両者で合意が取れていればいいので、リトルエンディアンで 統一したければそれはそれで構いません。 ちなみに X プロトコルでは高速化のため、事前にクライアント・サーバ 間でバイトオーダが異なるかどうかチェックして、 - 同じバイトオーダならそのままデータを送る - 異なるバイトオーダならネットワークバイトオーダに変換してから送る となっているとか。 ところで my_memcpy(void *dst, void *src, size_t len){ とすると gcc に invalid use of void expression と怒られるんですが、 引数を void * で受けるのってできないんでしたっけ? >>1512 gixs > Linuxのselect(2)は、戻った時、第5引数の値が残り時間を示して戻ってくる > (タイムアウトしたら値はゼロになる) ので、waitvalの値の設定はwhile > ループ内でやる必要があります(manにも書いてあります)。 ご指摘どうもです。その通りですね。ちなみに FreeBSD では select(2) の BUGS の項で、本来上記のような動作をするべきだが、 現状ではそうなっていない (waitval の値は書き換えられない) と あります。 >>1513 CoreFighter > NICにはMACアドレスってのがありますよね。 > モデムやTAにもMACアドレスってあるのでしょうか? ないです。なぜかっちゅうと NIC は Ethernet の端点だからです。 # なぜ Ethernet だと MAC アドレスが必要で、モデム/TA に # MAC アドレスが必要ないか…は、うまく説明できないなぁ。 # 誰か教えて下さい。 |
|
すいませんがまた質問です。 今度はftp でヒアドキメントの使い方がわかりません ftp ftp.xxx.xxx.ne.jp << EOF userid password by EOF これで実行すると Password:Name(ftp.xxx.xxx.ne.jp:root): と聞かれてしまいます。 シェルだけで実行する方法はありませんか? |
|
>>1518 taka > 今度はftp でヒアドキメントの使い方がわかりません http://X68000.startshop.co.jp/~68user/unix/pickup?ftp の -n オプションの説明を見て下さい (Linux で使えるかどうかは わかりませんが)。 |
|
>>1487 68user 先日の FreeBSD の crypt(3) のデフォルトについてですが、 暮れから新年にかけてライブラリ関数のレベルで切り替えの メカニズムが commit されたようです。いまとのところ 5-current でしか使えず、管理権限がないと切り替えられないのですが。 /etc/auth.conf に crypt_default=md5 という設定を入れると perl の crypt もデフォルトが md5 になるようです。 # 今日 CVSup でソースとって来た人は 20 時以降のソースとって来た方が # いいです。昼のソースだと pccard 周りのコンパイルが出来ません。 # 今はなおっていますが。 |
|
せっかくなので、 >>1509 68user のソースを書き直して 「C 言語で echo サーバを作ってみよう (2)」 http://X68000.startshop.co.jp/~68user/net/c-echo-2.html を作ってみました。C言語+select によるタイムアウト機能付き echo サーバです。 # 一応バグは潰したつもり。 あと、これまでご指摘を頂いた >>1389 Yuuki の accept のバグ、 >>1215 UNIX見習い >>1216 68user の LocalAddr のバグを修正しました。お二人に感謝。 |
|
>>1520 rosegarden おろ、/etc/login.conf には passwd_format=md5 で、/etc/auth.conf には crypt_default = md5 des で、libutil で、libcrypt ですか。全然なにが なんだかわかってませんが、手元にソースがないので調べにくい。MFC を待つか…。 # 軟弱なので、うちは今朝の 4-STABLE です。 |
|
>>1522 68user 言葉が足りないようですみません。 4-stable では /etc/login.conf に passwd_format=md5 と明示的に 指定することによって passwd コマンドなどで 使用するハッシュ関数は変更できますが、perl などで使用している crypt(3) などのハッシュ関数はそのまま des だったりします。 解禁以降、大抵の人はそのまま des 入れているでしょうから。 一方、5-current だと /etc/login.conf でのハッシュ関数の 指定は passwd コマンドでは有効になりますが、それとは別に crypt(3) のハッシュ関数を /etc/auth.conf で指定できます。 これはさっき CVSup して確かめましたが、4-stable には反映されていません。 http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/lib/libcrypt/crypt.c ソースはここで確かめられます。 CGI で差分も見れます。 > # 軟弱なので、うちは今朝の 4-STABLE です。 いや、あまり関係ないかと思います。去年の暮れに 4-stable が page fault 頻発して 放棄せざるを得ない状態まで追い込まれたことあります。結局 kernel panic 起こしながら、数個ずつ kernel のファイルをコンパイルして、 安定した kernel をインストールし、それで回復させましたが。 同じ時期の 5-current はすごく安定していました。 ハード構成いかんではそういうことも起こり得ます。 |
|
初めまして。 FreeBSD 3.5.1と、それに付属のperlを使っています。 そこでソケットに関するプログラムを組みましたが、ちょっと問題が出てきました。 下記のソースを見てください。 HTTPサーバに接続して、メッセージを受け取り、一定時間何も受信できないと プログラムを終了しようとしています。 (本当は、相手のサーバからコネクションを切られたら終了するようにしたいんです。) サーバと接続されいる状態では、selectは期待した値を戻してくれるのですが、 接続が切断されたあとも、selectの戻り値が 0以外で、いつまでたっても、 ループから抜けられません。 なにか解決方法はないでしょうか? (大抵のサンプルはwhile (<SOCK>) って感じでやってるみたいですが、 バイナリファイルが対象でもうまくいくのでしょうか?) ## ソケットを開いて、ポート80)に繋ぐ。 ## send(SOCK,"GET /index.html HTTP1.0\r\n",0); $rin=''; vec($rin,fileno(SOCK),1)=1; while (1) { $ret = select($rout=$rin,undef,undef,1); if ($ret == 0 ) { last; } #タイムアウト recv(SOCK,$x,1,0); print $x; } |
|
>>1524 みかん ちろっと見た感じでは 1. \r\n が一個足りません。 2. 相手側がコネクションを切断したときも select は 1 を返します。 その際、recv すると1バイトも読めず、0を返しているはずなのに 無視しているので永遠に終わらないのです。 # http://X68000.startshop.co.jp/~68user/net/echo-4.html |
|
>>1523 rosegarden > 言葉が足りないようですみません。 いや、解説を催促するつもりはなかったのですが、恐縮です。 login.conf ということはユーザごとに DES か MD5 を定義 できて、しかも各ユーザは ~/.login_conf で上書き自由、 ということだと思うんですが、それが出来て何がうれしい んだろう…ってのが疑問なんです。 # NIS 使用時に幸せ? > 去年の暮れに 4-stable が page fault 頻発して > 放棄せざるを得ない状態まで追い込まれたことあります。 恐いですねぇ。僕は FreeBSD-stable も流し読みだし、make world で こけたとき直すスキルもないので、ビクビクしながらやってます。 4-STABLE じゃなくて 4.2-RELEASE にしとけばよかったな。 >>1524 みかん > 大抵のサンプルはwhile (<SOCK>) って感じでやってるみたいですが、 > バイナリファイルが対象でもうまくいくのでしょうか? <> は C でいうところの fgets 相当 (+バッファサイズが無限長) なので うまくいきます。 うまくいきますが、改行コードが1つもないデータを読もうとすると 一度に多くのバッファ (=メモリ) を消費するので、 sysread(SOCK, $buf, 8192); read(SOCK, $buf, 8192); while ( read(SOCK, $buf, 8192) ){ print $buf } などの方がよいです。 ついでに言っておくと、状況にもよりますが、select に <> や read を使うのは不適切です。select で読み込み 可能だからといって、「改行コードを含むデータ」や 「指定したサイズのデータ」が読み込めるとは限らない ので (データの前半部分だけが先に到着しているかも しれない) からです。せっかく select でブロッキングを 回避しているのに、<> や read の部分でブロッキング してしまうかもしれない。 # ここでいう read は read(2) でなく perl の read (fread(3)) です。 |
|
>>1517 68user > ところで > my_memcpy(void *dst, void *src, size_t len){ > とすると gcc に invalid use of void expression と怒られるんですが、 > 引数を void * で受けるのってできないんでしたっけ? おや? 68userさんにしては珍しい。 # まあ、プログラミング言語って(自然言語も同じようなものですが)、 # ちょっと離れるだけで勘がにぶって、ポカをやらかしてしまいますが。 そのエラーは、引数で受けた部分ではなく、 dst++などの演算のところのエラーですね。 逆に、char*で受けた場合、gcc -Wallのwarningを黙らすために、 (char*)&test1のようなキャストが必要です。 # gccはいつも-Wall。これでポカミスを結構見付けられます。 |
|
>>1526 68user > それが出来て何がうれしい うーん、それはそうですね。ただ、人によってこだわりは あるでしょうから。本当の理由は私も良く分かりませんが、 des インストールしても md5 で crypt できるのはやはり 嬉しいです。 |
|
>>1527 gixs > そのエラーは、引数で受けた部分ではなく、 > dst++などの演算のところのエラーですね なるほどなるほど。 void my_memcpy(void *dst, char *src, size_t len){ (char *)src += len-1; while (len--){ *((char *)dst)++ = *((char *)src)--; } } てな感じでしょうか。 > おや? 68userさんにしては珍しい。 僕は元々ヘボです。-Wall は付けてますが、いつも warning が出る ものの、キャストの仕方がわからず、大抵「まぁ動いているからいいや」で 済ましてしまうレベル (^^; >>1528 rosegarden > des インストールしても md5 で crypt できるのはやはり > 嬉しいです。 ちと考えてみましたが、例えば apache+suExec で CGI を動かす とき、「俺は前の環境で作成したパスワードがあるので DES」 とか「私はセキュリティ重視で MD5」などと、ユーザごとに DES/MD5 を選べたりする、ってな場合があるかもしれませんね。 全然関係ありませんが、掲示板の使い方 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を作りました。上の [使い方] から飛べます。 |
|
こんにちは、UNIX1年生のみかんと申します。 文字列置換のsedコマンドを使って変数の中の文字列を置換して 別の変数に入れたいと考えております。このようなことは可能でしょうか? sed -e "s/aaa/bbb/g" ${ABC} ここで変数${ABC} の中に入っている値(例えばaaa)を置換して 変数${CBA}に挿入したいと考えております。 大変に恐縮ですが、ご存知の方がいらっしゃいましたらご教授いただけませんでしょうか。よろしくお願いします。 |
|
>>1505 inpaku あー、もう解決してらっしゃるかもしれませんが、 だいぶ前にこう言うものをつくりました。 http://www.geocities.co.jp/MotorCity/5319/deception_doc.txt http://www.geocities.co.jp/MotorCity/5319/deception.txt 暇つぶしにつくった趣味のソースなんで、ぼく自身が忘れないための やる気のないコメントしか入ってません(苦笑 自ホストのNICからMACアドレスを引っぱってきてるのは、 gethwaddr()関数のあたりです。 あて先ホストのMACはlookup_mac()関数で持ってきてます。 ARPリクエストを流してから、自分のNICにキャッシュされたか 確認することで取得しています。 今見ると、ところどころマヌケできったないソースですが 参考になれば。 |
|
68userさん、rosegardenさん、gixsさん、 回答、ありがとうございます。 今から、読みながら、また勉強します。 本当に、ありがとうございました。 やってみて、また、わからなかったら質問すると思いますが、 また、よろしくお願いします。 |
|
はじめまして. IPアドレスとポート番号で,サーバーとそこで動いているサーバープログラムが特定できる所までは理解できました. では,あるマシンで2つWWWブラウザーを立ち上げて,その両方とも同じHTTPサーバーにアクセスした場合,サーバはどちらのブラウザーにHTMLを送り返すか分からないと思うのですが,それはどうやって識別しているのでしょうか. |
|
>>1530 みかん > こんにちは、UNIX1年生のみかんと申します。 >>1524 みかん の方とは別の方ですか? sh・bash なら CBA=`echo $ABC | sed 's/aaa/bbb/g'` csh・tcsh なら set CBA=`echo $ABC | sed 's/aaa/bbb/g'` set CBA=$ABC:s/aaa/bbb/g (これって SunOS の csh でも使えるのか〜) てな感じでしょうか。他にも方法があると思いますが、 僕はこれだけしか知りません。 >>1533 とも > では,あるマシンで2つWWWブラウザーを立ち上げて,その両方とも > 同じHTTPサーバーにアクセスした場合 2つのブラウザは、それぞれソケットを生成しますが、それぞれ 同じサーバに connect したとき、自動的に OS が選んだポート 番号が割り振られますので、それで識別できます。 ブラウザが1つであっても、HTML とその中に貼られている画像を 平行して読み出すときなどはソケットを複数使いますが、これも 別のポート番号が割り当てられます。 クライアントは、getsockname すれば自分に割り当てられた ポート番号がわかりますし、サーバからは getpeername すればクライアント側のポート番号がわかります。 ちなみに IP データグラムのヘッダには始点 IP アドレス、 始点ポート番号、終点 IP アドレス、終点ポート番号が 記録されています。 |
|
>No. 1534 68user 68userさん、ご教授ありがとうございます! >>>1524 みかん >の方とは別の方ですか? いいえ、みかんという方が他にもいらっしゃったんですね。 これからはみかん(一年生)と名乗ることにします。 68userさんのご教授いただいた内容にて、問題が解決いたしました。 非常に感謝しております。ありがとうございました。 今後ともよろしくお願いいたします。 ・・・質問ばかりしていてはだめだとは思っているのですが(>_<) |
|
初めて書き込みします。 質問なのですが、ローカルマシンからリモートマシンへコピー(移送)した場合、コピーしたファイルやディレクトリのユーザーID/グループIDがその時の実行ユーザーID/グループIDに変わってしまいます。 これをそのままの設定のままコピーする事はできないでしょうか? ちなみにrcpとftp(ディレクトリのコピー(移送)自体が既に無理)では無理でした。 出来ればUNIXコマンドかPerlで可能な方法があれば教えて下さい。 これらでは無理でも他の方法でなら可能だと言うご意見でも構いませんので、よろしくお願いします。 使用環境:solaris8 使用言語:Perl5.0、csh |
|
>>1534 68user > sh・bash なら > CBA=`echo $ABC | sed 's/aaa/bbb/g'` sh・bash で他の方法があったら教えてください。 >>1536 ゆきえ > ユーザーID/グループIDがその時の実行ユーザーID/グループIDに > 変わってしまいます。 というのが既に誤解ではないかと思います。 % rcp ~/a.txt userA@host:~/b.txt … host:~userA/b.txt のオーナーは userA % rcp ~/a.txt userB@host:~/b.txt … host:~userB/b.txt のオーナーは userB となります。 ですから、ファイルのオーナー/グループが誰になるかは 「その時の実行ユーザID/グループID」 で決まるのでなく、 「rcp するとき どのユーザで認証を行うか」 によります。ftp も同じで、ログイン時にどのユーザ名で 認証を行うかで決まります。 |
|
お答えありがとうございます。 >「rcp するとき どのユーザで認証を行うか」 ですと、認証したユーザーに結局は変更されてしまいますよね? ディレクトリの配下には色々なユーザーIDやグループIDが存在していますのでそれを変更したくはないのです。 調べていますとfilename.tar.zをrcpで移送して、rshでuncompress、tar -xvfpをすろ事でこの問題が回避されそうなのですが、tar -xvfpがうまくいきません。 マシンAのルートディレクトリにある./usr.tarをマシンBからrshで rsh A tar xvfp ./usr.tar rsh A tar xvfp ./usr.tar ./. rsh A tar xvfp ./usr.tar -C ./. いずれの場合も展開されませんでした。 どうすればtarファイルを展開できるのでしょうか? |
|
>>1538 ゆきえ > tar -xvfpがうまくいきません f の直後に tar ファイル名を指定しないといけません。 だから、いつも f は最後と覚えてください。 tar -xvpf hogehoge.tar |
|
>>1538 ゆきえ > ディレクトリの配下には色々なユーザーIDやグループIDが > 存在していますのでそれを変更したくはないのです。 ああ、なるほど。理解しました。 1. ファイルのオーナーを調べ、その権限で rcp する foreach file (*) set owner=`ls -l $file | awk '{print $3}'` rcp $file ${owner}@host:~ end 2. root で tar xvfp する。 ただし、展開時のファイルのオーナーは、ユーザ名でなく uid に 従うので、ローカルとリモートの uid の割り振り (/etc/passwd) が 同じである必要がある。 てなところですか。 > マシンAのルートディレクトリにある./usr.tarをマシンBからrshで > rsh A tar xvfp ./usr.tar rsh の前に マシンA に rcp で usr.tar をコピーしましたか? >>1539 rosegarden > f の直後に tar ファイル名を指定しないといけません。 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。 |
|
>>1540 68user >> マシンAのルートディレクトリにある./usr.tarをマシンBからrshで >> rsh A tar xvfp ./usr.tar > rsh の前に マシンA に rcp で usr.tar をコピーしましたか? ああ失礼、マシンAにファイルはあるのね。で、「ルート ディレクトリ」は「ホームディレクトリ」の間違いですか? % rsh A tar xvfp ./usr.tar だと、~/usr.tar を読みにいってしまいますので。 # root 権限でやってるならルートディレクトリでいいのかも。 |
|
初めて書き込みします。 質問なのですが、DBの接続はDBIで行っています。使用言語はPERLです。 DBへの接続は通常DBIの場合、connectにより行っていますが、 現時点でconnectがされているか、されていないかをコーディング上で 確認する方法はありますでしょうか? ご存知の方がいらっしゃいましたらご回答のほうをお願いします。 |
|
>>1542 の > 現時点でconnectがされているか、されていないかを > コーディング上で確認する方法はありますでしょうか? ping ちうのがありますね。$rc = $dbh->ping; |
|
>>1538 ゆきえ 断りなしにマルチポストする人は、うちの掲示板に 書き込まないで下さい。 http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-11-10-57 今後は向こうでどうぞ。 |
|
>>1540 68user > > f の直後に tar ファイル名を指定しないといけません。 > 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。 はずかしながら今まで、知りませんでした。 御指摘ありがとうございます。 |
|
> > > f の直後に tar ファイル名を指定しないといけません。 > > 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。 > はずかしながら今まで、知りませんでした。 たびたびすみません。知らなかったのは事実なのですが、GNU tar だと ハイフン付けて tar するとだめみたいです。 GNU tar 1.13 の場合 % tar -xvfp hoge.tar tar: Cannot open p: ファイルもディレクトリもありません。 tar: Error is not recoverable: exiting now 一方、Solaris の /bin/tar は 68user さんのおっしゃるとおり 関係なくファイルを取り出せます。これも知りませんでした。 |
|
>>1543 68user >> 現時点でconnectがされているか、されていないかを >> コーディング上で確認する方法はありますでしょうか? > ping ちうのがありますね。$rc = $dbh->ping; ご回答ありがとうございます。 実際に試してみたんですが、disconnectされている状態で $rc = $dbh->ping;を実行すると以下のようなエラーが出力されました。 DBD::Oracle::db ping failed: ERROR Database disconnected at ****.pl line ****. For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. 続けて処理をすることはできないのでしょうか? それとも根本的に何かが違うのでしょうか? よろしくお願いします。 |
|
>>1543 68user >> 現時点でconnectがされているか、されていないかを >> コーディング上で確認する方法はありますでしょうか? > ping ちうのがありますね。$rc = $dbh->ping; ご回答ありがとうございます。 実際に試してみたんですが、disconnectされている状態で $rc = $dbh->ping;を実行すると以下のようなエラーが出力されました。 DBD::Oracle::db ping failed: ERROR Database disconnected at ****.pl line ****. For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. 続けて処理をすることはできないのでしょうか? それとも根本的に何かが違うのでしょうか? よろしくお願いします。 |
|
同じ内容を2度送信してしまいました。 どうもすみません。 |
|
>>1546 rosegarden > % tar -xvfp hoge.tar > tar: Cannot open p: ファイルもディレクトリもありません。 なるほど。tar -x -v -f p hoge.tar と同じ扱いになるわけですね。 いつも - を付けないので知りませんでした。 >>1547 の うーん、SunOS5.6 + perl-5.004_04 + DBD-Oracle-1.06 + Oracle8.0.5.0.0(?) では use DBI; $o_DB = DBI->connect("dbi:Oracle:", "username", "passwd") or die "connect error"; $o_DB->{RaiseError} = 0; $o_DB->disconnect; if ( $o_DB->ping ){ print "connect!\n"; } else { print "not connect!\n"; } で、not connect! と表示されました。標準エラー出力には DBD::Oracle::db ping failed: ERROR Database disconnected at a line 7. と表示されますが、その後も処理は続けることができました。 > 同じ内容を2度送信してしまいました。 > どうもすみません。 いえいえ。 おそらくどこかのロボットが がんがんアクセスしているので、 OS の最大数以上のディスクリプタを開こうとして OS や apache や perl がこけまくってるようです (だからサーバエラーが頻発している)。 普通は二度書きチェックを行っていますが、ちょうど二度書き チェック用ファイルのオープンに失敗したくさいですね。 |
|
>>1547 68user 回答ありがとうございます。 私もif文で確かめてみましたが、not connect! と表示されず、 処理が途中で止まってしまいました。 やはり、記述の通り環境の問題があると思われます。 ただ、確認の方法が分かったので助かりました。 ありがとうございました。 |
|
>>1551 の > 私もif文で確かめてみましたが、not connect! と表示されず、 > 処理が途中で止まってしまいました。 なるほど。うちの環境では、他のエラーは全てトラップできるのに、 ブレースホルダ `?' の数より多く bind_columns すると、エラーと なって perl が終了してしまうという問題があります。 perl や DBI/DBD のバージョンによっては、ping も同様に トラップできないエラーを発生することがあるのかも しれませんね。 # perl+DBI 暦は3ヶ月程度なので、全体的によくわかってません。 ## が、Pro*C や PL/SQL より100倍使いやすいということは ## よく理解できました。 |
|
apacheのlogを見ていたのですが、 ほとんどのlogがGETやPOSTの中で 192.168.1.1 - - [11/Jan/2001:04:27:16 +0900] "HEAD / HTTP/1.0" 403 0 っていうlogがありました。 このHEADってなんでしょうか? |
|
はじめまて。 http://x68000.startshop.co.jp/ これ、かっこいいんですけど・・・・ .htaccessでできるんですか? よかったらやりかた教えてください・・・ |
|
No. 1555は参照元のページの著作権のルールにのっとって いなかったようなので、もう一度書き込みます。 # 1555は消しておいて下さい>68user >>1553 CoreFighter HEADはその名の通り、 HTTP/1.1 200 OK Date: Fri, 12 Jan 2001 15:34:47 GMT Server: Apache/1.3.12 (Unix) mod_ssl/2.6.5 OpenSSL/0.9.5a Last-Modified: Wed, 12 Apr 2000 09:18:00 GMT ETag: "a7f83-3e0-38f43f48" Accept-Ranges: bytes Content-Length: 992 Connection: close Content-Type: text/html など、HTTPのヘッダ情報だけを返すMETHODのようです。 参照元:丸山不二夫著「WWWサーバー管理」(稚内北星ビブリオン内) http://www.wakhok.ac.jp/~maruyama/W3serv/document/node95.html # wakhokは講義テキストを公開しているそうで、参考になります |
|
>>1554 ぽよぞー > http://x68000.startshop.co.jp/ > これ、かっこいいんですけど・・・・ > .htaccessでできるんですか? 無償でこのサーバを提供していただいている Netboy さんが 作成されたものをそのまま使っています。apache のデフォルト設定では - HEADER というファイルに書いたものは、ディレクトリ一覧の先頭に表示される - README というファイルに書いたものは、ディレクトリ一覧の最後に表示される で、さらに - HEADER, README だとプレインテキスト扱いで、(< > & が置換される) - HEADER.html、README.html だと HTML 扱い (< > & はそのまま出力) という扱いがされます。というわけで、 http://X68000.startshop.co.jp/~68user/tmp/HEADER.html http://X68000.startshop.co.jp/~68user/tmp/README.html てな感じのものを置いとけばいいです。細かなカスタマイズは IndexIgnore、 IndexOptions、IndexOrderDefault で。詳しくはこちらをどうぞ。 http://httpd.apache.org/docs/mod/mod_autoindex.html >>1556 has > # 1555は消しておいて下さい>68user へい、消しました。 >>1553 CoreFighter > このHEADってなんでしょうか? 質問する前に、一通り眺めてくれるとうれしいです。 http://X68000.startshop.co.jp/~68user/net/http-3.html#5 |
|
>>1430 68user > おお、化けてる。 - s|^( +)|' ' x length($1)|e; + s|^(( )+)|' ' x length($1)|e; というバグが原因でした。 |
|
通りすがってみました。(意味不明) @HEAD こういう奴もあったりする。 telnet www.yahoo.com 80 Trying 204.71.200.68... Connected to www.yahoo.akadns.net. Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.0 200 OK Content-Length: 15629 Content-Type: text/html <html><head><title>Yahoo!</title> 以下略 |
|
はじめまして。ちょっとわからなくてききたいのですが・・・。 crontabに登録しようとしているのですがうまくいきません。 10 * * * * /home/〜(実行形式ファイルのフルパス) と登録したところ、 >UX:crontab:警告:コマンドは /usr/bin/sh で実行されます. というメッセージが出てきてしまいます。 どうしたらよいのでしょうか? |
|
>>1560 debra > >UX:crontab:警告:コマンドは /usr/bin/sh で実行されます. > というメッセージが出てきてしまいます。 SHELL=/bin/sh とかいれてもだめですか? /usr/bin/sh なんていう sh をもつシステムが思い当たらないので、 詳しいこと言えませんが。 man 5 crontab (*BSD, Linux) あるいは man -s 5 crontab (Solaris の場合) すると書き方が大抵の場合かいてあります。 あるいは man crontab して SEE ALSO を見るとセクション番号が 分かるはずです。 |
|
4-stable のビルドしてますが、 make release の最中にまた page fault 起こしました。make world しなきゃよかった。:-< 今回のは悪質で、backtrace がとれないです。 まあ、page fault なんで、もはや素人の出られる幕はありませんが。 % uname -v FreeBSD 4.2-STABLE #0: Fri Jan 12 21:43:37 JST 2001 一回だけなので、年末のよりはましですが、私の環境で安定していたのは FreeBSD 4.2-STABLE #0: Tue Jan 9 00:25:52 JST 2001 の奴ですね。これは、ちょうど、この前 68user さんが make world した 前後のと kernel はそんなに変わらないとおもいます。 当分の間 4-stable の make world は見合わせた方がいいです。 それから g++ も不安定ですね。ランダムに compiler internal error が出ます。top コマンド見ているとメモリが少なくなった状況で このエラーが出るようです。だから、libstdc++ とか groff の make でこけることが多いです。しかも、失敗してから、もう一度 make すると通ることもあるので、嫌になってきます。 次に多いのが、perl の library の make の失敗。これは原因がかなり はっきりしていて、make world 始める前に /usr/obj 消しておくと 出食わしません。 # 三月に 4.3-RELEASE でるんだろうか? # どうも 4.1-RELEASE よりは不安定になっている様な気がする。 # -current の方がよほど安定しているし ;-< |
|
お世話様です。 perl に ついてお伺いしたいのですが何方かご存知でしたら教えてください。 文字置換で下記のような物を実行するとエラー(ドキュメントにデータが無い) とエラーが出て動作しません。どうも”ー”のキャラクターが原因のようです。 kk,mmの変数でtest変数文章を部分変換したいのですがココでつまずいています。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; $test = "ホームページの更新"; $kk = "ホームページ"; $mm = "掲示板"; $test =~ s/$kk/$mm/; print $test; -----------------------eof------------------------- |
|
>>1562 rosegarden 最近の stable では、thread まわりのバグが fix されて、 mozilla5 が動くようになったそうですが、cvsup するのは やめときます (笑) >>1560 debra >UX:crontab:警告:コマンドは /usr/bin/sh で実行されます. 「警告」っつーのが謎ですね。動作には影響ない? >>1563 yoshi CGI 経由でデバッグするのはやめましょう。まずはコマンドライン からです。さすれば /z[y[W/: unmatched [] in regexp at a line 6. か /ホームページ/: unmatched [] in regexp at a line 6. というエラーが表示されることが確認できるでしょう。 というわけで「ホームページ」という文字列をダンプすると 203 z 201 [ 203 200 203 y 201 [ 203 となります。「ー」の2バイト目が `[' と同じコードのため、 [] が正規表現として正しくない (']' で閉じていない) ということです。 対処法としては 1. SJIS を使わない。スクリプトの文字コードを EUC にする。 2. jperl を使う http://www.jp.FreeBSD.ORG/QandA/HTML/1218.html です。他にも \Q〜\E で囲むだとか、quotemeta を使うなどの手は ありますが、所詮小細工のレベルです。根本的には上のいずれかを 選びましょう。 |
|
ぽよぞーです。 さっそくやってみたのですが、、 http://www.kensu.com/zzztest/ できないっす、、なぜだ、、 HEADER.html、README.html置いてあるのに、 一覧には表示されてないし、、。(直指定で見れまぷ) 原因おわかりでしたらご教授くださいませ・・・ |
|
あ、すんません、追加で。 もしできたとして、 全部のディレクトリにこれ反映させるにはどうしたらいいですか?? mod_rewrite入ってるみたいなのでそれでできますか?? よろしくどうもー。 |
|
>>1564 68user スクリプトの文字コードを EUCにします。ありがとうございました |
|
いろいろやってたら解決できました! HeaderName /lib/HEADER.html ReadmeName /lib/README.html <FilesMatch "^(HEADER|README)\.html$"> ForceType text/html </FilesMatch> http://www.kensu.com/.htaccess 強制的にtext/htmlにしたらうまくいきました。 全部のディレクトリに反映させるのも、上のとおり ディレクトリも含めて指定したらすんなりできました。 img/,doc/など掘ってありますので見てみてください。 http://www.kensu.com/img/ 何度も投稿して板汚してすんません、、>68userさん ではでは |
|
>>1568 けんす > <FilesMatch "^(HEADER|README)\.html$"> > ForceType text/html > </FilesMatch> これは多分デフォルトで設定されていると思います (というか、 .html だから text/html になっているんじゃないかなぁ)。 > HeaderName /lib/HEADER.html > ReadmeName /lib/README.html 書いてませんでしたが、HEADER/README は、一覧表示させたい ディレクトリに置いて下さい。もちろん HEADER/README を 一ヶ所に集めたいなら今の設定で OK です。もしかして > HEADER.html、README.html置いてあるのに、 同じディレクトリに置いてもダメでしたか? あと質問なんですが、www.kensu.com の Server: Apache/1.3.12 (Unix) OCTO_3.0 PHP/4.0.0 FrontPage/4.0.4.3 OCTO って何ですか? |
|
すみません。 また教えて欲しいのですが、これは、Cの質問だと思うのですが、 もしかすると、関数自体が間違っているのかもしれないので、 どうか、教えてください。 下記のような関数を使いたいのです。 int write_sock( int sockfd, char *str ) { int write_len = 0; int count = 0; size_t bytes_sent = 0; char *buf; char str_buff[1024]; sprintf( str_buff, "\r%s", str ); count = strlen( str_buff ); if( count <= 0 ){ return( NG ); } buf = str_buff; while( bytes_sent < count ){ do{ write_len = write( sockfd, buf, count - bytes_sent ); } while( ( write_len < 0 ) && ( errno == EINTR ) ); if( write_len <= 0 ){ return( NG ); } bytes_sent += write_len; buf += write_len; } return( OK ); } この関数を呼び出して使うと、 write_sock( sd, "test strings.\n" ); これはうまくいきました。 だから、ちゃんと動く関数かなと思っていました。 でも、こういう構造体を作って、 struct test_s { unsigned long test1; unsigned short test2; unsigned short test3; unsigned short test4; unsigned short test5; } tes_s; このようにデータをいれました。 tes_s.test_1 = Data_1; tes_s.test_2 = Data_2; tes_s.test_3 = Data_3; tes_s.test_4 = Data_4; tes_s.test_5 = Data_5; データはちゃんと入っているのを、printf()で確認しました。 この後、 write_sock( sd, tes_s ); のように呼び出してみましたが、うまくいきませんでした。 char型のデータでないとソケットでは送れないので、なんとか 文字列にしようとしてみたのですが、文字列の連結として 構造体の各データをつなげる方法がうまくいきません。 memcpy( tes_s, tes_s.test_1, sizeof(tes_s.test_1) ); memcpy( &tes_s[4], tes_s.test_2, sizeof(tes_s.test_2) ); のようにやっても、tes_sの文字列に入っていないし、 sprintf( tes_s[0], "%04d", tes_s.test_1 ); とやると、coreを出してとまってしまいました。 正しいやり方というのはあるのですか? それとも、やっぱり関数が間違っているんですか? どうかよろしくお願いします。 |
|
>>1569 68user > これは多分デフォルトで設定されていると思います (というか、 > .html だから text/html になっているんじゃないかなぁ)。 > 同じディレクトリに置いてもダメでしたか? http://apacheml.ecc.u-tokyo.ac.jp/cgi-bin/namazu.cgi?key=readme&submit=Search%21&whence=0&max=20&format=long&sort=score なんかバグらしいです、、どうなんだろう、、。 > あと質問なんですが、www.kensu.com の > Server: Apache/1.3.12 (Unix) OCTO_3.0 PHP/4.0.0 FrontPage/4.0.4.3 > OCTO って何ですか? http://www.oc.to/ ここのサーバー借りてるのでちょっとわからないです、、 ついでに、、 ディレクトリーリストに表示されるアイコン集、みたいなページ ご存知ないですか?? php,log,cgiとかが「?」じゃかっこわるいので・・・・ |
|
68USERさん、すばらしいサイトを公開なされていて本当に感謝しております。ネットワークプログラミングの基礎知識はWINDOWSのCHMファイルにコンパイルして手元に置いて大変参考にさせていただいております。(LWPメインの「WEBクライアントプログラミング」の百倍くらい助けていただいております。) 本日書き込みさせていただいたのは、質問と言うよりは要望なのですが、PERL5でHTTPクライアントを作る際、SSLで接続する方法を解説頂いたページを掲載して欲しいのです。お忙しいとは思いますがぜひ実現いただけましたら大変助かります。 それではお体にお気をつけて。 今後のご活躍を期待しております。 |
|
char TempBuf[10+5+5+5+5+1]; /* TempBufを初期化 */ memset(TempBuf, 0x00, sizeof(TempBuf)); /* TempBufに設定 */ sprintf(TempBuf, "%d%d%d%d%d", tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5); この時TempmBufの大きさは longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 shortを整数にした時の最大桁数 + 改行(\r) です。 |
|
すいません。訂正です。 >この時TempmBufの大きさは >longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 + >shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 + >shortを整数にした時の最大桁数 + 改行(\r) >です。 改行(\r)でなくてNULL文字(\0)でした。 |
|
> sprintf(TempBuf, "%d%d%d%d%d", > tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5); この方針は、 >>1512 gixs の最後で書いた、数値を文字列として渡す方法ですね。 (つまり、数値10を0x31 0x30のバイト列にしてしまう方法です) 受け手は、自前のパーサなりsscanf(3)なりで、パースして数値に戻します。 でも、"%d%d%d%d%d"ではパースできません。 ゼロ詰めで桁数を決め打ちするか、空白で区切るべきでしょう。 このように文字列で渡す方針が簡単なので、実用アプリならこうすべきですが、どうしても数値のままネットワーク上に流したいとのことなら、ネットワークバイトオーダに変換しながらmemcpy(3)(or memmove(3))します。 # 動かないコードでもいいように、疑似コード(エラー処理なし)。 # および、勝手に、uint32_t tes_s.test1; uint16_t tes_s.test2;ということにします。 char *p = buf; uint32_t x32 = htons(tes_s.test1); memcpy(p, &x32, sizeof(uint32_t)); p += sizeof(uint32_t); uint16_t x16 = htons(tes_s.test2); memcpy(p, &x16, sizeof(uint16_t)); p += sizeof(uint16_t); ... write(sock, buf, p - buf); 受け手は、どういうbit数の数値がどう並んでいるかを知った上で、受けたバッファから数値を切り出していきます。 |
|
ひとつ訂正。 最初のhtons()はhtonl()。 # 掲示板への書き込みは難しいですね。他にもミスがあるかも。 |
|
Perlで system関数||die"$!\n"||exit(0); を使用すると「ファイル番号が違います」とエラーメッセージがでて以上終了を起こします。 こういったエラーの理由が分かるサイトなどありましたら教えて下さい。 またこのエラーの原因をご存知の方がいましたら原因を教えて下さい。 お願いします。 |
|
はじめまして。 perlで、メール本文の内容を分析し、 mimeまたは、プレーンテキストの初めの文書の最終行番号、 mimeのときにテキストがなければ、最初の本文の行番号というように 調べたいのですが、どうすればよいのかわからなくて困っています。 なにか便利なツール、パッケージなどあれば教えてください。 それか調べるポイントでもあれば教えてください。 どうかよろしくお願いします。 |
|
>>1553 CoreFighter CoreFighter さんへ。質問に対する回答をもらっても、 何の反応も示さないなら、質問するのはご遠慮下さい。 >>1570 E田 > char型のデータでないとソケットでは送れないので わかっておられるのかもしれませんが、それは write_sock が そういう書き方になっているからで、本来はソケット経由で バイナリデータを送れます。 >>1571 けんす > なんかバグらしいです、、どうなんだろう、、。 なるほど。 # しかし素晴らしい検索能力ですね。バグだとは想像も # しませんでした。 >> OCTO って何ですか? > http://www.oc.to/ ここのサーバー借りてるので ただ単にドメイン名入れてみただけなんでしょうか。 > ディレクトリーリストに表示されるアイコン集、みたいなページ > ご存知ないですか?? ちろっと探してみましたが、見つかりませんでした。 20x22 だし、適当にでっち上げるのが簡単かもしれませんね。 >>1572 rocky > PERL5でHTTPクライアントを作る際、SSLで > 接続する方法を解説頂いたページを掲載して欲しいのです。 SSL のライブラリを使わず、ですか? そりゃまた難しそうだなぁ。 興味はあるので書きたいところですが、あまり期待しないで下さいね。 >>1577 rererenore さようなら、断りなしにマルチポストする無礼なひと。 >>1578 たろ 「mimeまたは、プレーンテキスト」とか「mimeのときにテキストが なければ」とかの条件がよく理解できませんでしたが、とりあえず >>700 68user が一番お手軽だと思います。 |
|
68USERさん、お返事ありがとうございます。 レンタルサーバーなのでMAKEを使うライブラリのインストールができなくて何でも自力でやっております。 SSLの件、気長にお待ちしておりますのでどうかよろしくお願い申し上げます。 |
|
こちらのサイトで得た知識を、下記するところに記入いたしました。 http://www.tnetbbs.com/phorum/read.php?f=4&i=575&t=406 事後報告、かつ、つたない紹介となりましたことをお許しください。 とりいそぎ、ご挨拶まで。 |
|
>>1579 68user お返事ありがとうございます。 >「mimeまたは、プレーンテキスト」とか「mimeのときにテキストが > なければ」とかの条件がよく理解できませんでしたが、とりあえず マルチパートかシングルパートか、でした。失礼しました。 マルチパートで最初のテキストタイプの箇所に文言を追加したいと 思っています。 マルチパートで、文書がないときには、テキストパートを追加します。 ネットワークの知識が少ないのが悲しいところです。 |
|
>>1582 たろ >ネットワークの知識が少ないのが悲しいところです。 誤解を招くかもしれないので、補足します。もちろん自分のことです。 |
|
はじめまして。 突然何? という感じかもしれませんが、このサイトは非常にすばらしいと思います。 自分はPerl屋なのですが、ここほど為になるサイトは今まで見たことがありません。 HTTPクライアントは特に参考になりました。 ありがとうございます。 すばらしい情報が得られる貴重なサイトですね。 あまりの感動につい書き込んでしまいました。 掲示板の趣旨に反していましたら、お詫び致します。 |
|
みなさん、回答をありがとうございます。 やってみて、うまく格納できているみたいです。 今は、read()の方をうまくできていないので、ちゃんと 受け取りの構造体に格納できないので、これからなんとか 受け取り側で見れるようにします。 でも、うまくCを書けていなかったのがわかりました。 本当にありがとうございました。 |
|
以前は、uptimeの質問に対してレスありがとうございました また、質問があるのですが、 現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。 今回、NISを設定してあるもののバージョンを上げるために、一度NISの設定 を解除して、バージョンをあげて、再設定しようと思っています。 一度試しで行なって見たのですが、Clientのほうで、Server側でマップを更新した後に、ログインができなくなってしまったのです。 (whoamiコマンドで反応がなくなってしまいます) それで、一度NISを外しまして、再設定を行なった際に、 マップの更新後に、stopsrc -s ypbind startsrc -s ypbind -a "ypsetme" ypset (ServerのIPアドレス) を行なったところ、無事に設定する事が出来ました。 ここで、質問なのですが、今度違う場所で同じ作業があるのですが、 マップ更新後に、whoamiコマンドで行けるか確認して stopsrc…などのコマンドを打って設定する他にいい方法があるのでしょうか? 私的にはNISの解除の方法がおかしいのかなと思っています。 (1./etc/passwdを戻す、2.smitでNISを解除する) よろしければ、皆様のご意見を頂きたく思います。 都合上レスが明日になるかもしれませんがよろしくお願い致します |
|
初めまして。 現在UNIXでのSocket通信プログラムを書いているのですが selectシステムコールとFD_ISSETマクロとの 関係がよくわからずにコードを書いていたところ バグに悩まされています。 select()を使いタイマで割り込み動作を監視しながら recv()で受信を行うというプログラムを書いています FD_ZERO( &fdset ); FD_SET( m_Sockfd, &fdset ); while(recv_size != 0) { work_fdset = fdset; ret = select( 64, &work_fdset, NULL, NULL, &time_out ); if( ret == -1) { 異常処理 } =============================== 割り込み監視 =============================== if( FD_ISSET( m_Sockfd, &work_fdset )) { data_size = recv( m_Sockfd, (void*)(m_pData + m_DataSize)) } m_DataSize += data_size; recv_size -= data_size; } ソースはだいたいこのような感じなのですが、 割り込み監視部分等でコネクションの切断 コネクションの再接続等を行っていると select()の返り値は0でタイムアウトなのですが FD_ISSET()マクロの方は返り値が真になってしまい recv()の発行を行うけれども実際はデータはきておらず recv()で処理がとまってしまい、割り込みの監視ができなくなって しまうというようなバグが発生しています。 ならばselectとFD_ISSETの返り値が真である場合にのみ recv()を発行すればよいと思うのですが なぜこういうケースがでるのかわからなければ 信用し得る修正にならないので書きこみさせてもらいました。 過去ログなどを検索して調べてみましたが 自分なりのなっとくいく回答がえられませんでした。 よければこういうケースになる条件、回避方法等 お教えいただければと思います。 |
|
追記ですが、下記のプログラムは 1ポート1コネクションのプログラムです |
|
>>1553 CoreFighter > CoreFighter さんへ。質問に対する回答をもらっても、 > 何の反応も示さないなら、質問するのはご遠慮下さい。 すいませんでした。以後気をつけます。 |
|
自己回答。先ほど質問を書きこんだものですが、 あれからいろいろサイトなどを再びまわって 間違いに気づきました。 お騒がせしました。 ようは 1ポート1コネクションなら select()の第一引数に取得したソケット記述子+1を指定すれば よかったんですね。 |
|
>>1590 mak(spriggan > 1ポート1コネクションなら select()の第一引数に取得した > ソケット記述子+1を指定すればよかったんですね。 ん〜、 ret = select( 64, &work_fdset, NULL, NULL, &time_out ); であっても、事前に FD_ZERO(&fdset); FD_SET(m_Sockfd,&fdset); してるんだから、select は m_Sockfd しかチェックしないと 思うんだけどなぁ…。 あと気になるのは、select が 0 を返したとき、FD_ISSET 得られる 値は有効な値なのかかどうか (select が 0 を返したときは FD_ISSET してはいけないのではないか)、ってところですけど、どうなんでしょう。 >>1586 YAGI > 現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。 僕は NIS の設定をしたことがないので、ちょっとわかりません。 >>1582 たろ > マルチパートかシングルパートか、でした。失礼しました。 なるほど。で、 >>700 68user はどうでしたか。僕は multipart をばらすところまでしか やってませんので、(必要かどうかわかりませんが) 編集後に 再構成できるのかはわかりません。 # まぁ、できなくはないと思いますけれど。 >>1584 arche > 自分はPerl屋なのですが、ここほど為になるサイトは今まで > 見たことがありません。 どもです。ですが、http://www.din.or.jp/~ohzaki/perl.htm くらい 役立つレベルになりたいものです。 |
|
変な名前ですいません。 SystemVと呼ばれるOSがあるそうなのですが、 'システムブイ'か、'システムファイブ' どちらが正しい言い方なんでしょう? |
|
>>1592 バス酔いで思わずコアダンプ SystemIII の後継なので、システムファイブです。個人的には 話すときはシスブイと呼びますし、一応まわりには通じているようですが、 世間一般の人にシスブイと言ってわかってもらえるかは謎です。 # 検索すると http://www.system-v.org/ ってのが引っかかった。 |
|
>>1591 68user >はどうでしたか。僕は multipart をばらすところまでしか > やってませんので、(必要かどうかわかりませんが) 編集後に > 再構成できるのかはわかりません。 どうもです。 MIME-TOOLSのexampleを見て、今手探り中です。 一度、multipart をばらして、対象のテキストパートから数えた行数を 取得後、multipartをばらしていない本文より行数を取ろうと思います。 ばらしたものよりの再構成は、(むずかしそうなので)とりあえず避けます。 |
|
今課題で、UNIXにApacheを入れ、フリーの掲示板をダウンロードして とりつける課題をしています。 しかし、ウィンドウズで作られたperlのプログラムなので改行コード の違いからか、エラーが出てInternal Server Error が出ます。 ダウンロードしたプログラムをperlで動かしてみても Illegal character \015 (carriage return) at aska.cgi line 2. (Maybe you didn't strip carriage returns after a network transfer?) といった、エラーが出ます。どうしたらよいでしょう。 |
|
cronを実行していたのですが、 マシンの時間を修正した後、cronが実行されなくなりました。 何が原因か、どうすれば実行するようになるのか、 どうか教えていただきたいです。 |
|
cronを実行していたのですが、 マシンの時間を変更した後、 実行されなくなってしまいました。 どうしたらよいのでしょうか? |
|
>>1595 じゅじゅ > 今課題で、UNIXにApacheを入れ、フリーの掲示板を > ダウンロードしてとりつける課題をしています。 最近どうして こんな変なのばっかりわいてくるんだろう。 マルチポストする人はさようなら。 >>1596 クーロン > cronを実行していたのですが、 理由はわかりませんが、cron daemon を再起動するのがお手軽で しょう。特にサーバマシンに言えますが、なるべく時刻は date や ntpdate を使わず、xntpd などで設定しましょう。 |
|
はじめまして。 UNIXのことあんまり知らない初心者のものです。 先日TELNETが使えるレンタルサーバを借りたはいいけど、なんとその2週間後! TELMETが禁止に、、、ってことで、ついでにCORNTABも禁止に。。。 こんな悲しいことってアリッ!!?TELNETが使えるから借りたのに!!!ガビーーン! ・・・ぐちっぽくなってゴメンなさい。 そんなこんなで、質問をさせてください。 TELNETが禁止のサーバで、CRONTABみたいに定期的にパールスクリプト実行できるテクニックってありますか? よい方法を知っている方がいたら、なにとぞ教えてくださいませ☆ |
|
ごめんなさい、マルチポストの意味がよく わかりません。とりあえず、ご迷惑をおかけしたようなので 他のところへ聞いてみたいと思います。 もう来ませんので許してください。 悪気は一つもなかったんですから。 |
|
>>1577 rererenore >さようなら、断りなしにマルチポストする無礼なひと。 >>1595 じゅじゅ >> 今課題で、UNIXにApacheを入れ、フリーの掲示板を >> ダウンロードしてとりつける課題をしています。 >最近どうして こんな変なのばっかりわいてくるんだろう。 >マルチポストする人はさようなら。 本当に困っているから複数のサイトで質問しているだけで何が無礼なのか分かりませんが。 全てのレスに対してお礼を書けば問題ないと思いますが? 何に対してむかつかれているのか全然分かりません。 嫌なら掲示板のどこかに書いておけばいいと思いますが「使い方」の方にすら書かれてもいないようですし。 あなたの方がよほど無礼だと思いますが。 |
|
>>1586 YAGI氏 最近、AIXもNISもごぶさたしていますが。 AIXのコツは、「なんでもsmit」、なので、 > 私的にはNISの解除の方法がおかしいのかなと思っています。 > (1./etc/passwdを戻す、2.smitでNISを解除する) は、O.K.だと思います。 ただ、「/etc/passwdを戻す」はちょっと意味が取れません。 この「NISの解除」と言っているのは、「NISサーバをアップデートする前に、NISサーバを停止すること」の意味ですよね? だとしたら、その間、/etc/passwdをいじる必要はありません。 NISサーバ側の作業は、 1. smitでNISサーバを停止 2. smitでNISサーバのアップデート 3. smitでNISサーバの起動 NISは(確か)statelessなので、クライアント側は何もせずにサーバに繋げると思います(ぼくなら、ypcat passwdで確認します)。 しかし、まあ、AIXは色々あるので、ダメならクライアント側(ypbind)もsmitで再起動するしかないでしょう。 # 余談ながら、通(つう)はsmitではなく、tty版のsmittyを使います。 # 走る男が見たいから、という理由でsmit(X版)を使い続ける人もいますが。 # 分からない人向けへの補足。 # smitは、AIXのGUI設定ツールなのですが、Windowsで砂時計がでるような状況で、 # 走る男のアニメーションがあります。 # しかも、設定が失敗すると、男がこけます。 # AIXがSolarisより優れているのは、これだけ。 |
|
>>1600 じゅじゅ >>1601 rererenore あなたがたに欠けているのは情報を共有しようという精神です。 あなたがたは自分一人情報を得て満足かもしれませんが、 少なくとも僕は、あなたがたを助けるため *だけ* に わざわざ 時間を割いて、検索したりソース見たりして回答しているわけでは ありません。みんなで知恵を出しあって情報を共有するのが 掲示板を開設している第一の目的です。 たとえば僕は >>1595 じゅじゅ を読んで「それは ftp で ascii モードで転送してないからでしょう」と (実際はもっと長文) 投稿しようとしましたが、その前に http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-17-09-06 を見たところ、同じ質問が書いてあり、 じゅじゅ [WriteDate : Thu Jan 18 16:56:31 2001] まで書きこんでありました。 すでに解決していたことを、僕はいちいち細かく解説しようとして いたわけで、全くの無駄な行為です。あなたがたは、他の掲示板の 全ての閲覧者に対して、よーいドンで競わせて、だれが早く回答 するか待っているようなものです。無礼な行為だとは思いませんか? 他の掲示板に書き込んで既に情報を得ているのに、親切な誰かが >>1577 rererenore を見て、いちから説明しようとするかもしれない。おかしいとは おもいませんか? 本当に緊急のトラブルで困っているなら、「申し訳ありませんが、 緊急の事態なので、こことこことここに書き込みました」と 一言添えて、最後には全ての掲示板で得られた情報をまとめて、 こういう結果になりました、とサマリを書き込むべきでしょう。 > 全てのレスに対してお礼を書けば問題ないと思いますが? ダメです。情報の共有化がされていない。情報が集まるのは あなたのところだけ。 > 嫌なら掲示板のどこかに書いておけばいいと思いますが「使い方」の > 方にすら書かれてもいないようですし。 こんなことは、ちょっと答える側の立場に立ってみればわかると 思いますが、いちいち書かないと理解できませんか。それとも 僕の主張自体が理解できませんか。 http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56 http://script.lovely.to/bbs/infolng.cgi?print+200101/01010026.txt http://script.lovely.to/bbs/infolng.cgi?print+200101/01010016.txt |
|
おっとリンクミス。 >>1603 68user (実際はもっと長文) 投稿しようとしましたが、その前に http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56 を見たところ、同じ質問が書いてあり、 でした。 |
|
>No. 1603 68user 2001/01/18 (木) 22:15:59 おっしゃる事は理解できますし、言われてみればもっともな考えだとは思います。 しかし、それはあなたがたのこういった世界に付いて詳しい方々の考え方であってわれわれの様な素人や、始めたばかりの人には情報の共有と言った概念は言われなければ無いと思います。 一言書かれていればこういう事態も避けられると思います。 今後は私も気を付けます。 |
|
>>1605 rererenore そうですか。では、使い方のところに その旨書いて おくことにします。 |
|
はじめて発言します。 実はUNIXはまだ初心者ですが・・ 下記のようなツール(C言語用ライブラリでも可)を探しています。 ・コマンド型ツールでメール層送受信が可能なもの かつ、添付ファイルが遅れるもの かつ、Solarisで動作するもの ・・って、ありますか? どなたか知っている方いましたら教えてください! (できれば、メールアドレスに送付してくれれば、なお可) |
|
先ほどの発言にて誤字・脱字が多いので再送します。 下記のようなツール(C言語用ライブラリでも可)を探しています。 ・コマンド型ツールでメール送受信が可能なもの かつ、添付ファイルが送れるもの かつ、Solarisで動作するもの ・・って、ありますか? どなたか知っている方いましたら教えてください! (できれば、メールアドレスに送付してくれれば、なお可) |
|
この掲示板を利用しているみなさん、ほんとうに私事で ご迷惑をおかけしました。実際私が投稿したことは 自分本位であり、みなさんの迷惑にしかならず 間違っていたことと理解しています。 しかし課題の締め切りが迫ってしまい、日々の勉強している ことの範囲外の課題であったために、調べる時間も少なく このような事態を引き起こしてしまいました。 本当にご迷惑をおかけしました。 しかし、管理者さんのこの掲示板の意図を知ることが できたので自分ではとても勉強になりました。 知識不足、常識不足ですいませんでした。 結局掲示板の設置の方は、その改行コードの変更の仕方が よくわからなかったので、あらかじめ改行コードが UNIXで設定されているものをダウンロードし、 confファイルを手直しして、設置することができました。 ありがとうございました。 |
|
あえて、クロスポストに答える形で書き込みます。 ちょっと面白いこと(だから内容はマニア向け)があり、 それを書いてみたいので...。 >>1609 じゅじゅ > 結局掲示板の設置の方は、その改行コードの変更の仕方が > よくわからなかったので、 ftp での転送が悪かったからだろうという回答は出ているので、 直接改行コードの変更の話にしましょう。 改行コードを変えるのには、例えば、perl などで % perl -pni.bak -e 's/^M$//' hoge.cgi 等とすれば良いのです。上で、^M は表現上 2 文字になっていますが、 この部分はコントロールキーを押しながら M を入力します。 ところが、困ったことにもろに打ち込むとリターンを打ったのと同じで、 これを打ち込めません。これは初心者の FAQ で、通常コントロール V を打ってからコントロール M を打ちます。(以下、CTRL-M 等と書きます。) すると文字通り ^M が打てるんですが、カスタマイズされている場合もあります。 あるいは、カスタマイズしたい場合もあるでしょう。 そう言った場合には stty(1) を使うんですが、 % stty -a speed 9600 baud; 25 rows; 80 columns; (中略) cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>; eol2 = <undef>; erase = ^H; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W; となったときの lnext に「次の一文字を文字通り引用」(literal char???) する キーが割り当ててあります。上の場合には、だから ^V です。このコマンドは ^H に 「前の文字の削除」を割り当てたい場合にも使います。通常 ~/.login に stty erase ^H とか stty erase ^? (^? は DEL キー) をいれておけば、それぞれ、CTRL-H や DEL に前の文字の削除を割り当てられます。 これも初心者の FAQ で DEL キーで前の文字を消すにはどうしたら良いのか? なんて嫌なるくらいに聞かれます。答えは、上のようにすれば良いんですが、 問題はどうやって ^H だとか ^? をいれるかです。この答えも、ここまで 読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。 ちなみに、上の perl のコマンド実行をする場合には tcsh だと ^M が ^J に 変わるので、ash なんかを起動してやった方が良いです。また、^V はコマンドラインや ed あるいは vi なら有効ですが、emacsen の場合 CTRL-Q が lchar もどきの動作を します(デフォルトなら)。 ここから本題にはいりますが、上の stty -a の出力は FreeBSD 4-stable のものです。 実は、5-current だと speed 9600 baud; 25 rows; 80 columns; (中略) cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>; eol2 = <undef>; erase = ^H; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W; となります。良く見ると、erase2 というのがありますが、これは BS と DEL 両方に前の一文字削除を割り当てられるようにするためです。一般に、 % stty erase ^H ^? なんてできませんから。こういった需要は多いはずなのに今までサポートされて なかったんでしょうね。ちなみに、この erase2 については man stty しても 説明がみあたらず、-current の RELNOTES.TXT に書いてあります。 というわけで、FreeBSD には release ごとに結構な相違があります。 # これは昨日見つけて、どこかにこの発見(?)を書きたかった(笑)。 # ところで 3.x-RELEASE にはないが、4.x-RELEASE にはある # du や df コマンドの -h (human friedly) オプションというのはご存知でしょうか? # まあ、皆さん知っているでしょうね。この程度なら。 # 長くなりすみません。 |
|
>>rosegardenさん 教えてくださってありがとうございます。 残念ながら今すぐ自分ではまだ理解はできていませんが いまから勉強して覚えたいとおもいます。 ありがとうございました。 |
|
>gixs様 レスありがとうございます。 当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが 区別が分からずsmitでやってました^^; 「NISの解除」はその通りです。 私も、その手順で実際に行なってバージョンアップしたClientをもう一度 NISの再設定を行ってServerのマップをmakeし直すと 接続できなくなってしまうのです。 なお、smitのコマンド類はWinNTのTera Termより発行しています。 (接続できなくなってしまう→Tera TermでClientのサーバに接続できない) 以前にNISの設定を行なった作業がありまして、その時に障害を起こしてしまい(私はその時は作業はしていませんが^^;)、今回はそれをさけたいので色々と方法を模索しているところです。 一度、/etc/netsvc.confを作り hosts=local,nisを作成してやって見たのですが 今回同様の現象となってしまいました。 また復旧は stopsrc -s ypbind startsrc -s ypbind -a "-ypsetme" ypset (ServerのIP)を打ちました。 もし、これに関しても何か思い当たる点があれば、教えていただけたらうれしいです。 よろしくお願い致します |
|
こんにちは。 こんなことをお聞きするのは失礼かもしれませんが、 他になかったので失礼します。 よく企業のホームページなどで入力した数字をもとにシミュレーションをし、 計算結果を出力するようなページって多く有りますよね。 私もそのようなページをCGIで作製したいと思いいろいろな参考ページを見ましたが、 思うように解説ページが見つかりませんでした。 もし、入力した数値を計算し、結果を出力するようなサンプルを置いてあるページについて 何か思い当たる点があれば教えていただけないでしょうか。 本当にこんなしょうもない質問ですみません。 よろしくお願いします。 |
|
>>1610 rosegarden まず訂正です。 > となったときの lnext に「次の一文字を文字通り引用」(literal char???) する うえのは literal next と書こうとしたのでした。 > 読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。 あと上のような、lchar というのはぜんぶ lnext に読み変えてください。 それから、 > ちなみに、この erase2 については man stty しても > 説明がみあたらず、-current の RELNOTES.TXT に書いてあります。 このくだりを書いた時に見たのは 4-stable box の man stty でした。 5-current box だと説明はないことはないんですが、 > erase VERASE ERASE character > erase2 VERASE2 ERASE2 character > werase VWERASE WERASE character 等と言った感じで、表があるだけで、ちょっと不親切ですね。 この部分はあまり変化が無いですね。 http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/bin/stty/cchar.c ここには説明がありますね。 > 1.10 Tue Nov 28 19:48:06 2000 UTC by jkh と書いてあるので、つい最近ですね。 http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/release/texts/i386/RELNOTES.TXT?rev=1.190 こちらは RELNOTES.TXT です。 ところで、 http://www.FreeBSD.org/cgi/man.cgi?query=stty&apropos=0&sektion=1&manpath=FreeBSD+5.0-current&format=html ここで見ることができますね。 http://www.FreeBSD.org/cgi/man.cgi Plan9 とか Sun OS なんかのマニュアルもここから見ることができるんですね。 今まで、知らなかった。ライセンスはどうやってクリアしたんだろう? FreeBSD 1.0-RELEASE とか 386BSD とかのマニュアルもありますね。 すごいですね。 |
|
>>1591 68user レスどもです。 ret = select( 64, &work_fdset, NULL, NULL, &time_out ); と指定していたので、ファイルディスクリプタ 0〜64までをチェックしかselectはチェックしていなかったので selectはタイムアウトを返し、実際取得したファイルディスクリプタは 64を超えた数になっていたのでFD_ISSETは反応を返した。 というふうになっていた模様です。 ちなみに、ファイルディスクリプタの番号を ここからここまでの番号しか取得しない。とか制限かける方法とか ないのでしょうか? |
|
レス遅くなってごめんなさい。 >>1525 68user >2. 相手側がコネクションを切断したときも select は 1 を返します。 > その際、recv すると1バイトも読めず、0を返しているはずなのに コネクションが切断したときのselectの返り値、recvの返り値については このレスを見て初めて知りました。ありがとうございます。 >>1526 68user >ついでに言っておくと、状況にもよりますが、select に ><> や read を使うのは不適切です。select で読み込み このサイトで紹介されているECHOサーバのように、「クライアントやサーバーとうま く接続できたかどうかを確認する」、というような形が正しいselectの使われ方だと 考えてもいいですか? alarmを使う事でブロッキングを強引に回避するという方法がありますが、他に 比較的OSに依存しない形でブロックを避ける手段はないでしょうか? |
|
>>1615 mak(spriggan)氏 > 0〜64までをチェックしかselectはチェックしていなかったので > selectはタイムアウトを返し、実際取得したファイルディスクリプタは > 64を超えた数になっていたのでFD_ISSETは反応を返した。 > というふうになっていた模様です。 確かになりますね。 知りませんでした。 しかし、fd_setの戻り値をチェックするのは、select(2)が正数を返した時のみにしておいた方が安全でしょう(select(2)に正しい第1引数を渡したとしても、タイムアウト時にfd_setがゼロクリアされるかは分かりません。規格としてゼロクリアが決まっているならO.K.でしょうが、そこまでしてselect(2)の戻り値のチェックを省く理由も見付かりません)。 # 今回はselect(2)の戻り値チェックを省いたおかげで、第1引数のバグに気づいたわけですが。 > ちなみに、ファイルディスクリプタの番号を > ここからここまでの番号しか取得しない。とか制限かける方法とか > ないのでしょうか? select(2)を呼ぶ時に、チェックすべきファイルディスクリプタの部分だけ、fd_setにマスクをかけますが(第1引数は効率の為)。 それとも、効率を気にしていますか? 確かに、非常に大きな番号のファイルディスクリプタ1つだけをチェックするとなると、無駄がありそうなことは否定しません。 それが気になるなら、poll(2)でしょうか。 |
|
>>1612 YAGI氏 # その場に行けば解決できるかもしれませんが、このやりとりでは、助けられる自信はありません。申し訳ないです。 > 当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが > 区別が分からずsmitでやってました^^; X以外でsmitを起動すると、tty版のsmittyと同じ動きなので、 > なお、smitのコマンド類はWinNTのTera Termより発行しています。 smitでもsmittyでも変わりありません。 # という事は、走る男を見ていないんですねえ。 # もしかして一度も見たことが無い、とかだったら不幸です。 > 私も、その手順で実際に行なってバージョンアップしたClientをもう一度 > NISの再設定を行ってServerのマップをmakeし直すと > 接続できなくなってしまうのです。 うーむ、あまり他人の文章のケチをつけるのもなんですが、何をどういう順序でやったのか、いまいち不明です。 (改行の位置に読点があると考えてよいのでしょうか。 この手の説明は、時系列に並べた箇条書の方が分かりやすいと思います。) |
|
>>1607 H.Motoki > コマンド型ツールでメール層送受信が可能なもの > かつ、添付ファイルが遅れるもの > かつ、Solarisで動作するもの 僕は知りませんが、 http://www.freebsd.org/cgi/ports.cgi?query=mime&stype=all&release=4.1-STABLE%2Fi386 の中を見ると、お望みのものっぽいのがありますので、 Solaris でコンパイルしてみてはどうでしょう。 >>1615 mak(spriggan) > selectはタイムアウトを返し、実際取得したファイルディスクリプタは > 64を超えた数になっていたのでFD_ISSETは反応を返した。 なるほど納得です。 > ちなみに、ファイルディスクリプタの番号を > ここからここまでの番号しか取得しない。 ここから、は指定できません。ここまで、ってのは select の 第一引数ですね。多くの UNIX の実装では select が扱えるのは 1024 までのディスクリプタのようですから、この程度なら 僕はあまり気にしません。あと、FreeBSD 4.2-RELEAE の select(2) には For historical reasons, select() will always examine the first 256 descriptors. とありますので、あまり神経質になるほどのことでもないかも しれません (し、そうでないかもしれません)。 |
|
繁盛しているのはいいけれど、返事が大変だなぁ。 >>1616 みかん(perlでソケットの質問してた方) >> select に <> や read を使うのは不適切です。 > 「クライアントやサーバーとうまく接続できたかどうかを確認する」、 > というような形が正しいselectの > 使われ方だと考えてもいいですか? いいえ。タイムアウトも select の正しい使い方です。 サンプルプログラムを書いてみました。 http://X68000.startshop.co.jp/~68user/tmp/select-sysread.pl echo サーバと echo クライアントです。2つスクリプトを書くのが 面倒だったので、fork して 片方が echo サーバになり、もう片方は echo クライアントとして動作するようにしました。 echo クライアントは echo サーバに接続し、文字列を送り、 それを受け取るだけです。echo サーバは select でソケットを 監視し、マルチスレッドサーバとして動作します。また、 クライアントが接続してから2秒経過したらタイムアウトとして 切断します。 で、これを動かすと、 親:5000 でクライアント待ち 子:localhost:5000 に接続します。 親:127.0.0.1:1291 からの接続を受け付け 子:送信メッセージ: HELLO (*1) 親:127.0.0.1:1291 に反応あり 親:127.0.0.1:1291 からメッセージ受信:HELLO 親:127.0.0.1:1291 へメッセージ送信:Received HELLO 子:受信メッセージ: Received HELLO (*2) 子:5秒眠ります (*3) 親:タイムアウトにより 127.0.0.1:1291 を切断 (*4) 子:新しい接続 (*5) 親:127.0.0.1:1292 からの接続を受け付け 子:送信メッセージ: HELLO AGAIN (*6) 親:127.0.0.1:1292 に反応あり 子:5秒眠ります (*7) となります。 最初は子が親に HELLO と送り (*1)、Received HELLO を受け 取ります (*2)。次に、子は5秒 sleep するので (*3)、親は タイムアウトとして切断します (*4)。 次に、子は新しいソケットを生成し再度親に接続します (*5)。 子は親に HELLO AGAIN と送ります (*6)。ただし、今度は メッセージの最後に改行コードを付けません。そして子は5秒 sleep します (*7)。するとここで親も子も動作が止まり、 永遠にデッドロックします。 なぜなら、親は子からのメッセージを $recv_message = <$sock>; で読んでいるからです。改行コードが送られてこないと、 ここでブロックしてしまいますので、これでは select を 使う意味がありません。 今回は意図的に改行コードを含まない文字列を送りました。 これと同じことが、改行コード以前のデータが到着している けれど、改行コードはパケットロスにより再送中、という 状況でも起こります。 というわけで、こういうときは sysread($sock, $recv_message, 100); などとします。これなら、既に到着しているデータのみを 読みます。100バイト分のデータを読もうとしますが、もし そのとき10バイト分のデータしか届いていなかったら、 そこで sysread から処理が戻り、select まで処理が 進み、正常にタイムアウト処理が行えます。 |
|
>>1613 ゆっきー > もし、入力した数値を計算し、結果を出力するような > サンプルを置いてあるページについて何か思い当たる > 点があれば教えていただけないでしょうか。 たとえばどのような計算をしたいのですか? テキストボックス1とテキストボックス2に数字を入力させ、 ボタンを押すと、2値の和を表示する CGI プログラムは 書けますか? >>1599 キチキチ そんな腐れサーバとは早く縁を切りましょう :-) > TELNETが禁止のサーバで、CRONTABみたいに定期的に > パールスクリプト実行できるテクニックってありますか? crontab 自体の使用が禁止されておらず、なおかつサーバ管理者を 敵にまわしてよいなら、CGI プログラムから crontab を設定する とか、~/.forward に crontab を設定するように仕込んでおいて メールを投げるなどの方法はあります。でも、お薦めしません。 あと、外部から定期的に指定の URL にアクセスしてくれる サービスがありますので、それを使って CGI プログラムを 一定時間ごとにアクセスさせるってのもあります。 確か webtimer って言ったかな。検索して探してみてください。 |
|
>>1610 rosegarden 補足などしてみたり。間違ってたらご指摘お願いします。 % cat と実行して、C-p,C-m,C-v,C-m とタイプしてみて下さい。C-p は ^P と 出力されるでしょう。rosegarden さんが書かれた通り、C-m は改行に なります。C-v C-m は ^M と表示されます。 この表示は、キー入力を受け取った端末ドライバが行っています。その 端末ドライバのキー割り当てを変えるのが stty コマンドなわけです。 改行 (この場合 C-m と等価) を打たない限りは、cat に文字列は 渡りません。1行のデータが確定して初めて、端末ドライバが cat に データを送ります。 次に tcsh か bash を起動して、そこで C-p,C-m,C-v,C-m をタイプして 下さい。C-m や C-v C-m はさきほどと同じですが (tcsh ^M でなくて ^J となりますが、両方改行コードなのでこれは置いといて) 、C-p の 挙動が違いますね。1つヒストリをさかのぼります。つまり、1行を 入力していなくても、1文字打った瞬間に tcsh や bash にデータが 渡っていることになります。 これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を 取得しているからです。これを canonical モードといいます。端末の中で 動く mule や emacs や vi もcanonical モードになっているわけです。 これらは端末ドライバを経由していないので、stty の設定とは無関係です。 例えば tcsh のコマンドラインで C-v C-m で ^M となるのは、 % stty erase ^H しているからでなく、デフォルトで % bindkey ^V quoted-insert という設定になっているからです (bindkey は tcsh の内部コマンド)。 一方、伝統的な sh は canonical モードでは動きません。(Linux だと sh=bash だから例外)。つまり端末ドライバ経由でキー入力を拾う わけで、この場合は stty を使って設定します。 > du や df コマンドの -h (human friedly) オプション > というのはご存知でしょうか? 関係ないですが、FreeBSD 2.2.6-RELEASE では du -s が使えず くやしい思いをしました。 使いこなせると幸せだと思うオプション。 ls -lt、uniq -c、tail -f、du -s # du -s は Solaris にはないかな。 |
|
>>1622 68user > これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を > 取得しているからです。これを canonical モードといいます。端末の中で > 動く mule や emacs や vi もcanonical モードになっているわけです。 > これらは端末ドライバを経由していないので、stty の設定とは無関係です。 あ、そうですね。前の >>1610 rosegarden を見ると、emacs の設定も stty でするように読めますね。そう思って読むと、 stty 経由で設定するものとソフトウェア自体が設定するものとがごっちゃに なっていますね。「コマンドライン」というのは、最近の私の環境だと tcsh での話になるから、stty うんぬんは、まちがいだなあ。 とにかく、補足というかご指摘ありがとうございました。 > ls -lt、uniq -c、tail -f、du -s このなかでは、uniq -c は知らなかった。これ便利ですね。 |
|
>>1622 68user > これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を > 取得しているからです。これを canonical モードといいます。端末の中で > 動く mule や emacs や vi もcanonical モードになっているわけです。 > これらは端末ドライバを経由していないので、stty の設定とは無関係です。 ttyドライバは経由してるけど、canonicalはほぼ素通しなモードなので、直接取ってるように見えてる。 コントロールコードは、sttyでの設定と同一のものを使用するプログラムが多い。 が正確でしょう。 canonicalモードとrawモードの違いを述べよ。 |
|
>>1621 68user >確か webtimer って言ったかな。検索して探してみてください。 それ,私のです(泣). >>1599 キチキチ WebTimerは http://jp.usami.com/~robot01/ です.我が家の自宅サーバーからつつきます. とりあえず'98夏から動いてます. 最近メンテしてませんけど,よかったらどうぞ... |
|
>>1622 68user う、canonical と 非 canonical が逆でした。canonical は1行単位、 非 canonical が素通しモードでした。 >>1624 403 > canonicalモードとrawモードの違いを述べよ。 ちと調べてみましたが、canonical, non-canonical と raw, cbreak, cooked の関係がいまいち…。うーむ。 >>1610 rosegarden > % stty erase ^H あと、stty を実行するときには端末が割り当てられている必要が あるので、~/.cshrc に stty erase ^H と書いていると、rcp などを使ったときに (コピーはできますが) stty がエラーとなります。なので if ( ${?TERM} ) then stty erase ^H endif と、環境変数 TERM が設定されている (=端末が割り当てられている) ときだけ stty が実行されるようにしましょう。telnet や rlogin でログインしたときは stty が実行され、rcp のときは実行されません。 ここまで書いてふと思ったのですが、stty って ~/.login に書いとけば こういうことを気にする必要はないのか? >>1625 Netboy >> 確か webtimer って言ったかな。検索して探してみてください。 > それ,私のです(泣). 失礼しました (^^; お肉さんのとこで見た記憶はあったのですが。 |
|
>>1626 68user > ここまで書いてふと思ったのですが、stty って ~/.login に書いとけば > こういうことを気にする必要はないのか? tcsh のマニュアルには書いてありますね。 > Commands like stty(1) and tset(1), which need be run only > once per login, usually go in one's ~/.login file. あと vi ことに nvi からシェルコマンドを実行した時に .cshrc に stty があるとトラブるそうです。 これは、どこかのメーリングリストで見た記憶があるのですが、 失念しました。 |
|
>>1621 68user ご指導、ありがとーございました☆ > サんな腐れサーバとは早く縁を切りましょう :-) たしかに、おっしゃるとーり... 予告なしに、TELNETもSYSTEMに影響することが全面禁止なんて、洒落にもなってないです(^^; 他のサーバを探してみたら、よさそうなのがいろいろ見つかりました。 頑張っていいサーバを探してみることにしまーす。 >>1625 Netboy >WebTimer アドレス感謝です☆ 今は必要なくなりそうですけど、 WebTimerにお世話なるときがきたら有難く使わせてください。 そのときはよろしくお願いします。 |
|
はじめまして。どこで聞いたらいいかと探し回った挙句、ここを見つけました。 どうか質問させてください。 私のプロバイダはメールにqmailを使っていて、転送の設定などを行う際に、 .qmail というファイルをホームに置くことになっています。 プロバイダ曰く、「当社はqmailを無加工で設置しています。.qmailの記述内容に関するお問い合わせはご遠慮ください。」 だそうです。 単純な転送の仕方などはわかるのですが、他にどんなことができるのか調べようにも ネット上に見つかるリソースはqmailの設置や管理の仕方などばかりで、一般ユーザの使い方には ほとんど触れられていません。 どこかに .qmail というユーザが設置する設定ファイルについて詳しくかかれている サイト等はないでしょうか? よろしくお願いいたします。 |
|
>>1629 ラルフ > どこかに .qmail というユーザが設置する設定ファイルについて > 詳しくかかれているサイト等はないでしょうか? http://www.jp.qmail.org/ より、付属文書 -> dot-qmail とたどって、 http://www.jp.qmail.org/q103/jman5/dot-qmail.html ですね。 |
|
Western Digital Caviar33100をインターネットオークションにて購入した者ですが、FDISK.EXEにてフォーマットをするとDOS領域作成に非常に時間がかかります。 故障しているのでしょうか。 故障しているのでなければ、何か良いフォーマット方法を教えてください。 ちなみに自分が使用しているパソコンは、NEC製のPC9821V13です。 |
|
Windows3.1用のグラフィックアクセレータOEM設定ファイル(*.INF)を探しています。提供しているサイト等はないでしょうか? ちなみに自分が使用してパソコンは、NEC製のPC9821V13で内臓アクセレータGD5430(Cirrus)とハイカラーグラフィックアクセレータPCIボード(NECのPC9821Xaに付属していたもの)です。 MS―Windows3.1のフロッピーディスクにはOEM設定ファイルがありませんでした。 宜しかったら、OEM設定ファイルの提供をお願いします。 |
|
>>1631 伊部 茂平 >>1632 伊部 茂平 Windows について質問するなら、 http://www.so-net.ne.jp/ClubHouse/room/pc_scramble_win/pc_scramble_win.html あたりが適当でしょう。 |
|
>>1621 68user >テキストボックス1とテキストボックス2に数字を入力させ、 >ボタンを押すと、2値の和を表示する CGI プログラムは >書けますか? それも書けないちょー初心者です。 こんなものが発言するのって間違いですね。 |
|
はじめまして 以前pop3,smtpのプロトコルについて調べたときに訪れて以来、 いつも楽しく拝見させてもらっています 好奇心的疑問で、特別切羽詰まってるわけではないのですが、 もしよかったら少しお付き合いのほどを… 現在一般的には、NATを使ってるLAN内の特定の端末に、 外部からアクセスすることは不可能と言われてますよね? 友人に尋ねたら、”RASがあるよ”といわれて調べてみたのですが、 ”プロバイダに繋ぐ代わりにRASサーバに繋いで、LANの端末の一部になる” というのが私のイメージでした。 そこでふと思ったのですが、常時接続している端末がRASを使ったら、 プログラム的にはどうなるんだろう、ということです 物理的に出口は二つあるのですが、 単純にIP解決の順番が複雑になるということなのでしょうか? 一つの端末に二つのIPを振るようなことになる気がしますが、 そもそもこんなこと可能なのでしょうか? 何か情報がありましたら、よろしくおねがいします |
|
>>1635 O.Z RAS というものは知りませんが、 > 一つの端末に二つのIPを振るようなことになる気がしますが、 可能です。ネットワークカードが2枚ささっていて、それぞれに 別の IP アドレスが振られているようなものです。 例えば、ルータを買う金がないので PC でゲートウェイマシンを 立てる場合がそれです。ネットワークカードを2枚刺して、1つの NIC には 10.0.1.1 (ネットワークアドレス 10.0.1/24)、もう 1つの NIC には 10.0.2.1 (ネットワークアドレス 10.0.2/24) を 振ります。 仮に、10.0.1.1 の先にインターネットが繋がっていて、10.0.2.1 の 先には 10.0.2 のネットワークしかないとします。その場合は、 - 10.0.2 (netmask 255.255.255.0) 宛のパケットは 10.0.2.1 へ。 - それ以外のパケットは 10.0.1.1 へ (デフォルトゲートウェイ)。 と経路を定めます。 というわけで、このマシン上で HTTP クライアントを動かすと、 経路表に従ってどちらの IP アドレスを始点とするかが決まり、 自然と出ていく NIC も決まるわけです。 ここでは NIC 2枚を例に上げましたが、NIC 1枚と PPP 接続でも 同様です。パケットの出口であるインタフェースが2つあることに 違いはありません。 # IP アドレスというのは、マシンに割り振るものではありません。 # インタフェースにごとに割り振るものです。 ちなみに UNIX では、経路表は netstat -r で、インタフェース 一覧は netstat -i で見られます。 |
|
どこ探せばいいのかも解らず、やっとの思いでここに辿り着きました・・ホッ。 「フォアグランド」「バックグランド」について教えて頂きたく思います。 現在、会社のDB更新(Oracle7)をフォア〜で行っているのですがこれをバック〜に変更すると何かメリットが出るのでしょうか?! 「バック〜に変更しよう」案が出ており、上司から「何か違うの?」と聞かれ、言葉につまっております。助けて下さい。。 |
|
>>1637 HANA > 現在、会社のDB更新(Oracle7)をフォア〜で行っているの > ですがこれをバック〜に変更すると フォアグラウンドで更新というのはどういう意味ですか? 例えば sqlplus をコマンドラインから叩いているという 意味ですか? |
|
>>1636 68user なるほど、経路という概念があったんですね 設定運用等に関してはまるで無知ということが改めてわかりました(笑) インターフェイスごとにIPを振るというのも、いわれてみれば納得です 本の説明なんかじゃ、端末にIPを振るという感じで説明されてるので、 すっかりそういうものだと思ってました NICを指定してIPを振ったという事実も忘れて… 思い込みとはかくも恐ろしい(笑) 回答ありがとうございました |
|
No.1637の付け足しです。 すいません、よく解っていなくて。 Cで書かれているバッチJOBがあり、それが動いているのがフォア〜で見えているという感じです。 |
|
linuxのネットワークがどうも調子が悪いようなのです。 ファイルを転送(ネットワークに負荷がかかると)すると途中でネットワークがつながらなくなってしまいます。システムがおちているわけではなく、その後シャットダウン+電源を一度ぬく+linux起動で再びネットワークはつながります。しかし、電源を抜かずに再起動してしまうとネットワークはつながりません。マシンの環境は、WinNT4.0とTurbolinuxがインストールされていてLANにつないでいます。 解決方法を知っている方がいましたら宜しくお願いします。 |
|
>>1635 O.Z > 現在一般的には、NATを使ってるLAN内の特定の端末に、 > 外部からアクセスすることは不可能と言われてますよね? そうなのでしょうか? port forwarding あるいは port redirection を併用したら、可能なような気がしていますが。私は FreeBSD 使っていて、 ISP の接続の際に FreeBSD の ppp コマンドを使っています。そのコマンドに はしっかり、外から来たパケットを特定のホストの特定のポートに取り次ぐ 機能がついています。当然、natd(8) にもその機能はついています。 もちろん、NAT の純粋な規格上の話であるかどうかは別です。規格は知らない のですが、私がいいたいことは、NAT 自体が LAN 内の特定のマシンに外部か らのアクセスさせることが無理であるにしても、(おそらく大抵のNATを実装し たソフトには)実用上それを可能にする仕組みがあるんじゃないかということ なんですが。 あと、 > 一つの端末に二つのIPを振るようなことになる気がしますが、 > そもそもこんなこと可能なのでしょうか? これは alias 使って、一つのインタフェースに # ifconfig fpx0 inet alias 192.168.1.1 netmask 255.255.255.255 などとするのではだめなんでしょうか? (上のコマンドライン例は適当です)。 # 最近、ポカが多いから、自信ないですけど :-{ |
|
>>1641 sato そもそも NIC の型番を書かないと、根本解決には至らない でしょう (書いてもらっても僕はわかりませんが)。 繋がらなくなったら一度 ifconfig [interface] down して、 ifconfig [interface] up すれば直るのかもしれませんが、 しょせん対処療法ですね。 >>1640 HANA > Cで書かれているバッチJOBがあり、それが動いているのが > フォア〜で見えているという感じです。 C で書かれている DB 更新用コマンドがあるのですね? それをコマンドラインからタイプしている、ということを 指してフォアグラウンドで動かしている、と表現している のですね? UNIX 的な意味で「バックグラウンド」と言うと、 % foo & と & を付けてコマンドを実行することですが、これを 行いたいのですか? もしそうだとしたら、なぜですか? |
|
>>1642 rosegarden > そうなのでしょうか? port forwarding あるいは port redirection > を併用したら、可能なような気がしていますが ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。 ifconfig alias 使った時には、うまく jail へ port forwarding できたのに。やはり物理的に別マシンだとむりなんでしょうか? |
|
>>1642 rosegarden >> 現在一般的には、NATを使ってるLAN内の特定の端末に、 >> 外部からアクセスすることは不可能と言われてますよね? > そうなのでしょうか? port forwarding あるいは port redirection > を併用したら、可能なような気がしていますが。 「一般的には」という意味にもよるとは思いますが、可能ですね。 FreeBSD の natd なら、redirect_addr/redirect_port あたりで 設定した記憶があります。別マシンでも問題ないです。 > 一つのインタフェースに > # ifconfig fpx0 inet alias 192.168.1.1 netmask 255.255.255.255 > などとするのではだめなんでしょうか? あえて書きませんでしたが、一つのインタフェースに複数の IP アドレスを振ることもできます。 ex0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500 inet 10.0.1.103 netmask 0xffffff00 broadcast 10.0.1.255 inet 10.0.1.116 netmask 0xffffff00 broadcast 10.0.1.255 ether 00:aa:00:b9:ab:8e こんな感じ。 IPv4 だと上にある方が primary って決まってるんだっけな。 IPv6 はどっちが主か副かは区別がなかったかもしれない。 用途としては、同じ NIC に IP アドレスを2つ振って、ftp サーバを1つだけ起動しておき、どっちの IP アドレス宛に 接続してきたかで、表示する内容を変えるという、バーチャル ホストのようなことができます (というか、それしか知らない)。 HTTP だと Host ヘッダがあるので、1つの IP アドレスで バーチャルホストができるんですけどね。 |
|
何度もすいません。バックグラウンドで動かした方が、フォアグラウンドで 動かすよりメリットがあると言われました。早い,コンソールがフリーズ しても問題なくバッチが終了する。。。事実でしょうか? 他にも”DB更新バッチ”を動かすのに何か違いがでるのでしょうか? |
|
>>1646 HANA はぁ、こっちの出した問いには答えず、質問するのみで 疑問を解決しようとは、こりゃまた人をなめた話ですね。 以下、詳しく説明する気はなくなったので独り言。 興味のある人は突っ込んで下さい。 > 早い 速さは変わりません。 > コンソールがフリーズしても問題なくバッチが終了する 端末からログインして実行すると、接続が切れたとき HUP シグナルが飛んできてプロセスは終了します。では バックグラウンドなら OK かというと、たしかシェルに よるんだったかな。bash なら & を付ければ nohup 相当 のことをしてくれたかもしれない。tcsh なら & を付けても、 接続が切れれば SIGHUP が飛びます。 |
|
そういうつもりは全くなかったのですが、結果的に問いに答えず質問だけ してしまった様です。すいませんでした。 バックで動く様、自分たちで変更するのではなく、”依頼”する為、それが 「&」をつける事なのか解っていないのが事実です。”その方が良い らしい”と、根拠のないまま話が進んでいる状態の為何が違うのかと思い すがる様にメールしてしまいました。本当に申し訳ございませんでした。 |
|
皆様はじめまして。 私は現在 perl で SOCKS クライアントを作成しようとしているものですが、なかなか資料も少なく煮詰まっております。(c はまったく分かりません) RFC や NEC を読んでもうまく SOCKS サーバーに送信できないのです。 どなたか SOCKS に詳しい方、ご教授いただけないでしょうか? |
|
>>1648 HANA あなたが困っているらしいことは、とてもよくわかるのですが、 ここで書き込みを見ている人にとって、お困りの問題を把握するための 情報源はあなたの発言だけであることを御理解下さい。 問題を解決するためには、目標が何であるのか、現状がどうなっているのか、 ということが把握できなければならないのはどんな世界でも共通ですし、 おわかり頂けることと思いますが、 今の状態では現状把握のための情報が圧倒的に不足していますので、 おそらくほとんどの人は、あなたの質問に答えることができません。 もしまたこの掲示板にしろ別の場所にしろ質問なさるようでしたら、 その辺りに十分気を使うべきであるということを誤認識下さい。 # 余計な発言でしたらごめんなさい |
|
>>1644 rosegarden > ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。 > ifconfig alias 使った時には、うまく jail へ port forwarding > できたのに。やはり物理的に別マシンだとむりなんでしょうか? >>1645 68user > FreeBSD の natd なら、redirect_addr/redirect_port あたりで > 設定した記憶があります。別マシンでも問題ないです。 原因が分かりました。今日一日、これにはまった :-< ipfw の設定変えたり、果ては tcpdump でパケットモニタして、 調べたり散々色々なことをしたけど、全部無駄でした。 NAT の設定ページ見たら一発で解決しました。 原因は、NAT 動かしているマシンで、/etc/rc.conf に gateway_enable="YES" が入っていなかっただけです。 # ああ、自己嫌悪 これだけでは、お騒がせしただけなので、ちょっと設定書いておきます。 私の場合 FreeBSD の /usr/sbin/ppp の NAT を使っています。ダイヤルアップです。 (1) gateway_enable="YES" を /etc/rc.conf にいれる。 (2) ファイウォール等の設定を見直す。 (3) /etc/ppp/ppp.conf は以下の通り。 default: set device /dev/cuaa0 set speed 115200 set timeout 300 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 15 \"\" ATE1Q0 OK-AT-O \\dATDP\\T TIMEOUT 40 CONNECT" disable lqr deny lqr ISP: accept chap disable pap disable mppe nat enable yes nat log yes set openmode active set phone "xxx-yyyy" # ISP の AP の電話番号 set authname username # アカウント set authkey password # パスワード set timeout 300 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 add default HISADDR enable dns nat port tcp 192.168.1.2:80 80 最後の nat port tcp 192.168.1.2:80 80 というのが port forwarding の設定で、ダイヤルアップをしているマシンの 80 番ポートに到着した パケットは全部 LAN 内部の 192.168.1.2 というマシンの 80 番ポートに 取り次げます。ですから、LAN 内部に外部公開用のサーバをおくことが出来ます。 # 上の ppp.conf はあまり考えて書いていないので、 # 多分突っ込む余地は沢山あるかと思います。 |
|
>>1651 rosegarden ちょっと補足です。 FreeBSD の古いインストール解説書などを見ると、ppp で NAT 使う際には ports/packages の NAT つき ppp をインストールするように などと書いている場合があるのですが、最近の 4.0-RELEASE 以降の /usr/sbin/ppp ならデフォルトで NAT をサポートしていると思います。 私が確認したのは 4.1.1-RELEASE 以降なので、4.0-RELEASE と 3-stable でどうなっているのかは、断定は出来ないのですが、 port の NAT ppp が必要なのは以前のリリースだったと記憶しています。 4.2-RELEASE などをインストールしている人は下の方法で NAT life が満喫できます。 あと kernel OPTION の設定云々と書いてある本もありますが、 4.2-RELEASE 以降なら、カーネルの再構築はほとんど不要だと思います。 とりあえず試すだけなら、GENERIC カーネルでも十分だと思います。 現在は KLD が Solaris 並にうまく動作するようになっているので、 メモリをケチる必要がなければ、自動的に必要なモジュールをロードします。 もちろん、再構築した方がカーネルが小さくなるのでそれはそれで メリットありますけど。 # とはいっても、パソコンもう一台動かすための電気代がもったいないので、 # 私個人としては、まず、自分の家では NAT なんか使いませんが。 |
|
>>1649 perrolin > どなたか SOCKS に詳しい方、ご教授いただけないでしょうか? 僕は全くわかりませんし、詳しいページも知りませんが、 Net::SOCKS モジュールが参考になるかもしれません。 >>1652 rosegarden ppp に NAT 機能が付いたのは FreeBSD 3.3-RELEASE からです。 佐藤淳一さんの nat-patch は archie、rlogin、RealAudio、 X プロトコル などの各種プロトコルにも対応していましたが、 現在は開発が終了し、本家の libalias へのマージ段階と 見てよいと思います。 http://configure.sh/FreeBSD/extend-libalias-j.html http://www.jp.FreeBSD.ORG/QandA/HTML/211.html http://configure.sh/FreeBSD/NAT/nat.html http://configure.sh/FreeBSD/NAT/nat2.html (このページおもしろい) |
|
むむ、どうやら私の書き方は、かなり不適切だったようです ”特定”ではなく、”任意”という言葉を使うべきでした 内から外はNATが使えるけど、外から内は何を使うのか というのがそもそもの疑問だったのです 結局RASも内の一部になるという技術のようですし、 IPv4のうちは、外から内は実質不可能なのかな、というのが感想です お二人のNATの説明はとても参考になりました まだしばらくはNATのお世話になりそうですしね |
|
>1618 gixs様 レスが遅くなってしまい、すいません。 文章の書き方はすみませんでした。 他の人にも、時系列で書いた方が分かりやすいと指摘を受けました。 一度、リブートをしまして1からはじめてみましたので 手順を書いてみます。 1.NISサーバの設定 NIS管理しようとしているユーザの作成/etc/passwd smitty chypdom smitty mkmaster コマンドを発行し正常終了しました。 2.NISクライアントの設定 smitty chypdomでNISサーバと同じドメインを入力しました smitty mkclientで開始時期を決め実行しました。 /etc/passwdをNIS管理用に編集しました passwdを保存すると、クライアントのログインが不可となってしまうのです。 ypcat passwdも応答がない状態になってしまいます。 私のほうでも、色々と思い当たる物は考えてみたのですが、 NIS以前に 1.会社の引越しがあってIPが変わった ということもあったのです。 ただ、私のほうで何をどう見てよいかわからないレベルなもので 他の人にも聞いたりしているのですが、特に問題ないのではという回答なのです。 もし、思い当たる点があれば教えていただきたく思います。 IPが変わる際に設定しなければ行けないファイルhostsファイルなど があれば、教えていただけると、非常にうれしいです。 毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します |
|
> 文章の書き方はすみませんでした。 いえいえ、人のことを言えるほどでもありませんので。 NISクライアント側には、 1. そもそもNISの/etc/passwdが見えているか 2. 見えていたら、それをログイン時に参照できているか の2段階のチェックポイントがあります。 > passwdを保存すると、クライアントのログインが不可となってしまうのです。 > ypcat passwdも応答がない状態になってしまいます。 ypcat passwdの応答が無いということは、まだ第1段階の問題のようです。 > 2.NISクライアントの設定 > smitty chypdomでNISサーバと同じドメインを入力しました > smitty mkclientで開始時期を決め実行しました。 > /etc/passwdをNIS管理用に編集しました smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、 それともIPアドレスですか? ホスト名で入力するなら、ローカルの/etc/hostsにNISサーバのエントリが必要です。 IPアドレスで入力するなら、結局、 > マップの更新後に、stopsrc -s ypbind > startsrc -s ypbind -a "ypsetme" > ypset (ServerのIPアドレス) > を行なったところ、無事に設定する事が出来ました。 これを、smittyが内部的に実行するだけだと思いますが。 (明示的にNISサーバを指定しなくても、ブロードキャストで見つけられる・・・はず、 ですが、何とも言えません) ローカルの/etc/hostsにNISサーバのエントリがあるのに、 ホスト名での指定がうまく行かない場合、ホスト名の名前解決がうまくないのでしょう。 > 一度、/etc/netsvc.confを作り > hosts=local,nisを作成してやって見たのですが こう言っているので、問題無いとは思いますが。 ただ、古いAIXでは、このファイルは無かったはずです。 ypcat passwdが応答の無い時、 ping [NISサーバのホスト名] の応答はあるのでしょうか? 無いなら、ローカルの/etc/hostsを先に見ていないと判断できます。 > 毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します # どうでもいい突っ込み。 # 「わかりづらい」なら、この誤変換は出ないと思います。 |
|
>>1653 68user 様 >Net::SOCKS モジュールが参考になるかもしれません。 レスありがとうございます。 Net::SOCKS を使ったソースを参考にがんばってみたいと思います。 |
|
>gixs様 >smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、 >それともIPアドレスですか? この画面なのですが、AIXのバージョンが4.2.1の為に smitty mkclientで表示される画面が、 「* NIS クライアントを開始する時期 両方」 しか、表示されないのです >ypcat passwdが応答の無い時、 >ping [NISサーバのホスト名] >の応答はあるのでしょうか? 試して見たのですが、応答ありませんでした。 ># 「わかりづらい」なら、この誤変換は出ないと思います タイプミスで「わかりずらい」と打っていました。^^; |
|
はじめまして。 kaoriと申します。 Perl言語を勉強中です。 非常に参考になる情報をありがとうございます。 いつも感心しながら参考に勉強させてもらっています。 どうしてもわからないので教えてください。 Socketの使い方はなんとなく判ったのですが、IPv6のSocketはどういうふうに すればよいのでしょうか? Socket6っていうのをインストールしてみましたが、よくわかりません。。 私の環境は、FreeBSD-RELEASE4.1に、Perl5です。 こんな感じで作っていて、IPv4ではちゃんと動作しています。 $port = getservbyname($port_no,'tcp') || $port_no; $socket = IO::Socket::INET->new(PeerAddr => 127.0.0.1, PeerPort => 80, Proto => 'tcp', ); ご助言、よろしくお願いいたします。 |
|
>>1659 kaori - IPv6 環境が構築してあるか。ping6 コマンドを使って IPv6 で反応が返ってくるか (localhost 宛でもよい)。 - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分 無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを 使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが ありません。 それをクリアすれば、少しの例外を除いて基本的には書き方は同じです (そうしないとソースレベルでの互換性が全くなくなるので)。例外と いうのは gethostbyname の代わりに getaddrinfo を使うとか。 とりあえず perldoc Socket6 してみてください。サンプルの ひとつでも載っているのではないでしょうか。 |
|
>>1660 68user > 少しの例外を除いて基本的には書き方は同じです (そうしないと > ソースレベルでの互換性が全くなくなるので)。例外というのは > gethostbyname の代わりに getaddrinfo を使うとか。 あー激しく不正確だなぁ。gethostbyaddr で IPv6 なプログラムは 書けます。でも、AF_INET を AF_INET6 にしないといけないとか、 struct sockaddr_in を struct sockaddr_in6 にするだとか、 ソースレベルでの書き換えが必要になります。しかもそのように 書き換えると IPv4 では動きません。 そりゃまずいというわけで、IPv4 でも IPv6 でも同じ書き方が できるような新しいライブラリが追加されました。getaddrinfo という関数や AF_UNSPEC というアドレスファミリ (AF_INET とか AF_INET6 とかを指定する必要がない) などなど。 というわけで、IPv6 only のプログラムは簡単に書けますが、 書いちゃいけません。IPv4/v6 両方で動くようなプログラムを 作るべきです。 あと、FreeBSD 4.1-RELEASE のデフォルト状態なら IPv6 対応の はずですね。/etc/inetd.conf の #echo stream tcp6 nowait root internal あたりを有効にして inetd を再起動して、それとお話しする クライアントを書いてみるといいでしょう。 以上、IPv6 アプリを書いたことのない者 (IPv6 を使ったことさえ ない) のたわごとでした。 |
|
しつこくて失礼。perl5.005_03 に Socket6 モジュールを入れてみました。 >>1660 68user > とりあえず perldoc Socket6 してみてください。サンプルの > ひとつでも載っているのではないでしょうか。 ばっちり載ってますね。これをちょいといじって % netstat -a | grep tcp6 | grep echo tcp6 0 0 *.echo *.* LISTEN なサーバにつなげようとしたら、 Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so' for module Socket6: /home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so: Undefined symbol "in6addr_any" at /usr/local/lib/perl5/5.00503/i386-freebsd/DynaLoader.pm line 169. だそうで。原因究明はまた後日…と言いたいところだけれど、 こりゃ僕のレベルではいかんともしがたいですな。 |
|
あーしつこい。でも初 IPv6 体験の記念に (やってることは しょぼいなぁ)。 4.1-RELEASE あたりなら、telnet も IPv6 ready なので、 % telnet ::1 echo で IPv6 で localhost の echo サーバとお話できます。 netstat で tcp6 なコネクションが張られていること、 tcpdump で IPv6 なデータグラムが流れていることを 確認してください。 % tcpdump -i lo0 21:56:30.055419 localhost.1206 > localhost.echo: . ack 5 win 57344 (DF) [tos 0x10] 4510 0028 0eca 4000 4006 2df4 7f00 0001 ... 21:54:41.404023 localhost.1204 > localhost.echo: S 705795707:705795707(0) win 16384 <mss 16324> 6000 0000 0018 0640 0000 0000 0000 0000 ... 先頭1バイトが4なのが IPv4、6 が IPv6 です。 |
|
> この画面なのですが、AIXのバージョンが4.2.1の為に > smitty mkclientで表示される画面が、 > 「* NIS クライアントを開始する時期両方」 > しか、表示されないのです 確認しました。 となると、ブロードキャストでNISサーバを見つけるはずですね。 > >ypcat passwdが応答の無い時、 > >ping [NISサーバのホスト名] > >の応答はあるのでしょうか? > 試して見たのですが、応答ありませんでした。 ローカルの/etc/hostsにNISサーバのエントリがあっても、応答無しですか? あまり引き延ばして、却って失望が大きくなってしまうのが辛いので、 状況をまとめます。 /etc/hostsにNISサーバのエントリがあるとして、 1. ping [NISサーバのホスト名]が応答なし 少しだけ脈あり。名前解決の順序がおかしいようです。 FAQの1.800(http://www.landfield.com/faqs/aix-faq/part3/) にありますが、環境変数NSORDERがあるとか?(可能性は低いですが) 2. ping [NISサーバのホスト名]が応答あり 今さら、この結論も気が引けますが、 ypwhich [NISサーバのIPアドレス] でうまくいくなら、それで結果オーライにしてしまってよいのではないでしょうか。 |
|
kaoriです。 ご丁寧な回答ありがとうございました! IPv6の環境は整っています(OCNの実験に参加しています)ので、 教えて頂いたのを参考に色々試してみます! > というわけで、IPv6 only のプログラムは簡単に書けますが、 > 書いちゃいけません。IPv4/v6 両方で動くようなプログラムを > 作るべきです。 本当にその通りですね。 アドバイスありがとうございます。 今後もよろしくお願いします! |
|
ちょっと便乗して試して見たのですが、 >>1660 68user > - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分 > 無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを > 使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが > ありません。 なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。 4-stable も 5-current(こちらは perl 5.6.0)も試しました。 perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、 socket: Protocol not supported などというエラーを返します。もちろん、inetd.conf 書き換えて、IPv6 の daytime は使えるようにしてあるのですが。一方、添付の C プログラムは うまくいくので、設定ミスではないと思うのですが。だいたい telnet ::1 13 もちゃんと反応しますし。 >>1665 kaori うちでは、localhost しか試せないのですが、kaori さんのところでは perl でもうまく行っていますか? perl 自体にも IPv6 のパッチあてないと いけないのでしょうか? とりあえず、Socket6 使って嬉しいのは IPv6/IPv4 両用に書かれたスクリプトでも動作する程度しかありませんね。うちの場合。 KAME パッチをあてて perl を make してみようとも考えましたが、 perl の開発スピードの方が早すぎるようで、パッチが追従しきれてません。 どなたか、うまくいったという方がいらっしゃったら、教えてください。 #include <stdio.h> #include <string.h> #include <err.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> int main(int argc, char *argv[]) { struct addrinfo hints, *res, *res0; int error; int s; const char *cause = NULL; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; error = getaddrinfo("localhost", "daytime", &hints, &res0); if (error) { err(1, "%s", gai_strerror(error)); } s = -1; for (res = res0; res; res = res->ai_next) { char hostname[NI_MAXHOST], servname[NI_MAXSERV]; s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (s < 0) { cause = "socket"; continue; } if (getnameinfo(res->ai_addr, res->ai_addr->sa_len, hostname, NI_MAXHOST, servname, NI_MAXSERV, NI_NUMERICHOST | NI_NUMERICSERV) < 0 ) { err(1, "getnameinfo"); } else { printf("connecting to %s port %s...\n", hostname, servname); } if (connect(s, res->ai_addr, res->ai_addrlen) < 0) { cause = "connect"; close(s); s = -1; continue; } break; } if (s < 0) { err(1, cause); } else { char buff[256]; memset(buff, 0, sizeof(buff)); if (recv(s, buff, 256, 0) < 0) { err(1, "recv"); } printf("%s\n", buff); } freeaddrinfo(res0); return 0; } |
|
>>1666 rosegarden > なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。 > 4-stable も 5-current(こちらは perl 5.6.0)も試しました。 > perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、 > socket: Protocol not supported > などというエラーを返します。 原因が分かりました。ああ、余計なポストするんじゃなかったな。 FreeBSD の /usr/bin/perl はちゃんと IPv6 対応していますね。 私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。 ところで、Socket6.pm 持っている人は、サンプルが次のようになっていませんか? use Socket; use Socket6; @res = getaddrinfo('hishost.com', 'daytime', AF_UNSPEC, SOCK_STREAM); $family = -1; while (scalar(@res) >= 5) { ($family, $socktype, $proto, $saddr, $canonname, @res) = @res; ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV); print STDERR "Trying to connect to $host port port $port...\n"; socket(Socket_Handle, $family, $saddr, $proto) || next; (以下略) 投稿した C プログラム眺めていて気がついたのですが、 socket(Socket_Handle, $family, $saddr, $proto) || next; って socket(Socket_Handle, $family, $socktype, $proto) || next; のミスじゃありませんか? # なんで投稿した直後に気が付くんだろう。 # 私の勘違いかなぁ? 最近ぼけているし...。 ちなみに、私の場合次のようにしたら、スクリプトはうまく動きました。 環境は 4-stable + perl 5.00503 + Socket6 です。 #!/usr/bin/perl use Socket6; use Socket; @res = getaddrinfo('localhost', 'daytime', AF_UNSPEC, SOCK_STREAM); $family = -1; while(scalar(@res) >= 5) { ($family, $socktype, $proto, $saddr, $canonname, @res) = @res; ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV); print STDERR "Trying to connect to $host port port $port $family...\n"; socket(Sock, $family, $socktype, $proto) || die "socket: $!"; connect(Sock, $saddr) && last; close(Sock); $family = -1; } if( $family != -1 ){ print "connected to $host port $port\n"; while( defined($line = <Sock>) ){ print "$line\n"; } close(Sock); } exit; # 穴があったら入りたいです。 |
|
>>1667 rosegarden そうだ。補足です。下のスクリプトですが、 > socket(Sock, $family, $socktype, $proto) || die "socket: $!"; この部分の die 云々のところは next にして > socket(Sock, $family, $socktype, $proto) || next; とすると IPv6/IPv4 の daytime クライアントになります。私の場合には 最初から、/etc/rc.conf に ipv6_enable="YES" が入っているのと、 デバッグの意味もあって、上の die を入れておいただけです。 socket の三番目の引数は SOCK_STREAM とかそういうのが入ります。 私がはまったのは、サンプルをコピー & ペーストして書き換えたものを 使っていたからです。CPAN にある Socket6 は直っているかも知れません。 (でも、ダウンロードしたのは昨日の夕方ですが。) # コピー & ペーストなんて、安直なことしたバチがあったんですね。 上のように直して、inetd.conf で IPv4 の方だけ有効にしておくと % perl daytime6.pl Trying to connect to ::1 port port 13... Trying to connect to 127.0.0.1 port port 13... connected to 127.0.0.1 port 13 Fri Jan 26 16:59:50 2001 という感じで、IPv6 が有効だと % perl daytime6.pl Trying to connect to ::1 port port 13... connected to ::1 port 13 Fri Jan 26 17:01:16 2001 になります。IPv6 見てから、IPv4 見ると言うのは、システムによっては 変わるのでしょうか? とりあえず、うちの場合は telnet も ftp もこの順番です。 # しかし、なぜ投稿してから気がつくんだろう?? # 68user 様ならびに皆様、再三のゴミ書き申し訳ありません。 |
|
>>1667 rosegarden > 私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。 うちの 4.2-STABLE だと >>1662 68user > Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so' でしたが、会社の 4.1-RELEASE だとうまくいきました。うちの環境が 変だったのかもしれません。 >>1667 rosegarden > socket(Socket_Handle, $family, $saddr, $proto) || next; > って > socket(Socket_Handle, $family, $socktype, $proto) || next; > のミスじゃありませんか? む、まさにそこではまってました。それを直すと動いたのですが、 この Socket6 って変じゃないでしょうか? 以下の echo クライアントが デッドロックしてしまうようです。 #!/usr/bin/perl use Socket6; use Socket; @res = getaddrinfo('localhost', 'echo', AF_UNSPEC, SOCK_STREAM); $family = -1; while(scalar(@res) >= 5) { ($family, $socktype, $proto, $saddr, $canonname, @res) = @res; ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV); print STDERR "Trying to connect to $host:$port $family...\n"; socket(Sock, $family, $socktype, $proto) || die "socket: $!"; connect(Sock, $saddr) && last; close(Sock); $family = -1; } if( $family != -1 ){ select(Sock); $|=1; select(STDOUT); print "connected to $host port $port\n"; print Sock "test!\n"; print <Sock>; close(Sock); } で、 print <Sock> の部分を $len = read(Sock,$buf,6); print "len=$len\n"; print "buf=$buf"; とかすれば動きますが、 $len = read(Sock,$buf,7); だとダメです。内部でバッファリングしちゃってるのかなぁ? >>1668 rosegarden > IPv6 見てから、IPv4 見ると言うのは、システムによっては > 変わるのでしょうか? /etc/hosts のエントリ順 (::1 と 127.0.0.1 のどちらが上にあるか) に よって変わるようです。 |
|
ぐぅ、あほだ。 >>1669 68user > print <Sock> そりゃ動かんわな。$buf = <Sock>; print $buf か print scalar(<Sock>) でした。失礼。 |
|
>>1667 rosegarden > socket(Socket_Handle, $family, $socktype, $proto) || next; > のミスじゃありませんか? で、これどうしましょうかね。 Hajimu UMEMOTO <ume@FreeBSD.org> 宛に投げればよきにはからってくれるでしょうけど、僕が連絡しても いいですし、rosegarden さんが既に連絡済みであればそういうことで。 |
|
すみません、ちょっと横になっていました。 >>1671 68user > Hajimu UMEMOTO <ume@FreeBSD.org> > 宛に投げればよきにはからってくれるでしょうけど、 68user さんお願いできますか? ちょっと今はメール出せません。 それから ::1 と 217.0.0.1 について有難うございました。 |
|
>>1671 68user サンプルのミスといえば、 >>1666 rosegarden の C プログラムは man 3 getaddrinfo と man 3 getnameinfo して表示されるサンプルをほとんど借用して書いたのですが、 man 3 getaddrinfo の方のサンプルも些細なところで typo があります。 if (error) { err1(1, "%s", gai_strerror(error)); /*NOTREACHED*/ } err1 は err の typo ですね。 まぁ、こちらはリンクエラーになるので、はまることは絶対にないかと 思いますが。 # こちらも cvsup したソース見たのですが、直っていないですね。 # cvsup したのは昨日の晩ですが。 |
|
I'll fix the typos around samples in getaddrinfo.3 and Socket6.pm. Thanks! |
|
be sure to report typos to either *BSD bug database, or KAME bug database. otherwise they won't get fixed. |
|
>>1674 ume ume さん。お忙しいのにお手間かけてすみませんでした。 今後、気づいた点があれば、きちんと send-pr しますので、 >>1675 itojun itojun さん。お忙しいのに、すみません。 これより www.kame.net に行って send-pr しますので、 今晩中にしますので、お時間ください。 それから、なにやら、ぶしつけな書き方で済みませんでした。 |
|
>>1675 itojun >>1676 rosegarden http://www.kame.net/dev/cvsweb.cgi/kame/kame/kame/libinet6/getaddrinfo.3 ああ、大変申し訳ございません。 以後、確認がとれ次第即時に send-pr 致します。 |
|
>>1672 rosegarden ume さんにメール出しておきました、と書こうと思ったら 既に解決している…。 せっかくなので IPv6 ネタでも書きますか。その前にだいぶ 勉強が必要ですけれども。 http://playground.iijlab.net/iij.news/ http://www.running-dog.net/bsd/40/ipv6.html |
|
>>1678 68user > せっかくなので IPv6 ネタでも書きますか。その前にだいぶ > 勉強が必要ですけれども。 是非ともお願いします。これを機会に私も IPv6 について勉強したいと 思っています。 |
|
はじめまして。知人の会社の話なんですが、自社サーバ(NT)で HPを公開しています。先日、日本語ドメインを多数取得し、 それらで今公開しているページにアクセスできるようにしたいそうです。 そこで、以下の質問なんですが... 1.複数のドメイン名で同じトップページにアクセスさせたい場合、 ネームサーバ登録時に同じIPを設定することでよいのでしょうか? 2.トップページ以の場合は(例えば、"www.***.com"と "www.$$$.co.jp/***/***.htm"で同じページにアクセスさせたい場合) どうすればよいのでしょうか?専門の業者に頼むべきでしょうか? こちらの掲示板では、場違いな質問ですが、どなたか教えてください。 ここで聞いたほうがいいよ、という情報でもかまいません。 よろしくお願いします。 |
|
>>1680 kikizo > 1.複数のドメイン名で...同じIPを設定することでよいのでしょうか? そうです。 > 2.トップページ以の場合は... バーチャルホストの設定次第でいかようにもできます。どんな web サーバを使っているかは知りませんが、解説本を数冊買って 熟読すれば可能でしょう。時間と手間を惜しむなら業者に頼む べきですね。 それはそれとして、一番気になるのは > 日本語ドメインを多数取得し、それらで今公開しているページに > アクセスできるようにしたい これって現状で可能なんですか? 現在日本語ドメインのサービス を行っている DNS は存在しないと認識しているのですが。 # http://www.onamae.com を見ても何も書いてないし。 あと、jpnic/apnic/internic で使用する文字コードが全然違う という問題があるそうですが (詳しくは知らない)、ここらへん どうなっているんでしょうね。 |
|
>>1681 68user 68userさん、ありがとうございました。 おっしゃるとおり、日本語ドメインは、今は登録だけで使えませんよね。 いつから実際に運用されるのか全く未定だし、最悪何らかのトラブルで 登録したドメインが使えない可能性もあると、某登録代行業者のページに 書いてありました。 そんなわけで、時間はたっぷりありそうなので、ひとつ勉強してみます。 |
|
誰か知識のある方、教えてください! 幾つかのサーバーに2つのC言語プログラムを使う権限を与えて 共有ファイルを変更更新させるようなプログラムの例があれば 教えてください。それとそれと、その時サーバーにコンパイラを 持たせなくてもプログラムを動かすことはできるのですか? 何もかもわかりません。先輩方、どうかこんな低レベルな者に ご指導くださいますよう、よろしくお願い申し上げます。(ミミシロ) |
|
はじめましてメールについてお聞きしたことがあります。 mailxやsendmailで送信したメールでアドレスが存在しなかった場合 そのメール自身はどうなるのでしょうか? やっぱりサーバーの送信ユーザーに返信されるのでしょうか? よろしくお願いします。 |
|
68user さん、お忙しいみたいですね。 >>1684 moe > mailxやsendmailで送信したメールでアドレスが存在しなかった場合 > そのメール自身はどうなるのでしょうか? > やっぱりサーバーの送信ユーザーに返信されるのでしょうか? 私は MTA としては sendmail 以外には使ったことはありません。その場合に 話は限定されますが、基本的にユーザに返送されます。 ただし、リトライ設定がしてある場合には(デフォルトは 7 日)は再送を試みます。 ただし、それは、宛先ホストが DNS などにより存在が確認されている場合の話です。 もしも、DNS で引けないと即時に返送されたと思います。 一口に「アドレスが存在しなかった」といっても (1) ドメイン部が存在しない。MX フィールドの検索の失敗 (2) ユーザが存在しない。 (3) 存在しているが、サーバが落ちていて、メールが受け取れない などといった状況があります。 問題は、差し出したユーザが存在しない場合で、これはちょっと分かりません。 それから、そういうメールがどうなるかですが、 8 年くらい前に、内部ネットワークの変更のあったドメインにメールを出した ことがあり、宛先ドメインのポストマスターから 「ちゃんと宛先を確認してください」というメッセージとともに 私の送ったメールが添付されていたことがあります。 ポストマスターが手動でメールを返送して来たことになります。 (私のメールの本文は、テキストエディタのファイル挿入かなんかでそ のメールにインクルードされていた形跡があったので、そう判断したのです。) ちなみに、うちのネットワークの場合、エラーを起こしたメールはヘッダーだけ 私に全部到着するようになっています。単純に postmaster 宛のメールを 自分に forward しているだけですが...。 >>1683 mimishiro > 幾つかのサーバーに2つのC言語プログラムを使う権限を与えて > 共有ファイルを変更更新させるようなプログラムの例があれば > 教えてください。 次の情報が必要かと思います。 (1) サーバのオペレーティングシステム。最低でも NT か UNIX かは要ります。 以下は UNIX だとします。NT だと、少なくとも私は分かりません。 (2) 「共有ファイル」というのは何で実現していますか? nfs でしょうか? (3) 「2つのC言語プログラム」というのは、簡単にどんな役割や機能を もっているのでしょうか? (4) 「変更更新」の意味をもうすこし詳しく。すべてのサーバに同じ 内容のファイルを共有させるように「変更更新」させるのか? あるいは、サーバごとに違う情報を持たせるように「変更更新」して、 すべてのサーバに共有させるようにするのか? > その時サーバーにコンパイラを 持たせなくてもプログラムを > 動かすことはできるのですか? コンパイル済なら、動かすことはできます。ところがサーバごとに アーキテクチャが違う場合には、持たせる必要はなくても アーキテクチャごとに対応するコンパイラでコンパイルしておく必要は あります。アーキテクチャが同じでも FreeBSD/i386 と Linux/i386 では 違う実行ファイル形式になるので、それも考慮に入れる必要があります。 コンパイラがいらなくても、ダイナミックリンクライブラリを使うような ケースだとライブラリ自体をインストールする必要があります。 > 何もかもわかりません。 ご謙遜だと思われますが、上記のようなケースが考えられるので、 まったく何もかも分からないのでは、答えを得られても手も足もでないかも しれません。運良く、目的にあったプログラムを見つけられても 最低限 ./configure 一発で済むようなソフトのビルドをした経験が ないと実際の運用は難しいように思われます。サーバの編成次第では 実行ファイルをコピーしてすまないかもしれないからです。 # まあ、前座の回答と言うことで、とりあえずこれで間に合わせてください。 |
|
>>1685 rosegarden うーん、SMTP サーバの管理をしたことはありませんが、 (1) DNS サーバにアクセスできない (2) DNS サーバにアクセスした結果、存在しないドメイン/ホストで あることがわかった (名前解決できない) (3) DNS サーバにアクセスした結果、存在するドメイン/ホストだが (名前解決できた) 、相手先/中継先の SMTP サーバに接続できない (4) 相手先/中継先の SMTP サーバに接続したが、ユーザが存在しない 1,3 は再送し、2,4 は即座にエラーメールが返ってくる、かなぁと 経験上思っているのですが。試したわけではありません。 # とはいえ、やっぱり sendmail だから、こんなに単純な話では # ないだろうなと想像してたりします。 > 問題は、差し出したユーザが存在しない場合で、これは > ちょっと分かりません。 相手先の SMTP サーバから From: Mail Delivery Subsystem <MAILER-DAEMON> なメールが返ってくると思います。FreeBSD+sendmail なら /usr/libexec/sendmail/sendmail が返しているようです。 自分が SMTP サーバに指定しているユーザ宛のメールなら、 SMTP で RECT TO:<unknown@bar.com> とする時点でエラーになるので、メーラー自家製のエラー メールもどきが返ってくるか、あるいはメーラーがエラー メッセージを出して終わりかもしれません。 |
|
Motifの質問なのですが,誰か分かる方がいればお願いします. XtPopupでPopup画面を何個も画面表示している状態です,その 画面のOKボタンをクリックすると,画面が消去するする様にした いので,XtPopdown(Widget)関数を使いたいのですが,複数画面 なので そのWidgetをゲットしてくれる関数は無いでしょうか. 知っていたら教えてください. |
|
UNIX(ソラリス)において、Cシェルまたはbシェルで一般ファイルのNULL文字を1バイト英数字(スペースを含む)に置き換えることができるのでしょうか?だれか知っていたらおしえてください。※1バイト英数字(スペースを含む)をNULL文字に置き換えることはできるとおもうのですが・・・ |
|
はじめまして。x68030にNetBSDを入れようと思っているのですが、どうも調子が悪いです、どなたか上手くいった方いましたら教えて下さい。 今、NetBSD1.4.3でチャレンジしているのですが、boot後、MMUのエラーが出てハングします。MPUはMC68030に載せ変えてるのに何故??。 NetBSD本のCDだと、インストール後、設定してるといきなりハングするんです。まいったなぁ。 http://circle.excite.co.jp/club.asp?cid=q0800068 |
|
はじめまして、最近unixを始めたおじさんです。 わかる方おりましたら教えてください。 あるディレクトリーの下のファイルを定期的に削除したい しかし、特定のディレクトリー(etc.binなど)の下はさわりたくない。又 ディレクトリー名は随時作られるために固定できない |
|
はじめまして。 Windowsでネットワークプログラミングを行っていますが、bzero関数がWindowsでは無いみたいです。 代わりになるようなものが、見当たらないのですが、この関数はどういう働きをするのですか? |
|
bzeroの他に、bcopyも判りません。 こちらも教えてください。 |
|
>>1687 Q駒田 > Motifの質問なのですが うーん、すいませんがわかりませんです。 >>1688 eio > 一般ファイルのNULL文字を1バイト英数字(スペースを含む)に置 > き換えることができるのでしょうか? tr '\0' X でよござんすか? >>1689 ふにふに > x68030にNetBSDを入れようと思っているのですが あぁ…、68user's page なのに全然 X68000 じゃないページに ようこそ。ですが、残念ながら全くわかりません。 >>1690 おじさん > 削除したい http://X68000.startshop.co.jp/~68user/unix/pickup?rm http://X68000.startshop.co.jp/~68user/unix/pickup?rmdir > ディレクトリー名は随時作られるために固定できない 固定できないとはいえ、何らかの法則性があるでしょうから、 それをキーに rm -rf ディレクトリ名 などなど。ということを行うスクリプトを sh や csh や perl で組んで、 > 定期的に http://X68000.startshop.co.jp/~68user/unix/pickup?crontab で cron に登録しておけばよいです。簡単にやるなら、 0 12 * * * /bin/rm -rf /target/dir/* と書いておけば、毎日 12:00 に /target/dir/ の下にある ファイル・ディレクトリが消されます。 >>1691 紅の猫 > bzero関数がWindowsでは無いみたいです。 bzero はゼロクリアで、bcopy はコピーです。 http://www.freebsd.org/cgi/man.cgi?query=bzero&manpath=FreeBSD+4.2-RELEASE&format=html bzero, bcopy は元々 BSD 系の関数です (が SystemV 系 UNIX にも あります)。ANSI C 処理系では memset, memcpy を使います。 |
|
>>1693 68user ありがとうございます。 どうにか、http-client-1が動くようになりました。 |
|
こんばんわ。先日はどうもでした。 掲示板の改ページのとこがいまいちよく分からないのですが、 とほほラウンジの http://www.wakusei.ne.jp/twn/wwwlng.cgi?print+199901/99010207.txt 68userさんの、スマートでよさげなので参考にしたいのですが、 「次」だけでなく「前」と、「以上 31 から 58 番目の発言です。」 みたいなの付けたいのですが、まったく分からないです。。 よかったらご教授くださいませ、、。 |
|
>>1695 けんす B-Cus 1999/01/27(水) 03:02:50 の形だと、 発言が 40 件あるときに start=30 とすると「次の10件」が 表示されない (41件目かどうかで判定しているから) という問題点があるので、ちょっと構成を変えて、 $start=1; $count=1; $next_page_exist = 0; # 次ページが存在するか $messages_per_page = 10; # 1ページ 10件ずつ表示 if ( $ENV{QUREY_STRING} =~ m/start=(\d+)/ ){ $start = $1; } open(IN,"data.txt"); while (<IN>){ if ( $count >= $start ){ ($name,$content) = split(/,/,$_); print "名前:$name 内容:$content<br>\n"; if ( $count == $start+$messages_per_page ){ $next_page_exist = 1; last; } } $count++; } if ( $start != 1 ){ # 1件目から表示しているときは「前のxx件」を出さない printf qq(<a href="hoge.cgi?start=%d">前の$messages_per_page件</a>), $start-$messages_per_page ? ; } if ( $next_page_exist == 1 ){ # 次ページが存在しない場合は「次のxx件」を出さない printf qq(<a href="hoge.cgi?start=%d">次の$messages_per_page件</a>), $start+$messages_per_page; } printf "以上 %d から %d 番目の発言です。\n", $start, $count-1; という感じになります。動かしていないのでバグがあるやも しれません。 あと、start=7 のときに「前の10件」が hoge.cgi?start=-3 と なりますが、これは宿題ということで。 |
|
私は、ネットワーク管理をやっている者ですが・・どうしても原因の分からない問題にぶつかったので、分かる方いたら教えてください。 とある、プロバイダーのMailサーバーを管理しているのですが、全国いろんな環境からサーバーにMailを取りにきます。OCN-エコ-128kで接続してくるお客さんだけが、POPを取りにくるときタイムアウトしてしまいます・・同一症状が5カ所で出ております。トラフィック上は何の問題もなく、症状が現れたのは、4日前サーバーセンターに異常が出て、同一センター内にサーバーを設置している別会社がネットワーク構成を変えてからです。 弊社Mail+DNSサーバー(同一マシーン)に使っているOSはFREE-BSD3.3 qpopper3.1.2を利用中・・。 問題の出ているCliantからTracertしても異常は無く、DNSも問題なく引けてます、WWWは問題なく好調です・・。 関係有るかは分かりませんが、OCNのその5カ所は211.***.***.***のネットワークになっています。 それ以外のネットワークのOCNでは問題は起こっておりません。 OCN側は、異常は無いと言い張っているので、原因がさっぱり分かりません・・。 どなたか、分かる方なにが考えられるか教えてください。 |
|
>>1697 BOSS > CliantからTracertしても異常は無く > DNSも問題なく引けてます、WWWは問題なく qpopper が IP アドレスから FQDN を逆引きしようとして、 逆引きできないか、タイムアウトしている、というのは 考えられませんか? qpopper は何かログを吐いてませんか? |
|
>>1696 68user ばっちりでしたー。 すばらしいっす。感謝です68userさん。 http://www.kensu.com/bin/plywood.php ごめんなさい。Perlじゃないです。 いつもここの掲示板、参考にしてますm(_ _)m > あと、start=7 のときに「前の10件」が hoge.cgi?start=-3 と > なりますが、これは宿題ということで。 あまり自信ないですけど、、 if ( $start != 1 ){ # 1件目から表示しているときは「前のxx件」を出さない の部分を if ( $start - $messages_per_page >= 1 ){ にしてみたら、いちおうできたみたいです、、 もしよかったら、正解を教えてくださいませ。 あとちょっと気づいたことなんですが、 「次へ」で見てみると、前のページの一番最後にあった発言が また最上部へでてくるのですが、これは仕様ですか?? ちゃんと次のページへきたという安心感があってべつに問題ないのですが、 いちおうきいてみました。 ではー |
|
>>1699 けんす ああそうか…、ログの先頭が新しい書き込みで、最後が古い 書き込みなのね。僕は、この方式に start=xx 式の管理を 組み合わせるのはまずい仕様だと思います。 例えば、現在 http://www.kensu.com/bin/plywood.php?start=30 とすると、No.64〜34 が表示されます。 しかし、今後書き込みがあると、同じ URL でも No.65〜35、 No.66〜36 とだんだんずれていきます。これでは特定の話題を 指して URL を示すことができません。 一方、 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=601-700 のように、古い順から数えて 601〜700 であれば、今後 いくら発言があろうと発言内容は変わりません。 # この点を仕様として考えておられるのでしたら失礼。 > if ( $start - $messages_per_page >= 1 ){ > にしてみたら、いちおうできたみたいです これだと http://www.kensu.com/bin/plywood.php?start=10 のときに、「前」リンクが表示されません。まぁ、これを バグと取るか仕様と取るかは人によるかもしれません。 > 前のページの一番最後にあった発言がまた最上部へ > でてくるのですが、これは仕様ですか?? いえ、バグです (笑) あと、ソースを公開されておられるのは大変素晴らしいですね。 僕は php を使ったことはありませんが、概要くらいは知ることが できました。 # そして、php であっても、一つのスクリプトにまとめようとすると # 結局 perl 的な書き方になってしまうのだなぁと思いました。 |
|
質問です。CGIプログラムから別のCGIプログラムは実行できますか? リンクチェッカーをCGIで作ったのですが、ブラウザ上から実行できる ようにしようと思ってボタンを作ったのですが、全くだめでした。 誰か知っている人がいたらおしえてください。お願いします。 |
|
>>1701 TK > 質問です。CGIプログラムから別のCGIプログラムは実行できますか? 情報が何も書いてないので、できます、としか言いようがないです。 |
|
以前に 4-stable は不安定と言いましたが、 最近は安定していますね。少なくともうちでは安定しています。 新しいデバイスドライバ試す程度なら、大丈夫でしょう。 ただし、2/1 から 2/4 までの間のソースは ipfw にバグが あるのでその期間のソースからはビルドしない方が良いです。 |
|
>>1703 rosegarden > 以前に 4-stable は不安定と言いましたが、最近は安定していますね。 もう SNAPSHOT ってなくなったんでしたっけ。freebsd-stable も 流し読みなので (読まずに捨てているとも言う)、最近は恐くて cvsup できません。 |
|
はじめまして。 Sakiikaと申します。 長文失礼します。 このたび、UNIX_Cを触ることになってHPを参考に させていただいているのですが、ライブラリルーチンの opendirを使ったプログラムを書いたのですが、 while ((dir = readdir(dp)) != NULL ){ でコンパイラエラーが出てしまい、うまく動作しませんでした。 原因を調査したところ、 struct direct *dir; を struct dirent *dir; に変更したら動作するようになりました。 これは、UNIX環境によって、 struct directとstruct direntの2つが定義されているのでしょうか。 初歩的な質問ですが宜しくお願いします。 |
|
>>1704 68user >もう SNAPSHOT ってなくなったんでしたっけ。 いや、まだあります。ただここ数日ビルドに失敗していますね。 したのは jpSNAP からのログです。 >===> etc/sendmail >rm -f freebsd.cf >(cd /usr/src/etc/sendmail && \ > m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/ \ > /usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4 \ > freebsd.mc ) > freebsd.cf >chmod 444 freebsd.cf >+ touch /.buildworld_done >+ tar cyf /4.2-STABLE-20010205-JPSNAP.tar.bz2 -C /usr/obj . >tar: can't exec bzip2 : No such file or directory >release releng4 ends at 2001/02/05 04:32:32 これ見ると、make buildworld は成功しているようです。ただ、 /usr/obj のパック(これは通常 make world する際には関係ありません。 jpSNAP サービス独自の処理でしょう)に失敗しているだけです。 これはメールしておきました。 >freebsd-stable も流し読みなので 最近はとくに留意する点はありません。昨年暮れと同様の方法で make world 出来ると思います。一方 -current はちょっと、devfs がデフォルトで 採用されるようになったので、devfs 関係の記事を追ってないと 辛いかも知れません。ま、辛いとは言っても、ないデバイスは rc.devfs の 中でシンボリックリンク張れば良いだけですが。 |
|
雪ん子と申します。 初めて質問させていただきます。 CGI初心者ですが、参考書とWEBを参考にデーターベース(検索)なるのを 作成しています。 データはCSV形式で作成しており、ある条件に合致したものを表示する ようにしています。 表示されたものにはリンクを貼りそれぞれのページを表示するように しました。 しかし、情報が更新になる度に、リンク先のページのhtmlとデータの CSVファイルの両方を更新しないといけないという二重でまになって しまいます。 そこで、直接データベースからデータを引っ張り出して、リンク先の ページを作成することは可能でしょうか。 因みに、こちらにテスト環境があります。 http://www.oitamirai.co.jp/cgi/search.html |
|
プロセス間で共有できるメモリの使い方を教えてください。 (システムコールshmget、shmat、shmdt以外で。) |
|
>>1705 Sakiik direct は dirent の typo です。こういうときは、man readdir しましょう。正しい引数の数、型、戻り値、必要な include file などの情報が書いてあります。 >>1706 rosegarden ああ、なるほど。http://www.jp.freebsd.org/snapshots/ ですね。 僕の言った snapshot は、 「stable の中で、比較的安定していた時点のものにタグを打ったもの」 という意味だったのですが、昔はそういうのがありません でしたか? (記憶違いかな…) >>1707 雪ん子 > 表示されたものにはリンクを貼りそれぞれのページを > 表示するようにしました。 テスト環境ではリンク先に飛ぶことはできないのですね。リンク先の HTML がどれだけの情報を含んでいるのか判断できないので、どういう ふうにするのが最適なのかはわかりません。 とりあえず検索時に必要なデータと、リンク先にあるデータを全て 1つの CSV に突っ込んで、検索も表示も両方とも CGI でやってみては どうですか。 # というような回答でよいのかな? >>1708 はじめ > プロセス間で共有できるメモリの使い方を教えてください。 > (システムコールshmget、shmat、shmdt以外で。) shmget、shmat、shmdt 以外に共有メモリと呼ばれるものは 存在しないと思うんですが、もしかしてあったりするんでしょうか。 |
|
>>1709 68user > 僕の言った snapshot は、 > 「stable の中で、比較的安定していた時点のものにタグを打ったもの」 > という意味だったのですが、 ああ、そういう意味でしたか。失礼しました。 そうなるとちょっと分かりませんです。すみません。 |
|
>>1708 はじめ mmap(2)は共有メモリと呼べるかもしれません(現象的には共有ファイルになりますが)。 共有するには実ファイルが必要なことと、排他制御があるわけではないので、ひとつだけが書き込み、残りプロセスは読み込み専用、という場面でしか使えないかもしれませんが。 > direct は dirent の typo です。 Unixの生き字引みたいに、ここで名前は挙げられませんが、struct directがあるUnixはあったんじゃないですか? |
|
>>1711 gixs >Unixの生き字引みたいに、ここで名前は挙げられませんが、 > struct directがあるUnixはあったんじゃないですか? 言われて見れば、そんな感じしますね。 ちなみに FreeBSD の sys/dir.h みたらこんなのありました。 /* * Backwards compatibility. */ #define direct dirent #define DIRSIZ(dp) _GENERIC_DIRSIZ(dp) |
|
FreeBSD3.2を使用していますが,ノートのPCカードのSCSIでCD−ROMを認識させたいです.カードはIODATAのPCSC−Fを使用しています. |
|
>>1713 nori > FreeBSD3.2を使用していますが, FreeBSD 3.2-RELEASE は以前に使っていたのですが、その IODATA のカードって新しいのでしょうか? 新しいとしたら、絶望的です。 3.2-RELEASE で PC card 類を使うには、PAO patch あてないと 無理だと思いました。もっとも、カードの抜き差しをあきらめることにして 起動時の userconfig や visualconfig 使えば、とりあえず 認識させることは出来ます。irq とか io アドレス類を指定すれば 無理矢理に使うことは場合によっては出来ます。 ただし、CD-ROM ドライブ使うごとに shutdown/boot の繰り返しになりますが。 それに、3.2-RELEASE 用の patch が今でも手に入るかどうか謎です。 都合もあるでしょうが、システム自体アップグレードするのが一番です。 3.2-RELEASE だと、fix されていないセキュリティホールも多いし、 (リリースされた後に発見された security hole のことです。) 3.2-RELEASE がでた当時の PAO patch じゃ USB デバイスの対応も そんなに進んでいません。 (それとも RELEASE independent にパッチを当てられるのかな?) もっとも、pccard のデータベースを自分で編集して使えるように することは出来るでしょうし、以前にそれで乗り切った経験もあります。 しかし、トータルで見ていまさら、3.2-RELEASE なんて使うこと自体 お勧めできません。だいたい、ports なんかもほとんど使える状態じゃないし、 ports tree を更新したとしても、upgrade kit をインストールしないと 使えません。 よほどのマニアか腕前のある人でない限り 3.2-RELEASE はお勧めできません。 # でた当時は、何もかも、画期的で、安定していて、素晴らしかったんですが、 # 時間の推移というのは恐ろしいものです。 |
|
>>1711 gixs > struct directがあるUnixはあったんじゃないですか? それは知りませんでした。確かに 386BSD 0.0 では direct ですが、 http://www.freebsd.org/cgi/man.cgi?query=opendir&manpath=386BSD+0.0&format=html 4.4BSD Lite2 では dirent になってますね。 http://www.freebsd.org/cgi/man.cgi?query=opendir&manpath=4.4BSD+Lite2&format=html 参考: BSD の系譜 http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/misc/bsd-family-tree?rev=1.38 |
|
>Readdir ありがとうございました。 私の使用しているものでは、 struct dirent *readdir_r(DIR *dirp, struct dirent *entry); でした。 日本語のヘルプとして参考にしたものも同じく、direntでした。 調べ方が足りなかったようです。 ありがとうございました。 参考にしたページ。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/readdir.2.html |
|
>>1709 68user 早速の回答、ありがとうございました。 >テスト環境ではリンク先に飛ぶことはできないのですね。 私のミスでした。リンクを貼るためのソースが欠落していました。 http://www.oitamirai.co.jp/cgi/search.html >とりあえず検索時に必要なデータと、リンク先にあるデータを全て >1つの CSV に突っ込んで、検索も表示も両方とも CGIで 検索結果後のリンク先の表示体系は基本的に全て同じとし、店舗名や 住所の所のみを変更するようにしたいと考えています。 そこで、検索結果に表示されるものからのリンク先へのリンクの させ方と言うか表示をさせる時のCGI(引数?)がよく分かりません。 データベースから検索結果を表示させるまでは何とか自力で出来ま したがその後の処理がうまく出来ません。 お力添えをよろしくお願いします。 |
|
>>1717 雪ん子 おすすめは、search.cgi が 《検索結果》 3 件検索しました <a href="pickup.cgi?shopid=1>●1号店</a><br> <a href="pickup.cgi?shopid=3>●3号店</a><br> <a href="pickup.cgi?shopid=11>●11号店</a><br> というような出力をして、pickup.cgi 側は QUERY_STRING を 解析し、shopid を取得する。それに従って CSV から該当する 行を抽出し、それを出力する、というものです。 |
|
始めまして ちょっと質問して良いでしょうか? perlでtime()等が有りますが、これだとコンマ何秒の数値が取得できないですよね? 相対的な速度を計算したいんですが何かいいモジュールが有りましたら教えてください 検索エンジン等色々探して見たんですが見つかりませんでした |
|
>>1719 hiroshi 試してませんが Time::HiRes というのがそれっぽいです。 http://www.cpan.org/modules/by-module/Time/ http://www.engelschall.com/ar/perldoc/pages/module/Time::HiRes.html (*1) > 検索エンジン等色々探して見たんですが見つかりませんでした http://www.google.com/ で「perl time usec」で調べると 一番目に *1 のサイトが引っかかりました。 |
|
あ、即レスすみません ちょっとキーが思い当たらなかったですね perl time 時間関数 なんてやってたんですけど さっそく組み込んで見ます それでは今後ともよろしくお願いします |
|
($seconds, $microseconds) = gettimeofday; この部分がそうみたいですね 今ちょっと試してます |
|
私は細かい字が見えないのでUNIXを使うときに困っています. ウィンドウズは簡単にフォントの大きさを変えられますがUNIXでフォントの大きさを変える方法がわかりません.xterm,ktermにフォントのオプションがあるようですが,どのフォントが適しているかわかりません. 単に大きくなればよいです.全体的に大きくなる簡単な方法はないでしょうか? NETSCAPE(3.x)は設定するところがありますが,私の場合アルファベットが小さくてなぜか真っ黒になっていて見えませんどうしてでしょうか? |
|
あと,Xウィンドウをインストールして立ち上げても~/に.XdefaultsなどのXの設定ファイルがありません.どこにあるのでしょうか? NETSCAPEのアルファベットが小さいのは解消されました.しかし,リンク部分などが真っ黒に塗られているのは解消できません. |
|
xterm,ktermのフォントの大きさを変えることができました. またわからないことがでてきたのですが,cshからtcshにログイン時に変えたいのですがなんかコマンドがあった気がします.忘れてしまいました. |
|
>>1718 68user 68userが言われるようにしたところ、受け側のCGIの QUERY_STRING で 渡った項目を取得することが出来ました。 あとは、受け取った項目をもとに検索表示する機能を作成したいと思います。 ありがとうございました。 |
|
>>1725 のり > xterm,ktermのフォントの大きさを変えることができました. 自己解決したとしても、掲示板に書き込んだ以上は 何をどうしたらうまくいったかを簡単に書きましょう。 > cshからtcshにログイン時に変えたいのですがなんかコマンドが > あった気がします.忘れてしまいました. passwd -e や chsh など。OS によって違います。 |
|
>> xterm,ktermのフォントの大きさを変えることができました. > 自己解決したとしても、掲示板に書き込んだ以上は > 何をどうしたらうまくいったかを簡単に書きましょう。 のり氏ではないですが。 単にコントロールキー+右クリックに気づいただけでしょう。 # 論点が掲示版での礼儀作法なら、部外者なのでノーコメント。 |
|
始めまして。 earthlinkのFTPツールで問題が発生したため、やむなくホームページ用データのアップロードをDOSプロンプトで行うことにしましたが、mput の確認を はずす方法がわからなくて困っていました。 Yahoo!で検索したところこちらのマニュアルを見る事ができたので 大変助かりました。どうもありがとうございました。 クロ |
|
はじめまして。 ソケット通信についての質問ですが、 クライアントとサーバの間の回線が何らかの障害によって切れた 場合、それを知る方法を教えてください。 会社ではポート情報を取得すればいいと言われたのですが よろしくお願いします |
|
68userさん,他の皆さん,こんばんは。 さて,ローカルでメーリングリストの過去ログを閲覧するための便利なツールはないでしょうか。 今はメーラ(Becky)に取り込むことを考えていて,展開・取込スクリプトも完成したのですが,まだ本番の作業に移っていません。 この方式での閲覧には難点が幾つかあって, (1) 1,000メール程度ごとに分割しなければ表示が遅くなるので,スレッドがつながらないことがままある。 (2) Plain Textで保管されるのでディスク容量が圧迫される。 (3) メモリが少ないことも影響してか,はたまたWindows上でのtar操作だからか,ログアーカイブの展開・取込に異常に時間がかかる。(これが本番の作業に至っていない理由。) 理想を言えば,あらかじめインデックスを作成しておき,閲覧分だけ逐次展開するツールがあれば便利なのですが,あるのでしょうか。Windows使いなので,Windows(含DOSプロンプト)か,cygwinか,perl・ruby等で動作することが条件です。ローカルhttpサーバを立てることも可能です。 情報調査力の足りない私にどんなことでもご教示いただけるなら幸いです。 |
|
お世話になります。 uptimeをcronで動かしてマシン負荷を記録するスクリプトを作りました。 ところが生成されたログの起動時刻が同じ時間になってしまうという 状態がみつかりました。 ログ生成スクリプトの該当部分(bashスクリプト) export LOAD=`uptime` 〜処理〜 echo $LOAD >> $LOG ← ログファイル 生成されたログの一部 12:59am up 11:36, 1 user, load average: 0.00, 0.00, 0.00 1:00am up 11:37, 1 user, load average: 0.00, 0.00, 0.00 1:00am up 11:38, 1 user, load average: 0.00, 0.00, 0.00 1:02am up 11:39, 1 user, load average: 0.00, 0.00, 0.00 これは1秒未満の実行タイミングの誤差から来ているのでしょうか? もしそれが原因ならば、起動時に数秒waitを掛けてからuptimeを実行 することでこの現象を回避できるでしょうか? cronは毎分実行にしていますが、毎回起こるのではなく1日の内1〜2 度程度、多分負荷の掛かっている時刻の0分に記録されているようです。 ぜひご意見をお聞かせください。 |
|
>>1731 CZ > さて,ローカルでメーリングリストの過去ログを > 閲覧するための便利なツールはないでしょうか。 有名どころでは mhonarc がありますね。こんなの。 http://his.luky.org/ML/linux-users.5/msg05835.html ただ、個人的にはあのインタフェースは大嫌いなので、mhonarc を 使うのなら自作します。前準備としては - 各メールの Subject、From、Date、Message-Id、In-Reply-To を拾い、DB 化 - Date 順 (あるいは X-Sequence 順) に In-Reply-To がないメールはツリーの起点メール In-Reply-To があるメールは他のメールの子 として、ツリー構造を作成 (1ツリー=1ファイルにする。遅いかな?) - Date 順 (あるいは X-Sequence 順) で、月ごと (100通単位) のツリーの起点 一覧をリストアップ とし、閲覧時に CGI で - 指定された月 (指定された 100通) のツリーの起点一覧を表示しつつ、 対応するツリー表示 てなところでしょうか。 # って、自分で作る方法を聞いておられるのではないような気もしますが。 出来合いのものを使うなら Java House のが好きですが、 http://java-house.etl.go.jp/ml/archive/j-h-b/037476.html これって配布されてるものなんでしょうか。 > tar操作だからか,ログアーカイブの展開・取込に異常に時間がかかる。 tar は、先頭のインデックスを見て、目的のファイルが何バイト目から 始まるかを知ることができません (違ったっけ) ので、ランダムアクセス には向きません。圧縮しないなら、100通単位でディレクトリを掘って 1メール=1ファイルにしておく方が案外速かったりするかもしれません。 >>1732 すな > uptimeをcronで動かしてマシン負荷を記録するスクリプトを作りました。 > ところが生成されたログの起動時刻が同じ時間になってしまうという > 状態がみつかりました。 とりあえず date で秒単位まで記録して、何秒に実行されているか 調べてみてはどうですか。cron は、0秒きっかりに実行してくれる 保証がなく、結構ばらつきがあるのかもしれません。 で、もし重くて遅れがでてしまうなら、それはそれで仕方がない のかもしれません。 >>1730 purine > クライアントとサーバの間の回線が何らかの障害によって切れた > 場合、それを知る方法を教えてください。 物理的な切断については http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1299-1302 てのがありますけど、一般的には http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.8 ですね。 |
|
> とりあえず date で秒単位まで記録して 確かにそのとおりですね。 で、早速そのようにして観察した所1時間もしないうちに、やはり前 後1秒程度の誤差が確認されました。 +1秒の時はいいのですが、-1秒の時は「xx:59:59」などとなってしま いますので、負荷が高い時を考えて5秒程度 sleep をかます事で対 処してみます。 ありがとうございました。 cronは結構誤差があるものなのですね。 今後cronを使うときの参考になりました。 関係ない話題ですが 午前0時と正午の表記は 00:00pm という表 記が正しいと思っていましたが、uptimeの出力では、12:00am と 12:00pm と表示されるのですね。 |
|
>>1733 68userさん お返事ありがとうございます。 > 出来合いのものを使うなら Java House のが好きですが、 > http://java-house.etl.go.jp/ml/archive/j-h-b/037476.html > これって配布されてるものなんでしょうか。 私もなかなか閲覧しやすいと思います。「Underconstruction」なのが残念ですが。 > tar は、先頭のインデックスを見て、目的のファイルが何バイト目から > 始まるかを知ることができません (違ったっけ) ので、ランダムアクセス > には向きません。圧縮しないなら、100通単位でディレクトリを掘って > 1メール=1ファイルにしておく方が案外速かったりするかもしれません。 そうですか。SEGA BBS 過去ログ<http://x68000.startshop.co.jp/~68user/index-segabbs.html>が「データは圧縮して保管しており、リクエストがあるたびに CGI で随時展開して」いることを覚えていたので,圧縮して随時展開という手法に期待をおいていたりしました。 今は他のことにかかりきりなので,できあいのものを探していたのですが,設計の考え方は参考になりました。そのうち時間があればログをメーラに取り込んで,そのうちさらに時間があれば自作も検討します。メーラのプラグインとして作成する手もありますが,いずれにせよ今は無理です。 ところで,今さっき「tar」で全文検索したときに発見したのですが,結果画面でNo.531だけが正常に表示されませんでした。ご報告まで。 |
|
テープにbackupしたデータを、復元させたいのですが コマンドの打ち方がわかりません。 教えて下さい。 UNIX若葉マークです。 |
|
68userさんお返事ありがとうございます。参考になりました。 |
|
ソケット通信でマルチクライアントサーバを作っているのですが お手本にできるソースってどこかにありませんか? プログラミング初心者ですが、要求がかなり厳しいので困ってます。 |
|
>>1735 CZ > 「Underconstruction」なのが残念ですが。 ってどこに書いてありました? > 結果画面でNo.531だけが正常に表示されませんでした。 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=531 のことでしたら、あれで正しい表示です。CZ さんが見られたときは 変な表示になってましたか? >>1736 SASA > テープにbackupしたデータを、復元させたいのですが > コマンドの打ち方がわかりません。 バックアップしたときにどういうコマンドを使ったのですか? mt? tar? dd? >>1738 purine > ソケット通信でマルチクライアントサーバを作っているのですが > お手本にできるソースってどこかにありませんか? まずは http://X68000.startshop.co.jp/~68user/net/ を見て、どこが足りないのか書きましょう。 # …についてもっと詳しく書いてあるソースがほしい、perl # じゃなくて C 言語のソースがほしい、などなど。でも # OS のソース以外のお手本は知らないなぁ。 >>1734 すな > で、早速そのようにして観察した所1時間もしないうちに、 > やはり前後1秒程度の誤差が確認されました。 ほうほう、cron が1秒早く起動されましたか。結構いいかげん なんですかね。お使いの OS は何でしょうか? |
|
お世話になっておりますpurineです。 C言語で書かれたソケット通信によるマルチクライアントサーバの お手本のソースを見たいのでご存知でしたら教えていただけませんか お手本だけじゃなくC言語のソケット通信に使う関数について書かれたページなどもありましたらよろしくお願いします |
|
purineさん> 職場の同僚がマルチクライアントサーバを作る時に調べていてみつけた便利そうなサイトへのリンク集だそうです。 http://www.geocities.co.jp/SiliconValley-Oakland/6682/link/LinksForWork_Edu01.html この同僚は検索サイトで探し出したそうですから あなたももっと探してみてはいかがでしょう。 |
|
追加です。 こちらのサイトへのリンクもあるそうです。 http://www.geocities.co.jp/SiliconValley-Oakland/6682/link_work.html |
|
こんばんわ、初めまして。 以前から、UNIXのページなど凄く参考にさせてもらってます。ども。。 いきなり、質問なのですが。 あやまって/usr/share/locale/ja_JP.EUCを削除してしまいました。 これを元にもどしたいのですが、どんな方法があるでしょうか。 すみませんが、よろしくお願いします。 FreeBSD 4.2-RELEASEです。 |
|
>>1743 なお FreeBSD 4.2-BETA では % ls -ld /usr/share/locale/ja_JP.EUC drwxr-xr-x 2 root wheel 512 Jan 8 14:18 /usr/share/locale/ja_JP.EUC/ % ls -l /usr/share/locale/ja_JP.EUC lrwxr-xr-x 1 root wheel 25 Jan 8 14:18 LC_COLLATE@ -> ../la_LN.ASCII/LC_COLLATE -rw-r--r-- 1 root wheel 5391 Jan 15 22:09 LC_CTYPE -rw-r--r-- 1 root wheel 304 Jan 8 14:18 LC_TIME です。まぁおそらく 4.2-RELEASE と内容は同じでしょう。 というわけで、src を展開しているなら、 # mkdir /usr/share/locale/ja_JP.EUC # ln -s ../la_LN.ASCII/LC_COLLATE /usr/share/locale/ja_JP.EUC/LC_COLLATE # mklocale /usr/src/share/mklocale/ja_JP.EUC.src > /usr/share/locale/ja_JP.EUC/LC_CTYPE # grep -v '^#' /usr/src/share/timedef/ja_JP.EUC.src > /usr/share/locale/ja_JP.EUC/LC_TIME です。src がなければ http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/ から拾ってきてください。 うちでは # cd /usr/src/share/mklocale # make すると、/obj/usr/src/share/mklocale/ja_JP.EUC.out が出力されますが、 この方法で locale/ja_JP.EUC だけインストールするのはどうやれば いいんだろう? もちろん CD-ROM があれば、mount して、 # cd / # cat /cdrom/bin/bin.?? | tar zxvfp - usr/share/locale/ja_JP.EUC/\* でも OK です。 cvsweb を見ていて気がついたのですが、current では、LC_MONETARY、 LC_NUMERIC を設定する http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/monetdef/ http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/numericdef/ てなのができたようですね。 |
|
過去ログみたら、マルチポストについての指摘が(^^; すみません、マルチポストです。 www.linux.co.jp FreeBSDで質問出来るような場所が見つからず linux板に書き込んでしまいましたが、 68userさんのサイトを思い出し、投稿させて頂きました。 linux.co.jpのほうはレスしてもうらうと悪いので 解決したと書いておきましたが、実はまだです。(^^; 反省と謝罪までに、、、、でわでわ、すみません。 下記のほうよろしくお願いします。 |
|
>1744 68userさん ありがとうございます。 srcからうまくいきました。 locale一つでも、色々方法があるみたいですね、、 まだ知識が追いついてないですが、書いてくださった他の方法も試してみます。 でわ、解答ありがとうございました。 |
|
>>1744 68user > うちでは > # cd /usr/src/share/mklocale > # make > すると、/obj/usr/src/share/mklocale/ja_JP.EUC.out が出力されますが、 > この方法で locale/ja_JP.EUC だけインストールするのはどうやれば > いいんだろう? -current の make world の際のログがありましたけど、 単純にコピーでいいようですね。 > ===> share/mklocale > install -c -m 644 -o root -g wheel el_GR.ISO_8859-7.out /usr/share/locale/el_GR.ISO_8859-7/LC_CTYPE > install -c -m 644 -o root -g wheel ja_JP.EUC.out /usr/share/locale/ja_JP.EUC/LC_CTYPE > install -c -m 644 -o root -g wheel ja_JP.SJIS.out /usr/share/locale/ja_JP.SJIS/LC_CTYPE [snip] /usr/obj の下のファイルが使えるなら、多少の無駄があるけど、 make installworld するのも手です。 > cvsweb を見ていて気がついたのですが、current では、LC_MONETARY、 > LC_NUMERIC を設定する > http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/monetdef/ > http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/share/numericdef/ > てなのができたようですね。 これが結構間があいて commit されていたので、make world が 途中でこけるのが二三日続いたことがありました。それで覚えてます。 |
|
>>1739 68userさん > > 「Underconstruction」なのが残念ですが。 > ってどこに書いてありました? スレッド一覧の最下部の「Mail converted by HyperThreads v0.9.1」のリンク先です。作者のウェブサイト<http://www.etl.go.jp/~takagi/>からも参照できます。 > > 結果画面でNo.531だけが正常に表示されませんでした。 > http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=531 > のことでしたら、あれで正しい表示です。CZ さんが見られたときは > 変な表示になってましたか? Namazuの検索結果画面での表示のことです。「オペランド」等で検索してみるとお分かりになるはずです。 さて,いろいろと探していたら,<http://blade.nagaokaut.ac.jp/>で使われているbladeシステムがかなり気に入りました。bladeクローンの<http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/>が開発されています。rubyは分かるのでいいのですが,これをWindowsで動かそうとしたらかなり労力が要りそうで,ちょっと躊躇しています。 # そのうちに常時接続になることだし,そろそろ家庭内サーバを立てるか。 ## でも騒音と夏の空調とセキュリティの確保が大変そう。 ### ひょっとして常時接続になればローカルで閲覧する意味もなくなるか? 独り言を書き連ねてしまいました。 ではでは,これからもよろしくお願いします。 |
|
>>1725のりさん 解決したようですが、ちょっとXのリソースについて 私も今勉強中なのですが、、editresコマンドなどあるみたいです。 http://www.linux.or.jp/JF/JFdocs/XWindow-User-HOWTO-8.html http://www.ainet.or.jp/~inoue/athena/index.html |
|
>>1748 CZ > 「Mail converted by HyperThreads v0.9.1」のリンク先です。 なるほど、あれは高木さんの自作でしたか。公開してほしいなぁ。 > bladeクローンの<http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/>が開発されています。 あ、これまた嫌いなインタフェース (^^; # これは、単に慣れてないだけという可能性もありますので、 # 本当の評価は保留中です。 > 「オペランド」等で検索してみるとお分かりになるはずです。 うーん、わからんです。どの辺でしょう。 http://X68000.startshop.co.jp/~68user/tmp/wwwboard-531.gif ちなみにメールアドレスが先頭に出るのは、僕の namazu 用 フィルタの書き方が悪いせいです。 あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると <http://blade.nagaokaut.ac.jp/> → <A HREF="<http://blade.nagaokaut.ac.jp/>"> と置換されていましたが、さきほど直しました。こういうバグを 見つけるたびに、自分の想像力のなさを思いしらされますね。 >>1745 なお > www.linux.co.jp 質問者が知らないのは仕方がないし、間違った回答をしてしまうのも 仕方がないですが、その間違った答えにツッコミ入れる回答者がいない コミュニティというのは悲惨ですね。 http://www.linux.co.jp/bbs/bbs1/bbs.cgi?num=2721&ope=sel http://www.linux.co.jp/bbs/bbs3/bbs.cgi?num=855&ope=sel |
|
おっと書き忘れ。 >>1747 rosegarden > -current の make world の際のログがありましたけど、 > 単純にコピーでいいようですね。 なるほど。手動でやる場合は、 ftp://current.jp.FreeBSD.org/pub/FreeBSD/snapshots/i386/log/ を見ればよかったわけですね。 |
|
>>1750 68userさん > > bladeクローンの<http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/>が開発されています。 > あ、これまた嫌いなインタフェース (^^; そうですか? スレッド表示など特に秀逸だと思ったのですが。 <http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/22494?22494-23482> > うーん、わからんです。どの辺でしょう。 | ……wwwboard.cgi?log=531">名前を「やまい」元(山井・孝雄)に変えましたー/a></strong> (スコア: 1) Internet Explorerやw3m等から見るとソースがこんな具合になっています。で,見かけ上Aエレメントが閉じられていないために問題が起きるわけです。Lynxもそうですが,HTML解釈上は正しくDDエレメントの手前でアンカーを切っています。 原因は半角の「。」のようです。当方ではNetscape Navigator(4.7/2.0)だけが文字化けせずにAエレメントが閉じられていました。十分に検証せずに一方的に報告してしまったことをお詫びします。最初からNetscape Navigatorで確かめておけば原因もすぐに判明したと思います。 > あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると > <http://blade.nagaokaut.ac.jp/> > → <A HREF="<http://blade.nagaokaut.ac.jp/>"> > と置換されていましたが、さきほど直しました。こういうバグを > 見つけるたびに、自分の想像力のなさを思いしらされますね。 私の自作BBSでも同じ問題が発生していることを以前から認識していました。68userさんの掲示板ソースも参考にした覚えがあるので,ひょっとするとURL置換処理をコピーしていたのかも知れません。そのうち暇があれば直しておきます。 # 睡眠は大事です。かくいう私も最近……。 |
|
お邪魔致します。このサイトの情報はPerlでのネットワークプログラム作成時に 大変参考にさせて頂いております。以前も一度この掲示板にてお世話になりました。 本日はFTPとHTTPの比較について質問がありやって来ました。 昨日書店で立ち読みした、発売したばかりの ASCII NETWORK MAGAZINE4月号 http://biz.ascii24.com/biz/n-mag/article/2001/02/23/623348-000.html に、比較的初心者向けのFTPプロトコルの解説記事があったのですが、その冒頭に 「FTPはHTTPよりわずかに速いため、現在もよく利用される」 という(言い回しが違うかもしれません)記述がありました。これは本当でしょうか? CやPerlでsocket関数を使いTCPのアプリケーション層のプログラムを作っている と、プロトコルがFTPであるのかHTTPであるのか(もしくはSMTPやPOP3なのか)は データを受信(または送信)するアプリケーションが判断することで、ネットワーク上 では区別されないように思えました。 ポート番号で区別できるという考えもありますが、もちろんWell-Knownポート以 外を使ったHTTPやFTPでの通信も可能ですよね。 IPパケットレベルでHTTPとFTPのパケットが区別され、FTPの方がわずかに速く通 信が可能という事はあるのでしょうか?いきなりで申し訳ありませんが、お答え頂ければ 幸いです。 |
|
>>1752 CZ > そうですか? スレッド表示など特に秀逸だと思ったのですが。 あ、アイコンがわかりにくいので拒否反応を示しただけですから、 聞き流してくださいまし。 > Internet Explorerやw3m等から見るとソースがこんな具合に > なっています。 IE5.5 で確認しました。原因究明はウチに帰って元データを 見てからにします。 >>1753 金床 > FTPはHTTPよりわずかに速いため FTP はコントロールコネクションとデータコネクションがありますが、 HTTP はコネクションは1本しか張らないので、FTP の方がわずかに 速い *かも* しれません。でも、誤差の範囲内だと思います。 なので、(この部分を見る限りでは) 不適切な解説だと僕は思います。 > IPパケットレベルでHTTPとFTPのパケットが区別され、FTPの方が > わずかに速く通信が可能という事はあるのでしょうか? アプリケーションゲートウェイ (delegate とか) で帯域制限でも しない限り ありえないです。金床さんが書かれている考え方は 正しいです。 |
|
お答え頂きありがとうございます。 >FTP はコントロールコネクションとデータコネクションがありますが、 >HTTP はコネクションは1本しか張らないので、FTP の方がわずかに >速い *かも* しれません。でも、誤差の範囲内だと思います。 これは、FTPのデータコネクションでは目的のデータ(ファイルやファイルリストなど)しかネットワーク上を 転送されないのに対し、HTTPでは最初にHTTPリクエストがネットワーク上を通るので、その分という事でしょうか。 それとも、データコネクションでのデータ受信(送信)中も、コントロールコネクションが何らかの役割を果たして いるという意味でしょうか。つまり、転送されるデータが巨大になればなるほどFTPとHTTPで差がでてくるような 現象が存在するのでしょうか? 最初に書くべきでしたが、私がここで対象にしている「FTPとHTTPの転送速度の差」は、 数Kb〜数百Kb程度の小さなファイルでのやりとりではなく、巨大なデータ(少なくとも10Mb程度) で現れる(かもしれない)差の事です。 >アプリケーションゲートウェイ (delegate とか) で帯域制限でも >しない限り ありえないです。 なるほど、やはりそうですよね。少し安心しました。 |
|
# おぉすごい書き込み…うちとは大違い(笑) 68user>お使いの OS は何でしょうか? はい、初心者入門用?(笑)VineLinux1.1CRです。 ちなみに5秒sleepした結果以下のようなログが生成されています。 2001-02-28 00:59:06 12:59am up 13:13, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 01:00:02 1:00am up 13:14, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 01:01:03 1:01am up 13:15, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 01:02:06 1:02am up 13:16, 1 user, load average: 0.00, 0.00, 0.00 〜略〜 2001-02-28 03:57:05 3:57am up 16:11, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 03:58:06 3:58am up 16:12, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 03:59:06 3:59am up 16:13, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 04:00:05 4:00am up 16:14, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 04:01:06 4:01am up 16:15, 1 user, load average: 0.00, 0.00, 0.00 2001-02-28 04:02:06 4:02am up 16:16, 1 user, load average: 0.08, 0.02, 0.01 2001-02-28 04:03:06 4:03am up 16:17, 1 user, load average: 0.72, 0.21, 0.07 2001-02-28 04:04:07 4:04am up 16:18, 1 user, load average: 1.08, 0.40, 0.14 2001-02-28 04:05:07 4:05am up 16:19, 1 user, load average: 1.21, 0.56, 0.21 2001-02-28 04:06:05 4:06am up 16:20, 1 user, load average: 0.60, 0.50, 0.21 2001-02-28 04:07:05 4:07am up 16:21, 1 user, load average: 0.22, 0.41, 0.19 2001-02-28 04:08:06 4:08am up 16:22, 1 user, load average: 0.08, 0.33, 0.18 このマシンは試験用のマシンで、ペンティアム166です。 ちなみに、マシンフル稼働状態だとloadの数値は最大いくつ位になるのでしょう? 金床>FTPはHTTPよりわずかに速いため、 これ、自分も以前も気になっていましたが、回線トラフィックの方が 影響が大きそうなのと、特に支障がなさそう(知らなくても)なので、 ほったらかしの疑問にしていました(^^; httpと違ってftpはデーターコネクションとコントロールコネクションが 独立している為に僅かに早いのかな?なんて勝手に想像しています。 # 無駄な反応してすいません。 |
|
あら?いろいろと書いているうちに、前後してしまった…(^^; |
|
金床> 私も詳細は判りません(手抜き)ですが、調べるなら参考まで。 日本語RFC(FTP) http://hp.vector.co.jp/authors/VA002682/rfc959j.htm |
|
>>1755 金床 ああ、逆でした。 FTP はコネクションを 2本張るので、3way handshake が2回行われ、 その分 HTTP の方がわずかに速い *かも* しれません。 あと、FTP だと USER/PASS/TYPE/PORT などのコマンドを発行した 後はレスポンスを待たなければいけませんが、HTTP だと最初に リクエストを送って、あとは受け取るだけなので、そういう点でも HTTP の方が速い *かも* しれません。 それらの差が *仮に* あったとして、なおかつ数十 KB 程度の 小さいデータの転送時には *仮に* 体感できたとしても、 > 巨大なデータ(少なくとも10Mb程度)で現れる(かも > しれない)差の事です。 データの転送自体の仕組みは全く変わらないため、転送データの サイズが大きくなればなるほど、差は目立たなくなるでしょう。 |
|
>データの転送自体の仕組みは全く変わらないため、転送データの >サイズが大きくなればなるほど、差は目立たなくなるでしょう。 納得行く答えを頂きました。ありがとうございます。 >すなさん RFC情報、どうもありがとうございます。 |
|
>>1756 すな > 2001-02-28 01:00:02 5秒 sleep したのですから、00:59:57 あたりに cron から 起動されているわけですか。手元の FreeBSD 4.1-RELEASE と Solaris2.6 で負荷をかけて試してみましたが、1秒程度遅く なることはあっても、早く起動されることは一度もありません でした。 となると、Vine の cron が腐ってるということになりませんかね。 > マシンフル稼働状態だとloadの数値は最大いくつ位になるのでしょう? とりあえず http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1119 を読んでください。理論的には、load average はどこまででも 増やすことができます。 |
|
68user>となると、Vine の cron が腐ってるということになりませんかね。 なるほど、と言う事はcronの実装も結構ディストリビューションで違うのですね。 というか、さすがSolarisと言うべきなのか… # マシンの内臓タイマーの精度とかも関係有るのかな? # このマシンはかなり時間が狂うので…(1日数秒はあたりまえ) >http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1119 なるほど、これも大変勉強になりました。 最初は単純にシステム負荷を100で割った(理由不明)数値なのかと思っていました。 Windows等のシステム負荷表示とはまったく違って、100%以上の負荷まで表示 している訳ですね。(待ちプロセスを負荷と言うかは別として) 説明も大変判りやすかったです。 |
|
>>1750 68userさん > あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると > <http://blade.nagaokaut.ac.jp/> > → <A HREF="<http://blade.nagaokaut.ac.jp/>"> > と置換されていましたが、さきほど直しました。 自作BBSを見ると正規表現部分*だけ*はほぼ同じでした。やはりここの掲示板のソースを引き写していたようです。(perlではなくrubyですが。)で,直していて気が付いたことですが, s!<A HREF="(.*?)>">(.*?)<</A>!<A HREF="$1">$2</A><!g; も加えておいた方がよいのでは。 |
|
<<1763 ん? 訂正。 s!<A HREF="(.*?)>">(.*?)></A>!<A HREF="$1">>$2</A>>!g; s!<A HREF="(.*?)<">(.*?)<</A>!<A HREF="$1"><$2</A><!g; こうですね。 |
|
<<1764 ん?? 何やってるんだろう。 s!<A HREF="(.*?)>">(.*?)></A>!<A HREF="$1">$2</A>>!g; s!<A HREF="(.*?)<">(.*?)<</A>!<A HREF="$1">$2</A><!g; これでいいんですね。 <<1762 はタイプミス <<1763 は勘違いでした。 板汚しですみません。 |
|
あっ、ウチも同じバグがある(^^; でも、書き戻しですね…、ちょっとテストさせてくださいm(_o_)m <http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/> |
|
おー、これってきっちりやると結構面倒かも。で、30分あれこれ やった結果…これでどだ! $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)'; $out = ''; while (1){ if ( ! s!(.*?)($http_pattern)!! ){ $out .= $_; last; } $out .= $1; $buf = $2; $buf =~ s/((<|>|").*)//; $rest = $1; $buf =~ s!$http_pattern!<A HREF="$1">$1</A>!; $out .= $buf; $_ = $rest . $_; } print "$out\n"; 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。 |
|
無茶苦茶効率悪そうだし、未定義変数使用の警告が出るけど…(^^; $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; $http_pattern = '(http|https)(://)(([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+?)(>|<|")|([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+))'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; s!$http_pattern!<A HREF="$1$2$4$6">$1$2$4$6</A>$5!g; |
|
>>1767 68userさん おはようございます。 > おー、これってきっちりやると結構面倒かも。 こんなに奥が深いものとは想像もつきませんでした。以前これに着手しかけて断念した覚えはあったのですが,なぜ断念したかは覚えていません。 > 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。 早速ruby文に変換して実働掲示板に使っています。無限ループになっても利用者が二人しかいないサーバだし,HTTPならすぐ切れそうだということで,心配はしていません。 そんなわけで,いつもありがとうございます。これからもお世話になります。 |
|
こんなのも。 $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; @items = split(/(<|>|")/, $_); foreach (@items){ s|$http_pattern|<A HREF="$1">$1</A>|g; } $_ = join('', @items); print "$_\n"; アルゴリズム・正規表現が複雑にならないという点で、これが 一番よさげかなぁ。でも動作チェックと速度計測をしなくては。 もっとよいのを思いついた方は教えてください。 |
|
>>1770 68user commit しました。とか言ってみたり。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi |
|
>>1770 68userさん いいですねぇ。 これ頂きます。perl4でも動くし(^^; |
|
質問したいことがあります。それはあるプログラムでPIDを変数として 持っているときに、その変数のPIDのプロセスを殺す方法があれば教えて欲しいのですが。 よろしくお願いします |
|
>>1773 purine 必ず OS 名や使用している言語を書いてください。 kill コマンドか、システムコール kill を使います。 http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=kill&target=command&partial=on |
|
japu さん (http://www.japu.org/) より、source.cgi に関して CGI Security Advisoriy をいただきました。 これは他サイトに HTTP でアクセスし、GET した結果を表示 するもので、 「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/ からは <!-- --> でコメントアウトしてあったものです (なぜコメントアウトしたかは忘れた)。 # また、昔利用していた http proxy 経由でアクセスするため、 # X68000.startshop.co.jp からは正しく動作しませんでした。 しかし、トップページからはスクリプトのソースを見ることができ、 source.cgi 自体も実行可能なままになっていました。これに対して http://X68000.startshop.co.jp/~68user/Cgi-room/source.cgi?url=http://www.yahoo.co.jp';ls%20*' といったアタックが可能でした。これは open(IN,"$httptalker -get '$url'|"); の部分で open(IN,"$httptalker -get 'http://www.yahoo.co.jp';ls *''|"); と解釈されます。open の引数に ; ? * | などを渡すと、perl は /bin/sh を起動し、/bin/sh がコマンドを実行しますので、任意の コマンドが実行可能です。 で、SA を受けて open(IN, "-|") or exec($httptalker, '-get', $url); と修正しました。この場合は perl が直接 fopen(3) を呼ぶため、' ; * など が特別扱いされることなく、$httptalker の引数にそのまま渡ります。 source.cgi の更新履歴: http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/Cgi-room/source.cgi セキュリティホールを指摘して下さった japu さんに感謝いたします。 んで、 「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/ ですが、もうメンテする気力がないし、技術的な興味もないし (nslookup とか whois コマンド呼ぶだけのスクリプト見てもおもしろくないでしょ)、例えば ドメイン名検索とかならもっと便利なサイトがあるので、この掲示板で誰からも 反応がなければ近日中に消すつもりです。 |
|
>>1775 68user > open(IN, "-|") or exec($httptalker, '-get', $url); > と修正しました。この場合は perl が直接 fopen(3) を呼ぶため 訂正。perl が直接 pipe(2)、fork(2)、exec(2) するため、でした。 |
|
CGIの小部屋は消さないで欲しいです. メンテ終了ページは倉庫ディレクトリなどに 移設するのみにしていただけると嬉しいです. 簡単な内容のものでも,知らない人に説明するとき サンプル的に便利に利用させていただいております. |
|
>>1777 Netboy > CGIの小部屋は消さないで欲しいです. 了解いたしました。と決まれば、見られても恥ずかしくない 程度に brush up せねば。 |
|
いつも質問ばかりですいませんのふくしです。 Perl で use strict 'vars'; とすると、変数を使うときは パッケージを明示するか、my 宣言しないと怒られますが、 $a、$b という変数は怒られないで、%main:: シンボルテーブルに 追加されますね。$aa だとダメ。$c もダメ。なぜでしょう? 恐れ入りますがご存知の方はご教示ください。 |
|
>>1779 ふくし 想像でモノを言いますが、sort でセットされるのが $a と $b だから特別扱いされているんじゃないでしょうか。 # Ex. sort { $a cmp $b } |
|
ああ〜そかそかそかそか。使いますねえ sort で $a と $b。 すっきりしました。いつもありがとうございます!(^^) |
|
はじめまして。Telと申します。 以前、こちらで共有メモリについて少し触れられていたようなので、質問をしてみようと思いました。 現在、共有メモリ上にフラグの役割をもつ変数を用意し、複数のプロセス間でそのフラグを参照し、フラグの状態によって処理の分岐をするというプログラムを書いています。 そこでわからない点が出てきました。 共有メモリに変数を用意する方法の記述についてはサンプル等を見て作成することができると考えています。 しかし、それを参照する各プロセス側での記述方法について、サンプルが少なくよくわからないのです。 たとえば int flag; char data[datalength]; という2つの変数が共有メモリにある場合、flagの内容によってdataに書き込む内容を分けるという処理は具体的には、どう記述すれば良いのでしょうか。 プログラムAは flag==1 ならば"good morning." flag==2 ならば"good afternoon." flag==3 ならば"good evening." をdataに書き込む。 プログラムBは flag==1 ならば"beakfast." flag==2 ならば"lunch." flag==3 ならば"dinner." をdataに書き込む。 上記のような場合、AとBそれぞれではどう宣言してからflagやdataを使うのでしょうか。 勉強不足からくる質問だと思いますがUNIXの知識がない為なのか、書籍の選びかたが悪い為なのか、難しくて具体的な記述方法がわからないためにこちらにきてみました。 どうかご指導願います。よろしくおねがいします。 |
|
UNIXでパーミッションを変更しようとしたのですが 以下のメッセージで変更できません。どうしてですか? 502 SITE command not implemented. |
|
>>1783 ゆう > 以下のメッセージで変更できません。どうしてですか? > 502 SITE command not implemented. サーバ側でサポートしていないからでしょう。 SITE コマンドと言うのは標準的でないコマンドのことです。 だから、理屈の上では ftp>SITE SHUTDOWN NOW なんて出来ても別に不思議ではないと思います。 それでは身も蓋もないので、ためしに、 ftp>SITE CHMOD 600 とか win98 の ftp.exe だと ftp>literal SITE CHMOD 600 (だったかな?) とかしてみて駄目だったら、駄目なんだと思います。 どっちにしても、管理者に聞いてみないと、はっきりしたことは 分からないと思います。 |
|
>>1782 Tel 書き込み拝見しましたが、どうも共有メモリ云々でつまずいて おられるのではなく、単純に C 言語で目的を 達成するプログラムを書く方法について悩まれているように思えます。 # もしも違いましたら、ごめんなさい。 # 何をどうされたいのかが、不明で推測で書いていますので、 # 御理解ください。 shared memory を使ったプログラミングは経験が無いんですが、 ちょっと本を見たら、初期化やセットアップは別として メモリへのアクセスは普通に配列や malloc したバッファへの アクセスと変わらないようでした。 失礼を承知で書きますが、共有メモリを使わないで、固定したファイルに flag と data を書き込んで、プログラム A と プログラム B で やりとりをするようなものは、お書きになられますか? もしそれが可能なら、似たような手順で出来そうです。 # もしも、既にそんなことは可能であると言うのでしたら、 # 失礼お許しください。 ちなみに、私の場合には 「UNIX ネットワークプログラミング」という本を参考にしました。 トッパンからでている本です。ちょっと眺めた程度だと、 共有メモリの部分は結構丁寧に書いてあって、 サーバとクライアントのサンプルもありました。 ざっと見たかんじでは、分かりにくいと言う感じは無かったですね。 # これって、ここで紹介されている本の旧版なのでしょうか? # 今は二分冊になっているのですね。私のには IPv6 のことは # 書いてないです。 |
|
ちょっと、すごい初歩的な質問なのですが、 一般に top コマンドの出力でメモリの状況が出力されますよね。 last pid: 20294; load averages: 0.19, 0.11, 0.04 up 1+08:42:31 19:52:21 30 processes: 1 running, 29 sleeping CPU states: % user, % nice, % system, % interrupt, % idle Mem: 35M Active, 6528K Inact, 12M Wired, 3448K Cache, 14M Buf, 3228K Free Swap: 128M Total, 6588K Used, 121M Free, 5% Inuse 上のような奴です。Mem のところの Active, Inact, Wired, Chache, Buf, Free の合計ってだいたい搭載された物理メモリの量に近いものだと思っていたのですが、 これはあたっていますか? (ただし、10% 程度の増減は許容するものとします。) 実は、3 月 1 日前後に CVSup した current なのですが、 top の表示が次のようになっています。 last pid: 7969; load averages: 0.94, 0.74, 0.40 up 0+00:11:35 19:59:58 22 processes: 2 running, 20 sleeping CPU states: % user, % nice, % system, % interrupt, % idle Mem: 2927K Active, 12M Inact, 6285K Wired, 2K Cache, 35M Buf, 41M Free Swap: 256M Total, 256M Free 最初の top コマンドの表示は別マシンなのですが、上のマシンは 搭載している物理メモリは 256 MB なのに上のようになっています。 大雑把に計算しても Mem の合計値は 150MB 行っていません。 何か、私は勘違いでもしているのでしょうか? # というか make world 中に何度も kernel panic 起こすし。 # fsck は大活躍だし。さっきは自動修復が効かずに # /dev/ad0s2f: UNEXPECTED SOFT UPDATE INCONSISTENCY; RUN fsck MANUALLY. # なんていうメッセージもでました。 # こういうことがしょっちゅう起こると、もう笑いしかでませんね。 |
|
>>1784 rosegarden >> 502 SITE command not implemented. は、SITE コマンドは未実装だよ、という FTP サーバ側の メッセージなので、chmod は無理です。 > ftp>literal SITE CHMOD 600 ほほー、literal というのがありますか。僕が知っていたのは quote site chmod 600 です。 あと、前にここで書いたかもしれませんが、site index ちうのが 便利です。例えば ftp://ftp3.jp.FreeBSD.org にログインして、 ftp> site index perl-5 などなど。 >>1785 rosegarden > 「UNIX ネットワークプログラミング」という本を参考にしました。 > トッパンからでている本です。 > # これって、ここで紹介されている本の旧版なのでしょうか? > # 今は二分冊になっているのですね。 確か三分冊になったのですが、トッパンはなくなったので、ピアソン エデュケーションが版権を引き継ぎました。 http://www.mmjp.or.jp/pearsoned/washo/network/wa_net28-j.html http://www.mmjp.or.jp/pearsoned/washo/network/wa_net27-j.html 洋書の Vol.3 が出ているのかどうかはわかりません。 作者が亡くなったので、永遠に出ないのかもしれません。 >>1786 rosegarden > Mem のところの Active, Inact, Wired, Chache, Buf, Free の > 合計ってだいたい搭載された物理メモリの量に近いものだと > 思っていたのですが 僕もそのように認識しています。current ですからちょっと 様子を見てはどうでしょう。 # VM まわりなんてとても僕の手に負えないので、役に立たない # 返事しかできないです。ごめんなさい。 |
|
今日は。 本来のLOGIN パスワードを忘れてしまった場合はOSからインストールし直すしかないのでしょうか? |
|
>>1788 ミング > 本来のLOGIN パスワードを忘れてしまった場合はOSから > インストールし直すしかないのでしょうか? root でログインして、passwd コマンドで該当ユーザの パスワードを再設定します。root のパスワードも忘れて しまったのなら、 http://www.jp.FreeBSD.ORG/QandA/HTML/464.html http://www.jp.FreeBSD.ORG/QandA/HTML/1638.html 的なことをしますが、あなたの使っている OS が何なのか 全くわからないので、これ以上はなんとも。もし Windows なら僕にはわかりません。 |
|
>>1787 68user > > ftp>literal SITE CHMOD 600 > ほほー、literal というのがありますか。僕が知っていたのは > quote site chmod 600 です。 良く分からないのですが、使ってみた感じだと telnet コマンドを ftp クライアント代わりに使うような場合に打ち込むコマンド類が これで打てるようになるみたいですね。 > あと、前にここで書いたかもしれませんが、site index ちうのが > 便利です。例えば ftp://ftp3.jp.FreeBSD.org にログインして、 > ftp> site index perl-5 > などなど。 ああ、これ便利ですね。ls-lR でも検索しているのでしょうか? > > # 今は二分冊になっているのですね。 > 確か三分冊になったのですが、トッパンはなくなったので、ピアソン > エデュケーションが版権を引き継ぎました。 まさか三分冊というのまでは知りませんでした。 色々ありがとうございます。 > > Mem のところの Active, Inact, Wired, Chache, Buf, Free の > > 合計ってだいたい搭載された物理メモリの量に近いものだと > > 思っていたのですが > 僕もそのように認識しています。current ですからちょっと > 様子を見てはどうでしょう。 結局、アドバイス頂いてから、ソースを色々調べて見たら、 kernel ではなくて top コマンドの表示に問題があることが分かりました。 ページ数で取得したメモリの量を KB 単位に変換してないので 変な結果になるようです。 ちょっとまだ断定的なことは言えないのですが、 とりあえず、バグリポートしておきました。 |
|
68Userさん 回答ありがとうございます。 OSはSolaris7です。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー root でログインして、passwd コマンドで該当ユーザの パスワードを再設定します。root のパスワードも忘れて しまったのなら、 http://www.jp.FreeBSD.ORG/QandA/HTML/464.html http://www.jp.FreeBSD.ORG/QandA/HTML/1638.html 的なことをしますが、あなたの使っている OS が何なのか 全くわからないので、これ以上はなんとも。もし Windows なら僕にはわかりません。 本来のLOGIN パスワードを忘れてしまった場合はOSからインストールし直すしかないのでしょうか? |
|
>>1791 ミング >OSはSolaris7です。 Solaris 7 なら シングルユーザモードで起動してから、/etc/shadow を 編集して OK です。 インストール CD からでも出来ますが、 シングルユーザモードでの起動の方が簡単ですね。 忘れたけど、恐らく、そのままでファイルの書き換えが 出来たと思います。 FreeBSD だと mount -u / しないと書き込めませんが。 #vi は使えますよね? |
|
>>1792 rosegarden あ、 Solaris はシングルユーザモードで起動する時でも パスワードを聞いて来ることを思い出しました。 やっぱりインストール CD から起動して、ファイルシステムを マウントして書き換えるより無いですね。 |
|
>あ、 >Solaris はシングルユーザモードで起動する時でも >パスワードを聞いて来ることを思い出しました。 >やっぱりインストール CD から起動して、ファイルシステムを >マウントして書き換えるより無いですね ありがとうございます。 ところでもう一つ質問があります。 directoryでls −alすると6行目に各ファイルやdirectoryの容量が表示されますが、そこによく512という数字が出てきます。そのdirectory下のファイルの容量が512以上なので512は容量ではないのかなと思ったのですが、なにか特別な意味があるのでしょうか? よろしくお願いします。 |
|
>>1794 ミング > そのdirectory下のファイルの容量が512以上な > ので512は容量ではないのかなと思ったのですが、 ディレクトリもファイルですから、ディレクトリ自体のサイズです。 ディレクトリに書いてあるのは大雑把に言って、ファイル名と i ノード番号です。うーん、他にも書いてあるかも知れない。 要するにファイルのリストです。最初はだいたい 512 バイトで ファイルが沢山になった場合には適当に 512 バイト単位で大きくなって 行きます。手元の FreeBSD だとエディタでディレクトリを見ることも できて、次のような感じです。 % ls IPv6 d200006c.html daytime6.pl ipv6_1.html d6.c ipv6.html ipv6_2.html % cat IPv6 | hexdump -C 00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00 80 26 03 00 |.^...........&..| 00000010 0c 00 04 02 2e 2e 00 00 97 27 03 00 14 00 08 09 |.........'......| 00000020 69 70 76 36 2e 68 74 6d 6c 00 1e c0 a0 27 03 00 |ipv6.html....'..| 00000030 14 00 08 0b 69 70 76 36 5f 31 2e 68 74 6d 6c 00 |....ipv6_1.html.| 00000040 a1 27 03 00 14 00 08 0b 69 70 76 36 5f 32 2e 68 |。'......ipv6_2.h|、&......|そのディレクトリにあるファイルの名前だけ保持できれば いいので、ファイルの数が少なければ、512 バイトということが ありえます。 |
|
>>1795 rosegarden hexdump のところが表示が変になってしまいましたね。 ソースの方を見てもらえれば分かりやすいかも。 |
|
>>1795 rosegarden > ディレクトリに書いてあるのは大雑把に言って、ファイル名と > i ノード番号です。うーん、他にも書いてあるかも知れない。 ちょっと不正確なので、正しい説明をします。 FreeBSD な人は /usr/src/sys/ufs/ufs/{ufs_vnops.c,ufs_lookup.c,dir.h} あたりを見ると分かります。 ディレクトリは可変長レコードのデータベースみたいになっていて、 *BSD の ufs の場合一つのデータは (1) i node 番号 (4bytes) (2) レコード自体の長さ (2bytes) (3) ファイルのタイプ (1bytes) (4) ファイル名の長さ (1bytes) (5) ファイル名(ただし 4 bytes 単位で切り上げ) となっています。これは dir.h の direct 構造体で定義されています。 struct direct { u_int32_t d_ino; /* inode number of entry */ u_int16_t d_reclen; /* length of this record */ u_int8_t d_type; /* file type, see below */ u_int8_t d_namlen; /* length of string in d_name */ char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */ }; さっきの例で見ると >>1795 rosegarden 00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00 というのがありますが、 84 5e 00 00 : i node 番号 0x5e84 なので 24196 0c 00 : レコードの長さ 12 バイト 04: ファイルのタイプ 04 なのでディレクトリ 01: ファイル名の長さ 1 バイト 2e 00 00 00 : 2e がファイル名 "." あとはつめもの つまり、これは % ls -ai IPv6 24196 ./ 206736 d6.c 206752 ipv6_1.html 206464 ../ 206478 daytime6.pl 206753 ipv6_2.html 206500 d200006c.html 206743 ipv6.html としたときの "." のデータです。 little endian なので例によってバイトオーダがひっくりかえります。 ファイルのタイプは /usr/src/sys/ufs/ufs/dinode.h にあって /* File types. */ #define IFMT 0170000 /* Mask of file type. */ #define IFIFO 0010000 /* Named pipe (fifo). */ #define IFCHR 0020000 /* Character device. */ #define IFDIR 0040000 /* Directory file. */ #define IFBLK 0060000 /* Block device. */ #define IFREG 0100000 /* Regular file. */ #define IFLNK 0120000 /* Symbolic link. */ #define IFSOCK 0140000 /* UNIX domain socket. */ #define IFWHT 0160000 /* Whiteout. */ となっています。これを見るとディレクトリは 0x04 です。 桁数があわないのは、パーミッションも一緒に保持させるためで、 下四桁はパーミッション用です。ファイルのパーミッションは ディレクトリではなく別のところに保持されています。 |
|
はじめあして。 この掲示板スクリプト、すばらしいです。いつも参考にしてます。 いきなりなんですけど、 2ちゃんねるみたいにレス式にするつもりないですか。 今のままだと、レスが分散してみにくいし、 それゆえ1つの話題に(2chみたいに)何百とレスつけるのは無理だし。 とゆーことで。 |
|
2ちゃんねるみたいに 「あげ」だの「さげ」だの「逝け」だの「氏ね」だのという書き込みは 見たくないです。 2ちゃんねるの何百というレスの半数は、そういった 「意味不明の書き込み」のように思えます。 そのようなレスを数多く書き込むよりも、今までのように 要点を的確に書いて頂いた方が、情報を得る側としてはありがたいです。 ここには検索機能もありますから、自分に必要な情報は 検索して探し出せば良いことですし、それで見つからなかった場合は 質問をすれば良いと考えています。 今のままでかまわないと思うのですが、常連の皆様方はどうですか? |
|
>>1797 rosegarden rosegardenさんには自明のことかもしれませんが。 ls -lで見えるサイズが、各ファイル(ディレクトリもファイル) に対応するi-node内のサイズ情報を見ているのは、 rosegardenさんの説明のとおりです。 ディスク上の割り当てが(効率の為に)ブロック単位で行われるのも rosegardenさんの言うとおりです。 普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの オフセットで決まります。 8192バイトseekして1バイト書き込むとサイズは8193バイトです。 seek部分がカラだとブロックは割り当てられません。 俗に穴のあるファイルと呼ばれます。 ディレクトリの場合、i-node内のサイズ情報は割り当てられたブロックサイズ そのものです。 理由は単に、本当のサイズ(が定義できたとしても)たいして意味がないからでしょう。 |