68user's page 掲示板

Prev< No. 1975〜2249> Next  [最新発言に戻る] [過去ログ一覧]
No. 1975 # ENO [URL] 2001/05/21 (月) 20:42:57
はじめまして、ENOと申します。

質問その1:

FreeBSD4.2で、ENIのatmアダプタを認識させ、
en0というインタフェースが出来たのですが、
これをmulticastに対応させたいのですが、
en0=841<UP,RUNNING,SIMPLEX>mtu 9180
となっていて、対応してくれません、
ここに<....,MULTICAST>となるようにするに
は、どうしたらよいのでしょうか・・・どな
たか教えてください

その2:
その1のマシンで、mroutedを動かして、マル
チキャストルータとしたいのですが、webのあ
ちこちにある資料にあるように、デフォルトで
mrouted_enable="YES"としても、動いてくれま
せん。mroutedを動く状態にするまでにどうした
らよいのか教えてください

宜しくお願いいたします

No. 1976 # isaq [E-mail] 2001/05/21 (月) 20:44:46
はじめて質問させていただきます。
本ページで色々勉強させて頂いてます(感謝)

当方のレベル)初心者
winsockを用いたマルチスレッドクラサバ作成調査中
クライアント・サーバ間の通信確立方法の基本は理解(してるつもり)

内容)
クライアントからの接続要求が複数同時に(理論的に全く同時はありえないかもしれませんが)サーバにきた場合、サーバ側のリクエスト待ちプロセス内のlisten関数は、どのようにこの要求を処理するのでしょうか?つまり、全く同時のアクセスに対して、listen関数が作る待ち行列(キュー)にはどう格納されるのでしょうか?
要求受付後は、各クライアント毎に処理を並行に行う(マルチスレッド)
ことができますが、要求受付部のlisten関数はマルチ対応なのかどうか
、前出の全く同時の接続要求はどう処理されるのかが分からないので、ご存知の方が、是非ご教授いただければありがたいです。
質問内容が初歩的かもしれませんが、よろしくお願いしますm(__)m

No. 1977 # 68user 2001/05/22 (火) 15:14:41
>>1975 ENO
マルチポストは禁止です。
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse

>>1976 isaq
要は、listen が thread safe かどうか、ということでしょうか?

複数のスレッドが同時にクライアントとの接続を取り合ったりしないのか? と
いう意味かと思いますが、listen は OS へ「クライアントからの接続を受け
付けなさいと」命令するだけです。それに対して、accept は OS がキュー
イングしておいた待ち行列から、先頭のクライアントを取り出す命令。

というわけで、listen や accpet のマニュアルを見て、thread safe か
どうかを確かめましょう。

FreeBSD ならばマニュアルに
      http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=listen&dir=jpman-4.3.0%2Fman

      非スレッドライブラリ listen() は listen システムコールとして実装されています。

      スレッドライブラリでは、 listen システムコールは _thread_sys_listen() に
      アセンブルされ、 listen() は読み書きについて s をロックしてから、
      _thread_sys_listen() を呼び出す関数として実装されています。戻る前に
      listen() は s をアンロックします。
とあります。Windows は知りませんが、マニュアルに書いてあるのでは
ないでしょうか。

あるいは、「スレッド」という用語を、pthread などの thread でなく、
単に「並行動作」という意味で使ってますか?

No. 1978 # skel.103M [E-mail] 2001/05/22 (火) 23:34:53
skel.103Mです。いつもお世話になっております。

さて、
http://X68000.startshop.co.jp/~68user/Cgi-room/
の「MXレコードのお話」についてですが、質問させていただきたい
ことがあります。

メールアドレスは、「{ユーザー名}@{ホスト名}」という構成をし
ていますが、この{ホスト名}の部分に記述されたホストが実際に存
在する場合、即座に(MXレコードを参照せずに)そのホストに送ら
れるのでしょうか。それとも、{ホスト名}に記述されたホストが実
際に存在したとしても、存在しないホストと同様に、まずMXレコー
ドを参照し、その結果現れたホストに送られるのでしょうか。

先述したページを読むと、{ホスト名}の部分が存在しない場合に*のみ*、
MXレコードを参照し、その結果現れたホストに送られるものである、
と書いてあるように思えました。実際、これは(少なくとも私にとっ
ては)直感に反しないことで、そうなのかなと納得してました。と
ころが、某メーリングリスト宛てのメールが私に届きまして、ヘッ
ダを見ると、To: の欄のメールアドレスのホスト名の部分(@より右側)が
実際に存在するホスト名であるにもかかわらず、Received: にその
ホスト名が載ってない?!…ということがありましたので。

No. 1979 # isaq 2001/05/23 (水) 11:45:13
68user殿

ご指摘の通り、listenがthread safeかどうかが知りたかったわけです。
教えていただいたURL参考にさせていただき、もう一度調べ直してみて、分からなければ質問させていただきます。
また分かりましたら、報告させていただきます。
分かりにくい質問を投げてしまったけれど、お返事ありがとうございました。

ちなみに、OS:Windows 2000 でクラサバ開発しているのですが、私が使っているwinsock関連書籍で
”WinSock2.0プログラミング 発行:ソフトバンクパブリッシング”
というのがあリます。もしwinsockを初めて使おうとしている方がいましたら一読すると良いかもしれません。

No. 1980 # 68user 2001/05/23 (水) 12:15:58
>>1978 skel.103M
> この{ホスト名}の部分に記述されたホストが実際に存在する場合、
> 即座に(MXレコードを参照せずに)そのホストに送られるのでしょうか。
    1. IP アドレス直接指定なら、直接 IP アドレス宛に送信 (Ex. To: foo@<127.0.0.1>)
    2. 1 がダメで、MX が引けたなら、優先順位を考慮して MX 宛に送信
    3. 2 がダメで、A レコードが引けたなら (=正引きできた)、A レコード宛に送信
という順序だと思います。なので、MX が優先ですね。

多分、ここらへんは RFC 2821 に書いてあると思います。
# http://ring.riken.go.jp/pub/doc/RFC/rfc2821.txt

No. 1981 # skel.103M [E-mail] 2001/05/23 (水) 16:12:26
どうも、skel.103Mです。ご返答どうもです。

メールアドレスと送信先ホストの件、了解しました。私なりに調べた
ところ、RFC2821の「5. Address Resolution and Mail Handling」で、
> are generally discouraged. The lookup first attempts to locate an MX
> record associated with the name. If a CNAME record is found instead,
> the resulting name is processed as if it were the initial name. If
> no MX records are found, but an A RR is found, the A RR is treated as
> if it was associated with an implicit MX RR, with a preference of 0,
> pointing to that host. If one or more MX RRs are found for a given
> name, SMTP systems MUST NOT utilize any A RRs associated with that
> name unless they are located using the MX RRs; the "implicit MX" rule
> above applies only if there are no MX records present. If MX records
> are present, but none of them are usable, this situation MUST be
> reported as an error.
とありますね。なるほど。ちなみに、RFC974にも似たような記述があり
ましたね(現在はHISTORICですけど)

ただ、分からないのは、なぜこのように定められているのか、その理
由が私にはよく分かりません。。私には直感に反するように思うんで
すが……

No. 1982 # 匿名 2001/05/24 (木) 19:34:23
「ソースを表示してみよう」で、
http://www.chailien.com/
が、正常表示されません。

No. 1983 # 68user 2001/05/24 (木) 20:14:24
>>1981 skel.103M
たとえば UNIX マシンが数百台あるような環境があるとして、
    % hostname
    host123.example.ac.jp
    % whoami
    user
のとき
    % echo | mail foo@bar
などとすると、
    From: user@host123.example.ac.jp
なメールが foo@bar 宛に届きます。

このままリプライをすると host123.example.ac.jp 宛に
メールが送られますが、数百台全てのマシンに SMTP
サーバを立ち上げておくのは現実的ではありません。

で、それらの MX を mail.example.ac.jp に指定しておけば、
    From: user@host123.example.ac.jp
であっても MX 宛に届きます。もちろんその際には MX レコードが
A レコードより優先されなければいけません。

…という感じで僕は理解しておりますが、いかがでしょうか。

>>1982 匿名
どうもです。直しました。

No. 1984 # skel.103M [E-mail] 2001/05/24 (木) 21:45:19
skel.103Mです。68user様、ご返答どうもです。

>>1983 68user
なるほど!よく分かりました。

そこで、実際にそうなっていることを確かめるために、某ネットの
(すなわち大学以外の)マシンを使って以下の要領で実験を行って
みました。

・送信元ホスト:test.bounet.net
・宛先メールアドレス:s1080224@exist.u-aizu.ac.jp
        正式なメールアドレスではなく、@の右側を実際に存在するホスト
        名に改竄。

結果は以下のようになりました:
----------
1. まずMXレコードを調べておく。
        →@exist.u-aizu.ac.jpのアドレスに対応するMXレコードは
            mailhost.u-aizu.ac.jpである。
[bounet] % nslookup
Default Server: localhost
Address: 127.0.0.1

> set q=mx
> exist.u-aizu.ac.jp.
Server: localhost
Address: 127.0.0.1

Non-authoritative answer:
exist.u-aizu.ac.jp preference = 10, mail exchanger = mailhost.u-aizu.ac.jp

Authoritative answers can be found from:
…(省略)…
[bounet] %

2. メールを送信。
[bounet] % telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.bounet.net.
Escape character is '^]'.
220 test.bounet.net ESMTP Sendmail 8.11.3/***************; Thu, 24 May 2001 20:47:40 +0900 (JST)
EHLO localhost
250-test.bounet.net Hello localhost.bounet.net [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
MAIL FROM: testerz@bounet.net
250 2.1.0 testerz@bounet.net... Sender ok
RCPT TO: s1080224@exist.u-aizu.ac.jp
250 2.1.5 s1080224@exist.u-aizu.ac.jp... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: test
X-Mailer: telnet JiKaUcHi (^^;;;

This is a test mail.
.
250 2.0.0 f4OBm4K02587 Message accepted for delivery
quit
221 2.0.0 test.bounet.net closing connection
Connection closed by foreign host.
[bounet] %

3. 送信ログを確認する。
        →配送先はexist.u-aizu.ac.jpでは*なく*、MXレコードとして指定され
            ているホストmailhost.u-aizu.ac.jpに配送された。
May 24 20:50:34 test sendmail[2587]: f4OBm4K02587: from=testerz@bounet.net, size=**, class=0, nrcpts=1, msgid=<200105241149.f4OBm4K02587@test.bounet.net>, proto=ESMTP, daemon=Daemon0, relay=localhost.bounet.net [127.0.0.1]
May 24 20:50:41 test sendmail[2596]: f4OBm4K02587: to=s1080224@exist.u-aizu.ac.jp, ctladdr=testerz@bounet.net (****/****), delay=00:01:22, xdelay=00:00:07, mailer=esmtp, pri=30069, relay=mailhost.u-aizu.ac.jp. [163.143.1.43], dsn=2.0.0, stat=Sent (UAA23329 Message accepted for delivery)
----------

たしかに、MXレコードがAレコードより優先されていますね。

どうもありがとうございました。
これからもよろしくお願いします!

No. 1985 # へにか [URL] 2001/05/26 (土) 01:10:55
お久しぶりです。

ちょっと思うところがあって、掲示板の検索をしたのですが、ふと疑問が出てきました。

http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard/namazu.cgi?query=http&whence=0&max=20&result=normal&sort=score
とかしますと、>とか<とか"とかが、&gt;とか&lt;とか&quote;と表示
されるみたいです。これは、仕様ですか?

あと、同じページの最後に、webmaster@www2.startshop.co.jp と
ありますが、このwww2は、http://x68000.startshop.co.jp/~68user/
から推測するに、間違いなのではないですか? 違ったら済みません。

No. 1986 # 2001/05/26 (土) 15:34:16
初めて書き込みさせていただきます。

和文で,改行を空白に置換する方法を
ご存知の方はいないでしょうか。

例)
おはよう
こんにちは
こんばんは

おはよう こんにちは こんばんは


目的は,ウェブページのフォームから送られた文章を,
表示するページの都合で,改行無しの文に変更することです。

よろしくお願いいたします。

No. 1987 # 通りすがり 2001/05/27 (日) 11:51:35
>>1986
HTMLならば加工するまでも無く改行が無視されますが?

No. 1988 # 68user 2001/05/27 (日) 19:51:08
>>1985 へにか
> &gt;とか&lt;とか&quote;と表示されるみたいです。これは、仕様ですか?
いえ、正しくは < > " と表示されるべきです。この掲示板の
データ用の文書フィルタ
    http://www.namazu.org/doc/manual.html#doc-filter
を作成したのですが、それが不十分な状態です。

> あと、同じページの最後に、webmaster@www2.startshop.co.jp と
> ありますが
こちらも正しくは 68user@X68000.startshop.co.jp です。これは…
どこで設定するんだっけ。なんかコンパイル時に埋め込まれるような
気がしないでもないなぁ。

両方とも調べて直しておきます。ご指摘ありがとうございました。

>>1986
> 目的は,ウェブページのフォームから送られた文章を,
> 表示するページの都合で,改行無しの文に変更することです。
ちゃんと使っている環境を書きましょう。perl なら
    $str =~ s/\r\n|\n/ /g (半角空白に置換したい場合)
    $str =~ s/\r\n|\n/ /g (全角空白に置換したい場合)
でしょうか。

No. 1989 # gooo 2001/05/30 (水) 10:30:04
初めて書き込みします。

UNIXのシステム音のビープ音の音量を大きくしたいのですが、どうすれば
いいのでしょう。CDEデスクトップツールでビープ音の調整というのがあっ
たのですが、その最大値よりもさらに大きくしたいと思ってます。

このビープ音は内部スピーカーから鳴っている様で、もし音量を調整でき
ないのであれば内部スピーカーを外部スピーカーに切り替える方法を知り
たいのですが、誰か分かる人いませんか。

どうぞよろしくお願いします。

No. 1990 # ふくし 2001/05/30 (水) 15:52:58
いつも困ったときばかり相談ですみません。

#! perl

...

for (sort {&year($b) <=> &year($a)} glob './bank*.txt') {
        my $foooo = &year($_);
        warn ":::: [$idat2] vs [$foooo]";
        if ($idat >= $foooo) {
                warn "!!!!:::: [$idat2] >= [$foooo]";
                open BANK, $_ or die "can't open $_ because $!";
                last;
        }
}

という文が CGI の中にあって、
エラーログに

:::: [20010730] vs [20010701] at /html/cgi-bin/foo.cgi line 319.
:::: [20010730] vs [20010601] at /html/cgi-bin/foo.cgi line 319.
:::: [20010730] vs [00000000] at /html/cgi-bin/foo.cgi line 319.
!!!!:::: [20010730] >= [00000000] at /html/cgi-bin/foo.cgi line 321.

と出ます。

20010730 対 20010701 の時点で 20010730 が勝つと思うのに納得いきません。
助けてください〜

No. 1991 # ふくし 2001/05/30 (水) 16:10:46
試みに s/>=/ge/ してみたら(ゼロづめなので文字として比較しても同じかと思って)、

:::: [20010530] vs [20010701] at /html/cgi-bin/foo.cgi line 319.
!!!!:::: [20010530] ge [20010701] at /html/cgi-bin/foo.cgi line 321.

だそうです。(T.T)

No. 1992 # ふくし 2001/05/30 (水) 17:42:11
すっすいませんでした。
過去の2発言、忘れてください。
(文字面で、もういきなりバグってます)

No. 1993 # 2001/05/30 (水) 22:45:51
>>1987 通りすがり
> HTMLならば加工するまでも無く改行が無視されますが?
すみません。意味がわかりませんでした。

>>1988 68user
> ちゃんと使っている環境を書きましょう。
すみません,忘れていました。
使い方も読んでいなくて,申し訳ありませんでした。今後は気を付けます。
ご推察の通り,環境はperlです。
$str =~ s/\\n/ /g
なんて自分で書いて試してみたらできなかったので
書き込ませていただいたのです。
今回,
$str =~ s/\r\n|\n/ /g
で,試してみたのですが,上手くいきませんでした。
でも,基本的に考え方は間違っていなかったようだと
わかったので助かりました。
もしかしたら,プログラムの他の部分に問題があるのかもしれません。
チェックし直してから,報告させていただきます。

No. 1994 # PC歴5ヶ月 2001/05/31 (木) 15:27:32
このページは、めちゃくちゃためになりますね。
今後も参考になることをやってくれるとありがたいっす。

No. 1995 # といも 2001/06/04 (月) 11:58:38
このページのおかげで,ネットワーク全体が見えてきました.
本当にありがとうございます.
これからも参考にさせていただきたいので,
このHPがずっとなくならないことを心よりお願いいたします.
これからも頑張ってください.

No. 1996 # 68user 2001/06/05 (火) 22:25:03
どうも忙しくて回答さえ満足にできませんな。いかんことです。

>>1989 gooo
> もし音量を調整できないのであれば内部スピーカーを外部スピーカーに
> 切り替える方法を知りたいのですが、
最大限に上げたのならもう音量は調節できないでしょう。
後はハード工作になるんですかね。その方面は全くわからないので、
すいませんがわかりません。

>>1990 ふくし
>>1991 ふくし
>>1992 ふくし
えっと、解決したんですよね?

>>1994 PC歴5ヶ月
>>1995 といも
どもども。とはいえ時間がなくて更新も満足にできないのですが。

No. 1997 # ED 2001/06/06 (水) 00:44:07
>68userさん
Sega BBSの件なんですけど、
消去が時間かかりそうだったら、
とりあえずロボット検索に
引っかからないように、しといてほしいのですが…
早めにお願いします。
http://www.google.com/intl/ja/faq.html
お忙しいところすいません。
よろしくお願いします。

No. 1998 # 田中 2001/06/06 (水) 00:51:35
初めまして。質問です。

ホームページ本体を置くサーバー(A)とCGIサーバー(B)が別になっていて、
サーバーAにあるHTMLファイルからサーバーBにあるCGIを呼び出し、
サーバーAにある別のファイルの情報を取得するため、以下のように記述しました。

open FH ,"http://www.abc.co.jp/xyz/index.html" or die "open失敗:$!";

しかし、うまくファイルをオープンすることができませんでした。
パスを相対的に指定すれば成功するのですが、絶対的に指定すると、
CGIサーバー内であってもオープンできません。
これはこういう仕様なのでしょうか。
そうだとすれば、他にいい方法はあるのでしょうか。(被参照ファイルをサーバーBに置く以外で)
ご回答をよろしくお願いいたします。

No. 1999 # 68user 2001/06/06 (水) 01:44:16
>>1997 ED
ロボットよけ META タグを追加しました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/view-segabbs.cgi.diff?r1=1.3&r2=1.1&f=h
時間が取れたらコンテンツ自体を削除します。

>>1998 田中
> open FH ,"http://www.abc.co.jp/xyz/index.html" or die "open失敗:$!";
open というのはファイルをオープンするもので、ファイルいうのは
マシンに接続されている HDD や CD-ROM に格納されているものを
指します。
# っていうととても語弊がありますけど。将来的にはそういう指定の
# 仕方ができるようになるんじゃないかと思います。

なので、それをしたければサーバ B で動かすプログラムから
サーバ A の web サーバにアクセスして
    http://www.abc.co.jp/xyz/index.html
を取得しなければいけません。仕組みについてはここらへんを。
    http://X68000.startshop.co.jp/~68user/net/

実際は wget, fetch などのコマンドや、(perl なら) LWP,
IO::Socket などのモジュールを使ってサーバ A から /xyz/index.html を
取得するのがお手軽です。

No. 2000 # 田中 2001/06/06 (水) 07:39:41
68userさん、素早い回答をありがとうございました。
教えて頂いたやり方は、私にはまだ高度すぎるようです。
もう少し勉強してみます。

No. 2001 # 初男 2001/06/07 (木) 10:32:32
はじめまして。初男と申します。

質問があります。
あるシェルスクリプトを実行し成功するのですが、
remshを使って、
remsh 自分のサーバ名 -n スクリプト名
として、実行すると、sortの処理でエラーが出てしまいます。
sortは、remshを使うとどうしてエラーになってしまうのでしょうか?
ご存知の方は教えていただきたいと思います。

よろしくお願いします。

No. 2002 # 68user 2001/06/07 (木) 20:24:28
>>2001 初男
具体的にどういう書き方をしていて、どういうエラーが出ていますか?

No. 2003 # 初男 2001/06/08 (金) 11:54:34
68userさん、お返事ありがとうございます。

あのあと、調査して、原因がわかりました。
ありがとうございました。

No. 2004 # boo 2001/06/11 (月) 18:05:25
はじめまして!僕はUNIXなどのプログラム関係は全く理解できなかったのですがこちらのサイトではとてもわかりやすく説明されているため大変勉強させていただきまことに感謝いたしております。これからも応援いたしますのでがんばってください。

No. 2005 # ネットワークセキュリティ [E-mail] 2001/06/12 (火) 10:38:08
はじめまして。初訪問で初投稿です.宜しくお願いします.
現在、[A装置]−[Router]−[B装置](簡単に記述)で接続した環境で、RouterにてIP Filteringの設定を追加しようとがんばっています。[A]→[B」は、RCPによるファイルの送受信を行っているため、RCP以外のアプリケーションプロトコル(Telnetとか)を遮断する方法を探しております。
まずは、「全アプリケーションプロトコル遮断」として、「RCPだけ通過」という方法を取ろうと思っているのですが、【RCPのポート番号】が不明です.【RCP】は、Welknown-portではないのでしょうか?UNIXがその都度ポート番号を取得してしまうのでしょうか?ご存知の方教えて下さい.

No. 2006 # 68user 2001/06/12 (火) 14:19:12
>>2005 ネットワークセキュリティ
> 【RCPのポート番号】が不明です
shell 514/tcp です。

こういう場合はサイズの大きなファイルを rcp しておいて、
その間に netstat -a を実行すればよいでしょう。

No. 2007 # hsj 2001/06/12 (火) 15:39:45
>>2005 ネットワークセキュリティ
蛇足ですがセキュリティを気にするのなら
r系のコマンド自体使わない方が良いかと思いますが・・・。

No. 2008 # もっち 2001/06/12 (火) 17:54:27
はじめまして。もっちと申します。
いつも参考にさせていただいています。

はじめて投稿させていただきます。

http⇔https(https⇔https)のsocket通信をC言語で実現させたいのですが、
情報が無い為、何をどうすれば良いのかわかりません。
http⇔httpの通信はこちらのホームページを参考にさせていただいて、
実現することが出来ました。(ありがとうございます)

いろいろ情報を検索して、opensslを使用すれば良いということまでは
わかったのですが、それをどの様に使用すれば、暗号化が行われ、
通信を行い、受信データを複合できるのかわからず、悩んでおります。
情けないのですが、私には余りC言語での開発経験がありません
(普段はPerlを使用しています)
ですので、余計に訳がわからなくなってきております。

どなたか、この問題に関する情報をお持ちの方、いらっしゃらないでしょうか?

開発環境は、Solaris SunOSです。
opensslなど、必要と思われるものは準備されております。
(他に必要なものなどあれば、それも併せて教えていただければ幸いです)

どうぞ、よろしくお願い致します。

No. 2009 # 68user 2001/06/12 (火) 18:17:36
>>2008 もっち
僕には難しいことはわかりませんが、とりあえず
    OpenSSL のマニュアル
        http://www.openssl.org/docs/ssl/ssl.html
    OpenSSL 和訳サイト。古いかも。
        http://www.infoscience.co.jp/technical/openssl/docs/ssl.html
    SSLを使った暗号化通信のやり方
        http://stingray.sfc.keio.ac.jp/security/ssl/ssl.html
    RFC 2246 TLS-1.0 (≒ SSL-3.0)
        http://ring.asahi-net.or.jp/archives/doc/RFC/rfc2246.txt
ここらへんを参考にしてみて下さい。

No. 2010 # もっち 2001/06/12 (火) 19:04:50
>>2009 68user

68user様、早速のご返答ありがとうございます!!

>OpenSSL のマニュアル
の方は、私のほうでも見つけていたのですが、何を書いているのか
理解出来ず、挫折していました。

>SSLを使った暗号化通信のやり方
早速行ってきました。
まだ、詳細まで読んでいませんが、説明がスゴク丁寧で、
私の知りたかった関数の説明までされていて、私のようなC言語未熟者にも
理解できそうな気がします。

教えていただいたサイトを参考にして、実現できる様、頑張って見ます。

実現出来次第、報告に伺います!!

No. 2011 # koji(改称) 2001/06/13 (水) 11:44:46
「ネットワークセキュリティ」の件
>>2007 hsj
    hsjどの
    ご指摘の通り、R系のコマンドを使用している時点でセキュリティに問題ありとは認識しています。。。先にこっちを対応すべきかもしれませんね。参考にさせていただきます。
>>2006 68user
    68userどの
    ポート番号の件ありがとうございます。
    さっそく、設定値反映して確認します。確認結果は後日ご報告します。

No. 2012 # help 2001/06/14 (木) 01:04:17
初めまして、すごく初心者の者です。
早速質問なのですが、HTTPでは要求などを文字列として送ってるだけなのでしょうか。つまり GET /test/test.html HTTP/1.0 などの文字列を相手に送ってるだけでしょか。
相手側では、その文字列を受け取って、Javaのtokenizerとかで、文字を切り出して
s1="GET"
s2="/test/test.html"
s3="HTTP/1.0"
if(s1.equals("GET"){}
でプログラムで処理して結果をクライアントに文字列で返して、
またブラウザが文字列を切り出して、レイアウトしているだけでしょか。
だから、自分でも送られてくる文字列を受けることができて、文字列を見れて、また、HTTPで文字列を返すプログラムが書けるのでしょうか。

また、こんな質問を受け付けてる掲示板をご存知でしたら教えてください。

No. 2013 # 金床 [URL] [E-mail] 2001/06/14 (木) 19:02:08
こんにちは、お邪魔します。

>HTTPでは要求などを文字列として送ってるだけなのでしょうか。
そうです。人間が見て理解できるので楽しいですよ。

>相手側では、その文字列を受け取って、Javaのtokenizerとかで、文字を切り出して
相手側=WWWサーバーと考えると、おっしゃる通りだと思います。
受け取った文字を解釈して、レスポンスを(画像だったりもしますので全て文字列とは限りませんが)ブラウザに送ります。
ブラウザは、受け取ったデータがHTMLの場合はそれを解釈して(文字列を切り出して)レイアウトして表示します。

>だから、自分でも送られてくる文字列を受けることができて、文字列を見れて、また、HTTPで文字列を返すプログラムが書けるのでしょうか。
書けます。
偶然、先日「まさにそれ」というような物を書いたので、良かったら見てみて下さい(だからノコノコ出てきてしまいました)。
http://www.gyosatu.com/jumper/software/MHTTPD/MHTTPD.java

http://www.gyosatu.com/jumper/cgi-bin/bbs/bbs2.pl?bbs=jumper&i=110#3
に、コンパイルと起動の仕方をごく簡単に書いてあります。
#もし分からなくてかつ動かしたかったら言って下さい。

まさに
>if(s1.equals("GET"){}
のような処理をしている筈です。

受け取った文字列を見えるように改造するのも簡単だと思います。

>また、こんな質問を受け付けてる掲示板をご存知でしたら教えてください。
ここが適切だと思います。

No. 2014 # スナフキン 2001/06/14 (木) 22:16:42
またまたお世話になります。

bash上で以下のようにすると、

# tail -f anylog.log

ログに追加される内容が逐次見られますが、コレをちょっと変更して

# tail -f anylog.log | grep "extract_keyword" > /dev/tty0 &

として、ログインしていないコンソールに表示させようとしましたが、
jobs で表示されないため、停止が出来なくなりました。
ps で見てみると、プロセスの親子関係が無くなっているように見えます。
これはどうしてなんでしょうか?

また、このコマンドを実行したコンソールがログアウトした時に
同時に終了させたいのですが、どう指定すればいいでしょうか。

アドバイスをよろしくお願いします。

No. 2015 # nana 2001/06/15 (金) 18:10:16
こんにちは。
私は今ソケットを使ったプログラムを作成していて、
いろいろ調べてたら、このサイトが見つかり非常に助かってます。
そこで質問なのですが以下のURLよりDLしたものをコンパイルし、
実行するとコアダンプしませんか?

http://www2.startshop.co.jp/~68user/net/sample/http-client-2.c

私はWindows2000(Cygwin)でもSolarisでも
コアダンプしました。
最初は自分でかなりいじってしまったので、
そのせいかなぁとも思ったのですが、
DLしたものをそのまま使ってもなっちゃいました。
今、修正しようと思ってるのですが、
なかなかうまくいきません。
どなたか知ってる方いらっしゃいませんか?
教えて下さい。
よろしくお願いします。

No. 2016 # 68user 2001/06/15 (金) 20:15:16
>>2014 スナフキン
> # tail -f anylog.log | grep "extract_keyword" > /dev/tty0 &
> として、ログインしていないコンソールに表示させようとしましたが、
> jobs で表示されないため、停止が出来なくなりました。
こちらの環境の bash では、jobs で表示できました。
関係ないかもしれませんが、
    % (tail -f anylog.log | grep "extract_keyword" > /dev/tty0) &
だとどうなりますか?

> また、このコマンドを実行したコンソールがログアウトした時に
> 同時に終了させたいのですが、どう指定すればいいでしょうか。
bash で & を付けると、SIGHUP をブロックしてしまったような
気がしますが…。違ったっけ。回避策は知りません。bash 使いの
方、いらっしゃいますか?


>>2015 nana
> 以下のURLよりDLしたものをコンパイルし、実行するとコアダンプ
> しませんか?
こちらの FreeBSD, Solaris, Linux 環境ではコアダンプしません
でした。引数はどのように指定しましたか? また、-g を付けて
コンパイルして、gdb で backtrace するとどう表示されますか?

    % gcc -g -o http-client-2 http-client-2.c
    % gdb http-client-2
    (gdb) run http://www.yahoo.co.jp/index.html
    Starting program: http-client-2 http://www.yahoo.co.jp/index.html

    Program received signal SIGSEGV, Segmentation fault.
    0xef5a4674 in strlen () from /usr/lib/libc.so.1
    (gdb) backtrace
    #0 0xef5a4674 in strlen () from /usr/lib/libc.so.1
    #1 0xef776b74 in _doprnt () from /usr/ucblib/libucb.so.1
    #2 0xef777aa4 in printf () from /usr/ucblib/libucb.so.1
    #3 0x11320 in main (argc=2, argv=0xeffffac4) at http-client-2.c:108

# 今気づきましたが、引数に「http://」を指定したときに
# エラーで弾かないのはバグですね。

No. 2017 # aiko 2001/06/15 (金) 20:42:19
早速質問なのですが、
MACアドレスとIPアドレスの両方が必要な理由を教えてください。
あと、windowsのDOSでarp -aとタイプしてもNO ARP Entries Foundと出てしまうのは、なぜですか。どういったときに、テーブルにMAC,IPの対応がたされるのですか。www.goo.ne.jpとかにアクセスしただけではだめなのですか。
通信するときに,最初IPアドレスでその通信相手のマシンからMACアドレスの情報を得て、それからまた、パケットにIP,MAC両方のアドレスをつけて、また、その相手のマシンにパケットを送るのは、無駄じゃないですか。
あと、初心者がネットワークエンジニアになるための勉強に、お勧めの参考書、ホームページ、どのようなステップをふめばいいか、皆さんの意見、経験を教えて下さい。

No. 2018 # 68user 2001/06/15 (金) 22:04:53
>>2017 aiko
> windowsのDOSでarp -aとタイプしてもNO ARP Entries Foundと
> 出てしまうのは、なぜですか。
Ethernet カード (=ネットワークカード=NIC) を使っていますか?
MAC アドレスは Ethernet カードに対して割り振られるもので、もし
ダイヤルアップ PPP を利用していたら arp テーブルは全く利用されません。

> MACアドレスとIPアドレスの両方が必要な理由を教えてください。
IP データグラムの最大長は 64K バイトですが、Ethernet フレームの
最大長は 1500 バイト程度です。64K バイトの IP データグラムを
Ethernet 上で送信する場合、数十個の Ethernet フレームに分割
しなければいけません。

宛先 IP アドレスが書いてあるのは IP データグラムの先頭だけなので、
分割した途中の Ethernet フレームを見ても、宛先 IP アドレスは
わかりません。つまり Ethernet というレイヤでは、通信先を特定
のに IP アドレスが使えないわけです。ここに MAC アドレスの
存在理由があります。

より根本的には、Ethernet というのは IP に特化したものではないから、
というのが説明になるでしょう。例えば ADSL で使われている PPPoE
(PPP over Ethernet) がその一例です。

# http://www.rtpro.yamaha.co.jp/RT/docs/pppoe/

No. 2019 # aiko 2001/06/15 (金) 22:51:03
>>2018 68user
>64K バイトの IP データグラムを
>Ethernet 上で送信する場合、数十個の Ethernet フレームに分割
>しなければいけません。
結局は、分割したEthernetフレームの1個1個にMACアドレスがたされるということですか。もしかして、そのEthernetフレームにIPアドレスを1個1個つけてもいいけど、IPアドレスの大きさが保証されてないから(IPv6に変わったり)、Ethernetフレームのアドレス用の領域分(フレーム構成)が、IPアドレスの大きさが変わった場合に影響受けるのは、階層的?にまずいということですか。
だから、IP(プロトコル)とは別に、LAN上では、独自のプロトコルでフレーム構成を決めて、MACアドレスで配信してるということですか。

>Ethernet カード (=ネットワークカード=NIC) を使っていますか?
自分の環境って関係ないんじゃないですか。だって相手のMACアドレスが知りたいわけだから。自分は、Laneed LD-10/100AWLとかいうカードで、ハブにつないで、LANに接続してます。
あと、MACアドレスを問い合わせない通信ってあるんですか。
IPデータグラムって、自分のマシンから出て行くときに絶対Ethernetフレームに分解されて出て行くんですか。

ネットワークって難しいですね。是非、勉強方法など教えてください。

No. 2020 # 68user 2001/06/15 (金) 23:20:39
>>2019 aiko
> 結局は、分割したEthernetフレームの1個1個にMACアドレスが
> たされるということですか。
そうです。IP データグラムのヘッダに送信先 IP アドレスと
送信元 IP アドレスがあるように、Ethernet フレームのヘッダにも
送信先 Mac アドレスと送信元 Mac アドレスが付いています。

> IPアドレスの大きさが保証されてないから (IPv6に変わったり)、
> Ethernetフレームのアドレス用の領域分(フレーム構成)が、
> IPアドレスの大きさが変わった場合に影響受けるのは、
> 階層的?にまずいということですか。
まぁそうですね。もし Ethernet が IPv4 べったりな規格だったら
IPv6 は実現しなかったでしょう。各レイヤ間ができるだけ依存
しないように考えた結果、柔軟性が生まれたのです。ちなみに
Ethernet の上に載せられるプロトコルには、IP の他に Xerox XNS や
Novell IPX などもあります。

> 自分の環境って関係ないんじゃないですか。だって相手の MAC
> アドレスが知りたいわけだから。
Ethernet を使っていないなら Mac アドレスは全く使いません。
arp -a でテーブルが空だった理由はわかりません。時間が
経過したためキャッシュを破棄したのかもしれないし、そうで
ないかもしれない。

> あと、MACアドレスを問い合わせない通信ってあるんですか。
IP データグラムを送るという前提なら、必ず Mac アドレスを
知らなくてはいけないでしょう。

# 強いて言えば、ARP プロトコルは Mac アドレスを問い
# 合わせるためのプロトコルだから、ARP を投げる前に
# Mac アドレスを問い合わせることはありませんね。

> IPデータグラムって、自分のマシンから出て行くときに絶対
> Ethernetフレームに分解されて出て行くんですか。
Ethernet を利用していないなら、それは間違いです。もし
Ethernet を利用しているならば、IP データグラムは必ず
Ethernet フレームに載せられて流れていきますが、サイズが
小さければ分割はされません。

> 是非、勉強方法など教えてください。
概要を知るにはこれ
    http://www.ohmsha.co.jp/data/books/contents/4-274-06257-0.htm
プログラミングするならこれ
      http://www.mmjp.or.jp/pearsoned/washo/network/wa_net28-j.html
がお勧めではないかと思います。

No. 2021 # 68user 2001/06/15 (金) 23:35:47
>>2019 aiko
あと、Ethernet と IP では、役割が違います。Ethernet はセグメント内
(ルータから先は別セグメント) の通信を保証するレイヤ (データリンク層)。
ルータから先は Ethernet の管轄外です。

で、IP はエンドツーエンドの通信を保証するレイヤ (ネットワーク層)。

ついでに言うと、TCP は IP のような細切れなパケットでなく、連続した
ストリームを送ることを保証するレイヤ (トランスポート層)。

バカ HUB やツイストペアケーブルは、端点 (って言うのかな?) から
端点へ正常な信号を送ることを保証するレイヤ (物理層)。

# ここで書いた各層の役割は、僕が勝手に考えたもので、OSI 参照
# モデルの定義とは違います。
# http://home7.highway.ne.jp/dayan/tips/unix/tcp.html

No. 2022 # スナフキン 2001/06/16 (土) 01:27:30
>>2016 68user
何の事は無い、あっさり解決しました。()の動作はperlと同じなのですね。
(というよりperlがシェルに似せたのだと思うけど)
ps での表示で親子関係表示されました。
今後詰まった時、とりあえずperlでの記述を真似てみます(笑)

同時に終了の件は、考えてみればそこまでやるなら各種デーモン類の
起動法を真似ればいいかも、なのでとりあえずコレで良しとします。

ともかく、ありがとうございました。
ちなみにこのスクリプトは、自宅で公開しているサーバーでのログ監視
に利用しています。

ついでに、といってはなんですが、このマシンはサーバーとして利用して
いるので、通常はリモートログインでコンソールからの操作は滅多に行わ
ないため、アイドルが続くとディスプレーが非表示モード(でいいのかな)
になります。
BIOS関係かなとも思いますが、Windowsも同居しているのでできればOS側で
対処できないかと考えています。
変更箇所もしくはポインターを教えてもらえれば幸いです。

No. 2023 # rosegarden 2001/06/16 (土) 02:46:06
こちらでは、お久しぶりです。

>>2016 68user
68user さんは、お気づきだろうと思うので、蛇足ですが。
私の方では core を吐きました。多分、path とか URL の長さチェックを
していないからだと思います。

/* genx.c */
#include <stdio.h>

int
main(int argc, char *argv[])
{
                int i;

                for (i = 0; i < 1000; i++)
                                putchar('x');

                return 0;
}

こんなプログラムを作って、
% ./http-client-2 http://www.yahoo.co.jp/`./genx`.html
としたら signal 10 を受けて core を吐きました。

# 個人的にはこの程度のサンプルで、長さチェックまでやるのは
# 本質的な部分が見えなくなるので、今のままで良いかと思います。
# せいぜい、注意をひとこと書けば良いだけだと思います。

>>2015 nana
上記の通りなので、こういうバグ報告の際には引数に与えた文字列とか
環境変数を参照するものは環境変数とかを明示しないと意味がないです。
上記のは core を吐かせるための一例なので、原因は他にもあるかも
知れませんが。

No. 2024 # 68user 2001/06/16 (土) 02:46:59
>>2022 スナフキン
> 何の事は無い、あっさり解決しました。
そうですか、() で囲めば解決しましたか。プロセスグループとか
tty とか、さっぱりわかってないので適当に言ってみたのですが。

> ()の動作はperlと同じなのですね。
open(IN, "(cd dir; foo | bar) |") みたいなのを言ってますか?
perl では、open の引数の先頭か末尾に `|' を付けると、構文
解析なども行わず 丸ごと /bin/sh に投げます。なので、perl の
作りが sh に似ているのではなく、単に sh を利用しているだけです。

> アイドルが続くとディスプレーが非表示モード(でいいのかな)
> になります。
XFree86 ならば xset -dpms とするか、/etc/XF86Config で
BlankTime, StandbyTime, SuspendTime, OffTime などを設定
します。詳しくは XF86Config(5) をどうぞ。

ただのコンソールならば FreeBSD 4.3-RELEASE なら /etc/rc.conf に
    saver="NO"
です。それ以外の環境はわかりません。

>>750 を見ると Vine Linux をお使いのようですが、毎回必ず
環境を書いた方がよいでしょう。

No. 2025 # 68user 2001/06/16 (土) 02:50:49
>>2023 rosegarden
> 68user さんは、お気づきだろうと思うので、蛇足ですが。
> 私の方では core を吐きました。多分、path とか URL の
> 長さチェックをしていないからだと思います。
全然お気づきではなかったです。お恥ずかしい。

「C で書くならここまでちゃんとやらないと」と言えるような
サンプルにしたいので、直しておきます。

No. 2026 # 椎(水明) 2001/06/16 (土) 13:40:52
PerlのCGIで記入した文章において,
改行をスペースに変換する方法を以前お尋ねしました。
その後,いろいろ試してみたのですが,
日本語コード変換直後に
$val =~ s/\r\n|\r|\n/ /g;
を記入することで上手くいきました。
どうもありがとうございました。

No. 2027 # スナフキン 2001/06/16 (土) 15:09:05
>>2024 68user
プロセスグループというのですか、時間があれば調べてみます。
しかし、ホントに良くできていますよね、M$とは大違いだ(笑)

>open(IN, "(cd dir; foo | bar) |") みたいなのを言ってますか?
いえいえ、全体的にです。
自分は、今の所bashしか使っていませんが、スクリプト言語全体に
同じような構文が多いように感じます。(意識的なんでしょうか?)

>環境を書いた方がよいでしょう。
そうですね、これからそう心がけます。
VineLinuxには /etc/rc.conf は無く、/etc/rc.d/ 関係にもそれらしい
記述は見つけられませんでした。いろいろ調べてみます。
ありがとうございました。

No. 2028 # スナフキン 2001/06/17 (日) 03:29:32
>>2022 スナフキン
> 何の事は無い、あっさり解決しました。
すいません、上記の発言は正確では有りませんでした。
正確には、ps での表示にはちゃんと親子関係が表示されましたが、
コマンド jobs には表示されませんでした。
ん〜、親PIDが判る(killできる)のでこれでも可です。

>プロセスグループ
コレ、特有の呼び名かと思いましたが、単純に自分の言っていた親子
関係にあるプロセス群のことを指していたのですね(^^;

No. 2029 # 尚隆 [URL] 2001/06/17 (日) 23:38:15
すみません。ネット初心者です。
くだらないことをおききしたいのですが、、、。
いろいろなホームページをみていたら、かってに
何かわからないのですが、「無料のダウンロードを行いました」
といって、なんだか何もしていないにもかかわらず、
なにかが、ダウンロードされてしまったみたいです。
これによって、個人情報が流れてしまったり、することはあるのでしょうか?なんだか不安です。
アドバイスお願いします。
いろいろ不安になります。

No. 2030 # koni 2001/06/18 (月) 18:03:19
koni と申します。
(環境: ActivePerl v5.6.0 + WinNT)

ワンタイムパスワードについて質問があります。
MD5 を使い認証をしてくるサーバーに Net::FTP を使用して自動 FTP をし
たいのですが、うまく行きません。

詳細は以下です。
※この件に明るくないため、言葉の使用法が誤っているかも知れません。

==
まずは、

# start -----
use Net::FTP;

$ftp = Net::FTP->new("ftp-server-name.co.jp", Debug => 1);
$ftp->login('user', 'pass');
$ftp->quit;
# end -------

などとしたところ、PASS を送信したところで、はじかれてしまいました。
ちなみにこれを ffftp などの MD5 対応のクライアントを使うと、

FFFTP Ver.1.80 Copyright(C) 1997-2001 Sota.
----------------------------
ホスト ftp-server-name.co.jp を探しています.
ホスト ftp-server-name.co.jp (***.***.***.*** (21)) に接続しています.
接続しました.
    :(省略)
>USER user
331 * * *
MD5を使用します.
>PASS [xxxxxx]
230 User user logged in.
>TYPE A
200 Type set to A.
ダウンロードのためにホスト ***.***.***.*** (*****) に接続しています.
接続しました.
>NLST -alL
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
ファイル一覧の取得は正常終了しました. (124 Bytes)
(* の部分は伏せてあります。)

などとなり、接続できました。
個人的には、Net::FTP にこの MD5 を実装するには、上記の USER user をし
たあと、331 の後の値を、Digest::MD5 のメソッドにかませて、戻り値をパ
スワードとして送信すれば OK なのか、と考え、やってみたのですがダメそ
うでした。

もしご存知のかたがいらっしゃいましたら、ご教授願います。

No. 2031 # rosegarden 2001/06/19 (火) 07:33:34
>>2030 koni
> ワンタイムパスワードについて質問があります。
> MD5 を使い認証をしてくるサーバーに Net::FTP を使用して自動 FTP をし
> たいのですが、うまく行きません。
一口にワンタイムパスワードといってもいくつかあるので、
これだけでは分かりません。
しかし、md5 が云々と言うことから、opie じゃないかと思いますが。
私自身 opie も S/key も使ったことがないので、分かりませんが、
> 個人的には、Net::FTP にこの MD5 を実装するには、上記の USER user をし
> たあと、331 の後の値を、Digest::MD5 のメソッドにかませて、戻り値をパ
> スワードとして送信すれば OK なのか、と考え、やってみたのですがダメそ
> うでした。
多分 password を md5 でハッシュしても駄目でしょう。
ワンタイムパスワードの意味がないです。
CPAN に
http://search.cpan.org/search?mode=module&query=opie
という module があるのでトライしてはどうでしょうか?
とにかく、認証方法がワンタイムパスワードとしか分からないので、
これでうまくいくかどうかは保証できません。
上記サイトの module search で S/key とか MD5 とか MD4 で
それらしきものを検索してはどうですか?

でも良いことを聞きました。ありがとうございました。

# web サーバで ftp 使わせているのですが、
# パスワードの保護がどうにかならないかと
# 頭を抱えていたところです。

No. 2032 # snow [E-mail] 2001/06/20 (水) 13:31:30
はじめまして、C言語でFTPクライントを作ろうとここのページを参照させて
いただいたのですが、以下の部分のソースがよくわかりません。
  
  87: while (1){
  88: char c;
  89: c = getopt(argc, argv, "d");
  90: if ( c == -1 ) break;
  91: switch (c){
  92: case 'd':
  93: debug_flg = 1;
  94: argc--;
  95: argv++;
  96: break;
  97: default:
  98: break;
  99: }
100: }

getoptは調べたところint型だと思うのですが、なぜchar型の変数に値を
代入しているのでしょうか?
また、いろいろ調べてみたんですが、このgetoptで何をしているのかもよく
わかりませんでした。よろしければこの部分についての解説もお願いいたし
ます。m(_ _)m

No. 2033 # 68user 2001/06/20 (水) 14:07:33
>>2030 koni
そういう FTP サーバを使ったことがないので試すこともできないのですが、
これって APOP みたいな感じなんですかね? どこかで公開されている FTP
サーバはないものでしょうか。

>>2032 snow
> getoptは調べたところint型だと思うのですが、なぜchar型の変数に
> 値を代入しているのでしょうか?
これは僕のミスで、正しくは int です。直しておきます。

> このgetoptで何をしているのかもよくわかりませんでした。
引数解析です。
    for ( i=1 ; i<argc ; i++ ){
        if ( argv[i][0] == '-' ){
            switch (argv[i][1]){
                case 'd': debug_flg = 1; break;
            }
        }
    }
みたいなもんですが、自分で書くのもめんどくさいのでライブラリを
使いました。

詳しくはここらへんをどうぞ。
    http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=getopt&dir=jpman-3.1.0%2Fman&sect=3

No. 2034 # 68user 2001/06/20 (水) 14:19:27
>>2033 otp-md5
google 君に教えてもらいました。なるほど、こんな感じの流れになるのか。
    http://www.jaist.ac.jp/~uchida-t/otp/

No. 2035 # snow [E-mail] 2001/06/20 (水) 18:07:04
>>2033 68user

ご回答ありがとうございます。
ですが、このままint型に変えただけだと、エラーがなければCに入るのは
通常「100」ですよね?ということは
case 100: とすれば良いのですよね?
そこを修正して、先ほどのプログラムを例に従って実行してみたのですが、
どうもどこかでループにはまっているようで、ファイルの取得ができません。
う〜ん・・・(汗

No. 2036 # ED 2001/06/21 (木) 05:36:12
>68userさん
http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/view-segabbs.cgi.diff?r1=1.3&r2=1.1&f=h
ロボット検からまだ引っかかるので上記ページを確認したのですが
<head>の部分が</head>になっているのがちょっと変かなっと思ったのですが…どうなんでしょうか。

No. 2037 # 68user 2001/06/21 (木) 10:19:50
>>2035 snow
> エラーがなければCに入るのは通常「100」ですよね?
'd' の character code は 100 なので、100 でも 'd' でも動作は
同じですけど、可読性やメンテナンス性を考えて 'd' と書きましょう。

> どうもどこかでループにはまっているようで、ファイルの取得ができません。
できる限り余分な部分を削ったソースを見せて下さい。

>>2036 ED
> <head>の部分が</head>になっているのがちょっと変かな
プログラムのソースでなく実物を見て下さい。
    http://X68000.startshop.co.jp/~68user/segabbs/bbs3/vol5/5_97.html

> ロボット検からまだ引っかかるので
META タグを追加してからまだ15日しか経過していません。例えば
google なら、クロール頻度は最低1ヵ月に1回だそうです。
    http://www.google.com/intl/ja/faq.html

No. 2038 # snow [E-mail] 2001/06/21 (木) 17:59:55
>>2037 68user

>> エラーがなければCに入るのは通常「100」ですよね?
>'d' の character code は 100 なので、100 でも 'd' でも動作は
>同じですけど、可読性やメンテナンス性を考えて 'd' と書きましょう。

そうなんですか。すいません、'd'で大丈夫だとは知りませんでした。

>> どうもどこかでループにはまっているようで、ファイルの取得ができま
>>せん。
>できる限り余分な部分を削ったソースを見せて下さい。

いえ、前回のcの型の変更以外の変更は行っていません。
それでできないのですが・・・

No. 2039 # ED 2001/06/22 (金) 00:17:06
>68useさん
すいません。プログラムのほうしか見てませんでした。

No. 2040 # Moo [E-mail] 2001/06/22 (金) 11:56:36
    お礼です。
    「ネットワークプログラミングの基礎知識」を参考にさせて頂きました。
    とても分かりやすく私にとって大変役に立ちました。
    自分はDOSやWindowsのアプリ、ドライバを作ることが主な仕事ですが
この度、サーバ側のプログラムを作ることになり、こちらのHPを参考に
させていただきました。
    特に「ネットワークプログラミングの基礎知識」と「簡易版コマンド
マニュアル」内のcrontabを読ませていただき、大いに参考になりました。
    普段はC(ドライバ作成用)とDelphi(クライアント側アプリ作成用)
を使っていますが、こちらでPerlの使い方までも教えてもらいました。
    ただただお礼を言うばかりです。

    素晴らしいHPを提供してくださって、こころから感謝申し上げます。
    有り難うございました。

No. 2041 # 68user 2001/06/23 (土) 16:48:47
>>2038 snow
> いえ、前回のcの型の変更以外の変更は行っていません。
> それでできないのですが・・・
動かないというのは、
    http://X68000.startshop.co.jp/~68user/net/c-ftp-1.html
の ftp-client.c ですか? コマンドラインからは何とタイプしましたか?
    % ./ftp-client -d anonymous your@mail.address ftp.jp.FreeBSD.org /pub/FreeBSD/README.TXT
のように -d を付けるとデバッグ情報が表示されますが、どこで
止まっていますか?

もし NAT 環境で試しておられるなら、
    --> PORT 192,168,0,7,9,58
    <-- 500 Illegal PORT range rejected.
などとプライベート IP アドレスを送ってしまい、エラーと
なります。しかしこのプログラムではエラーチェックを行って
いないので、構わず RETR を送ってしまいうためファイルを
取得できません。この点は説明を付けておくべきでしたね。

getopt の件は修正しておきました。ご指摘ありがとうございました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/ftp-client.c

>>2039 ED
というわけで、しばらくお待ち下さい。

>>2040 Moo
どもども。わかりにくい点がありましたら ご指摘お願いします。

No. 2042 # 68user 2001/06/23 (土) 16:59:13
>>2041 68user
> この点は説明を付けておくべきでしたね。
NAT 環境では動かない旨、追加しました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/c-ftp-1.html.diff?r1=1.1&r2=1.2&f=h

No. 2043 # 68user 2001/06/24 (日) 06:39:45
>>1691 紅の猫
>>2023 rosegarden
http-client, http-client-2 のバッファオーバーランの修正と、
bzero,bcopy の説明の追加を行いました。ご指摘ありがとうございました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/http-client.c
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/c-http-1.html

No. 2044 # 幸江 2001/06/24 (日) 17:06:56
このようなことでもアドバイスもらえるのかな?
えっと、CGIでHTMLの一部(5行目から7行目)までとかをログとして取得し、その部分を出力することはできるんでしょうか?

No. 2045 # 68user 2001/06/25 (月) 11:43:05
>>2044 幸江
質問の意味がわからないです。

> HTMLの一部(5行目から7行目)までとかを
この HTML はどこにあるんですか? どこかから取得するんですか?

> ログとして取得し、その部分を出力
「ログとして取得」とはどういう意味でしょうか? HTML から
特定の範囲を切り出し、ブラウザ上に出力し、さらにそれを
ログに記録しておくのですか?

No. 2046 # snow [E-mail] 2001/06/25 (月) 14:08:00
>>2041 68user

以下のようにコマンドを打ったところ、
./ftp-client -d userid passwd hogehoge.com index.html

以下のようなデバッグ情報が出力されました。(一部文字化けしてますが)
<-- 220-************************************************
<-- 220- 洩T[o[韃
                                                誉芒鋤天B
<-- 220-OS ・indows98SE 費 怒莉(19)髟・・
房-- 220 ************************************************
--> USER userid
<-- 331 Give me your password
--> PASS passwd
<-- 530 Not authorized.
--> PORT 172,18,168,100,4,19
<-- 5--> RETR index.html

で止まってしまいました。

NAT環境では使用していないので、ご指摘いただいた問題はないと思います。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2047 # snow [E-mail] 2001/06/25 (月) 14:17:26
あと、今確認したところUSER,PASS,PORTというファイルが残ってました。

下の書き込みで文字化け対象を記入してしまって、申し訳ありません。

No. 2048 # 68user 2001/06/25 (月) 16:03:08
>>2046 snow
> --> PASS passwd
> <-- 530 Not authorized.
ということは、ユーザ名かパスワードが間違ってませんか?

>>2047 snow
> 今確認したところUSER,PASS,PORTというファイルが残ってました。
「--> PASS」というのを誤って copy & paste してしまったんじゃ
ないでしょうか。このプログラムにはファイルを生成するコードは
入っていないです。

No. 2049 # 幸江 2001/06/25 (月) 16:43:17
>質問の意味がわからないです
ごめんなさい。

>> HTMLの一部(5行目から7行目)までとかを
>この HTML はどこにあるんですか? どこかから取得するんですか?
HTMLはYahoo!のトップなどです。

>> ログとして取得し、その部分を出力
>「ログとして取得」とはどういう意味でしょうか? HTML から
>特定の範囲を切り出し、ブラウザ上に出力し、さらにそれを
>ログに記録しておくのですか?
そのようにしたいのですが可能なのでしょうか?

No. 2050 # snow [E-mail] 2001/06/25 (月) 16:51:44
>>2048 68user

再度実行したところ、USER,PASS,PORTは出てきませんでしたので、
私の間違いだったようです。すいません。

>> --> PASS passwd
>> <-- 530 Not authorized.
>ということは、ユーザ名かパスワードが間違ってませんか?

間違ってないんですが・・・(汗
普通にftpコマンドで繋げるとちゃんとつながりますし。
なぜでしょう。。。

下では書きませんでしたが、パスワードをacerolaとしているのですが、
どうもパスワードでNGになっているようです。
なぜだかわかりますでしょうか?

No. 2051 # snow [E-mail] 2001/06/25 (月) 16:52:56
すいません、追記です。
どうしてパスワードでNGになったかわかったかと言うと、
サーバー側のログを見て、パスワードでNGになっていることを確認
しております。

No. 2052 # 68user 2001/06/25 (月) 17:06:22
>>2049 幸江
> HTMLはYahoo!のトップなどです。
可能です。HTTP をしゃべりたいなら
    http://X68000.startshop.co.jp/~68user/net/
を参考に自分でダウンローダを作るか、wget、fetch、lynx などの
ダウンローダを使うとよいでしょう。

例として Yahoo! を出しているのならよいのですが、もし他人の
ページの一部を持ってこようとしておられるなら、相手の許可を
得てからにしましょう。

>>2050 snow
> 普通にftpコマンドで繋げるとちゃんとつながりますし。
なるほど。
    o ftp コマンドではログインできる
    o -d オプションによるデバッグ表示を見ても、正しいパスワードを
        送信しているように見える
    o パスワードには * や ? などの文字は含まれていない
        (シェルがワイルドカードを解釈しているわけではない)
ということですね。謎です。

ftp コマンドで debug モードを ON にしてみると何かわかりませんか?
    % ftp
    ftp> debug
    Debugging on (debug=1).
    ftp> open hostname
    Connected to hostname
    220 hostname FTP server (Version 6.00LS) ready.
    Name (hostname:username): username
    ---> USER username
    331 Password required for username.
    Password:
    ---> PASS password
などと表示されると思います (ftp クライアントによっては、
PASS **** などと何を送っているか見せてくれないかも
しれませんが)。

また、認証までなら telnet でもできますので、試してみて下さい。
    % telnet hostname 21
    Connected to hostname.
    Escape character is '^]'.
    220 hostname FTP server (Version 6.00LS) ready.
    USER username
    331 Password required for username.
    PASS password

No. 2053 # ゆうすけ [URL] [E-mail] 2001/06/29 (金) 15:52:35
お世話になっています。本当、UNIXの部屋を良く、使っています。
ところで、コマンドを自分のUNIX環境で有効にするには、どうしたら
いいですか?使えないコマンドがたくさんあるのですが・・・ぜひ、
教えて下さい。先輩に聞いたら、いろいろと設定しなければならない
とかで・・・詳しくは、教えて貰えませんでした。どうぞ、教えて
下さい。

No. 2054 # 68user 2001/06/29 (金) 17:10:27
>>2053 ゆうすけ
回答を出しやすくするために、
    - OS は何か (uname -a の結果)
    - 例えばどんなコマンドが使えないか
を挙げて下さい。

No. 2055 # ゆうすけ [URL] [E-mail] 2001/06/29 (金) 22:50:47
  早速の返答ありがとうございます。uname -aの結果は、
SunOS std2ss42 5.6 Generic_105181-23 sun4u sparc SUNW,Ultra-5_10と出て来ました。
コマンドは、ジャンル別検索のゲーム(rainなど、他にもたくさん)です。
よろしく、お願いします。

No. 2056 # 高田 [E-mail] 2001/06/30 (土) 20:48:34
フラットヘッド型スキャナについての機能と仕組みはなんですか?フラットヘッド型スキャナの製品の一例を紹介してください。また工夫されている点を解説してください。

No. 2057 # たかし [E-mail] 2001/07/02 (月) 21:15:42
ネットワークプログラミングの初心者です。今、仕事で始めたばかりなのですが、inet_atonを使う場合のライブラリは、何を指定すればいいのでしょうか?-lnsl -lsocketではダメなようで。。。教えていただけると、大変たすかります。よろしくお願いします。

No. 2058 # rosegarden 2001/07/03 (火) 06:28:07
>>2057 たかし
> inet_atonを使う場合のライブラリは、何を指定すればいいのでしょうか?
> -lnsl -lsocketではダメなようで。。。
こういう場合には OS とそのバージョンを書かないと無意味です。

inet_aton はない場合もあるので、inet_addr でも使って下さい。
例えば、Solaris 2.5.1 には inet_aton はありませんでした。
(でも、inet_ntoa はあるけど…。)
詳しいことは man inet_addr してください。

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int
main(int argc, char *argv[])
{
                printf("%x\n", inet_addr("192.168.0.1"));
                return 0;
}

No. 2059 # snow [E-mail] 2001/07/03 (火) 10:59:20
>>2052 68user

回答遅れてすいません。

>ftp コマンドで debug モードを ON にしてみると何かわかりませんか?

passwdの部分がXXXXになってしまい、よくわかりません。
それに、ftpコマンドは通常どおり通るので、プログラムでどこが正常で
ないのかはちょっとわかりません。
再度プログラムをダウンロードしてトライしてみます。

No. 2060 # 68user 2001/07/05 (木) 00:24:49
>>2055 ゆうすけ
> uname -aの結果は、SunOS std2ss42 5.6
Solaris2.6 ですね。「UNIX の部屋」は基本的に FreeBSD に
ついて書いてますので、Solaris にないコマンドはいっぱいあります。

基本的にインストールしたいものがあれば、ソースを持ってきて
自分でコンパイルします。ソースのありかは
    http://ftpsearch.lycos.com/?form=medium
で調べるとよいでしょう。例えば foo-1.1.tar.gz を取得したら
    % gzip -dc foo-1.1.tar.gz | tar zxvf -
で展開し、
    % cd foo-1.1
    % ./configure
    % make
    % make install
という流れになります (これほど簡単にはいかない場合がほとんどですが)。

また、sunsite というコンパイル済みのものを配布している
ところがありますが、あまり数は多くないです。
    http://sunsite.sut.ac.jp/sun/solaris-binaries/sparc/

>>2058 rosegarden
> Solaris 2.5.1 には inet_aton はありませんでした。
Solaris2.6 にも Solaris7 にも inet_aton はありませんでした。

>>2010 もっち
https でのアクセスは実現できましたか? 結果報告をお待ちして
おります。

No. 2061 # skel.103M [E-mail] 2001/07/06 (金) 02:18:19
いつもお世話になっております。
今度はSMTPについての質問なのですが……

SMTPサーバに接続した後最初にクライアント側で行うことは、HELO(またはEHLO)
を送ることですよね。でも、なぜこういうことをするようRFCで定められている
のでしょうか?これがなければ生じる不具合はどういったものが考えられるので
しょうか?「SMTP EHLO 解説」をキーワードにしてGoogleで検索しましたが、
決定的なものが見つかりませんでした…。他に「オライリー・ジャパン」から
出版されている「Sendmail システム管理」なる本も読みましたが、なんかこの
部分だけ意図的に説明を避けているみたいで… (^^;;

何とぞよろしくお願いします。

No. 2062 # 68user 2001/07/06 (金) 04:10:14
>>2061 skel.103M
とりあえずこちらを。
    http://djbdns.jp.qmail.org/djb/smtp.html
知りませんでしたが、envelope がクリアされるらしいですね。

No. 2063 # rosegarden 2001/07/06 (金) 04:14:30
>>2061 skel.103M
> SMTPサーバに接続した後最初にクライアント側で行うことは、
> HELO(またはEHLO)を送ることですよね。

とは限りません。うちなんかだと次のようしても
メールが送れるようになっています。

% telnet mail 25
Trying xxx.xxx.xxx.xxx...
Connected to mail.hogehoge.co.jp.
Escape character is '^]'.
220 mail.hogehoge.co.jp ESMTP Postfix
MAIL from:<rosegarden@hogehoge.co.jp>
250 Ok
RCPT TO:<rosegarden@isp.net.ne.jp>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
This is a test.
.
250 Ok: queued as 9CEF017A4A
quit
221 Bye
Connection closed by foreign host.

> でも、なぜこういうことをするようRFCで定められている
> のでしょうか?

RFC 821 や RFC 2821 をざっと見た限りだと MUST とか SHOULD
とかいう表現はありませんね。

それから、sendmail の operation guide をみると
PrivacyOptions の項に
          public Allow open access
          needmailhelo Insist on HELO or EHLO command before MAIL
          needexpnhelo Insist on HELO or EHLO command before EXPN
          noexpn Disallow EXPN entirely, implies noverb.
          needvrfyhelo Insist on HELO or EHLO command before VRFY
とあるので、このことからも、HELO や EHLO をどうするかには
任意性があるように思えます。

Postfix でも main.cf.default をみると
smtpd_helo_required = no
なんていう設定項目があります。
ということは、設定の際に任意性があるわけです。
おそらく、デフォルトでインストールすれば、HELO なしで
通る場合が多いでしょう。

No. 2064 # rosegarden 2001/07/06 (金) 04:21:56
>>2062 68user

> とりあえずこちらを。
> http://djbdns.jp.qmail.org/djb/smtp.html
> 知りませんでしたが、envelope がクリアされるらしいですね。

失礼しました。蛇足の書き込み申し訳ありません。

No. 2065 # 68user 2001/07/06 (金) 07:21:53
「ネットワークプログラミングの基礎知識」
    http://X68000.startshop.co.jp/~68user/net/
に「SSL でアクセスしてみよう」
    http://X68000.startshop.co.jp/~68user/net/ssl.html
を追加しました。

サンプルソースがほとんど
    http://stingray.sfc.keio.ac.jp/security/ssl/ssl.html
のパクリというのが情けない…。

No. 2066 # 68user 2001/07/06 (金) 07:31:41
ときに、UNIX+Java+Java servlet+JDBC+Postgres+
XML+XSLT な解説って需要ありますか?

書きたくはあるけれど、普通の ISP では Java servlet なんて
使えないだろうなぁ…。

No. 2067 # skel.103M [E-mail] 2001/07/06 (金) 15:56:11
どうも、skel.103Mです。
素早いフォローありがとうございます。>68user様・rosegarden様

>>2063 rosegarden
> > でも、なぜこういうことをするようRFCで定められている
> > のでしょうか?
>
> RFC 821 や RFC 2821 をざっと見た限りだと MUST とか SHOULD
> とかいう表現はありませんね。
RFC2821には MUST や SHOULD なる表現があります。RFC2821の
4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO)の第2段落にある以下の記述が
これに該当すると思います:
> A client SMTP SHOULD start an SMTP session by issuing the EHLO
> command.

> In any event, a
> client MUST issue HELO or EHLO before starting a mail transaction.

RFC2821はRFC821を破棄したわけですから、クライアントによるHELO(また
はEHLO)コマンドの発行が新しく*必須*となったと考えてよいと思われ
ます。その理由っていったい何なんでしょう??私にはさっぱり想像
できないんですけど……。そこで、
>>2062 68user
> とりあえずこちらを。
> http://djbdns.jp.qmail.org/djb/smtp.html
を見てみましたが、これによると、「サーバ 実装者には HELOなしの世
界への将来の転換をサポートするように、 クライアント が HELOを省略
させるようにしむけることを推奨します。」という記述があるんです
けど。…これってHELO(またはEHLO)の存在意義はないと言ってるよう
にとれるんですけど……私だけ? (^^;;;

> 知りませんでしたが、envelope がクリアされるらしいですね。
ご紹介いただいたWebページはqmailの実装をもとにして記述されたもの
のようですが、RFC2821にはそれを示唆する部分は見つけられませんでし
た。

う〜む……

No. 2068 # rosegarden 2001/07/06 (金) 17:07:28
>>2067 skel.103M
> > > でも、なぜこういうことをするようRFCで定められている
> > > のでしょうか?
> >
> > RFC 821 や RFC 2821 をざっと見た限りだと MUST とか SHOULD
> > とかいう表現はありませんね。
> RFC2821には MUST や SHOULD なる表現があります。RFC2821の
> 4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO)の第2段落にある以> 下の記述が
> これに該当すると思います:
なるほど、おっしゃる通りです。
私は 3.2 を見ていました。
かえって勉強になりました。ありがとうございます。

No. 2069 # @km 2001/07/08 (日) 00:06:17
はじめまして。
いつも勉強させていただいています。
質問なのですが、
UNIXでファイルのバージョンを管理するコマンド(TOOL!?)って
デフォルトであるのでしょうか?

ちなみに、
# $Id: echo-server-select.pl,v 1.1 2001/04/21 18:56:41 68user Exp $
↑は、どのようにやっているのでしょうか?
(※勝手に引用させてもらいすいません。)

No. 2070 # 68user 2001/07/08 (日) 04:35:12
>>2067 skel.103M
うーむ、私のレベルではちょっとついていけませんです。無念。

>>2069 @km
> UNIXでファイルのバージョンを管理するコマンド(TOOL!?)って
> デフォルトであるのでしょうか?
UNIX と言ってもいろいろあります。何をお使いですか?
# 上の「使い方」のところにも書いてあるように、OS やバージョンを
# 必ず書いて下さい。

無料で利用できるものならば、RCS と CVS があります (SCCS はよく知らない
のでパス。今でも現役なのかしら)。FreeBSD, NetBSD, OpenBSD なら両方デフォ
ルトで入っています。Solaris なら両方ともデフォルトでは用意されていませ
ん (当然ですがインストールすれば使えます)。Linux はわかりません。

両者の特徴はこのページをどうぞ。
    http://www2.noritz.co.jp/anchor/ashp/peggy/cvs/cvs_rcs.html

このサイトのコンテンツは CVS で管理しています。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi.diff?r1=1.1&r2=1.2&f=h
のように、ファイルの修正履歴が残ること、変更点を容易に把握できること、
ネットワーク経由でアクセスできることが利点です。

> $Id: echo-server-select.pl,v 1.1 2001/04/21 18:56:41 68user Exp $
> ↑は、どのようにやっているのでしょうか?
$Id:$ という文字列を埋め込んでおけば、勝手にバージョンや更新時刻や更新
者名が埋め込まれます。この機能は CVS, RCS 両方に備わっています。

CVS については書籍も4冊ほど出ていますし、解説しているサイトもたくさん
ありますので、興味があれば google などで検索してみて下さい。

No. 2071 # skel.103M [E-mail] 2001/07/08 (日) 22:22:16
>>2070 68user
> >>2067 skel.103M
> うーむ、私のレベルではちょっとついていけませんです。無念。
68user様が
>>2062 68user
で紹介されていたサイトは
http://www.google.com/search?as_q=SMTP&num=10&btnG=Google+%8C%9F%8D%F5&as_epq=&as_oq=HELO+EHLO&as_eq=&lr=lang_ja&as_occt=any&as_dt=i&as_sitesearch=
などでヒットしたサイトのうち最初に出てきたものですよね。上記検索
結果の4つ目付近にある
    http://spica.u-aizu.ac.jp/study/material/2000-10-17/neo-study3.pdf
の7ページ目には次のように書かれていました:
        「sender-SMTPとreceiver-SMTPを識別するためのコマンド」
…これは正しいのでしょうか?

これに関する質問は今回限りということで何とぞよろしくお願いします。
m(__)m

No. 2072 # Ten 2001/07/10 (火) 11:50:27
どなたかご存じでしたら教えて下さい。
当方、Cygwin on Win95 な環境で Wanderlust on XEmacs として mail 環境を
構築しています。
                                                                                                                                                  
今回、更に fetchmail & Maildrop を使用して、mail を local に取り込もうと
しています。
Maildrop で local spool に取り込み、Wanderlust で読むとすれば、Maildir
形式になるかと思い、試行錯誤の上、何とか Maildir 形式で取り込めたのですが、
Wanderlust で読み込む段になって困ってしまいました。
                                                                                                                                                        
Maildir 形式だと、new/ -> cur/ の mail 移動を行う際に、path にl `:' を
含めてしまうんですね。
Windwos では、path に `:' を含めることが出来ないため、ここから先に進む
ことが出来ません。
                                                                                                                                                        
どなたかこの様な状況を解決された方はいらっしゃいませんでしょうか。

No. 2073 # harap 2001/07/10 (火) 12:11:28
はじめまして、いつも参考にさせてもらっております。
どなたかご存知でしたら教えてください。
指定ディレクトリ以下のファイルで、ディレクトリのみ表示する
ことは可能ですか?
ちなみにla -dでは出来ませんでした。

No. 2074 # skel.103M [E-mail] 2001/07/10 (火) 15:01:13
>>2073 harap
find <DIR> -type d
で可能だと思います。詳細は「man find」で。

No. 2075 # harap 2001/07/10 (火) 16:04:09
>>2074 skel.103M
ありがとうございました。
うまくできました。

No. 2076 # harap 2001/07/10 (火) 17:26:13
たびたびすいません。
現在Cシェルにてプログラムを作成中なのですが
echoで表示している文字列にカラー設定することは可能でしょうか?

No. 2077 # 68user 2001/07/10 (火) 18:34:54
>>2071 skel.103M
> 「sender-SMTPとreceiver-SMTPを識別するためのコマンド」
> …これは正しいのでしょうか?
ん〜、HELO で envelope がクリアされるなら、中継サーバは
HELO をしゃべっちゃいけないので、結果として識別できるの
かなぁとは思うのですが…。どうなんでしょう。

>>2076 harap
> echoで表示している文字列にカラー設定することは可能でしょうか?
端末に依存しますが、可能です。
    perl -e 'print "\x1b[31m"' (赤)
    perl -e 'print "\x1b[32m"' (緑)
    perl -e 'print "\x1b[30m"' (黒)
などなど。kterm や TeraTerm などならこれで OK でしょう。
    echo ^[[32m
でもいいです (^[ の部分は直接 ESC 文字を打ち込みます。tcsh 上なら
C-v ESC、emacs 上なら C-q ESC)。
    perl -e 'print "\x1b[31mhoge\x1b[32mfuga\x1b[30m"'
などと続けて書いてもいいです。

# 他にコントロールコードを直接出力できるコマンドって
# ありましたっけ? (stty とか tset の方面で)

google で「エスケープシーケンスード ESC 色」などで検索して
みて下さい。

>>2072 Ten
うーむ、Windows でメールを読まないので…。

No. 2078 # harap 2001/07/11 (水) 09:53:30
>>2077 68user
ありがとうございました。
お礼が遅くなってすいませんでした。
やってみます。

No. 2079 # るは [E-mail] 2001/07/17 (火) 15:26:59
はじめまして。
最近UNIX-CでNetwork Programmingを始めた者です。よろしくお願いします。
こちらに掲載されているC言語のechoプログラム(echo-server-1.c)を
そのまま書き写して実行したのですが、先頭の1文字しか返ってきません。

read_line()の戻り値が [0 or 1] なので、
94行目で、文字列が1文字だけになってしまいます。
read_line()の戻り値を [0 or 文字数] に修正すればよいと思います。

私の勘違いでしたらすみません(^^;

No. 2080 # 68user 2001/07/17 (火) 15:39:02
>>2079 るは
ありがとうございます。テスト不足で失礼しました。修正しておきます。

最初はちゃんと動いていた気がするんだけど、いつエンバグしたのかなぁ?

No. 2081 # skel.103M [E-mail] 2001/07/19 (木) 16:07:11
いつもお世話になってるskel.103Mです。

>>1978 skel.103M
>>1980 68user
>>1981 skel.103M
このことについて、news:fj.mailに記事が投稿されているのを(今さらなが
ら)発見!:
        Message-ID: <tzzlmmezl9x.fsf@nightmare.hm.taito.co.jp>
…投稿日は2001/06/27(水)となってますね。

No. 2082 # 猫じゃらし 2001/07/29 (日) 15:00:20
はじめまして。
perlを勉強中の者です。
いきなりで恐縮ですが、質問です。

perlのIO::SOCKETモジュールを使ったhttpクライアントを作っているのですが
画像を読み込めないんです。ちなみに、htmlはうまくいっています。
今作っている物では、他サーバーからファイルを読みとり
自分のサーバーに保存という作業をやらせたいんです。
しかし、画像ファイルを読み込むと改行が不要な位置に
改行入ってしまいます。
画像も読み込めるようにするにはどう作りかえたら良いのでしょうか?

ソース
http://uchu.hypermart.net/image.txt

No. 2083 # 68user 2001/07/30 (月) 06:26:03
>>2082 猫じゃらし
ちゃんと環境を書きましょう。Windows ですか?

    1. ヘッダもそのまま 2.gif に出力してしまう。
    2. 改行が入ってしまうなら、Windows でテキストモードになっているのかも。

ということで、

    # ヘッダまでを読み飛ばす
    while (<$remote>){
        last if ( $_ eq "\n" || $_ eq "\r\n" );
    }
    # ここからが画像データ
    while (<$remote>){
        $outdata .= $_;
    }
    open(OUT, "> 2.gif");
    binmode(OUT);
    print OUT "$outdata";
    close(OUT);

でどうでしょう。

foreach を使わず while を使うのは、foreach の () 内はリストを要求する
ので、<$remote> はリストコンテキストで評価され、
  foreach ("1行目のデータ", "2行目のデータ", ..., "最終行のデータ"){
と展開されてしまうからです。よって、
    foreach (<$remote>){
        last if ( $_ eq "\n" || $_ eq "\r\n" );
    }
の時点でファイルハンドル <$remote> から全てのデータを読み
切ってしまうので、last で抜けた後には <$remote> という
ファイルハンドルにはデータが残っていません。

    foreach (scalar(<$remote>)){
で強制的にスカラーコンテキストにするならいいんですが、
この場合は素直に while を使った方がよいでしょう。

No. 2084 # 猫じゃらし 2001/07/30 (月) 14:35:52
>>68user
環境を書き忘れてすいません、マナー違反でしたね、、、
ちなみに、環境はWinMEでActivePerlを動かしている状態です。

さて、68userさんのレスにあったものをペーストして
ソースは下のようになりました。
http://uchu.hypermart.net/image2.txt

これで無事動かすことができました。ありがとうございます。
このHPは、これからも勉強参考にさせてもらいますね。
ではでは、、

No. 2085 # kazu 2001/07/30 (月) 16:17:17
はじめまして超初心者の者です。
質問なのですけど会社で渡されたCシェルのプログラムに

mailx -s

というコマンドがありまして調べても見つかりません。
UNIXのことなどさっぱり分からないので困っています。
知っている人がいたら教えてください。
お願いします。m(__)m

No. 2086 # 68user 2001/07/30 (月) 17:36:39
>>2085 kazu
ちゃんと OS 名やバージョンなどの情報を書きましょう。

> mailx -s
mailx は SystemV 系 UNIX のコマンドです。Linux にも
あるようですが、*BSD にはないはずです (FreeBSD なら
ports で mail/mailx がありますが)。

まぁメールの送信だけなら mail も mailx も同じようなもの
なので、そのまま mail に読み変えればよいでしょう。

No. 2087 # sato.k [E-mail] 2001/07/31 (火) 11:41:58
はじめまして。早速なんですが、UNIXの運用について質問があります。ログインユーザーごとに使用したい文字コードが違うんですが、どのように設定したらよいのでしょうか?教えてください。

No. 2088 # 68user 2001/08/01 (水) 15:09:22
>>2087 sato.k
ログインユーザごとに ~/.cshrc や ~/.profile で
    setenv LANG ja_JP.eucJP
とか
    LANG=ja_JP.eucJP; export LANG
とか書くか、/etc/profile や /etc/csh.cshrc でユーザ名をみて
適切な locale を設定するのはどうでしょうか。

具体的な locale 名や、/etc/ の下のファイル名などは
OS によって違いがあるので、お使いのシステムではどうなって
いるか確認して下さい。

FreeBSD なら /etc/login.conf に各ロケール分のログイン
クラスを作るのもいいかな。

No. 2089 # 68user 2001/08/04 (土) 17:34:26
>>2079 るは
> こちらに掲載されているC言語のechoプログラム(echo-server-1.c)を
> そのまま書き写して実行したのですが、先頭の1文字しか返ってきません。
遅くなりましたが、さきほど直しました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/echo-server-1.c
ご指摘ありがとうございました。

No. 2090 # 68user 2001/08/05 (日) 04:11:29
UNIX の部屋をやっと CVS に突っ込みました。悲願達成。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/unix/
これで思う存分更新ができます。

    - コンテンツをローカルでも修正し、web サーバでも修正して、
        どっちが最新版かわからなくなる
    - 前回から更新した部分はどこだったろうか? と忘れてしまう
という経験がある方は、CVS で管理してみてはどうでしょうか。
僕はもう CVS なしでは生きていけません。

なお、普通は http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/
のように cvsweb でリポジトリ公開なんてことはしません (笑)
公開しなくても CVS で管理できます。

No. 2091 # 紅の猫 [E-mail] 2001/08/05 (日) 10:11:27
>> こちらに掲載されているC言語のechoプログラム(echo-server-1.c)を
>> そのまま書き写して実行したのですが、先頭の1文字しか返ってきません。
>遅くなりましたが、さきほど直しました。
\nの所に\0を書き込んでる気がします。

No. 2092 # 紅の猫 [E-mail] 2001/08/05 (日) 11:35:58
#2091
>\nの所に\0を書き込んでる気がします。

よく見たら、そんなこと有りませんでした。
訂正します。

No. 2093 # 68user 2001/08/07 (火) 01:10:03
かなりどうでもいい話題なんですが、UNIX の部屋の検索で一件もヒットしな
かったキーワードを調べてみました。対象は 2001 年。括弧内は検索回数。

なんとなく現在足りない情報がわかって興味深かったです。
今後の参考にさせていただきます。

Solaris or SystemV 系 … 特に管理系がいまいち弱くて申し訳ない。
    useradd(541)
    sar(378)
    ufsdump(161)
    pkgadd(146)
    mailx(145)
    dbx(95)
    groupadd(88)
    usermod(74)
    ufsrestore(60)
    usradd(55)
    nawk(54)
    userdel(54)
    pkginfo(54)
    vfstab(50)
    sjtoeuc(40)
    
こんなのふつー載ってるだろ系 … なるべく早く書きます
    ssh(242)
    expr(172)
    scp(149)
    a2ps(108)
    iconv(95)
    chroot(57)
    pushd(52)
    ulimit(49)
    slogin(39)
    rcs(38)
    bz2(36)
    
Windows の用語をそのまま打ち込んだ系?
    rename(171)  mv のところに「Win で言うところの rename」と書いておけばよい?
    tracert(36)  traceroute のところに「Win で言うところの tracert」と書いておけばよい?
    tree(46)  これは find かなぁ。
    
68user の弱い方面系 … 申し訳ない。満足な解説書けません。
    lpr(328)
    arp(194)
    cpio(177)
    iostat(102)
    rsync(79)
    バックアップ(73)
    lpq(64)
    プリンタ(58)
    restore(56)
    mkfs(55)
    mknod(54)  こんなの検索するんだ…
    sccs(53)
    プリント(50)
    lpstat(43)
    snmp(39)
    パーティション(39)
    
これ何? 系 … 誰か教えて。
    snoop(161)
    ipcs(112)
    fdisk(90)
    filec(66)
    ndd(43)
    showrev(52)
    ipconfig(53)
    ioscan(51)
    mpstat(44)
    substr(45)  perl?
    
入力が不適切系 … 全角アルファベットはないのですよ。半角に自動置換しようかしら。
    ls(196)  
    ユーザー(166)  ユーザならあるんですけど
    解凍(150)  展開で統一してます。改善予定
    ftp(127)
    cp(106)
    ln(90)
    ps(85)
    rm(54)
    リダイレクション(49)  その後「リダイレクト」で検索してくれただろうか
    df(48)
    クーロン(43)  これは改善予定
    mv(40)
    csh(35)
    
その他:
    select(91)
    bdf(88)
    atol(85)
    ファイル検索(70)
    logger(68)  需要あるのかなぁ。
    pdf(63)
    ファイル名変更(54)
    flock(54)
    htpasswd(53)  うーん
    samba(43)
    jar(42)  なぜ jar が
    gateway(41)
    access(36)


ちなみに検索にヒットしたキーワードのトップ20はこちら (リンクを
たどったものは除く。訪問者が入力したキーワードのみ)。
      tar(7512)
      grep(3832)
      find(3219)
      ftp(2502)
      ls(2490)
      vi(2370)
      cp(2215)
      ps(1799)
      rm(1773)
      chmod(1677)
      gzip(1528)
      cron(1511)
      ln(1368)
      mount(1352)
      crontab(1330)
      sed(1257)
      make(1188)
      awk(1150)
      mail(1034)
      date(1047)

No. 2094 # rosegarden 2001/08/07 (火) 03:49:29
>>2093 68user
『誰か教えて』の意味勘違いしているかもしれませんが…。
> これ何? 系…誰か教えて。
> snoop(161)
Solaris 標準コマンド tcpdump のような用途で使う Sniffer ですね。
> filec(66)
> ndd(43)
Solaris 標準コマンド。主に、TCP/IP 関係のデバイス
制御に使います。たとえば、TCP ヘッダのシーケンス番号
の生成法もこれで変えられたかとおもいます。
FreeBSD の sysctl に似た感じで使います(不正確ですが)。
> showrev(52)
Solaris の標準コマンド。pkg 管理用です。
showrev -p なんてすると、どんなパッチが当たっているかが
わかります。
> ipconfig(53)
これは多分 win のコマンドじゃないかな?
ifconfig に似た感じの情報を表示します。
このコマンドを ifconfig みたいにインタフェースの
変更用に使えないんでしょうか?
試したけど、うまくいかなかった。
> mpstat(44)
これは Solaris で man mpstat したら出てきましたよ。

No. 2095 # rosegarden 2001/08/07 (火) 03:51:25
>>2094 rosegarden
>> filec(66)
おっと、これは消し忘れていました。これは無視してください。

No. 2096 # スナフキン 2001/08/07 (火) 17:32:26
いつもお世話になっているので、少しでも協力できれば…

>>2093 68user
> fdisk(90)
これって、Linux系だけなのですか?
パーティーションテーブルを操作するコマンドですが…


>>2094 rosegarden
> ipconfig(53)
>変更用に使えないんでしょうか?
表示だけみたいですね。

「Win系はあくまでGUIなんでCUIインターフェースツールは、ホント
におまけ」みたいなポリシーのようです。

てか、あまり役に立ってなさそう…とほほ


ところで「UNIX の部屋」は、管理者向けの意味合いが大きいのでしょ
うか?それとも一般向け?>68userさん

No. 2097 # rosegarden 2001/08/08 (水) 00:37:40
>>2096 スナフキン

> > fdisk(90)
> これって、Linux系だけなのですか?
> パーティーションテーブルを操作するコマンドですが…

*BSD 系の OS ならあると思います。少なくとも、
FreeBSD/i386, OpenBSD/i386, NetBSD/i386 ならあります。
Solaris も x86 系のならあるかと思います。
今見たところ、SPARC 用の Solaris でも
マニュアルはインストールされていますね。

> >>2094 rosegarden
> > ipconfig(53)
> >変更用に使えないんでしょうか?
> 表示だけみたいですね。

そうですか、いや、自分のやり方が悪かったかと、
思っていたのですが、そういう仕様なんですね。

ありがとうございました。

>>2093 68user
それから、いま man したら ipcs は Solaris
にはあるようですね。

No. 2098 # whois 2001/08/09 (木) 07:10:29
IPアドレスとホスト名の説明中にある文章に関して

>しかしその逆の、FQDN はあるが IP アドレスはない、というマシンは
>存在しません。 ネットワークに接続されている全てのマシンには IP
>アドレスが付けられています。

FQDNはあってもIPアドレスがないマシンは存在します。UUCP接続の場合
にはネットワークに接続されていないのでIPアドレスを割当てる必要が
ないからです。

No. 2099 # iteb 2001/08/10 (金) 16:26:44
>これ何? 系 … 誰か教えて。
> ioscan(51)

HP-UXで使いますね。cd-romの装置番号を調べたり、周辺機器の
SCSI IDを調べたりするときに使いました。

参考:
  http://www.calpoly.edu/cgi-bin/man-cgi?ioscan

No. 2100 # 68user 2001/08/11 (土) 04:57:34
>>2094 rosegarden
> 『誰か教えて』の意味勘違いしているかもしれませんが…。
いえ、そういう意味です。みなさまどうもありがとうございます。

>>2096 スナフキン
> ところで「UNIX の部屋」は、管理者向けの意味合いが大きいのでしょ
> うか?それとも一般向け?
両方です。大学などの UNIX ならともかく、PC-UNIX では利用者=管理者な場
合がほとんどでしょうから、両方の知識を身に付ける必要があると思います。


>>2098 whois
> UUCP接続の場合にはネットワークに接続されていないのでIPアドレスを
> 割当てる必要がないからです。
なるほど。しかし、

    UUCP はメール・ニューズ限定のプロトコルである。UUCP の上には
    HTTP も POP も載せることができない。つまり、UUCP はトランス
    ポート層・ネットワーク層に相当し、TCP/IP とは並列関係にある。
        http://X68000.startshop.co.jp/~68user/net/net-1.html
    は、TCP/IP の初歩を解説しているページなので、そこで UUCP に
    言及することは混乱を招く。

と思うのですが、いかがでしょうか。UUCP は使ったことも設定したこともな
いので、間違っていたら指摘お願いします。

No. 2101 # iteb 2001/08/11 (土) 05:35:10
>>2100 68user
>UUCP はメール・ニューズ限定のプロトコルである。

現状はその通りなのですが、名前の通りファイルの転送も出来ます。
以前IIJでAnonymous UUCPでファイルの配布がされていたことが
ありました。1分30円だったかな。

「インターネットに接続されている全ての」ではなく、
「TCP/IPでインターネットに接続され…」であればとりあえず
矛盾は無くなりますが、ちょっと分かりにくいですね。

No. 2102 # よしあき [E-mail] 2001/08/14 (火) 19:18:44
皆さんはじめまして。実は今はじめてCGIをperlで作っていますが、フォームの内容を送信しようとすると以下のようなメッセージが出てきます。
このメッセージを出すことなくメールへの送信は可能でしょうか?
よろしくお願いします。

Sending C:\WINNT\blt9F.tmp to xxxx@xxx.ne.jp Subject:XXXXX Login name is info@xxxxx.com

No. 2103 # スナフキン 2001/08/15 (水) 00:23:56
>>2097 rosegarden
>そうですか、いや、自分のやり方が悪かったかと、
>思っていたのですが、そういう仕様なんですね。
いえ、仕様だと言い切るとまた語弊がありそうなんで濁しておきます(笑)
自分の場合は、あまりにも使えないコンソールなんで、Cygwin使ってます。
でも、うまく設定が出来ないんでDOSと半々かな(^^;

>>2100 68user
>両方の知識を身に付ける必要があると思います。
確かにそうですねぇ。自分はGUIは滅多に立ち上げずに殆どCUIのみで
利用していますが、最近の雑誌を見るとGUI上前提の記事が多いので、
実際にWindowsのような使われ方をしている人の比率は多いのかなぁ?
あ、もちろん複数の環境が有る場合ですが…

>>2102 よしあき
Windows環境でsendmail互換のMTAをperlから利用していると想定して
ですが…

多分そのsendmail互換のアプリが出しているメッセージなので、その
部分に以下のような記述をすれば回避できると思います。
(ん?コレはブラットJってやつかな?)

実際の記述部分が判らないので予想で書きますが、
1. open(MAIL, "sendmail 〜 コマンド |");
2. open(MAIL, "sendmail 〜 コマンド > nul");

「1」コマンドの標準出力を受け取るので、エラーチェックなどを検知する事もできます。
「2」標準出力を強制的にブラックホールに捨てます。

また、質問する時はもう少し詳しく環境とかを書きましょう。

No. 2104 # Asako 2001/08/15 (水) 17:44:18
初めまして。最近CGIの勉強を始めました。(^^)
今まで、フリーで配布されているCGIの改造をしたことは
あったのですが、自分で最初から書けるようになりたいと思っています。

わからないことがあるたびに、本を読んだり、インターネットで検索するのですが
68userさんのページが一番詳しく、わたしの知りたいことが書いてありました。
ありがとうございました。crypt関数とか、半角カナ・機種依存文字問題とか
うまくいかなくて、いきづまっていたので、大変参考になりました。
(日本語特有の問題は、翻訳本にはほとんどでてこないし (^^;)

これからUNIXのことも勉強したいと思っています。
これからもどうぞよろしくお願いします。

No. 2105 # ふくし [E-mail] 2001/08/18 (土) 12:08:21
Perl一般の質問ですみません。
さいきん Word が作った RTF をパースしないといけないハメになったんですが、
VBA はツライので Perl でやろうと思っています。
RTF::Parserというのを見つけてインストールはうまくいったんですが、
ドキュメントがまったくなく、お手上げです。
(TODO: Write a document とか書いてあるのがだいぶ前なので
    投げたのかも、、)
どなたか使い方をご存知の方リンクだけでもご存知の方教えてくださいませんか?

あと、他に Perl で RTF をパースした経験がある方
「やめたほうがいい」という結論に達した方などなど、
この問題に情報がある方はお寄せください。
また、RTF の規格についてわかりやすく書いているリンクなども、、。

あと、あまりにもこの件が掲示板の趣旨を逸脱するようでしたら
すみません、ツッコんでください。(^^;

スナフキンさん>
Cygwin 最高ですよね! 割り切って使うには最高です。
これと Meadow のおかげでやっと Windows と友達になれました。
ところで、1.1 をお使いですよね?
なぜか B20 ベースの解説サイトやソフトが多いのですが、
B20 にくらべて 1.1 は超超超超安定してていい感じです。
わたしはここでお世話になった技術で Apache をコンパイルして
CGI のテストも Windows でしてます!(^o^)

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2106 # ten 2001/08/20 (月) 18:16:34
Solaris 2.6 で、Sun Workshop 4.2 を使用しています。
事情により境界整列を全く行なわせない指定をしたいので、

$ cc -flags
(snip)
>-misalign 境界整列していないデータのロード/ストアを可能にするコードを生成

を指定しているのですが、意図した様な動作が得られません。
また、
>#program align foo, var
と指定してもダメです。

どうすれば良いのか御存知の方、いらっしゃいますか?

No. 2107 # 68user 2001/08/21 (火) 10:13:44
>>2106 ten
>#program align foo, var
とりあえず program じゃなくて pragma でしょう。あと、試して
ませんが書き方が怪しいのではないかと思います。こちらを参考に。
    http://docs.sun.com/htmlcoll/coll.674.1/euc-jp/CUG/accOptions.html#1407

>>2105 ふくし
> また、RTF の規格についてわかりやすく書いているリンクなども、、。
Rich Text Format は Microsoft が作った規格なので、Microsoft に
仕様書が存在するはずなのですが、見付けられませんでした。もしかしたら
今は別の団体が管理しているのかもしれません。

No. 2108 # CCIE [E-mail] 2001/08/24 (金) 14:53:30
こんちは、お初です。最近Perlはじめました。
ほかの言語はからっきし使えません(TT関西弁ならいけるけど。。。
で、Perlのプログラミングで質問させてもらいます。
テキストファイルで、↓こういうかんじ

        name  age  year
--------------------------
    CCIE   22   2001

みたいな感じのテキストがあって、そこから3行目だけを出力させたいのと
この場合だと22だけを取り出したいっていう2つのことがどうすれば
いいか今格闘中です。
たぶん正規表現かなーっとおもって
オライリーの正規表現見てますがさっぱりで・・・(^^;)
どなたか助言よろしくお願いしますm(__)m

No. 2109 # 68user 2001/08/24 (金) 20:43:26
>>2108 CCIE
> 3行目だけを出力させたい
自分で何行読んだかを数えます。
    $line = 1;
    open(IN, "file");
    while (<IN>){
        if ( $line == 3 ){
            print "これが 3行目の内容です: $_";
        }
        $line++;
    }

> 22だけを取り出したい
$_ に "CCIE 22 2001\n" が入っている状態で、
    ($name, $age, $year) = split(/\s+/, $_);
とすれば $age に '22' が入ります。

\s は空白・タブを表し、\s+ は1文字以上連続した空白・タブを表しますので、
      $_ を1文字以上連続した空白・タブで分割し、それぞれのフィールドを
      $name、$age、$year に代入
という意味になります。

あるいは
    ($name, $age, $year) =~ m/^(.*)\s+(\d+)\s+(\d+)$/;
という方法もあります。^ は行頭、\d は数字、$ は行末を表し、
括弧でくくった部分がそれぞれ $name、$age、$year に代入されます。

No. 2110 # /tk 2001/08/25 (土) 01:04:46
>>2109 68user
> ($name, $age, $year) =~ m/^(.*)\s+(\d+)\s+(\d+)$/;
余計なような足りないような…

      ($name, $age, $year) = m/^(.*)\s+(\d+)\s+(\d+)$/;
若しくは
      ($name, $age, $year) = $_ =~ m/^(.*)\s+(\d+)\s+(\d+)$/;
では無いでしょうか?

No. 2111 # CCIE 2001/08/25 (土) 01:27:38
早々の返事ありがとうございますm(__)m
参考に勉強させてもらいます.
みなさんすごいですね.ってこういうのでつまづいているのは僕だけかな(TT
いまから,↓の$や()や\や+がごちゃごちゃしたものをゆっくり理解していきたいとおもいます.
実は今,これでいうと22の部分をTkのGIFgraphで表現しようと思ってるんです.
テキストファイルが定期的に書きかえられるのでグラフ化したいと思って.
それで,いま撃沈しているところを聞かせていただいたんです.
出きるだけ御迷惑をかけないように自分で努力したいと思いますが,また質問してしまうと思うのでそのときはよろしくお願いします.

No. 2112 # moz 2001/08/27 (月) 15:29:32
はじめまして。68userさんのページはとても勉強になります。時間があったら、全文を熟読したいと思います。(そんな時間ないかもしれませんが。)
それにしても、毎回いろいろな人からの質問に応えることのできる知識に、
少し圧倒されました。自分はまだまだ未熟者です。今後どーしてもわからないことがあったら、質問するかもしれませんので、そのときは、どうかよろしくお願いします。

No. 2113 # スナフキン 2001/08/28 (火) 03:14:24
ふと思ったのですが、CGIへPOSTメソッドでデータを送信した時に
そのCGIでデータを受け無い時(readしない場合)って、そのデータは
どうなるのでしょう?

CGIで、最近流行りのバッファーオーバーフロー対策?として、POST
データサイズを予め調べてから、read で読み込むようにしようと
考えましたが、このような場合は、サーバーOS/ソフト側でバッファ
に一旦溜まるのでしょうか?
それとも、CGIが受け取らない限りOS/ソフト側でデータそのものを
受け取らないのでしょうか?

試しに自環境にあるApacheに、アップロード機能付きの掲示板CGIを
使って約80Mbを送信してみましたが、cgi-lib.pl のエラー?でCGIは
停止したらしく、ps コマンドを見ると、zonbi となっていたため、
httpdがタイムアウト処理?をして切断された結果(だと思う)、ブラウザに
「cgi-lib.pl: Request to receive toomuch data: 84400432 bytes」と
表示され切断されたように見えました。
そして、その状態まで送信は止まらずにブラウザは送信を続けていました。

top や free で送信中のメモリの状態を観察していても変化がなかった
事から、CGIが受け取らないと捨てられてしまうようにも見えますが、
ちゃんと試験が出来ていたのか、自信が無いので正確な所は不明です。

結局、CGIでPOSTデータを受け取らなくても(プロセスが死んでいた為)
ブラウザ自身は送信を続けていたので、どの時点で(OSかApache)データ
を破棄しているのかは判断できませんでした。

そもそもCGI側でオーバーフローを気にしなくても良いならば、それでいい
のですが、どうも動作が判りません。
#それとも実装依存なのかな?

No. 2114 # 68user 2001/08/28 (火) 06:58:35
>>2110 /tk
> 余計なような足りないような…
確かに。補足どうもです。

>>2112 moz
> 質問するかもしれませんので、そのときは、どうか
> よろしくお願いします。
ぜひ回答する側にもまわって下さい :-)

>>2113 スナフキン
> そのCGIでデータを受け無い時(readしない場合)って、そのデータは
> どうなるのでしょう?
実装依存です。TCP 的に言えば、相手側がプロセスが read してくれないと相
手側の OS のバッファにたまります。それがいっぱいになったら書き込み側が
ブロックします。つまり
    print SOCKET "....";
を実行したままずっと止まってしまうということです。

ちゃんと調べたわけではありませんが、一般的にPOST データを全部受け取っ
て CGI に渡す web サーバが 多いような印象を受けます。あくまで印象なの
で、試したわけではありません。

もし
    int sock;
    bind(...);
    listen(...);
    sock = accept(...);
    ... ヘッダ読み込み ...

    if ( fork() == 0 ){
        char *args[]={"/home/user/public_html/cgi-bin/foo.cgi", NULL};
        dup2(sock, 0);
        execvp("cgi", args);
    } else {
        int status;
        wait(&status);
    }
のように、直接ソケットを CGI プロセスの標準入力に渡すような
実装ならば、CGI プロセスが read しないと書き込み側がブロック
するわけですね。

apache の実装がどうなっているかわかったら僕にも教えて下さい。

No. 2115 # 68user 2001/08/28 (火) 07:19:15
>>2114 68user
なんかいろいろとアレなので、書き直し。
    int sock;
    int pipes[2];

    bind(...);
    listen(...);
    sock = accept(...);
    ... ヘッダ読み込み ...

    pipe(pipes);

    if ( fork() == 0 ){
            char *args[]={"cgi", NULL};
            dup2(sock, 0);
            dup2(pipes[1], 1);
            execvp("/home/user/public_html/cgi-bin/foo.cgi", args);
    } else {
            char buf[256];
            int len;
            int status;
            while ( len=read(pipes[0], buf, sizeof(buf) ){
                  write(sock, buf, len);
            }
            wait(&status);
    }
ソケットのデータを CGI プロセスの標準入力に渡し、
CGI プロセスの標準出力を受け取り、そのままブラウザに
返す web サーバもどきです。

No. 2116 # CCIE [E-mail] 2001/08/29 (水) 12:43:34
こんにちは。又お邪魔させてもらいました(^^;)
この前はありがとうございます。うまくできました\(^o^)/
今回は、Perl/Tkなんですがアドバイスよろしくお願いします。m(__)m
リストはこんな感じなんですが・・・
use Tk;

$mw = MainWindow->new;
$mw->title("gifgraph");

$can = $mw->Canvas(-width=400,

No. 2117 # CCIE [E-mail] 2001/08/29 (水) 12:52:25
すみません↓ tabで形をそろえようとしたら送信のところにいっちゃってenterおしちゃいました(^^;; ヒヤアセ
で、リストは
use Tk;

$mw = MainWindow->new;
$mw->title("gifgraph");

$can = $mw->Canvas(-width=>400,
                                      -height=>300)
        -pack();

for(;;){
$gif = $mw->Photo(-format=>'gif',
                                    -file=>"graph.gif");

$can->createImage(200,150,-image=>$gif);

$mw->after(4000);
}

画像が更新されるのでfor文で何度も画像を読みこませたいんですが、ウィジェットすら開かないんです。for文をはずせば今ある画像が表示されるんですが、なぜなんでしょうか?

No. 2118 # 68user 2001/08/29 (水) 16:35:02
>>2117 CCIE
Perl/Tk は久しくやってないので忘れてしまいましたが、
    $can->createImage(200,150,-image=>$gif);
    $mw->after(4000, \&change_image);
    MailLoop;
    exit;

    sub change_image {
          $gif が変わっていたら $can をいじる
    }
じゃないですかね。

No. 2119 # CCIE [E-mail] 2001/08/30 (木) 17:48:48
参考にさせていただきました。
少し手を加えてなんとか表示できました。それで、
GDモジュールとGIFgraphモジュールでgifを作って
for(;;){
    ・・・・・・
}
の中に入れたんですが
$my_graph=new GIFgraph::lines();
・・・・・
見たいな感じでGIFgraphを定義させました。
for文の外にこう言う定義は書いたらいいんですが、このモジュールの仕様?(バグ)で中に入れてどんどん作らないと更新されないんで中に書きました。
でもそうすると何度も定義するのでメモリがどんどん食われていくんです。メモリの制御を除いてもメモリが増えていってました。
前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか?

No. 2120 # スナフキン 2001/08/30 (木) 20:15:47
>>2115 68user
そうですか実装依存ですか。それが判っただけでもOKです。
ありがとうございます。
perl側では、あまり意味がないという事になりますかね。

しばらくApache関連の情報も探しましたが、今の所該当する
情報は見つかりません。

わざわざ例題(cですよね?)まで書いてもらいましたが、
よく判りませんでした。m(_ _)m
cが解かればソースを見て何とかなるかもしれませんが、
まだ不勉強なので…

何か見つけたら報告します。

>>2105 ふくし
>ところで、1.1 をお使いですよね?
いえ、B20でした・・・って最近使っていないのがバレバレですが(笑)
自分は、DOS上では面倒な処理をする必要がある場合ぐらいしか
使ってません。普通は本物の環境で作業しています。
Cygwin でシンボリックリンクまで対応している事を知ったのも、
最近です(笑)

No. 2121 # 木島 透 [E-mail] 2001/09/04 (火) 17:18:02
すいませんヘルプです。
SUN SPARC ServerUitra5にモデムをつけようとして
ttyポートを書き変えたらディスプレイが
見えなくなってしまいました。

モデムから入りエミュレータ−から見るととプロンプトのところに?<クエスチョンマーク>がでてこんな事になってます。
ok の後に ls−a をやって見ました。

ls -a
f006cd5c SUNW,UltraSPARC-IIi@0,0
f005f2f8 pci@1f,0
f004cd88 virtual-memory
f004c7a8 memory@0,10000000
f002ccf0 aliases
f002cc80 options
f002cb48 openprom
f002cadc chosen
f002ca6c packages
ok
ディスプレイを復活させるためには
どうすれば良いのでしょうか?

No. 2122 # 68user 2001/09/11 (火) 02:12:31
とっても今さらですが、

>>2119 CCIE
> 前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか?
最小限のスクリプトを見せてもらえればわかるかもしれません
(し、わからないかもしれません)。

>>2121 木島 透
すいません、わかりませんです。


ところで、また UNIX の部屋のカウンタが壊れているなぁ。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/count/countup.pl?rev=HEAD&content-type=text/x-cvsweb-markup
で怪しそうなところと言えば、
    sub counter_increment {
          ...
          myopen(OUT,"> $countdir/count.$ARGV[0]") || exit;
          print OUT "$num\n";
          close(OUT);
    }
ここらへんでブラウザが中断されて SIGPIPE 受けた、くらいしか
思い付かない。

ちなみにこのサーバは行儀の悪いロボットのせいか、しょっちゅう
    file: table is full
となります。この前は apache が落ちた形跡があるし。うーむ。

No. 2123 # マイ [E-mail] 2001/09/14 (金) 23:47:56
みなさん、はじめましてこんばんわ。
IPなど、とっても私にとっては難しい事なのですが、今困っていて、ここを探しました。
    実はいつも行くHPの掲示板などに、荒らしがヒドイんです。
管理人さんは、海外にいるとか、何とかで・・・。管理されていないんですよね。元々は、すごく雰囲気がよくて、みんなが楽しめていた掲示板だったんですが・・・。荒らしが多すぎて、無視して、カキコミしてたら、ほんの数時間前にカキコミしたのが、消えてしまっている・・・その位、ひどいんです。
    どうにか出来ないものでしょうか?記事の削除などは、管理人さんしか出来ないですよね?でも、管理人さんが管理をしないので・・・。
    困ってしまって・・・。そしたら、IPで、拒否できるっていう情報を聞きました。それも、管理人さんじゃないと出来ない方法なのでしょうか?
    無知すぎる自分も悪いんですが・・・一日も早く、荒らしがいない掲示板に戻ってほしいと思っています。なにか、いい方法があるかたは、教えていただきたいです。
    長々と申し訳ありませんでした。

No. 2124 # 68user 2001/09/15 (土) 01:15:26
>>2123 マイ
> 記事の削除などは、管理人さんしか出来ないですよね?
そうです。第三者には出来ません。

> IPで、拒否できるっていう情報を聞きました。それも、管理人さん
> じゃないと出来ない方法なのでしょうか?
これも管理人が特定の IP アドレスを拒否するようにしないと
いけません。

結局のところ、現在の掲示板をそのまま生かすなら、
    ・管理人にちゃんと管理してくれ、と頼む
    ・管理人からパスワードを教えてもらうなどして、管理者の権限を譲り受ける
        (それを許さないようなプロバイダの規約があるかもしれませんので、ご注意あれ)
のどちらかしかないでしょう。

IP アドレスの制限については、掲示板の形態がわからないと
何とも言えませんが、CGI プログラムを使っているのならば
    http://www2s.biglobe.ne.jp/~cru/library/zddbbs/zddbbs0.html
が使えると思います。

No. 2125 # RUB 2001/09/19 (水) 13:46:11
みなさまはじめまして。
場違いな質問かもしれないのですが、
皆様ご親切なので質問させていただきます。
ただいま、当方、UNIXCにて、プログラムを作っております。
そこで、telnetやTeraTermを起動した時に
ユーザID、パスワードの認証があると思うのですが、
それと同様のことを、Cのプログラムの中で行ないたいのです。
<例>
ユーザ名を入力してください → USERA
パスワードを入力してください → (キーボードを入力しているが出力されない)
このような設定(記述)のしかたをご存知の方いらっしゃいますでしょうか?
また、この時に入力されたフィールドをscanfで読み取ることは可能なのでしょうか?
もし、ご存知な方がいらっしゃったら教えていただきたいです。

宜しくお願いいたします。

No. 2126 # 68user 2001/09/20 (木) 06:08:20
>>2125 RUB
UNIX と言ってもいろいろあるので、ちゃんと環境を書きましょう。
以下、FreeBSD と仮定して説明しますが、Solaris でも同じはずです。

> パスワードを入力してください → (キーボードを入力しているが
> 出力されない)
    http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/gen/getpass.c?rev=1.9
の getpass が参考になるでしょう。

要は、tcgetattr して、ECHO を落として (NOECHO にする)、
tcsetattr することで、tty ドライバの echo back を OFF
にできます。より詳しい情報は termios(4) をどうぞ。

もっとお手軽にやりたいなら、
    http://X68000.startshop.co.jp/~68user/net/ftp-5.html
の stty の部分を読んでください。

No. 2127 # つちだ [E-mail] 2001/09/20 (木) 19:12:03
お世話になります。
土田@アグレです。

今、ブラウザの変わりになるCOM++のDLL(つまりTCP/IPのブラウザプログラム)
を作成しています。
HTTPサーバがWebLogic5.1なのですが、電文そのものはあっているのに、最初から
「HTTP 1.1 400」のエラーが帰ってきてしまいます。
ソケットのコネクションに問題があるのではと考えているのですが、わかりません。
どなたかお知恵を拝借させていただければ幸いです。
ちなみにコーディングは以下のとおりです。


    int AuthSocket::connectAgent(SOCKET sock, long *iPort, long *iRetry,
sockaddr *sockAddr)
{
          struct sockaddr_in sockAddrIn;
          int res, i;

          memset(&sockAddrIn, 0x00, sizeof(struct sockaddr_in));
          sockAddrIn.sin_family=AF_INET;
          sockAddrIn.sin_addr.s_addr=inet_addr("127.0.0.1");
          sockAddrIn.sin_port=htons((unsigned short)*iPort);
          sockAddr=(struct sockaddr *)&sockAddrIn;

          res=ECCOM_SUCCESS;
          for (i=0; i<=*iRetry; i++) {
            if (SOCKET_ERROR==connect(sock, sockAddr, sizeof(struct sockaddr_in)))
{
                      res=ECCOM_FAILURE;
            } else {
            res=ECCOM_SUCCESS;
              break;
            }
          }
  return res;

よろしくお願いします。}

No. 2128 # 68user 2001/09/21 (金) 01:52:40
>>2127 つちだ
> 電文そのものはあっているのに
これはどうやって確かめましたか? 具体的に何を送っていますか?

400 Bad Request が返ってくるなら、やはりまずはリクエストを
疑うべきだと思います。

No. 2129 # 福助 2001/09/21 (金) 13:37:53
初めて投稿させていただきます。

突然の質問なのですが、SolarisでGNUを使わずに前日の日付を取得する方法というものはあるのでしょうか?

No. 2130 # 68user 2001/09/21 (金) 14:14:11
>>2129 福助
env TZ=JST-15 date がお手軽でしょうか。
  

No. 2131 # 68user 2001/09/21 (金) 14:59:54
>>2130 68user
違った。env TZ=JST+15 date でした。

No. 2132 # ふくし [E-mail] 2001/09/24 (月) 17:53:49
すいません、HTML で質問です。
charset ですが、
西ヨーロッパ語(ISO-8859-1)と
日本語(Shift_JIS 希望)を一枚の Web ページで共存できるでしょうか?

以下の方法はいずれもダメでした。

・font face でフォント名を指定
・meta タグを2個書く

もしご存知でしたらご教示ください、、。

No. 2133 # へにか [URL] 2001/09/24 (月) 19:14:24
>>2132 ふくし
http://henika.virtualave.net/untitled.htm
みたいのでよければ、
http://www.ne.jp/asahi/minazuki/bakera/html/reference/charref
(最後にスラッシュはつけない)
を参考に、文字実体参照を使用すれば可能かと思います。

それ以外の方法は、unicodeぐらいでしょうか?

No. 2134 # ふくし [E-mail] 2001/09/24 (月) 19:57:18
>>2133 Mr.
おおっ文字参照、忘れていました。ありがとうございます!
(ちなみに IE6 では見えますが、NC4.75 では見れない、、)

結局 charset は仕様上ページ単位で混在させられない、
ということなんでしょうかねー。

No. 2135 # ふくし [E-mail] 2001/09/24 (月) 19:58:08
>> 2133 へにかさん
掲示板のウラをついて敬称をつけようとして失敗しました ;;;
すいません。

No. 2136 # ふくし [E-mail] 2001/09/25 (火) 14:14:45
教えてくんで申し訳ありません。
会社の FreeBSD に telnet していたのですが、
急に ssh を使えということになり、
愛用の TeraTerm に TTSSH を組み込もうとして苦戦中です。
いろんな Web を参考に、したことは以下の通り。

・TTSSH のバイナリ−を展開して TTERMPRO ディレクトリに入れた
・空のテキストファイルを作って ssh_known_hosts と名づけて
    TTERMPRO ディレクトリに入れた
・TTSSH.exe を起動し、とりあえず接続しないで環境設定へ
・[Setup]-[SSH] で [SSH Known Hosts] の [Read/Write Files] に
    ssh_known_hosts をいれて [OK]
・[Setup]-[Save setup] を実行し、普段使っている teraterm.ini を指定
・teraterm.ini に [SSH] セクションが加わっており、その中に、
    KnownHostsFiles=ssh_known_hosts という行があるのを確認
・同じセクションの Enabled= をなんとなく 1 に
・再び TTSSH.exe を起動
・[Host] を正しく指定し、[port] を 22 番にし
    (ssh のポートが 22 番であることは管理者に確認済み)
    [Service] を SSH にして [OK] をクリック
・メッセージが出る。

SECURITY WARNING
There is no entry for the server "正しいサーバー名" in
your list of known hosts. The machine you have contacted
may be a hostile machine pretending to be the server.


If you choose to add this machine to the known hosts list
and continue, then you will not receive this warning again.

        □ Add this machine and its key to the known hosts list」
    ・チェックボックスをチェックして [Continue] をクリック
    ・メッセージが出て終了。

TTSSH
The host and its key cannot be added, because no known-hosts file has been specified.
Restart Teraterm and specify a read/write known-hosts file in the TTSSH Setup dialog box.

All the encryption algorithms that this program and the server both understand have been disabled.
To comunicate with this server, you will have to enable some more ciphers
in the TTSSH Setup dialog box when you run Teraterm again.
This connection will now close.

・再び TTSSH.exe を起動し、接続せず、[Setup]-[SSH] を見ると、
    [Read/Write Files] には何も入っていない。

・ssh_known_hosts のプロパティは「読み込み専用」にはなっていない。

こういう状況です、、。

No. 2137 # ふくし [E-mail] 2001/09/25 (火) 16:04:02
もうしわけありませんでした、状況が変化しました。
Windows 2000 Server と Windows 95 OSR 2.1 を使っているのですが、
下の現象は 2000 でのものでした。
95 を使ったら状況が変化しました。
下の現象(ssh_known_hosts が作られず、つくっても認識しない)は置きませんでした。
たぶん Program Files 配下のフォルダのアクセス権の違いだと思います。

Windows 95 で TSSH.exe で入ろうとすると、
またキーをつくるかと言われたのでチェックしたら、
次回からは聞かれなくなり、
TTERMPRO フォルダの下に ssh_known_hosts が自動的にでき、
その中にホスト名と「公開鍵」が入りました。

それはいいのですが、入ろうとすると、RCA 秘密鍵を指定する方法しか選べません。
FreeBSD に Telnet で入って ssh-keygen で identity を作って
それを TTERMPRO フォルダにコピーし、指定したのですが、
Authorization Failed になって入れない状態です。

以上とりあえずのご報告でした。
あせって情報が整理されないままにポストしてしまい申し訳ありませんでした。

No. 2138 # ふくし 2001/09/25 (火) 20:47:22
ひとりで騒いでてすみません。
だいぶわかりました。
・ファイルがあるのに「エントリがない」と怒られ、
    「追加してくれ」と言ったらさらに怒られて終了する件は、
    ssh ログインと同時に同じ Teraterm をもう1個起動しているときと
    わかりました。(^^;
・TTERMPRO/ssh_known_hosts は、なくても勝手に作ってくれ、
    管理者が定めたリモートホストの公開鍵を自動的に取ってきてくれると
    わかりました。
・あとは自分用の公開鍵と秘密鍵のセットを何らかの方法で作り、
    秘密鍵を TTERMPRO に入れて [Setup]-[SSH Authorization]-[Use RCA Key to login] で
    指定し、
    公開鍵をリモートホストの ~/.ssh/authorization_keys という名前で保存すればいい、
    らしい。
・うちのリモートホストは RCA 暗号鍵必須らしい。
    (ログインするとき Use plain password.. がグレイアウトするので)
ということがわかりました。

が、依然ログインできません。
正しいパスフレーズを入力してるはずなのに Authorization に失敗します。

No. 2139 # 2001/09/25 (火) 22:56:01
書き込みは2回目です。
プログラムというよりはアイデアの問題かも知れませんが,どなたか教えて下さい。
プロバイダのサーバ(UNIX)にPerlで書いたプログラムを送ってCGIを動かしています。よろしくお願いします。
質問1:
フレームで区切られたhtmlのページからsubmitボタンでCGIに飛びます。
CGIではprint "Location: $str\n\n";を使って別のhtmlページへ飛ぶようにしています。
この時,そのフレーム部分だけが別のhtmlページへ飛びますが,
ウィンドウ全体(親ウィンドウ)を別のhtmlページ

No. 2140 # 2001/09/25 (火) 22:59:35
すみません,文が途中で切れてしまったので,再投稿させていただきます。
−−−−−
書き込みは2回目です。
プログラムというよりはアイデアの問題かも知れませんが,どなたか教えて下さい。
プロバイダのサーバ(UNIX)にPerlで書いたプログラムを送ってCGIを動かしています。
質問1:
フレームで区切られたhtmlのページからsubmitボタンでCGIに飛びます。
CGIではprint "Location: $str\n\n";を使って別のhtmlページへ飛ぶようにしています。
この時,そのフレーム部分だけが別のhtmlページへ飛びますが,
ウィンドウ全体(親ウィンドウ)を別のhtmlページへ飛ぶようにできないものでしょうか。
質問2:
FORMから入力された文章中の半角カタカナを全角カタカナに変換したいのですが
半角カタカナを(文字化けしないで)半角カタカナとして
CGIで受け取る方法はあるでしょうか。
FORMから入力された文章をEUCでconvertする前に文字化けしてしまうので(?),
jcodeのh2z_eucを使っても上手くいきません。

No. 2141 # 2001/09/25 (火) 23:03:58
あ,UNIXにもいろいろあるのですね。
ソフトはFreeBSDです。

No. 2142 # 68user 2001/09/26 (水) 11:55:33
>>2138 ふくし
うーん、TTSSH は使うこともありますが、いつも plain password で
やってるのでわかりませんです。すいません。

>>2140
> ウィンドウ全体(親ウィンドウ)を別のhtmlページへ飛ぶように
> できないものでしょうか。
多分 Location ではどうにもならないと思うので、CGI で
    Content-type: text/html

    <html><body onload="document.myform.submit()">
        <form name=myform action="hoge" target="fuga" method="get">
        </form>
    </body></html>
てな HTML を吐くのはどうでしょうか (最近ちょっと Javscript を
覚えた)。

> 半角カタカナを(文字化けしないで)半角カタカナとして
> CGIで受け取る方法はあるでしょうか。
普通、何もしなければ文字化けはしません。perl は扱っている
データが半角カナかどうかを意識しませんので。

具体的にどういう処理を行って、どううまくいかないのですか?

No. 2143 # ふくし [E-mail] 2001/09/26 (水) 15:23:57
>68user さん
いつもお世話になっております!
結局、
・TTSSH は RSA 暗号鍵しかサポートしていず、
    一方うちの FreeBSD は DSA 暗号鍵しかサポートしない
    (%ssh -V の結果は
        OpenSSH_2.5.2p2, SSH protocols 1.5/2.0, OpenSSL 0x...)
ということらしいです??? よくわかりませんが、、。
ということで、
・DSA をサポートする Windows SSH クライアントで、
    ぼくがしたいこと(Emacs を使って Perl をいじったり
    Mew でメールを読んだりする)ができるものを探す
・Cygwin を使う(と、出来るらしい)
・DSA をサポートする Windows SSH クライアントで接続し、
    別マシンの Telnet ポートをポートフォーワーディングして
    Telnet で使う
・会社のマシンを RSA にしてもらう
などの認識でいいのか、検討中です。

ところで、本掲示板の趣旨は理解しているのですが、
ちょっと事情があってあせっています。
(来週にも Telnet 禁止になるらしい、、、)
ココ以上の掲示板が見つかるかわからないのですが、
場合によっては同趣旨の質問を別の場所に
マルチポストしていいでしょうか?
ずうずうしいですが非常時ということでご検討お願いします、、。

No. 2144 # 福助 2001/09/26 (水) 17:04:47
先日はありがとうございました

今回もまた質問で恐縮なのですが、cshのシェル変数のstatusのようなものはbshにはないのでしょうか?スクリプトを作る際、2種類のファイルを比較しそのファイルに違いがあればエラー処理ということを実行したいのですが・・・。何卒よろしくお願いいたします

No. 2145 # にゃ 2001/09/26 (水) 17:36:56
> ふくしさん

~/.ssh/authorization_keysではなくて、~/.ssh/authorized_keysということではないですか?
openssh_2.3から2.9にして使ってますがどちらもRSAが使えないということはありませんでした。
もしくはビルドする際のオプションが違うとか。

No. 2146 # 68user 2001/09/26 (水) 19:03:14
>>2143 ふくし
> (来週にも Telnet 禁止になるらしい、、、)
おすすめしているわけではありませんが、ssh の plain password で
運用するのはダメですか?

> 場合によっては同趣旨の質問を別の場所にマルチポストしていいでしょうか?
どうぞ。結論が出たら教えて下さい。

>>2144 福助
> 先日はありがとうございました
上の「使い方」を読んでください。で、結果を報告するようにして下さい。
もしそれが面倒でしたら、申し訳ありませんが掲示板の使用はご遠慮下さい。

> cshのシェル変数のstatusのようなものはbshにはないのでしょうか?
$? です。

No. 2147 # ふくし [E-mail] 2001/09/26 (水) 19:40:23
68userさん>
(plain password の件)
    TTSSH の初期画面で、plain password の部分が
    (というか、RSA 鍵の使用以外の部分が)
    すべてグレーで使用不可になっているんです。
    たぶん接続先の ssh の設定だと思います。

(マルチポストの件)
    ありがとうございます。
    でもその必要なくなりました。

にゃさん>

すいませんその通りだったようです、、、;;;;;;
ということで開通しました!
わーんこれで来週も生きられる、、
(Teraterm/Emacs/Mew 依存症なだけなんだけど、、)

No. 2148 # 2001/09/26 (水) 22:20:27
>>2142 68user
御返事ありがとうございました。
Javascriptはよくわからないので,まずはそのままprintでCGIに入れてみましたが
Internal Server Error……と言われてしまいました。
どの部分かは書き換える必要があるのでしょうか。
ジャンプ先のURLはどこに入るのでしょうか。
Javascriptに解決方法がありそうということであれば,
そちらを勉強してみてそれから再度報告しますが,
今回の件を解決する上で勉強上のポイントがあれば教えてください。
お願いばかりですみません。

> 具体的にどういう処理を行って、どううまくいかないのですか?
ウェブページ上のフォームに半角カナで入力してsubmitボタンで送り,
受け取ったCGIで,「=」で$key,$valにsplitした後に%inに入れて

while (($key,$val) = each %in) {
                jcode::convert(\$key, 'euc');
                jcode::convert(\$val, 'euc');
                if ($val eq 'http://') { $val = ''; }
                $val =~ s/\r\n|\r|\n//g;
                $val =~ s/,/,/g;
                $in{$key} = $val;
}

なんてことをやっています(途中の置換は今回の件とは関係ないと思いますが……)。
この後,CGI上でhtmlを書き出して$valをウェブページに表示させると文字化けします。

例えば,半角カナで「アイウエオ」と入れると「竺軸宍雫七」となりました。

No. 2149 # にゃ 2001/09/26 (水) 23:34:03
> ふくしさん

よかったですね。
protocol versionsを2だけに制限されるところもあると思うので気になってました。
公開鍵暗号の認証の方がssh-agentを使えるので慣れば楽だと思います。
TTSSHだと関係ないですがCygwinからなら使えますし。

あと、何か変なことがあったら、
ssh -v
で挙動を調べると原因がわかることが多いです。

> Teraterm/Emacs/Mew 依存症なだけなんだけど、

OSを変えてしまった方が楽の様な気が・・。

No. 2150 # 2001/09/26 (水) 23:47:08
>>2122 68user
> ところで、また UNIX の部屋のカウンタが壊れているなぁ。
ご存知だったらすみません。
受け売りですが,カウンタ記録ファイルを2つ用意するといいみたいです。
単純な方法ですが,効果抜群とか……。
自分はそんなにアクセスが集中するページを持っていないので,
効果の確認はできていませんが……。

↓自分がデータベース用に使っているPerlのスクリプトです。

@file1 = stat($logfile1);
@file2 = stat($logfile2);
if ((@file1[9]) > (@file2[9])) {
                $rfile = $logfile1; $wfile = $logfile2; }
else{
                $wfile = $logfile1; $rfile = $logfile2;
}

&lockwait; #←ファイルロック用のサブルーチンです。
if (!open(DB,"$rfile")) { &error('データベース読取エラー','復旧をお待ちください。'); }
@lines = <DB>;
close(DB);
rmdir($lockfile);

No. 2151 # 68user 2001/09/27 (木) 02:18:44
>>2148
> そのままprintでCGIに入れてみましたが Internal
> Server Error……と言われてしまいました。
Javascript はブラウザ側で解釈するものなので、Internal Server
Error が起きたということは CGI 側の問題です。perl -c などで
文法チェックをしてみて下さい。おそらくは
    print "<html><body onload="document.myform.submit()">\n";
などと、" の中に " をそのまま書いたか、Content-type ヘッダの
先頭に空白を入れたか、というところではないでしょうか。

> ジャンプ先のURLはどこに入るのでしょうか。
form の action です。

> 「竺軸宍雫七」
それは perl や jcode.pl 的には化けていません。EUC-JP の半角カナの
「アイウエオ」は
    8e b1 8e b2 8e b3 8e b4 8e b5
です。一方、Shift_JIS の「竺軸宍雫七」は
    8e b1 8e b2 8e b3 8e b4 8e b5
です。つまり全く同じコードであって、同じバイト列を EUC-JP と解釈するか、
Shift_JIS と解釈するかで表示が違う、ということになります。

で、エンコーディングを解釈するのはブラウザの仕事なので、
ブラウザが誤認しないように
    print "Content-type: text/html; charset=EUC-JP\n\n";
と適切なエンコーディングを指定してやればよいです。

> jcodeのh2z_eucを使っても上手くいきません。
この件は具体的に書いたスクリプトを提示して下さい。

>>2150
> カウンタ記録ファイルを2つ用意するといいみたいです。
なるほど。ただその手法は壊れる確率は低いけど正確なカウントは
できないように見えるので、ある意味「逃げ」かなぁとは思います。
完璧な排他ができないはずはないと思っていますので。

このページは自己満足のためにあるのでその手法は選びませんが、
仕事となればそういう解もありだとは思いますので、全面的に
否定しているわけではありません。

No. 2152 # /tk 2001/09/27 (木) 02:46:39
>>2140
> フレームで区切られたhtmlのページからsubmitボタンでCGIに飛びます。
であれば, submit が含まれている form の target に "_top" を
指定すれば良いだけに思えますが・・・

> EUCでconvertする前に文字化けしてしまうので(?)
というのは, どのように確認されましたか?

>>2150
> if ((@file1[9]) > (@file2[9])) {
スライス?

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2153 # /tk 2001/09/27 (木) 02:49:20
>>2152 /tk
ありゃ?
3点リーダって駄目なのか。

すいません。以後気をつけます。

No. 2154 # /tk 2001/09/27 (木) 02:58:48
連続ですいません。

>>2153 /tk
単にウチのIMEが3点リーダでは無く
半角中黒3つに変換していただけでした。

No. 2155 # 68user 2001/09/27 (木) 03:31:48
>>2061-2071
なぜ HELO や EHLO を送るのかという話ですが、http://www.sk-jp.com/book/javamail/
の本には
    helo は、Sender MTA んもホスト名を記述することになっている。
    しかし、現在はここに何を書いても意味をなさないようになって
    いる。なぜなら、現在ではクライアントがグローバルなホスト名を
    持たないことが多いので、記述すべき内容がない & 正しいかどうかを
    検証する手段もない。
というようなことが書いてあります。なので、歴史的な事情、というのが一点。

さらに
    http://djbdns.jp.qmail.org/djb/smtp.html
にあるように、EHLO のレスポンスにより、その SMTP サーバで使用可能な
コマンドがわかるので、MUA はこれを読んで適切なコマンドを送るように
すべき、というのが一点。

…でどうでしょうか? (そんなことはわかっておられるような気が
とてもしますが)

ちなみにこの本、JavaMail (Java 用 POP・SMTP・IMAP の API) を
使う人なら文句なくおすすめです。

>>2140
> であれば, submit が含まれている form の target に "_top" を
> 指定すれば良いだけに思えますが・・・
ああ、なるほど。ごもっともです。

No. 2156 # Nira 2001/09/27 (木) 20:38:06
始めまして。
C言語のネットワークプログラミング参考にさせて頂いて
おります。m(_ _)m
一つ質問なんですが、httpsのサイトを取得する時、
プロキシー経由の場合はどのようになるのでしょうか?
google等で検索してみたのですが、分かりませんでした。
最初にプロキシーに対して、
CONNECT **.com:443 HTTP/1.0
HOST: **.com
って感じでやるのかなぁって所まで分かったのですが、、
ご存知の方いらっしゃいましたら、ヒントだけでも頂きたい
です。宜しくお願い致します。

No. 2157 # 2001/09/27 (木) 21:45:08
長文ですみません……。

>>2115 68user
> " の中に " をそのまま書いた
その通りです。うっかりしてました。

> form の action です。
htmlと同じなのですね。
strはよく見るのですが,hogeとかfugaは知らなかったので……。
よければ意味を教えて下さい。

> つまり全く同じコードであって、同じバイト列を EUC-JP と解釈するか、
> Shift_JIS と解釈するかで表示が違う、ということになります。
なるほど。

> print "Content-type: text/html; charset=EUC-JP\n\n";
> と適切なエンコーディングを指定してやればよいです。
やってみましたが,同じ結果でした。うーん……悩む……。
ちなみにこうする前は,
Content-type: text/html\n\n

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-euc-jp">
を入れていました。

> > jcodeのh2z_eucを使っても上手くいきません。
> この件は具体的に書いたスクリプトを提示して下さい。
require 'jcode.pl';
jcode::convert(\$str, 'euc');
jcode::h2z_euc(\$str);
です。

> なるほど。ただその手法は壊れる確率は低いけど正確なカウントは
> できないように見えるので、ある意味「逃げ」かなぁとは思います。
> 完璧な排他ができないはずはないと思っていますので。

そうですね。
私は「累計」を正確にカウントすることに意味があるのか疑問なので
(カウンタは目安だと思っているので)気にしていないのですが,
プログラム的にはつきつめる価値はあると思います。

>> 2152
> であれば, submit が含まれている form の target に "_top" を
> 指定すれば良いだけに思えますが・・・
formにtargetが使えることを知りませんでした。
やってみたら上手くいきました。ありがとうございました。

> > EUCでconvertする前に文字化けしてしまうので(?)
> というのは, どのように確認されましたか?
いえ,確認できていないので(?)を付けています。
ただ,convertした後に半角カナを拾い出すスクリプトを入れていて,
文字化けした後の文に含まれている半角カナは拾うことができているので,
なんとなくそうなのかな……と思いました(根拠になっていませんね)。
例)半角カナで「明アイウエオ」とすると「フタ竺軸宍雫七」(フタ:半角カナ)に
文字化けし,「フタ」を拾い出すことができています。

> スライス?
すみませんが,意味がわかりませんでした。
ちなみに,このやり方は本屋で買った書籍から知りました。

No. 2158 # 68user 2001/09/30 (日) 20:33:52
>>2157
> hogeとかfugaは知らなかったので……。
hoge の意味ですか? ならこちらを。
    http://www.selab.tutkie.tut.ac.jp/~yoshida/hoge.html

> require 'jcode.pl';
> jcode::convert(\$str, 'euc');
> jcode::h2z_euc(\$str);
それで正しいと思います。

それでも化けるなら、文字列処理をしている全ての処理
    - ブラウザから渡された「%8e%b1%8e%b2」というような URL エンコード
        された文字列
    - & で split した文字列
    - = で split した文字列
    - URL デコードした文字列
    - EUC に変換した文字列
で、print 文でデータを出力してみて下さい。そしたらどこで化けて
いるかわかるでしょう。また、フォームが書いてある HTML の文字
コードが何になっているかも調べて下さい。

わからなかったら、最小限まで切り詰めたソースを見せて下さい。

>>> if ((@file1[9]) > (@file2[9])) {
>> スライス?
> すみませんが,意味がわかりませんでした。
$file1[9] が正しい、ってことでしょう。

> ちなみに,このやり方は本屋で買った書籍から知りました。
$file1[9] や (@file1)[9] なら正しいですが (わざわざ後者の書き方を
する必要はありませんが)、@file1[9] は誤りです。本当にそう書いてあるなら
その本は捨てましょう。

>>2156 Nira
> CONNECT **.com:443 HTTP/1.0
> HOST: **.com
ここまでは正しいと思います。その後は暗号化したリクエストを
送りますが…暗号化まで自力でやろうとしておられます?

No. 2159 # Nira 2001/10/01 (月) 12:23:45
>>2158 68user
ご返答ありがとう御座います。

>ここまでは正しいと思います。その後は暗号化したリクエストを
>送りますが…暗号化まで自力でやろうとしておられます?

CONNECTメソッドまでは正しいですか。
暗号化を自分でやるだけの知識は無いです。(--;)
CONNECTした後は、サンプル通りのにやっているのですが、
SSL_connect()で0が返ってきます。
方法が正しいなら他の部分のバグかもしれないっすね。

そういえば、httpsの取得に良いサイトを発見しました。
https://www2.ggn.net/cgi-bin/ssl
です。http://www.moxienet.com/lynx/ssl-testから
リダイレクトされるサイトで、LynxでSSLが使用できる
かどうかをチェックするためのサイトらしいです。

No. 2160 # Nira 2001/10/01 (月) 13:29:18
>>2158 68user
ありがとう御座いました。

理由はわからないのですが動くようになりました。
SSL_load_error_strings();
の後に
  ERR_load_crypto_strings();
  ERR_load_SSL_strings();
  OpenSSL_add_all_algorithms();
を追加してみたら、難なく動きました。(--;)
http://www.openssl.org/docs/crypto/BIO_f_ssl.html
のサンプルを見てたら、上記3つの関数を呼んでいたので
真似してみました。

お騒がせ致しました。m(_ _)m

No. 2161 # あやの 2001/10/02 (火) 15:08:46
はじめまして
最近CGIを作りはじめたして、問題が・・・

サーバはUNIXでCGIの処理を行なった後に作られたファイルの所有権がすべてnobodyになってしまっていて、その作られたファイルの操作が全くできなくなってしまいました。所有権の変更も出来ないんです。
だれか助けて下さい。。
おねがいします。

No. 2162 # 68user 2001/10/02 (火) 16:51:17
>>2159 Nira
> そういえば、httpsの取得に良いサイトを発見しました。
ありがとうございます。このページをサンプルとして載せておきます。

>>2161 あやの
> その作られたファイルの操作が全くできなくなってしまいました。
    #!/usr/bin/perl
    system("rm -f ファイル");
    print "Content-type: text/plain\n\n";
    print "File removed.\n";
というような CGI スクリプトを作って、ブラウザから CGI に
アクセスすれば消せます。

> 所有権の変更も出来ないんです。
普通ファイルの所有者を変更できるのは root のみです。
# 設定次第でできる OS もありますが。

よって、
    - 事前にファイルを作成しておき、nobody が中身を変更できる
        ようにパーミッションを設定する。
    - ファイルの所有者は nobody とし、他のユーザがそれを
        参照・変更できるようにパーミッションを設定する。
    - ファイルの所有者を nobody 以外とする。
            サーバ管理者に suExec や cgiwrap を入れてもらうか、
            自分で suid なプログラムを作る。
            # http://x68000.startshop.co.jp/~68user/webcgi/permission.html
のいずれを選ぶ、ということになります。

No. 2163 # けんじ 2001/10/02 (火) 18:37:28
はじめまして、こんばんはっす。
突然ですがシェルスクリプトをつかってファイルを
書き換えようとしてるのですが
"ディレクトリースタックの番号指定が深過ぎます."
とコメントされ動いてくれません。どういうことなんでしょうか?
ちなみに このシェルスクリプトです。
わかるかたがいたら教えて下さい。
#!/bin/tcsh
set d=1
while(d<=16){
  cat -n invar3_$d.dat > ninvar3_$d.dat
  d++}
end

No. 2164 # 68user 2001/10/02 (火) 19:48:51
>>2163 けんじ
突っ込みどころがたくさんありすぎて書ききれないので、とりあえず
動くものを置いておきます。
    #!/bin/tcsh
    set d=1
    while ( $d < 16 )
        cat -n invar3_$d.dat > ninvar3_$d.dat
        @ d = $d + 1
    end

まずはマニュアルか、初心者向けの csh プログラミングの本を
読んで下さい。よい本が見付からなければ sh で書くのも手です。
sh なら結構な種類の本が出ています。

No. 2165 # けんじ 2001/10/03 (水) 14:29:33
すいません、丁寧に教えていただき
ありがとうございます。
はい、もっともっと勉強していきます!

ただ、perlやshではうまくいってくれるのですが
なぜかcshでは教えてくださったようにしても
"デレクトリースタックの番号指定が深過ぎます."
といって動いてくれません。

特になにも変更等していないのですが、、、、。
なにはともあれありがとうございました!

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2166 # かな 2001/10/03 (水) 18:44:11
とても長いCGI処理がしたくてforkで子プロセスに処理を投げてあげたときは、ブラウザがすぐ開放されることは分かったんです。でも、処理中にエラーとか発生したときは見た目で分からなくなっちゃうんですよね??
エラーのときはなんか表示させたいのですが良い方法はあるのでしょうか?
それとも長い処理はもっとfork以外の違う方法があるんですかね??

よろしくおねがいします。。。

No. 2167 # 68user 2001/10/03 (水) 20:49:31
>>2165 けんじ
> ただ、perlやshではうまくいってくれるのですが
perl と sh と csh は全く別物ですけど、それは理解されてますか?

> 特になにも変更等していないのですが、、、、。
という文章は、sh で動いたものをそのまま csh でも動かそうと
しているように見受けられます。

> "ディレクトリースタックの番号指定が深過ぎます."
$d<=16 を d<=16 と書けばそうなります。


>>2166 かな
掲示板の一番上にある「使い方」を全く読んでいませんね。
# http://www.parkcity.ne.jp/~chaichan/qanda/qa1999.htm?01-10-03-19-11

No. 2168 # 2001/10/03 (水) 22:54:06
>>2158 68user
> print 文でデータを出力してみて下さい。そしたらどこで化けて
> いるかわかるでしょう。また、フォームが書いてある HTML の文字
> コードが何になっているかも調べて下さい。
やってみたら,どこで化けているかわかりました。
jcode::convert(\$str, 'euc');
で化けていて,これを削除したら化けなくなりました。
なぜでしょうか?
フォームが書いてあるHTMLの文字コードはeucにしています。
その場合は,コンバートする必要がないということでしょうか?
とりあえず解決したみたいなのですが(?),
気になるのでぜひ教えて下さい。

> $file1[9] が正しい、ってことでしょう。
あ,確かに。
本からそのまま写して問題なく動いていたので
全然気付きませんでした。
人に見せると恥ずかしいので,早速,修正しました。
ありがとうございました。

> その本は捨てましょう。
あはは(^^;
確かに,少なくとも私のような初心者は
正しい記述の本で勉強した方がいいでしょうね。
私でも気付くような間違いがあちこちにあることは確かです。
でも,プログラミングのアイデアというかミソというか
参考になる点もたくさんあって,結構重宝してます。

No. 2169 # ジュン [URL] [E-mail] 2001/10/04 (木) 01:33:36
とても初歩的な質問だと思いますが、教えて下されば幸いです。
掲示板を最近設置したのですが、サーバがアメリカにあるため
時差があるタイムスタンプをします。この時間を 16 時間早めたいのですが
どのような記述をすればいいのか、わからないのです。恐らく下記の一行が関係するのだと思います。

$TimeDiff = 0;

よろしくお願いいたします。また、過去ログを一応見ましたが既出の質問であった場合はお詫び申し上げます。

No. 2170 # 68user 2001/10/04 (木) 01:48:25
>>2168
> なぜでしょうか?
なぜでしょうね? 正確なところは各部分で
    s/([^-_a-zA-Z0-9])/sprintf("%%%02lX",unpack("C",$1))/eg;
として URL エンコードした結果を見ないとわかりません。

> フォームが書いてあるHTMLの文字コードはeucにしています。
> その場合は,コンバートする必要がないということでしょうか?
NN4, NN6, IE4, IE5 あたりなら、フォームの書いてある HTML と
同じエンコーディングで、フォームデータを送ってきますので、
フォームの書いてある HTML と、処理するデータのエンコーディングが
一致しているなら jcode::convert は必要ありません。

ただし、これは規格として明文化されているわけではないので、
あくまでも NN と IE がそういう挙動をする、ということです。
もし Shift_JIS や ISO-2022-JP で送ってくるブラウザがいた
場合は化けます。


>>2169 ジュン
> この時間を 16 時間早めたいのですが
言語は何ですか? 以下は perl だと仮定して…。

$TimeDiff をどのように利用しているのかわからないと
なんとも言えませんが、秒数なら $TimeDiff = 60*60*16、
時間なら $TimeDiff = 16 でしょうか。

localtime を使っているなら、その前の行に $ENV{TZ}='JST-9'; と
書いておけばうまくいくかもしれません。

No. 2171 # スナフキン 2001/10/04 (木) 01:59:50
> その本は捨てましょう。
う〜ん、ここは68userのボードなので構わないのですが、
なんか、2ch化しているようでちょぴりショックだなぁ(^^ゞ

多分typeでしょう、本当にその様に書くことを勧めているのであれば
68userさんと同じ意見ですが…
だけど、椎さんがコマンドの本来の項を読まずに、理解しようとしないで
コピーしているだけであれば、椎さんの手抜きでしょうけど(^^ゞ
まあ、自分もはじめはそうだったので人の事を言えませんが(笑)

ちなみに、テストの為にコンバートした短い文字列を表示していませ
んか?昔のネスケでの挙動ですが、短い文字列の場合はブラウザで文字
コードの判別がつかずに化ける場合があります。
その場合はそこそこの長文を表示すると、うそのように表示される場合
が有りました。
原因はSJISとEUCの文字コードが一部かぶる為です。(自分のスクリプ
トはSJISで記述の為)

あと、よくやるのがEUCでコンバートして出力していながら、CGIの他の
表示部分で違うコードを出力していたり(結構気付かなかったりします)
プログラマーな人は、この様な無駄なトラブルを減らす為にALL EUCで
作る人が多いようですね。

>プログラミングのアイデアというかミソというか
自分の場合は、他人のスクリプトを解析することでいろいろ覚えました。
リファレンス以外はこの手法が一番お勧めです。
無駄を省いたルーチンは誰が作っても大体同じようなものになるはずです。
この掲示板のソースだってかなり勉強になるはずですよ(^^ゞ

>>2166 かな
「使い方」を読むどころか、コピー文章ですね(^^ゞ
ここまで典型的なのもはじめて見ました(笑)


ところで、最近JAVAに嵌まっているようですが、JAVAはJavaScriptと
perlとどちらに近い印象でしょうか?>68userさん
敬遠していたJAVAも覚えた方がいいかなぁ、と思う今日この頃(^^ゞ

No. 2172 # /tk 2001/10/04 (木) 02:02:53
>>2168
> jcode::convert(\$str, 'euc');
> で化けていて,これを削除したら化けなくなりました。
> なぜでしょうか?
とりあえず, getcode 関数の戻り値を確認してみましょう。
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-1
http://www.din.or.jp/~ohzaki/perl.htm#JP_Code

>>2157
>> スライス?
> すみませんが,意味がわかりませんでした。
ありゃ。すみません。
>>2158 68user
> $file1[9] が正しい、ってことでしょう。
という意味でしたが, 断言する自信が無いのと
もし, 意図的にやっている事ででしたら
その理由が聞きたかったもので…

ちなみにスライスについては
http://www.context.co.jp/perlnews/bn/perl-newsletter-0010.html
http://www.context.co.jp/perlnews/bn/perl-newsletter-0013.html
が参考になると思います。

No. 2173 # ジュン [URL] [E-mail] 2001/10/04 (木) 02:21:11
>68userさん

素早い回答と、明確のお答えありがとうございます。

使っている言語はperlで、秒数の設定により解決しました。ありがとうございました。

No. 2174 # 2001/10/04 (木) 21:46:47
>>2170 68user
> 一致しているなら jcode::convert は必要ありません。
必要ないということは,あってもいいのでしょうか。
つまりeucをeucにコンバートする処理をしても問題はないんですよね?
そうだとしたら,今回の問題はまだ解決できていないということですね。

>>2171 スナフキン
> コピーしているだけであれば、椎さんの手抜きでしょうけど(^^ゞ
ええ,その通りです。まだわからないことが多いので,とりあえず(^^;

> そこそこの長文を表示すると、うそのように表示される場合
> が有りました。
そうかもしれません。ただ,短い文字列を入力するようにしていますので,
根本的に解決しないとダメですね。

> CGIの他の表示部分で違うコードを出力していたり
イメージできないんですが,具体的にどんな場合でしょうか。
エディタでeucで保存するようにしているのですが,
これだけではeucにならないものでしょうか。

> この掲示板のソースだってかなり勉強になるはずですよ(^^ゞ
機種依存文字の検出のところなど,参考にしたいなと思っていました。
とはいえ,今日初めてソースを見たのですが,
理解するのに,かなり時間がかかりそうです。

>>2172 /tk
> とりあえず, getcode 関数の戻り値を確認してみましょう。
おお,これは使えそうですね。やってみます。

> ちなみにスライスについては
なるほど〜。よくわかりました。
必要がないのにスライスを使っていたことになるわけですね。
意図的でなくて申し訳ない感じです。

No. 2175 # TOM 2001/10/04 (木) 23:17:10
こんにちは、はじめましてTOMです。
初級アマチュアプログラマーです。
ちょっと自分で解決できなかったので質問を聞いてください。

・モジュールAに、ライブラリlib30.soをリンクしています。
・モジュールBに、ライブラリlib40.soをリンクしています。
・さらに、ライブラリlib40.soの中で、ライブラリlib30.soの中の関数Func09が
    使用されています。
ライブラリlib30.soの中の関数Func09が修正されました。
再コンパイル、再リンクは、
全て(モジュールA・モジュールB・lib30.so・lib40.so)
行わなければならないのでしょうか?
よろしくおねがいします。

No. 2176 # 68user 2001/10/05 (金) 11:59:17
>>2175 TOM
Func09 の引数の数や、引数の型、戻り値の型を変更しましたか?
また、Func09 から他の部分のグローバル変数を参照するところ
を変更しましたか?

いずれの変更もしてないなら、ライブラリ利用側の再コンパイル・
再リンクは不要です。

引数や戻り値を変えた (=インタフェースを変えた) なら、
再コンパイル・再リンクのし忘れを防ぐため、メジャー番号を
    lib30.so.1 -> lib30.so.2
などと上げた方がよいでしょう。


>2174
>> 一致しているなら jcode::convert は必要ありません。
> 必要ないということは,あってもいいのでしょうか。
あってもよいです。僕は必ず jcode::convert は付けます。

> つまりeucをeucにコンバートする処理をしても問題はないんですよね?
本来問題ないのですが、Shift_JIS の半角カナと EUC-JP を正確に
判別することはできないので、EUC-JP な半角カナを Shift_JIS の
文字列だと誤認してしまい、EUC-JP に変換しようとする、ということは
あります。

一応 jcode.pl がエンコーディングを自動判別する際は、「Shift_JIS と
して解釈できる部分の長さ」と「EUC-JP として解釈できる部分の長さ」を
比較して長さが長い方を採用しますが、もちろんこれでも完璧では
ありません。

# たしか両方の長さが一致したら、EUC-JP とみなされたと思う。

> 必要がないのにスライスを使っていたことになるわけですね。
いいえ、@a[0] はスライスを使っているわけではありません (よね?)。
perl がおせっかいなので @a[0] -> $a[0] という読み替えをしている
だけです。
    % perl -we '@a=(100,200);print "@a[0]\n"'
    Scalar value @a[0] better written as $a[0] at -e line 1.
    100


>>2171 スナフキン
> ところで、最近JAVAに嵌まっているようですが、JAVAはJavaScriptと
> perlとどちらに近い印象でしょうか?>68userさん
うーん、どっちも遠いですねぇ…。でもまぁ僕がやってるのは
サーバサイドの方なので、どちらかと言えば perl ですか。
でも、perl とは似てないですね。

とにかくクラス設計が楽しいです。

No. 2177 # かな 2001/10/05 (金) 13:34:44
すいませんでした。
以後気を付けます。。

No. 2178 # SA [E-mail] 2001/10/05 (金) 14:54:15
はじめまして。

ネットワーク関係の関数でちょっと質問なのですが。

inet_aton(hostname)になっていますがこれをinet_aton (ipaddres)
にしても問題はないのでしょうか?

hostnameが解決されていない場合、IPアドレスをそのまま
使用してみたのですが表面上問題はでていませんが、
内部的にどうかまで分からなかったので。

どなたか教えて下さい。

分かり難い内容の書き込みになってすみません。

No. 2179 # /tk 2001/10/06 (土) 00:15:42
>>2176 68user
> # たしか両方の長さが一致したら、EUC-JP とみなされたと思う。
一致した場合は undef では?

> いいえ、@a[0] はスライスを使っているわけではありません (よね?)。
> perl がおせっかいなので @a[0] -> $a[0] という読み替えをしている
> だけです。
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
を読んだうえでの僕の解釈は

@a[0] はスライスです。
但し, 要素数が 1 のリストであり, スカラー値ではありません。
たまたま @a[0] をスカラーで評価したときに, その最後の要素である
$a[0] が返されただけです。

となるのですが
例によって勘違いしている可能性大です。

No. 2180 # TOM 2001/10/06 (土) 01:37:19
>>217668user
68userさん
インターフェイスの変更は、ありませんので
ライブラリ利用側を再コンパイル・再リンクせずに利用できました。

回答ありがとうございました。

No. 2181 # 2001/10/06 (土) 12:31:57
/tkさんが教えてくれた↓のページを読むと,
> http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-1

・convert()は内部ではgetcode()を自動的に呼び出し文字コードを判断する
・getcode()では,半角カナは文字コードの自動認識の判断対象からはずされる

とあります。また,スナフキンさんが
> そこそこの長文を表示すると、うそのように表示される場合が有りました。

と言われたように,私の場合も半角カナ以外の文字をある程度以上追加すると
文字化けしないことがあります。
例)アイウエオ(半角)         →竺軸宍雫七(全角)
        アイウエオ(半角)あいうえお(全角)→アイウエオ(半角)あいうえお(全角)

これらのことから,今回の文字化け現象の原因は,convert()が
(正確にはgetcode()が)半角カナの文字コードを
正確に判別できていないことのようです。

これを調べるためにコンバートの前後でgetcode()をかけてみました。

$code1 = &jcode::getcode(\$str);
jcode::convert(\$str, 'euc');
$code2 = &jcode::getcode(\$str);

その結果,次のようになりました。

$str = 'あいうえお'     → $code1 = 'euc',$code2 = 'euc'
$str = 'アイウエオ(半角)' → $code1 = 'sjis',$code2 = 'euc'

つまり,getcode()は半角カナの「アイウエオ」をsjisと判定して
sjisをeucに変換する処理をしていたのです。

長々と書きましたが,68userさんが書かれたように,
> Shift_JIS の半角カナと EUC-JP を正確に
> 判別することはできないので、EUC-JP な半角カナを Shift_JIS の
> 文字列だと誤認してしまい、EUC-JP に変換しようとする、ということは
> あります。

ということのようです。

で,ここでどうするかというプログラム上のアイデアが問われるのですが,
(残念ながら例の本には載っていません・笑)
今は,「$strに全角文字を数個追加して,コンバート後にそれを除く」ということを
考えています。
ただ,自分でもかっこ悪いなぁと思うので,他にアイデアがあれば教えて下さい。


>>2176 68user
> いいえ、@a[0] はスライスを使っているわけではありません (よね?)。

私は/tkさんが教えてくれたページを読んでスライスを覚えたので
No.2179の/tkさんと同じ解釈をしたのですが,
この解釈の違いによって,使い方とその結果が変わるということが
ないのであれば,あまり本質的な問題ではないような気がします。
68userさんが正しい知識を教えようとしてくれる気持ちはとてもありがたいです。

No. 2182 # シイ 2001/10/06 (土) 13:36:53
シイ

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2183 # shii 2001/10/06 (土) 13:43:10
すみません。下の書込は私,椎です。
今回のことがあって,名前のような文字数が少ないフォームへの
日本語の記入に抵抗を感じたので,
これから椎はやめてshiiにしようと思います。

No. 2184 # 68user 2001/10/08 (月) 00:53:21
>>2178 SA
> inet_aton(hostname)になっていますがこれをinet_aton (ipaddres)
> にしても問題はないのでしょうか?
問題ないと思います。FreeBSD では inet_aton と inet_addr は同じ
関数になってます。
# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/inet_addr.c?rev=1.12.2.1

>>2179 /tk
> @a[0] はスライスです。
ん〜、(@a)[0] とは違うということですか?

>>2179 /tk
> 一致した場合は undef では?
>>2181
> ・getcode()では,半角カナは文字コードの自動認識の判断対象からはずされる
そうでしたっけ…。昔 jcode.pl を読んだときはそうじゃなかった
ような気がしますが、読み違えていたのかもしれません。

> 今は,「$strに全角文字を数個追加して,コンバート後にそれを除く」と
> いうことを考えています。
追加する全角文字のエンコーディングを EUC-JP にするか、Shift_JIS に
するかが問題です。どちらか決めるためには追加対象文字列のエンコーディングを
自動判別しなきゃいけません。で、それが正確にはできないので…と堂々めぐりです。

まぁ、元のフォームが EUC-JP であるということなので、
    /([\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])*/
にマッチすれば EUC-JP として解釈できる文字列である、ということですから
無変換、でいいと思います。
# jcode.pl は汎用ライブラリですからそうもいきませんが。

> すみません。下の書込は私,椎です。
名前の部分にカーソルがある状態で Enter を押しても書き込み
しないようにすればよいのかな? (どうやるのかさっぱりわかりません)

No. 2185 # shii 2001/10/08 (月) 09:10:35
>>2184 68user
> 追加する全角文字のエンコーディングを EUC-JP にするか、Shift_JIS
> にするかが問題です。
半角カナ「アイウエオ」の場合,後ろにスペースを3つ追加するだけで
上手くいきました。多分,全角文字なら判別対象になるので,
それをある程度の長さで追記すればいいのかなと思いました。そこで,
html側で別に送った全角文字を追加して判別するつもりでした。

ただ,こちらの掲示板では短い半角カナの「シイ」を判別できたので,
jcode.plのせいではないようです(私の方ではシイも化けました)。
cgi-lib217.plを使っているせいかも……?

人様のプログラムの改造から使い始めたPerlですが,
以前に比べればいろいろなことがわかってきました。
上述のことを確かめる意味でも,
自分が理解できる範囲で1から作り直してみることにします。
(jcode.pjは深く考えずに使いますが……(^^;)
それを検証できたらまた報告しますね。

No. 2186 # スナフキン 2001/10/09 (火) 01:43:48
>>2174
>イメージできないんですが,具体的にどんな場合でしょうか。
すみません、よく読んでいませんでした。
CGIで出力するページソースの中の日本語コメントがSJISでEUCに変換
した日本語を同時に出力と言うケースでしたが、shiiさんの場合は
まったく違うようですね。


>>2176 68user
サーバーサイドという事は常駐システムですね。
さすが68userさん(笑)

自分も先日初心者用のCD付き本を買ってきて、JDKをインストールして
みましたが、いきなりサンプルの Hello! が動かないトラブルで、
既にめげています(笑)

ざっと見た感じでは、関数類を覚えれば特に難しく無さそうな感じも
しますが、甘いかな?(^^;
もしよければ、お勧めの初心者向けサイトを教えてくれると嬉しいです。

>2184
>名前の部分にカーソルがある状態で Enter を押しても書き込み
こういう事でしょうか?

<HEAD〜内
<SCRIPT LANGUAGE="JavaScript">
<!--
function submit_check(){
  if(!document.FORM.elements.MESSAGE.value){
    alert("メッセージを記入してください。");
    return;
  }
  if(!document.FORM.elements.NAME.value){
    alert("名前を記入してください。");
    return;
  }

  document.FORM.submit();
}
//-->
</SCRIPT>

<FORMへ
<FORM METHOD=POST ACTION="$script_name" NAME="FORM" OnSubmit="submit_check();return false;">
外してます?

No. 2187 # SA [E-mail] 2001/10/09 (火) 08:46:43
>68userさん

ありがとうございました。
IPアドレスで使用していきます。

No. 2188 # shii 2001/10/09 (火) 22:42:19
cgi-lib217.plを使わずにreadで読んでやってみましたが
やはり文字化けしました。引き続き調査中です。

No. 2189 # ふくし [E-mail] 2001/10/10 (水) 15:13:48
すいません、また怪奇現象が起こったのでお力をお貸しください。

Excel のワークシートを単純に <a href> タグでリンクすると
クリックすると中が見えてしまう(文字化けの文書として開こうとする)ので、
いぜん別の場所で教えてもらった方法をアレンジして
下のような CGI スクリプトで行っています。

--- download.cgi ---
#! perl

$arg = $ENV{'QUERY_STRING'};
$arg =~ /name=(.*)/;
$excelfile = $1;

$pwd = `pwd`;
chomp($pwd);

unless (open (FL, $excelfile)) {
        print "Content-type: text/plain\n\n";
        print "error opening $excelfile because $! at $pwd";
        exit;
};

print <<HEAD;
Content-type: application/octet-stream
Content-disposition: attachment;filename="$excelfile"

HEAD

print <FL>;
close(FL);
-------------------

これを、
<a href="http:.../cgi-bin/download.cgi?name=test.xls">ここをクリック</a>して xls ファイルを、、
のように呼び出そうという寸法です。

これが、場所によって挙動が異なるのです。

project
| cgi-bin
| | download.cgi
| subproj1
| | aaa.html
| | xxx.xls
| subproj2
| | subdir
| | | bbb.html
| | | yyy.xls


ここで、
http://org/~project/subproj1/aaa.html として見える aaa.html の中に、
<a href="http://org/~project/cgi-bin/download.cgi?=xxx.xls">XXXをダウンロード</a>
と書くとうまくいくのですが、
http://org/~project/subproj2/subdir/bbb.html の中に、
<a href="http://org/~project/cgi-bin/download.cgi?=yyy.xls">YYYをダウンロード</a>
と書くと、
error opening yyy.xls because No such file or directory at /.../project/cgi-bin
と表示されます。
パスが何らかの理由で見えないのかと思って
<a href="http://org/~project/cgi-bin/download.cgi?=../subproj2/subdir/yyy.xls">YYYをダウンロード</a>
と書くと、なんと download.cgi という名前でファイルを保存しようとします。
保存して中を開けてみると、中身はなんと yyy.xls!

1回目の実験は xxx => yyy の順番で行ったので、
何らかのキャッシュが行われているのかと思い、yyy => xxx の順で行っても同じです。

ということでよろしくお願いします。
サーバー側は FreeBSD 2.2.8-RELEASE+Apache(Apache のバージョンの見方がわかりません、、)、
クライアント側は Windows2000 Server+NC4.51 および IE6 です。

No. 2190 # ふくし [E-mail] 2001/10/10 (水) 16:15:59
↓下の件ですが、Apache は 1.2.5 だと管理者からメールが来ました。

No. 2191 # 68user 2001/10/10 (水) 18:03:20
>>2185 shii
そうですか、できましたか。どうも僕だけ話をわかってなくて
間違ったことばかり言っているようです。すみません。


>>2189 ふくし
download.cgi が実行されたときのカレントディレクトリは、download.cgi のある
ディレクトリになっているはずです。

よって、cgi-bin/xxx.xls も cgi-bin/yyy.xls もないので両方失敗するはずです。
なのに xxx.xls だけ成功するということは、cgi-bin/ の下に xxx.xls だけファイルが
置いてあったとか、シンボリックリンクが張ってあったとかいうオチではないかと
思うのですが、いかがでしょうか。


>>2186 スナフキン
> サーバーサイドという事は常駐システムですね。
うーん、CGI を常駐システムと呼ばないのと同じで、Java Servlet も
常駐システムとは呼ばないと思います。

> ざっと見た感じでは、関数類を覚えれば特に難しく無さそうな感じも
> しますが、甘いかな?(^^;
いや、そんなもんじゃないですか? 標準クラスライブラリを組み合わせて
パズルのようにプログラムを組み上げて行く感じです。

書き込みミスをした原因は
>>2184 68user
> 名前の部分にカーソルがある状態で Enter を押しても書き込み
> しないようにすればよいのかな?
のせいですか?>shii さん

もしそうなら
>>2186 スナフキン
> <FORM METHOD=POST ACTION="$script_name" NAME="FORM" OnSubmit="submit_check();return false;">
を組み込みます。

No. 2192 # ふくし [E-mail] 2001/10/10 (水) 19:34:53
>68user さん

すいません、、xxx.xls がなんかのはずみで cgi-bin に
入ってました、、いつもすいません、、。

../ で cgi-bin に遡れないんですね。
(download.cgi として yyy.xls が保存できたのがわからんが、、)
cgi-bin の下に project に対するシンボリックリンクを張って
解決しました。

No. 2193 # shii 2001/10/10 (水) 21:23:39
>>2191 68user
> そうですか、できましたか。どうも僕だけ話をわかってなくて
> 間違ったことばかり言っているようです。すみません。
え。何も間違ってないですよ(と,思うのですが)。
私の書き方がわかりにくかったらすみません。
というか私が無知で,68userさんが書いていることを理解できて
いないような気がします。

> 書き込みミスをした原因は
申し訳ないと思いつつ,半角カナを試させていただいたのです。
ですから書き込みミスではありません。すみません。
プログラム上は同じ事をやっている気がするのに,
どうしてこちらの掲示板では半角カナを判別できるのか
が現在の謎です。
ちなみに,
私のCGIでは「シイ(半角)」が「鴫」と化けます。
有名なTeaCupの掲示板でも同じように化けました。

私がこちらのソースを見ただけでは,わからなかったのですが,
コード判別で何か特別なことをされていますか?

私のjcode.plのバージョンはv 2.3 1997/02/23ですが,
バージョンのせいってことがあるのかな……?

No. 2194 # shii 2001/10/10 (水) 21:50:52
大ショックです。
jcode.plを最新版(v 2.13 2000/09/29)に入れ替えたら
半角カナを認識しました。それだけのことだったのです。
大解決です。ここまでたどりつけたのも皆様のおかげです。
ありがとうございました。
それから,いろいろと変なことを書いたりやったりして
すみませんでした。

ちなみに下に書いた私が使っていたjcode.plのバージョンは,
中に書いてあった記述をそのままコピーして貼ったのですが,
ちょっと変ですね(^^;

No. 2195 # shii 2001/10/10 (水) 22:06:43
思わず,半角カナを認識したと書きましたが,正確には違うようです。
半角カナのsjisとeucは判別しようがないですよね。

中の説明には特に書かれていないようですが,
判別不能な場合の処理として,
古いバージョンではsjisと判断していたところを
eucに判断するようにしたのではないでしょうか。

No. 2196 # shii 2001/10/10 (水) 22:14:31
どうやら,2.3から2.6にバージョンアップしたときに
修正されたようです。以下,引用です。
(バージョンの記述が変だったというのは私の勘違いでした。)
−−−−−−−−−−−−−−−−−−−−−
jcode.pl-2.6 をリリースしました。

    ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/jcode.pl-2.6

2.3 からの変更点は、以下の通り。

    - &jcode'tr の中で JIS コードの認識方法をちょっとだけ変更
    - JIS X 0208-1990 のシークエンスを認識するように変更
    - &jcode'getcode のバグを修正して、説明を追加

--utashiro

No. 2197 # 玉中 2001/10/11 (木) 15:50:55
はじめまして。玉中と申します。
突然の投稿で失礼致します。

1台のパソコンにネットワークカードが複数枚ささっており、それぞれにIPアドレスが割り当てられている場合に、それら全てのIPアドレスを取得するにはどのようにすればよいのでしょうか。言語は C/C++ です。

NIC が1枚だけの場合は、gethostname() と gethostbyname()
で取得できるのですが、複数の場合の取得方法が分かりません。

つまりは、ifconfig コマンドのようなことをやりたいのですが、
どなたか方法をご存知ありませんでしょうか。

よろしくお願い致します。

No. 2198 # SA [E-mail] 2001/10/11 (木) 18:45:51
UDPクライアントをPerlで作成したいのですが
なかなか上手く行きません。

特定のポート番号(例 NTPの123)にメッセージをなげて
そのポート番号が存在するかしないかを確かめたいのですが・・・

どなたか詳しい方いらっしゃいませんか?

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2199 # 68user 2001/10/12 (金) 01:01:12
>>2198 SA
> 特定のポート番号(例 NTPの123)にメッセージをなげて
送るだけなら、多分こんな感じだったかと。
    use Socket;
    my $iaddr = inet_aton("10.0.0.1");
    my $sock_addr = pack_sockaddr_in(123 ,$iaddr);
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    send(SOCKET, "hoge", 0, $sock_addr);

ただし、
> そのポート番号が存在するかしないかを確かめたいのですが・・・
UDP なので、送ったデータが相手側に到達したかどうかは
判別できません。

>>2197 玉中
> つまりは、ifconfig コマンドのようなことをやりたいのですが、
ioctl & SIOCGIFCONF でやるか、BSD 系なら getifaddrs(3) ってのが
使えるはずです (OS 名くらい書きましょう)。どちらも
    http://www.mmjp.or.jp/pearsoned/washo/network/wa_net28-j.html
の16章に載ってます。

あとは ifconfig のソースなどを参考にして下さい。
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sbin/ifconfig/

No. 2200 # /tk 2001/10/12 (金) 01:03:28
>>2184 68user
>> @a[0] はスライスです。
> ん〜、(@a)[0] とは違うということですか?
どちらもスライスだと思うのですが
@a は配列のスライスで, (@a) はリストのスライスかと…
ただし, どちらも一般的には「配列スライス」で括られると思います。

要は, 単数であっても配列やリストの添え字であった場合には
スライスと呼べるだろうという個人的解釈です。

# ↑突っ込み大歓迎モード

No. 2201 # AGE 2001/10/12 (金) 18:37:47
AGEと申します。
Red Hot Linux 7.0J を使用しています。

「ntp-4.1.0.tar.gz」をインストールしてみました。
しかし、rpm のものがあったのでアンインストールしたいのですが
インストールされたファイルを知る方法はあるのでしょうか?
よろしくお願いいたします。

No. 2202 # スナフキン 2001/10/12 (金) 23:29:55
>>2191 68user
ServletもCGIと同じくリクエスト毎に起動するのですか?
不勉強でした。セッション管理ができると言うので常駐するものと
勘違いしていました。

>パズルのようにプログラムを組み上げて行く感じです。
そのパズルが難しそう(^^;

>>2201 AGE
>インストールされたファイルを知る方法はあるのでしょうか?
man rpm をどうぞ。
ntpってRHLに標準で入っている(はず)の xntpdとは別物なんですね。

No. 2203 # AGE 2001/10/12 (金) 23:52:20
>>>2202 スナフキン

>man rpm をどうぞ。

すいません。言葉足らずでした。

xntp はインストールされてなかったので、
ntp はソースから make install しました。
その場合のインストールされたファイルを知りたかったのです。

ntp を削除して、管理しやすい xntp(ntp-4.0.99-15〜.rpm)を
インストールしようとおもってます。

No. 2204 # shii 2001/10/13 (土) 12:17:44
ええと,結局,最新版jcode.plでも半角カナは文字化けしました。
たまたま「シイ」はOKでしたが「アイウエオ」はNGでした。
こちらの掲示板でもたぶん化けると思います。

そこで,前に書いた方法をスクリプトにしてみました。

尚,送信ページには,↓この1行が入っています。
<INPUT TYPE="hidden" NAME="assist" VALUE="     ">
VALUEは,全角スペース5個です。
−−−−

# コード判別補助文字列名(送信ページと統一,半角英数字に限る)
$assi = 'assist';

read(STDIN,$input,$ENV{'CONTENT_LENGTH'});
@parts = split(/&/,$input);

# コード判別補助文字列$ASSIST0の取得
foreach(@parts) {
    ($key0,$val0) = split(/=/); # 最初の=で分離
    $key0 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
    if ($key0 eq "$assi") { $ASSIST0 = $val0; }
}

foreach(@parts) {
    ($key,$val) = split(/=/); # 最初の=で分離
    $val =~ tr/+/ /; # trは1文字単位の置換
    
    # コード判別補助文字列の追加
    if ($key ne "$assi") { $val = $val.$ASSIST0; }

    $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
    $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
    jcode::convert(\$key,'euc');#---- from jcode.pl
    jcode::convert(\$val,'euc');#---- from jcode.pl
    
    if ($key eq "$ass") { $ASSIST = $val; }
    $val =~ s/($ASSIST)$//g; # コード判別補助文字列の除去
    $key =~ s/\r\n|\r|\n//g; # gはマッチする文字全て
    $val =~ s/\r\n|\r|\n//g;
    $key =~ s/,/,/g; $val =~ s/,/,/g;
    $key =~ s/</</g; $val =~ s/</</g;
    $key =~ s/>/>/g; $val =~ s/>/>/g;
    $key =~ s/"/”/g; $val =~ s/"/”/g;
    $key =~ s/&/&/g; $val =~ s/&/&/g;
    $in{$key} = $val;
}
−−−−
これで「ア」などという1文字の半角カナもコード判別できているようです。
もうちょっとスッキリできればいいのですが……。

No. 2205 # ナナシサソ 2001/10/13 (土) 20:40:22
>>2204 shii
http://www.din.or.jp/~ohzaki/perl.htm#JP_Code

っていうかそのコードには
気になる点がいろいろと・・・

No. 2206 # shii 2001/10/13 (土) 21:24:57
>>2205 ナナシサソ
リンク先はPerlメモのgetcode関数のところですね。
できれば気になる点を具体的に指摘していただけると
とてもありがたいのですが。

No. 2207 # 68user 2001/10/13 (土) 21:45:30
>>2204 shii
考え方はよいのですが、もちっとスマートにやるなら、
    「あ」の文字コードを調べるスクリプト
        require 'jcode.pl';
        $_="あ";
        jcode::convert(\$_, 'euc');
        s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
        print "あ in euc-jp: $_\n";
        $_="あ";
        jcode::convert(\$_, 'sjis');
        s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
        print "あ in shift_jis: $_\n";
        $_="あ";
        jcode::convert(\$_, 'jis');
        s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
        print "あ in jis: $_\n";

    実行結果:
        あ in euc-jp: %A4%A2
        あ in shift_jis: %82%A0
        あ in jis: %1B%24B%24%22%1B%28B # これは他のパターンも有りうるかも
を踏まえて、
    <input type="hidden" name="assist" value="あ">
としておき、
      read(STDIN,$input,$ENV{'CONTENT_LENGTH'});
      
      ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//;

      if ( $assist_code =~ m/^\%A4\%A2$/i ){
          $input_encoding = 'euc';
      } elsif ( $assist_code =~ m/^\%82\%A0$/i ){
          $input_encoding = 'sjis';
      } elsif ( $assist_code =~ m/^\%1B\%24B\%24\%22\%1B\%28B$/i ){
          $input_encoding = 'jis';
      }

      @parts = split(/&/,$input);
      foreach(@parts) {
              ($key,$val) = split(/=/);
              $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
              $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
              jcode::convert(\$key,'euc', $input_encoding);
              jcode::convert(\$val,'euc', $input_encoding);
      }
くらいがよろしいかと思います (動作確認はしていません)。

>>2203 AGE
> ntp はソースから make install しました。
> その場合のインストールされたファイルを知りたかったのです。
もし Makefile に uninstall とか deinstall とかいうターゲットがあるなら、
    # make uninstall
    # make deinstall
ですが、なさそうならば
    # make -n install
して、インストールされるファイルをメモって、手動で rm ですね。

>>2202 スナフキン
> ServletもCGIと同じくリクエスト毎に起動するのですか?
いいえ、しません。そういう意味では常駐していますね。

しかし、CGI を使うときも apache が常駐していますが、「常駐
システムを開発している」という意識は僕にはありません。それと
同様に、Servlet コンテナが常駐していても「常駐システム」とは
呼ばないんじゃないなぁ、ということです。まぁ、ここらへんの
感覚は人によって違うのかもしれません。

>>2200 /tk
> どちらもスライスだと思うのですが
えっと、@a[0] と (@a)[0] は違うんですよね? ということです。

要は、
    「@a[0] は文法エラーのところを perl があえて $a[0] に読み変えている」
とこれまで思っていたのですが、
    「@a[0] は文法的には正しいけれど、$a[0] の方が適当なので
        perl があえて警告するようにしている」
ということでしょうか?

> @a は配列のスライスで, (@a) はリストのスライスかと…
perl に配列とリストという区別はあるんでしたっけ。

No. 2208 # shii 2001/10/14 (日) 09:24:30
>>2207 68user
おお,なるほど!ありがとうございます。
ダミーを送るのなら,それをわざわざ対象文字列に結合しなくても
いいわけですね。私が間抜けでした。

文字コードを調べるスクリプトが面白いですね(勉強になります)。

今回の件を自分のCGI向けに最小限にカスタマイズした(つもりの)
スクリプトが下記です。

#---------------------------------------------------------
read(STDIN,$input,$ENV{'CONTENT_LENGTH'});
@parts = split(/&/,$input);
foreach(@parts) {
    ($key,$val) = split(/=/);
    $val =~ tr/+/ /;
    $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
    $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
    
    $code = &jcode::getcode(\$key);
    jcode::convert(\$key,'euc',$code);
    jcode::convert(\$val,'euc',$code,"z");
    
    $val =~ s/\r\n|\r|\n//g;
    $val =~ s/,/,/g;
    $in{$key} = $val;
}
#---------------------------------------------------------

入力項目名に半角カナ以外の日本語を使用することが前提なので,
汎用性はありません。
getcode関数を全項目に使っているところが余分なのですが,
見た目は,以前に比べてすっきりしました。

ところで,
> ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//;
ここはassistの中身のみを残して残りを消す作業だと思うのですが,
($assist_code)にカッコがついている理由と,
正規表現内のカッコの数が合わない理由を教えてください。

・「行の先頭」または「&の直後」にある「assist=」
・「任意の1文字の0回以上の最短マッチ」
・「行の終わり」または「&の直前」

と,部分的にしか理解できませんでした。

No. 2209 # ナナシサソ 2001/10/14 (日) 18:02:18
>>2208 shii
おいらはこう書くべきと思うけどな
my ($assist_code) = $input =~ /(?:^|&)assist=([^&]*)/;
どうせassist=なんじゃら、なんて残ってたって関係ないし。

> 正規表現内のカッコの数が合わない理由を教えてください。
ミスだねこれは

だいたい、これだと
> ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//;
$assist_codeに入るのは(^|&)の部分になっちゃう

No. 2210 # AGE 2001/10/15 (月) 12:29:41
>2207 68user

>もし Makefile に uninstall とか deinstall とかいうターゲットがあるなら、
> # make uninstall

これでうまくいきました。ありがとうございました。

No. 2211 # ぷよ丸 2001/10/16 (火) 22:17:43
メールを送るCGIについて。

フォームに入力されたメールアドレスに対して、Sendmailを使って
CGI(Perl)からメールを送る時のことです。

ユーザやホスト名などが間違ったメールアドレスを入力しても、外部の
サーバ宛てなら、正常にCGIが終了し、エラーメールが戻ってきます。

ここまでは良いのですが、CGIやSendmailがあるサーバと同じサーバ
宛てにメールを送る場合、アドレスが正しければもちろん正常にCGI
は終了し、メールは届きますが、UserUnknownになるようなメールアド
レスを指定して送ると、正常にCGIは終了せず、サーバエラーになっ
てしまいます。

このようなサーバエラーを回避する方法はあるのでしょうか?

どなたか教えて下さい。よろしくお願いします。

No. 2212 # pearl 2001/10/18 (木) 00:37:49
初めましてpearlともうします
以下のことで大変困っておりこの掲示板にたどり着きました
どうぞアドバイスをよろしくお願いします

NTサーバーのあるディレクトリ(aaa)以下の
複数のサブディレクトリ(x1,x2,x3...)にある全てのファイルを
階層構造を保ったままSolarisのあるディレクトリにそっくり
移動(転送)したいのです操作できるのはSolaris側のみで
シェルスクリプトによる自動実行を目指しております
当初はftpのオプションで簡単に出来ると思っておりましたが・・。

また不定期にサブディレクトリおよびファイルの追加があり
出来得るならば初回以降は差分ファイルの転送だけ行いたい
のですが実現可能な方法をどなたかご教示願えませんか?

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2213 # 68user 2001/10/18 (木) 01:36:38
>>2209 ナナシサソ
> おいらはこう書くべきと思うけどな
そうですね、僕の書いたコードではうまく動きませんでした。

>>2211 ぷよ丸
要はエラーを無視できればよいのですか? 何もエラー処理を
考えずに書けば無視できるのではないかと思うのですが、
具体的にどのように sendmail を実行していますか?

>>2212 pearl
おそらくは rsync を使うのがベストではないかと思います (使った
ことはありませんが)。それがダメなら wget かなぁ。あるいは
Solaris に sharity-light を入れて SMB しゃべれるようにして、
NT 側は共有フォルダ (って言うのかな) にしておくとか (これも
使ったことはありません)。

No. 2214 # ぷよ丸 2001/10/18 (木) 23:29:26
「エラー処理を無視できれば・・・」で、ひらめいて、エラーログ
を見ながらいろいろとやってると解決できました。
つまり、sendmailでメールを送るときに、同一サーバ宛てのメー
ルアドレスが間違っていると、標準出力にUserUnknownのエラーが
書き出され、HTML出力前にそうなるから、エラー(BadHeader
のエラーかな?)になっていたんですね。
それが分かったので、HTMLを先に出力してから標準出力を閉じ、
sendmailでメール送るという順序にすることで解決しました。
これだと、sendmailの実行時にエラーが出てもCGIからは無視し
た感じになりますものね。

めでたしめでたしで解決したので報告します。

コメントありがとうございました。
これからもよろしくお願いします。

No. 2215 # /tk 2001/10/19 (金) 00:09:33
>>2207 68user
> 要は、
> … cut …
> ということでしょうか?
そういう事だと思います。
以前書いた時に記述した近藤さんのサイトにも
> @a[0]のような書き方はPerlのコードとして正しいものだからです。
と書かれていますし。

> perl に配列とリストという区別はあるんでしたっけ。
ん〜, スカラーで評価した時に, 配列は要素数を返し
リストは最終要素を返す。
とかそういう話ではなくてでしょうか?

でも,
      scalar (@a);
とか書いたら, しっかり最終要素が吐き出されたので
なんか, 自分でも @a と (@a) の違いはよくわかりません。
少なくとも
> えっと、@a[0] と (@a)[0] は違うんですよね?
はい。そうです。
とは言えなくなってしまいました。

# 読み返すとゴミのような発言ですが, ご容赦下さい。m(_ _)m

No. 2216 # /tk 2001/10/19 (金) 00:10:47
訂正です。

>>2215 /tk
> 最終要素が吐き出されたので
要素数が吐き出されたので

No. 2217 # QDAK 2001/10/20 (土) 10:03:40
はじめましてです。
『HTTPクライアントを作ってみよう』の辺を参考にHTTPクライアントを
作っているのですが、うまくいきません。
まず、”作ってみよう”の前にtelnetを使ってのところでつまずきました。
% telnet test.hoge.com 80
Trying 123.123.123.10...
Connected to test.hoge.com.
Escape character is '^]'.
GET /test/test.html HTTP/1.0(リターン)
とやると、『NOT FOUND』になってしまいます。
※ブラウザでhttp://test.hoge.com/test/test.htmlは表示される。
※ちなみに、http://123.123.123.10/test/test.htmlは『NOT FOUND』
おそらく、Apacheでヴァーチャルホストで設定しているのだと
思いますが、このような場合どのようにすればよいのでしょうか?

以上 宜しくお願いいたします。

No. 2218 # ナナシサソ 2001/10/20 (土) 21:21:04
>>2217 QDAK
GET / HTTP/1.0(改行)
Host: test.hoge.com(改行)
(改行)

No. 2219 # スナフキン 2001/10/20 (土) 23:33:08
>>2207 68user
「常駐システム」という言葉が悪かったですね、訂正します。
>Servlet コンテナが常駐して
あえて言えば mod_perlに近いのでしょうか?
まあ、そのうちに勉強して理解できるように頑張ります。
#なかなか時間が取れませんが…

>>2217 QDAK
ナナシサソ(舌を噛みそう(^^;)さんも書いていますが、
http://X68000.startshop.co.jp/~68user/net/http-4.html
の「さらなる改善点・バーチャルホストに対応」をどうぞ。

No. 2220 # pearl 2001/10/22 (月) 02:28:35
>2213
アドバイス有り難うございました検討した結果使うことは出来ませんでしたが大変勉強になりました

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2221 # jkoga [E-mail] 2001/10/23 (火) 15:57:44
はじめまして。
「UNIXの部屋」でコマンド集を ”かなり”の量コピーさせていただきました。現場用サブnoteに保存して活用いたします。
また何か困ったことがあればここに来ると思いますがそのときはよろしくお願いします。
ありがとうございました。

No. 2222 # aoki 2001/10/25 (木) 18:53:45
crontab -e user
でcronを登録したのですが起動するときにどうも環境設定が user で
ログインした状態と違うみたいです。 .cshrc を取り込まずに cron が
動いてるらしくパスやら環境変数やらまるで違うのです。
そこで以下のようにむりやり設定するようにしたのですが
35 18 * * * setenv LANG ja;setenv ・・・
結果は駄目でした。
cronが起動される際の環境設定(環境変数やパス)はどこでどうやって
設定するのか分かりますか?

No. 2223 # aoki 2001/10/25 (木) 19:53:58
下記No.2222 は解決したので無視してください。
申し訳ありません。

No. 2224 # norihisa 2001/10/25 (木) 20:27:25
1./usr/local/reg/env/.cshrc.sun中で設定され ている a-e, l, m で始まる alias を実際の file に基づき説明 せよ(Mule の複数バッファの機能やカット,ペーストの機能を利 用すると良い).
2.ヒストリ機能で直前のコマンドを少し変更する方法を 調べろ.(cp foo bar と入力する代りに cp ffo bar と入力して しまった場合等に便利)
3.*等のグロッビング用の文字を普通に入力するための方法を 調べろ(ファイル名が * のものを作成せよ.ただし,Mule は使 用しない.set noglob もしない).
4.(t)csh において,~ は特別な意味を持つ文字である.この意 味を調べろ(複数あるかもしれない).
(参考)Emacs には,shell という関数や manual-entry という関数が存在する.
1〜4 に対する回答を,Subject が Report 5 なる mail で, 10/25(木)までに ip-rep@j-lab.ee.aoyama.ac.jp に送ること.

No. 2225 # n 2001/10/25 (木) 20:35:39
No.2224は学校の課題なんですが、メールは送らないでください。このアドレスは先生のなので、意味がないのです。僕は生徒で、答えがわかったら掲示板に書いてください。お願いします。

No. 2226 # ナナシサソ 2001/10/25 (木) 22:05:55
「掲示板に書いてください。」って・・・
日本語の勉強が先だよな・・

先生に苦情を送っちゃっていいですか?

No. 2227 # n 2001/10/25 (木) 22:22:08
どうもすいませんでした。昨日からずっとインターネットで調べていたのですが、解らなかったので甘い考えでした。でも、自力でやって、二番だけわかったんですよ。やっぱりだめですよね楽しようとしたら。お返事まってます。

No. 2228 # 2001/10/25 (木) 22:32:41
でも、愚痴を言っていいですか?先生って授業でやってないことを、レポートにすゆんですよ!!パソコン初めてやってるひとにっとっては、とっても大変なんですよ。学校には聞ける友達もいないし・・・どうしたら・・って考えたら、エキスパートに聞くのが一番かなって!でもいつも徹夜とかでやっても、間違ってると零点にするんですよ!努力を認めてくれないんですよ。ナナシサソさんは、UNIXできる方なんですか?

No. 2229 # n 2001/10/25 (木) 23:07:47
ちなみに、二番のこたえは、
「Ctrl-P(以下C-p)を押すとhistoryの前に入力したコマンドが現れる直前に入力
したコマンドをcp foo bar と入力する代りに cp ffo bar と入力して しまった場
合には、C-pを押してcp ffo barのffoをoffと書き換えればよい。」
であってますかね。よろしければ、採点のほうよろしくお願いします。

No. 2230 # 68user 2001/10/26 (金) 00:27:10
>>2229 n
> 学校には聞ける友達もいないし・・・
UNIX を勉強するより、

    - 詳しい友達を見付ける。
    - それほど親しくない友達でも、課題提出前くらいは親しげに話しかけられる
        ような社交性を身につける。
    - 課題だからといって、問題をそのまま掲示板に書き込んでも反感を買うだけ、
        ということを書き込む前に推測できるようになる。
    - 仮に課題だとしても、そうは見えないようにうまくカムフラージュ
        できるような文章力を身につける。努力しているという姿勢を
        アピールする。

といったことを学ぶべきじゃないですかね。いや、ほんとに。

というわけで、
    http://cocoa.2ch.net/unix/index.html
あたりで再チャレンジしてみては。

No. 2231 # norihisa 2001/10/26 (金) 01:57:29
どうもご迷惑をかけました。ひとつお願いがあります。これからは、ホントに解らない事だけを聞くので、これからもこの掲示板に書き込みたいのです。よろしくお願いします。68USERさん本当にアドバイスありがとうございます。これからは、気おつけます。これからもよろしくお願いしますと、言いたいのですがいいですか?ダメでしたら素直に書き込みはやめます。ちなみに、今回いのレポートは二番だけで送りました。くどいようですが、すいませんでした。そして、ありがとうございます。

No. 2232 # 名無しさん 2001/10/26 (金) 18:56:19
「ネットワークプログラミングの基礎知識」で勉強させていただきました。とてもわかりやすくて入門にはピッタシカンカンでした。

難しかったのは、ソケットからの入力のバッファリングをOFFにする部分。以下のような説明をされてましたね。

> 26: select(SOCKET); $|=1; select(STDOUT);
>ソケットに対してバッファリングしないようにします。
>これもおまじないだと思って下さい。

なかなかこれを理解できずにいたのですが、「プログラミング Perl 2nd」P146によると

>autoflush HANDLE EXPR
という関数があるらしいですね。"use FileHandle;"宣言が必要ですが・・。
autoflush SOCKET 1
↑これなら、"おまじない"じゃなくて意味が通じ易くなるかもしれませんね

No. 2233 # りょうすけ 2001/10/27 (土) 03:54:21
おまじないというと、現時点で目先の理解の妨げになるから今はわからなくていいみたいな意味で書籍などでも使われてると思うので意味を通じさせるつもりは無いと思うんですよね。
説明が面倒(できない)でおまじないと言ってるわけじゃないですから。

でも、おまじないと言われて「ここでおまじないするのか」と素直に理解する人もあんまりいないですよね。
こういう時が、自分で調べ初めて自分で答えを見つける習慣を身に付けるチャンスになってるとおもうので良い表現だと思いますが。

No. 2234 # 名無しさん 2001/10/27 (土) 10:55:14
>>2233 りょうすけ
>説明が面倒(できない)でおまじないと言ってるわけじゃないですから。
ええ。そうですよね。"おまじない"という表現に異論はありません。枝葉の部分まで細かく説明するとかえってわからなくなっちゃいますもんね。

まぁ、プログラムの可読性という面でいうとautoflushも明快で良いかな?と思っただけです。(でも動作の仕組みを理解するにはselectでファイルハンドルを操作したほうが勉強になるのかも・・)

No. 2235 # H-Hash [URL] 2001/10/28 (日) 16:56:54
こんにちは。
http://x68000.startshop.co.jp/~68user/net/rfc.html から
リンクして頂いているThe WAYというサイトの管理人です。

このたび、RFC2616の日本語訳のURLが
http://www.studyinghttp.net/rfc_ja/2616/ に変更いたしました。
是非リンクの変更をよろしくお願いします。

No. 2236 # Ka23 2001/10/30 (火) 18:52:06
UNIX プログラミング FAQのサイトが
http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html
に移転しているようです。

No. 2237 # ふくし [E-mail] 2001/10/31 (水) 23:36:24
また質問ですいません。
ActiveState 以外の Windows 用 Perl で、
自由に配布できるものってなにがおすすめでしょうか?

友人が自費出版本に CD-ROM を付けて売りたいのですが、
ActivePerl のライセンスがやたら面倒くさく、
(なんか 20 ページの英語の書類を書いてどうこう、、という、
    手続きぐらいしろよって話なんですけど)
なんとかならないか、という話です。
勝利条件としては
・Perl 5.005 移行で
・Windows で動き
・Jcode.pm が動く
ということらしいです。

DJGPP 版、というのもあるようですが、
DOS 用ということで 16bit ですよね。
制限きついのかな、、?

Cygwin はぁ、、? と聞いてみましたが、
Cygwin はその説明(bash の説明とか)だけで本1冊書かないといけない、
そうです。(そうかぁ、、?)
でも cygwin.dll だけあれば Perl は動くのかな?
(そういうインストーラー作れるかな?)
(そんな部分的な部分を再版しても Cygnus 的に大丈夫なのかな?)

もしご存知の方がいらっしゃればご教示ください。
LSI-C とか Borland C++ のフリー版とかで Perl をコンパイルしてみようかな、、。

No. 2238 # ふくし [E-mail] 2001/11/01 (木) 00:46:07
あーなんかボケボケ書いたかも、、(DJGPP あたり、、)
また落ち着いて謝りにきます、、;;;

No. 2239 # mo 2001/11/01 (木) 01:20:40
こんにちは 
Perlについて質問させてください。

%aa=(a=>1,b=>2,c=>3);
%bb=(a=>4,b=>5,c=>6);
%cc=(%aa,%bb);

これでは%cc は a=4,b=5,c=6 のように上書きされてしまいます。
%cc が a=5,b=7,c=9 になるようにするにはどうしたらいいのでしょうか

よろしくお願いします。 

No. 2240 # ふくし [E-mail] 2001/11/01 (木) 02:04:05
#質問で迷惑掛けてるので答で貢献;;;

mo さん、はじめまして。

%aa=(a=>1,b=>2,c=>3);
ていうことは、
$aa{a} = 1;
$aa{b} = 2;
$aa{c} = 3;
と同じです。

a = 1;
b = 2;
c = 3;
ではないです。

%aa はハッシュというものを作っています。
お手もとの参考書などで「ハッシュ」という言葉を調べてください。

で、%bb=(a=>4,b=>5,c=>6);
ていうことは、
$bb{a} = 4;
$bb{b} = 5;
$bb{c} = 6;
と同じです。

%cc=(%aa, %bb);
ということは、上の結果、
%cc=(a=>1,b=>2,c=>3,a=>4,b=>5,c=>6);
と一緒なので、
$cc{a} = 1;
$cc{b} = 2;
$cc{c} = 3;
$cc{a} = 4;
$cc{b} = 5;
$cc{c} = 6;
と一緒なので、結局 $cc{a}、$cc{b}、$cc{c} は2回代入されるので、
後のほうが有効になって、
$cc{a} = 4;
$cc{b} = 5;
$cc{c} = 6;
となっているわけですね。

で、この場合、$cc{a}、$cc{b}、$cc{c} には、
それぞれ $aa{a}、$aa{b}、$aa{c} と $bb{a}、$bb{b}、$bb{c} の
合計が入って欲しいわけだから、
%cc = (a => $aa{a}+$bb{a}, b => $aa{b}+$bb{b}, c => $aa{c}+$bb{c});
とするか、
foreach (a..c) { # $_ が a から c までくりかえし実行
    $cc{$_} = $aa{$_} + $bb{$_};
}
とするか、%aa、%bb にどんなキーが入っていてもいいことにするには
foreach (keys %aa) { # $_ に %aa のキーを次々に入れながら繰り返し実行★
    $cc{$_} = $aa{$_} + $bb{$_};
}
とするか、
%cc = map {$_ => $aa{$_} + $bb{$_} } keys(%aa);
とするか。

★がついたのが一番おすすめか?
foreach、keys、a..c、map については適当な本を調べてください。(ひでえ、、)

とりあえず
foreach (a..c) {
    print "$_\n"
}
とか
foreach (keys %aa) {
    print "$_\n"
}
とか、
@x = (1..5);
@y = map{ $_ * 2 } @x;
foreach (@x) {
    print "$_\n";
}
とか動かしてみると面白いと思います。

#もっとあっと驚く回答があったら教えてください

No. 2241 # ふくし [E-mail] 2001/11/01 (木) 10:30:56
すいません

下で
foreach (a..c) {
と書いているのは
foreach ('a'..'c') {
と書かないと怒られます。(警告だけで、動作はするようです)

ようは、a、b、c は変数の名前でなく文字列で、
%aa、%bb、%cc というハッシュのキーですね。
%aa というハッシュの、キーが 'a' の値にアクセスするには
$aa{'a'} と書きます。ただしこの場合 a はハッシュのキーであると
はっきりしているので $aa{a} と省略形で書けます。

同じハッシュでキー x の値に 550 を、キー y の値に 660 を入れるには
キーと値を交互に指定するリストを使って
%aa = ('x', 550, 'y', 660);
と書きますが、キーと値の関係をはっきりさせるために
カッコの変わりに => という記号を使えば
%aa = ('x' => 550, 'y' => 660);
と書けます。で、この場合は => の左側はハッシュのキーなので
省略して
%aa = (x => 550, y => 660);
とも書けるわけです。
でも、この '' 省略方式だと、
空白を含むキーが使えません。
%kg = ('yamada tarou' => 80, 'satou tamao' => 50);
だと
$kg{'yamada tarou'} に 80 が、$kg{'satou tamao'} に 50 が
入りますが、
%kg = (yamada tarou => 80, satou tamao => 50);
だとエラーが出て動きません。
$kg{yamada tarou} も怒られて動きません。

下のプログラムで a, b, c というのは、
ハッシュのキーで「文字列」であることを覚えておいてください。

No. 2242 # mo 2001/11/01 (木) 23:53:58
ふくしさん、 こんにちわ

map の使い方はまだ理解できませんが
★のコードは理解できました。

ありがとうございました。

No. 2243 # sio 2001/11/02 (金) 17:35:45
はじめまして。
2日前から調べているのですが、解決できずにここにたどり着きました。

CGIからCGIへデータを渡す際に
  print "Location: test.cgi?data=1\n\n";
ではなくPOSTでデータを渡したいのですが
Socketを使うというのを発見し、いろいろ試したのですが
まるで駄目です。(Socket自体、今まで使用したことも無いので(^^;)
具体的には送信元のCGIをindex.cgi、受信するCGIをtest.cgiとしますと
index.cgiに下記のような記述をしてみたのですが
test.cgiには何を書いてよいのかすら分かりません。
ご教授頂けないでしょうか
よろしくお願いします。
================================
#!/usr/local/bin/perl

use Socket;
$server='www.*****.com';
$port = 80;
$port = getservbyname($port,'tcp') unless $port =~ /^\d+/;
$iaddr = inet_aton($server)
                or die "$serverは存在しないホストです。\n";
$sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0)
                or die "ソケットを生成できません。\n";
connect(SOCKET,$sock_addr)
                or die "$serverのポート$portに接続できません。\n";
select(SOCKET); $|=1; select(STDOUT);

$file='test.cgi';
$query='data=1';
$len=length($query);

print SOCKET "POST $file HTTP/1.0\r\n";
print SOCKET "Content-Length: $len" . "\r\n\r\n";
print SOCKET "$query";

================================

No. 2244 # iwta 2001/11/03 (土) 03:48:28
こんな感じでは?

if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }

@pairs = split(/&/, $buffer);
foreach $pair(@pairs){
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}

$data = $FORM{'data'};

って、よくある掲示板のパターンですけど。(はずしてたらごめんなさい)
というより、index.cgi は普通にフォームを使うだけでことは足りないのでしょうか? (Socket を使わずに)

No. 2245 # sio 2001/11/03 (土) 18:24:11
補足・その他です(^^;

main.cgi→index.cgi→test.cgi
となっていて
main.cgiでフォームを使いindex.cgiにpostでデータを送信しています。
この受け取ったデータをtest.cgiにそのまま渡したいのですが、
その方法で悩んでいます。
test.cgiはメンバー入り口で受け取った会員ナンバーによって
それぞれのページデータを読み込み表示するスクリプトになっていますので
直接
http://***.com/test.cgi?ID
などとされて入室されるのは避けたいのです

さらに考えた結果、index.cgiとtest.cgiをまとめてしまえば良い事に気付きました(^^;

ですが、今後の為にもSocketを使えるようになりたいので
もうちょっと努力してみます。

iwtaさんありがとうございます。
受け側では標準入力で良いのですね。
<SOCKET>をいろいろいじってみたりしてました。。。
ということは受けるほうでは
use Socket;
は不要なのでしょうか

Socketの文献をいろいろ読んだのですが、POSTについての情報がどこも少なく
(英文は読んでませんが)
いろいろとお尋ねしてお手数をおかけします。

No. 2246 # 68user 2001/11/03 (土) 19:14:11
>>2232 名無しさん
ご指摘ありがとうございます。どうやってわかりやすく説明するかは
非常に悩むところですね。autoflush は「存在自体あまり知られてない」
という痛い欠点があり、難しいところです。次回更新時に何かしら
わかりやすい解説を書きたいと思っています。

>>2235 H-Hash
> このたび、RFC2616の日本語訳のURLが
> http://www.studyinghttp.net/rfc_ja/2616/ に変更いたしました。
ご連絡ありがとうございます。修正いたしました。

>>2236 Ka23
> UNIX プログラミング FAQのサイトが
> http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html
> に移転しているようです。
こちらもありがとうございます。後ほど修正しておきます。


>>2243 sio
test.cgi は同じサーバにあるのですか? で、ブラウザから直接呼び出すこと
はないのですか? ならば CGI じゃなくてただのスクリプトですので、
main.cgi からは

    open(IN, "/foo/bar/test.cgi ID |");
と呼び出せばいいでしょう。ソケットを使う必要はありません。

もし test.cgi が同じサーバにあって、これまでは CGI として動いていたけ
ど、これからはブラウザから直接参照させたくない、ということならば、
    $ENV{REQUEST_METHOD}='GET';
    $ENV{QUERY_STRING}='data=1';
    open(IN, "/foo/bar/test.cgi |");
と、WWW サーバの代わりに適切な環境変数をセットしてからスクリプトを実行
してやればよいでしょう。


test.cgi が別サーバにあるならば、直接スクリプトを実行することはできな
いので、そのときはソケットを使いましょう。

> print SOCKET "POST $file HTTP/1.0\r\n";
> print SOCKET "Content-Length: $len" . "\r\n\r\n";
> print SOCKET "$query";
送ったはいいけど、これでは結果を受け取っていませんし、ブラウザに何も表
示していません。

      while (<SOCKET>){ # ヘッダを捨てる
          m/^\r\n$/ and last;
      }
      print "Content-type: text/html\n\n";
      while (<SOCKET>){ # ボディのみ表示
          print $_;
      }

とかいうのをこの後に付けて下さい。

> POSTについての情報がどこも少なく
あまり書くことがないからでしょう。気を付けるのはContent-length を付け
ること、くらいじゃないでしょうか。


あと、CGI 経由で HTTP クライアントを開発するのはやめましょう。まずはコ
マンドラインから動くような HTTP クライアントを作り、完成したら CGI 経
由でも動くように改造しましょう。でないと、問題の切り分けが非常に面倒に
なります。

No. 2247 # sio 2001/11/04 (日) 08:58:47
68userさんありがとうございます。
やりたい事が全てご指摘通りです(^^;

open関数のパイプの使い方すら知りませんでした。
今やっと説明されているページを見つけ
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html
勉強中です。

Socketについてもようやく理解できました。
データを受け取った側で、ブラウザ処理をしようとするから
訳が分からなくなっていたようです。

今日はperlに浸かり勉強する日にします p(..)

No. 2248 # 初心者 [E-mail] 2001/11/05 (月) 07:45:11
X Window Systemを立ち上げるときに、

(**) stands for supplied (--) stands for probed/default values
(**) ...
(**) ...

というメッセ-ジが出て立ち上げることができません。
これはいったいどういうことなのでしょうか。

No. 2249 # 初心者 [E-mail] 2001/11/05 (月) 08:06:53
正確には

(**) stands for supplied, (--) stands for probed/default values
(**) ...
(**) ...

でした。

Prev< No. 1975〜2249> Next  [最新発言に戻る] [過去ログ一覧]