68user's page 掲示板

Prev< No. 1765〜1862> Next  [最新発言に戻る] [過去ログ一覧]
No. 1765 # CZ 2001/02/28 (水) 23:05:27
<<1764

ん?? 何やってるんだろう。

s!<A HREF="(.*?)&gt;">(.*?)&gt;</A>!<A HREF="$1">$2</A>&gt;!g;
s!<A HREF="(.*?)&lt;">(.*?)&lt;</A>!<A HREF="$1">$2</A>&lt;!g;

これでいいんですね。
<<1762 はタイプミス
<<1763 は勘違いでした。

板汚しですみません。

No. 1766 # mm 2001/02/28 (水) 23:29:52
あっ、ウチも同じバグがある(^^;
でも、書き戻しですね…、ちょっとテストさせてくださいm(_o_)m
<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>

No. 1767 # 68user 2001/03/01 (木) 01:02:25
おー、これってきっちりやると結構面倒かも。で、30分あれこれ
やった結果…これでどだ!
    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)';
    $out = '';
    while (1){
            if ( ! s!(.*?)($http_pattern)!! ){
                    $out .= $_;
                    last;
            }
            $out .= $1;
            $buf = $2;
            $buf =~ s/((&lt;|&gt;|&quot;).*)//;
            $rest = $1;
            $buf =~ s!$http_pattern!<A HREF="$1">$1</A>!;
            $out .= $buf;
            $_ = $rest . $_;
    }
    
    print "$out\n";
無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。

No. 1768 # mm 2001/03/01 (木) 02:34:18
無茶苦茶効率悪そうだし、未定義変数使用の警告が出るけど…(^^;

    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    $http_pattern = '(http|https)(://)(([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+?)(&gt;|&lt;|&quot;)|([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+))';
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    s!$http_pattern!<A HREF="$1$2$4$6">$1$2$4$6</A>$5!g;

No. 1769 # CZ 2001/03/01 (木) 07:43:42
>>1767 68userさん
おはようございます。

> おー、これってきっちりやると結構面倒かも。

こんなに奥が深いものとは想像もつきませんでした。以前これに着手しかけて断念した覚えはあったのですが,なぜ断念したかは覚えていません。

> 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。

早速ruby文に変換して実働掲示板に使っています。無限ループになっても利用者が二人しかいないサーバだし,HTTPならすぐ切れそうだということで,心配はしていません。

そんなわけで,いつもありがとうございます。これからもお世話になります。

No. 1770 # 68user 2001/03/01 (木) 12:11:10
こんなのも。
    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)';
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    @items = split(/(&lt;|&gt;|&quot;)/, $_);
    foreach (@items){
            s|$http_pattern|<A HREF="$1">$1</A>|g;
    }
    $_ = join('', @items);
    print "$_\n";
アルゴリズム・正規表現が複雑にならないという点で、これが
一番よさげかなぁ。でも動作チェックと速度計測をしなくては。

もっとよいのを思いついた方は教えてください。

No. 1771 # 68user 2001/03/01 (木) 23:48:26
>>1770 68user
commit しました。とか言ってみたり。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi

No. 1772 # mm 2001/03/02 (金) 00:14:33
>>1770 68userさん
いいですねぇ。
これ頂きます。perl4でも動くし(^^;

No. 1773 # purine 2001/03/02 (金) 11:42:08
質問したいことがあります。それはあるプログラムでPIDを変数として
持っているときに、その変数のPIDのプロセスを殺す方法があれば教えて欲しいのですが。
よろしくお願いします

No. 1774 # 68user 2001/03/02 (金) 12:35:01
>>1773 purine
必ず OS 名や使用している言語を書いてください。

kill コマンドか、システムコール kill を使います。
    http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=kill&target=command&partial=on

No. 1775 # 68user 2001/03/03 (土) 20:09:31
japu さん (http://www.japu.org/) より、source.cgi に関して
CGI Security Advisoriy をいただきました。

これは他サイトに HTTP でアクセスし、GET した結果を表示
するもので、
    「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/
からは <!-- --> でコメントアウトしてあったものです
(なぜコメントアウトしたかは忘れた)。

# また、昔利用していた http proxy 経由でアクセスするため、
# X68000.startshop.co.jp からは正しく動作しませんでした。

しかし、トップページからはスクリプトのソースを見ることができ、
source.cgi 自体も実行可能なままになっていました。これに対して
    http://X68000.startshop.co.jp/~68user/Cgi-room/source.cgi?url=http://www.yahoo.co.jp';ls%20*'
といったアタックが可能でした。これは
    open(IN,"$httptalker -get '$url'|");
の部分で
    open(IN,"$httptalker -get 'http://www.yahoo.co.jp';ls *''|");
と解釈されます。open の引数に ; ? * | などを渡すと、perl は
/bin/sh を起動し、/bin/sh がコマンドを実行しますので、任意の
コマンドが実行可能です。

で、SA を受けて
    open(IN, "-|") or exec($httptalker, '-get', $url);
と修正しました。この場合は perl が直接 fopen(3) を呼ぶため、' ; * など
が特別扱いされることなく、$httptalker の引数にそのまま渡ります。

source.cgi の更新履歴:
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/Cgi-room/source.cgi


セキュリティホールを指摘して下さった japu さんに感謝いたします。

んで、
    「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/
ですが、もうメンテする気力がないし、技術的な興味もないし (nslookup とか
whois コマンド呼ぶだけのスクリプト見てもおもしろくないでしょ)、例えば
ドメイン名検索とかならもっと便利なサイトがあるので、この掲示板で誰からも
反応がなければ近日中に消すつもりです。

No. 1776 # 68user 2001/03/03 (土) 20:48:21
>>1775 68user
>  open(IN, "-|") or exec($httptalker, '-get', $url);
> と修正しました。この場合は perl が直接 fopen(3) を呼ぶため
訂正。perl が直接 pipe(2)、fork(2)、exec(2) するため、でした。

No. 1777 # Netboy [E-mail] 2001/03/03 (土) 21:02:28
CGIの小部屋は消さないで欲しいです.
メンテ終了ページは倉庫ディレクトリなどに
移設するのみにしていただけると嬉しいです.

簡単な内容のものでも,知らない人に説明するとき
サンプル的に便利に利用させていただいております.

No. 1778 # 68user 2001/03/03 (土) 21:36:08
>>1777 Netboy
> CGIの小部屋は消さないで欲しいです.
了解いたしました。と決まれば、見られても恥ずかしくない
程度に brush up せねば。

No. 1779 # ふくし [E-mail] 2001/03/04 (日) 01:16:31
いつも質問ばかりですいませんのふくしです。
Perl で use strict 'vars'; とすると、変数を使うときは
パッケージを明示するか、my 宣言しないと怒られますが、
$a、$b という変数は怒られないで、%main:: シンボルテーブルに
追加されますね。$aa だとダメ。$c もダメ。なぜでしょう?
恐れ入りますがご存知の方はご教示ください。

No. 1780 # 68user 2001/03/04 (日) 01:24:36
>>1779 ふくし
想像でモノを言いますが、sort でセットされるのが $a と
$b だから特別扱いされているんじゃないでしょうか。
# Ex. sort { $a cmp $b }

No. 1781 # ふくし 2001/03/04 (日) 02:22:08
ああ〜そかそかそかそか。使いますねえ sort で $a と $b。
すっきりしました。いつもありがとうございます!(^^)

No. 1782 # Tel 2001/03/05 (月) 16:05:53
はじめまして。Telと申します。
以前、こちらで共有メモリについて少し触れられていたようなので、質問をしてみようと思いました。

現在、共有メモリ上にフラグの役割をもつ変数を用意し、複数のプロセス間でそのフラグを参照し、フラグの状態によって処理の分岐をするというプログラムを書いています。
そこでわからない点が出てきました。

共有メモリに変数を用意する方法の記述についてはサンプル等を見て作成することができると考えています。
しかし、それを参照する各プロセス側での記述方法について、サンプルが少なくよくわからないのです。
たとえば
int flag;
char data[datalength];
という2つの変数が共有メモリにある場合、flagの内容によってdataに書き込む内容を分けるという処理は具体的には、どう記述すれば良いのでしょうか。

プログラムAは
flag==1 ならば"good morning."
flag==2 ならば"good afternoon."
flag==3 ならば"good evening."
をdataに書き込む。
プログラムBは
flag==1 ならば"beakfast."
flag==2 ならば"lunch."
flag==3 ならば"dinner."
をdataに書き込む。
上記のような場合、AとBそれぞれではどう宣言してからflagやdataを使うのでしょうか。

勉強不足からくる質問だと思いますがUNIXの知識がない為なのか、書籍の選びかたが悪い為なのか、難しくて具体的な記述方法がわからないためにこちらにきてみました。
どうかご指導願います。よろしくおねがいします。

No. 1783 # ゆう 2001/03/05 (月) 19:14:45
UNIXでパーミッションを変更しようとしたのですが
以下のメッセージで変更できません。どうしてですか?
502 SITE command not implemented.

No. 1784 # rosegarden 2001/03/05 (月) 19:26:37
>>1783 ゆう
> 以下のメッセージで変更できません。どうしてですか?
> 502 SITE command not implemented.
サーバ側でサポートしていないからでしょう。
SITE コマンドと言うのは標準的でないコマンドのことです。
だから、理屈の上では
ftp>SITE SHUTDOWN NOW
なんて出来ても別に不思議ではないと思います。

それでは身も蓋もないので、ためしに、
ftp>SITE CHMOD 600
とか win98 の ftp.exe だと
ftp>literal SITE CHMOD 600
(だったかな?) とかしてみて駄目だったら、駄目なんだと思います。

どっちにしても、管理者に聞いてみないと、はっきりしたことは
分からないと思います。

No. 1785 # rosegarden 2001/03/05 (月) 19:40:28
>>1782 Tel
書き込み拝見しましたが、どうも共有メモリ云々でつまずいて
おられるのではなく、単純に C 言語で目的を
達成するプログラムを書く方法について悩まれているように思えます。

# もしも違いましたら、ごめんなさい。
# 何をどうされたいのかが、不明で推測で書いていますので、
# 御理解ください。

shared memory を使ったプログラミングは経験が無いんですが、
ちょっと本を見たら、初期化やセットアップは別として
メモリへのアクセスは普通に配列や malloc したバッファへの
アクセスと変わらないようでした。

失礼を承知で書きますが、共有メモリを使わないで、固定したファイルに
flag と data を書き込んで、プログラム A と プログラム B で
やりとりをするようなものは、お書きになられますか?
もしそれが可能なら、似たような手順で出来そうです。

# もしも、既にそんなことは可能であると言うのでしたら、
# 失礼お許しください。

ちなみに、私の場合には
「UNIX ネットワークプログラミング」という本を参考にしました。
トッパンからでている本です。ちょっと眺めた程度だと、
共有メモリの部分は結構丁寧に書いてあって、
サーバとクライアントのサンプルもありました。
ざっと見たかんじでは、分かりにくいと言う感じは無かったですね。

# これって、ここで紹介されている本の旧版なのでしょうか?
# 今は二分冊になっているのですね。私のには IPv6 のことは
# 書いてないです。

No. 1786 # rosegarden 2001/03/05 (月) 20:04:25
ちょっと、すごい初歩的な質問なのですが、
一般に top コマンドの出力でメモリの状況が出力されますよね。

last pid: 20294; load averages: 0.19, 0.11, 0.04 up 1+08:42:31 19:52:21
30 processes: 1 running, 29 sleeping
CPU states: % user, % nice, % system, % interrupt, % idle
Mem: 35M Active, 6528K Inact, 12M Wired, 3448K Cache, 14M Buf, 3228K Free
Swap: 128M Total, 6588K Used, 121M Free, 5% Inuse

上のような奴です。Mem のところの Active, Inact, Wired, Chache, Buf, Free
の合計ってだいたい搭載された物理メモリの量に近いものだと思っていたのですが、
これはあたっていますか? (ただし、10% 程度の増減は許容するものとします。)

実は、3 月 1 日前後に CVSup した current なのですが、
top の表示が次のようになっています。

last pid: 7969; load averages: 0.94, 0.74, 0.40 up 0+00:11:35 19:59:58
22 processes: 2 running, 20 sleeping
CPU states: % user, % nice, % system, % interrupt, % idle
Mem: 2927K Active, 12M Inact, 6285K Wired, 2K Cache, 35M Buf, 41M Free
Swap: 256M Total, 256M Free

最初の top コマンドの表示は別マシンなのですが、上のマシンは
搭載している物理メモリは 256 MB なのに上のようになっています。
大雑把に計算しても Mem の合計値は 150MB 行っていません。
何か、私は勘違いでもしているのでしょうか?

# というか make world 中に何度も kernel panic 起こすし。
# fsck は大活躍だし。さっきは自動修復が効かずに
# /dev/ad0s2f: UNEXPECTED SOFT UPDATE INCONSISTENCY; RUN fsck MANUALLY.
# なんていうメッセージもでました。
# こういうことがしょっちゅう起こると、もう笑いしかでませんね。

No. 1787 # 68user 2001/03/06 (火) 02:16:13
>>1784 rosegarden
>> 502 SITE command not implemented.
は、SITE コマンドは未実装だよ、という FTP サーバ側の
メッセージなので、chmod は無理です。

> ftp>literal SITE CHMOD 600
ほほー、literal というのがありますか。僕が知っていたのは
quote site chmod 600 です。

あと、前にここで書いたかもしれませんが、site index ちうのが
便利です。例えば ftp://ftp3.jp.FreeBSD.org にログインして、
    ftp> site index perl-5
などなど。

>>1785 rosegarden
> 「UNIX ネットワークプログラミング」という本を参考にしました。
> トッパンからでている本です。
> # これって、ここで紹介されている本の旧版なのでしょうか?
> # 今は二分冊になっているのですね。
確か三分冊になったのですが、トッパンはなくなったので、ピアソン
エデュケーションが版権を引き継ぎました。
    http://www.mmjp.or.jp/pearsoned/washo/network/wa_net28-j.html
    http://www.mmjp.or.jp/pearsoned/washo/network/wa_net27-j.html
洋書の Vol.3 が出ているのかどうかはわかりません。
作者が亡くなったので、永遠に出ないのかもしれません。

>>1786 rosegarden
> Mem のところの Active, Inact, Wired, Chache, Buf, Free の
> 合計ってだいたい搭載された物理メモリの量に近いものだと
> 思っていたのですが
僕もそのように認識しています。current ですからちょっと
様子を見てはどうでしょう。

# VM まわりなんてとても僕の手に負えないので、役に立たない
# 返事しかできないです。ごめんなさい。

No. 1788 # ミング [E-mail] 2001/03/06 (火) 14:13:40
今日は。

本来のLOGIN パスワードを忘れてしまった場合はOSからインストールし直すしかないのでしょうか?

No. 1789 # 68user 2001/03/06 (火) 15:40:07
>>1788 ミング
> 本来のLOGIN パスワードを忘れてしまった場合はOSから
> インストールし直すしかないのでしょうか?
root でログインして、passwd コマンドで該当ユーザの
パスワードを再設定します。root のパスワードも忘れて
しまったのなら、
    http://www.jp.FreeBSD.ORG/QandA/HTML/464.html
    http://www.jp.FreeBSD.ORG/QandA/HTML/1638.html
的なことをしますが、あなたの使っている OS が何なのか
全くわからないので、これ以上はなんとも。もし Windows
なら僕にはわかりません。

No. 1790 # rosegarden 2001/03/06 (火) 16:02:59
>>1787 68user
> > ftp>literal SITE CHMOD 600
> ほほー、literal というのがありますか。僕が知っていたのは
> quote site chmod 600 です。
良く分からないのですが、使ってみた感じだと telnet コマンドを
ftp クライアント代わりに使うような場合に打ち込むコマンド類が
これで打てるようになるみたいですね。
> あと、前にここで書いたかもしれませんが、site index ちうのが
> 便利です。例えば ftp://ftp3.jp.FreeBSD.org にログインして、
> ftp> site index perl-5
> などなど。
ああ、これ便利ですね。ls-lR でも検索しているのでしょうか?
> > # 今は二分冊になっているのですね。
> 確か三分冊になったのですが、トッパンはなくなったので、ピアソン
> エデュケーションが版権を引き継ぎました。
まさか三分冊というのまでは知りませんでした。
色々ありがとうございます。
> > Mem のところの Active, Inact, Wired, Chache, Buf, Free の
> > 合計ってだいたい搭載された物理メモリの量に近いものだと
> > 思っていたのですが
> 僕もそのように認識しています。current ですからちょっと
> 様子を見てはどうでしょう。
結局、アドバイス頂いてから、ソースを色々調べて見たら、
kernel ではなくて top コマンドの表示に問題があることが分かりました。
ページ数で取得したメモリの量を KB 単位に変換してないので
変な結果になるようです。
ちょっとまだ断定的なことは言えないのですが、
とりあえず、バグリポートしておきました。

No. 1791 # ミング [E-mail] 2001/03/06 (火) 17:13:04
68Userさん
回答ありがとうございます。
OSはSolaris7です。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
root でログインして、passwd コマンドで該当ユーザの
パスワードを再設定します。root のパスワードも忘れて
しまったのなら、
        http://www.jp.FreeBSD.ORG/QandA/HTML/464.html
        http://www.jp.FreeBSD.ORG/QandA/HTML/1638.html
的なことをしますが、あなたの使っている OS が何なのか
全くわからないので、これ以上はなんとも。もし Windows
なら僕にはわかりません。

本来のLOGIN パスワードを忘れてしまった場合はOSからインストールし直すしかないのでしょうか?

No. 1792 # rosegarden 2001/03/06 (火) 17:44:55
>>1791 ミング
>OSはSolaris7です。
Solaris 7 なら
シングルユーザモードで起動してから、/etc/shadow を
編集して OK です。
インストール CD からでも出来ますが、
シングルユーザモードでの起動の方が簡単ですね。
忘れたけど、恐らく、そのままでファイルの書き換えが
出来たと思います。
FreeBSD だと mount -u / しないと書き込めませんが。

#vi は使えますよね?

No. 1793 # rosegarden 2001/03/06 (火) 17:50:59
>>1792 rosegarden
あ、
Solaris はシングルユーザモードで起動する時でも
パスワードを聞いて来ることを思い出しました。
やっぱりインストール CD から起動して、ファイルシステムを
マウントして書き換えるより無いですね。

No. 1794 # ミング [E-mail] 2001/03/07 (水) 12:29:32
>あ、
>Solaris はシングルユーザモードで起動する時でも
>パスワードを聞いて来ることを思い出しました。
>やっぱりインストール CD から起動して、ファイルシステムを
>マウントして書き換えるより無いですね

ありがとうございます。
ところでもう一つ質問があります。
directoryでls −alすると6行目に各ファイルやdirectoryの容量が表示されますが、そこによく512という数字が出てきます。そのdirectory下のファイルの容量が512以上なので512は容量ではないのかなと思ったのですが、なにか特別な意味があるのでしょうか?

よろしくお願いします。

No. 1795 # rosegarden 2001/03/07 (水) 14:43:43
>>1794 ミング
> そのdirectory下のファイルの容量が512以上な
> ので512は容量ではないのかなと思ったのですが、
ディレクトリもファイルですから、ディレクトリ自体のサイズです。
ディレクトリに書いてあるのは大雑把に言って、ファイル名と
i ノード番号です。うーん、他にも書いてあるかも知れない。
要するにファイルのリストです。最初はだいたい 512 バイトで
ファイルが沢山になった場合には適当に 512 バイト単位で大きくなって
行きます。手元の FreeBSD だとエディタでディレクトリを見ることも
できて、次のような感じです。
% ls IPv6
d200006c.html daytime6.pl ipv6_1.html
d6.c ipv6.html ipv6_2.html
% cat IPv6 | hexdump -C
00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00 80 26 03 00 |.^...........&..|
00000010 0c 00 04 02 2e 2e 00 00 97 27 03 00 14 00 08 09 |.........'......|
00000020 69 70 76 36 2e 68 74 6d 6c 00 1e c0 a0 27 03 00 |ipv6.html....'..|
00000030 14 00 08 0b 69 70 76 36 5f 31 2e 68 74 6d 6c 00 |....ipv6_1.html.|
00000040 a1 27 03 00 14 00 08 0b 69 70 76 36 5f 32 2e 68 |'......ipv6_2.h|&......|そのディレクトリにあるファイルの名前だけ保持できれば
いいので、ファイルの数が少なければ、512 バイトということが
ありえます。

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

No. 1796 # rosegarden 2001/03/07 (水) 14:45:38
>>1795 rosegarden
hexdump のところが表示が変になってしまいましたね。
ソースの方を見てもらえれば分かりやすいかも。

No. 1797 # rosegarden 2001/03/07 (水) 16:41:46
>>1795 rosegarden
> ディレクトリに書いてあるのは大雑把に言って、ファイル名と
> i ノード番号です。うーん、他にも書いてあるかも知れない。
ちょっと不正確なので、正しい説明をします。
FreeBSD な人は /usr/src/sys/ufs/ufs/{ufs_vnops.c,ufs_lookup.c,dir.h}
あたりを見ると分かります。
ディレクトリは可変長レコードのデータベースみたいになっていて、
*BSD の ufs の場合一つのデータは

(1) i node 番号 (4bytes)
(2) レコード自体の長さ (2bytes)
(3) ファイルのタイプ (1bytes)
(4) ファイル名の長さ (1bytes)
(5) ファイル名(ただし 4 bytes 単位で切り上げ)

となっています。これは dir.h の direct 構造体で定義されています。

struct direct {
                u_int32_t d_ino; /* inode number of entry */
                u_int16_t d_reclen; /* length of this record */
                u_int8_t d_type; /* file type, see below */
                u_int8_t d_namlen; /* length of string in d_name */
                char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */
};

さっきの例で見ると
>>1795 rosegarden
00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00

というのがありますが、

84 5e 00 00 : i node 番号 0x5e84 なので 24196
0c 00 : レコードの長さ 12 バイト
04: ファイルのタイプ 04 なのでディレクトリ
01: ファイル名の長さ 1 バイト
2e 00 00 00 : 2e がファイル名 "." あとはつめもの

つまり、これは

% ls -ai IPv6
  24196 ./ 206736 d6.c 206752 ipv6_1.html
206464 ../ 206478 daytime6.pl 206753 ipv6_2.html
206500 d200006c.html 206743 ipv6.html

としたときの "." のデータです。
little endian なので例によってバイトオーダがひっくりかえります。
ファイルのタイプは /usr/src/sys/ufs/ufs/dinode.h にあって

/* File types. */
#define IFMT 0170000 /* Mask of file type. */
#define IFIFO 0010000 /* Named pipe (fifo). */
#define IFCHR 0020000 /* Character device. */
#define IFDIR 0040000 /* Directory file. */
#define IFBLK 0060000 /* Block device. */
#define IFREG 0100000 /* Regular file. */
#define IFLNK 0120000 /* Symbolic link. */
#define IFSOCK 0140000 /* UNIX domain socket. */
#define IFWHT 0160000 /* Whiteout. */

となっています。これを見るとディレクトリは 0x04 です。
桁数があわないのは、パーミッションも一緒に保持させるためで、
下四桁はパーミッション用です。ファイルのパーミッションは
ディレクトリではなく別のところに保持されています。

No. 1798 # 筋肉。 2001/03/07 (水) 17:04:27
はじめあして。
この掲示板スクリプト、すばらしいです。いつも参考にしてます。
いきなりなんですけど、
2ちゃんねるみたいにレス式にするつもりないですか。
今のままだと、レスが分散してみにくいし、
それゆえ1つの話題に(2chみたいに)何百とレスつけるのは無理だし。

とゆーことで。

No. 1799 # 通行人ですが、一言。 2001/03/07 (水) 19:05:33
2ちゃんねるみたいに
「あげ」だの「さげ」だの「逝け」だの「氏ね」だのという書き込みは
見たくないです。
2ちゃんねるの何百というレスの半数は、そういった
「意味不明の書き込み」のように思えます。
そのようなレスを数多く書き込むよりも、今までのように
要点を的確に書いて頂いた方が、情報を得る側としてはありがたいです。
ここには検索機能もありますから、自分に必要な情報は
検索して探し出せば良いことですし、それで見つからなかった場合は
質問をすれば良いと考えています。
今のままでかまわないと思うのですが、常連の皆様方はどうですか?

No. 1800 # gixs 2001/03/08 (木) 00:30:06
>>1797 rosegarden
rosegardenさんには自明のことかもしれませんが。

ls -lで見えるサイズが、各ファイル(ディレクトリもファイル)
に対応するi-node内のサイズ情報を見ているのは、
rosegardenさんの説明のとおりです。

ディスク上の割り当てが(効率の為に)ブロック単位で行われるのも
rosegardenさんの言うとおりです。

普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの
オフセットで決まります。
8192バイトseekして1バイト書き込むとサイズは8193バイトです。
seek部分がカラだとブロックは割り当てられません。
俗に穴のあるファイルと呼ばれます。

ディレクトリの場合、i-node内のサイズ情報は割り当てられたブロックサイズ
そのものです。
理由は単に、本当のサイズ(が定義できたとしても)たいして意味がないからでしょう。

No. 1801 # gixs 2001/03/08 (木) 00:34:27
白状してしまうと、スレッド表示が欲しい、と前から思ってました。

>>1799 通行人ですが、一言。
2chのような書き込みがされることと、掲示板のユーザインターフェースは
全く別だと思います。
書き込みの内容や質は、場の雰囲気で決まるだけだと思います。

No. 1802 # おうお・まこと虫 [URL] 2001/03/08 (木) 10:51:35
たけし怪獣記を、霊能力者から、もらいました。怖いよー。

No. 1803 # rosegarden 2001/03/08 (木) 14:42:31
>>1800 gixs
> 普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの
> オフセットで決まります。
> 8192バイトseekして1バイト書き込むとサイズは8193バイトです。
> seek部分がカラだとブロックは割り当てられません。
> 俗に穴のあるファイルと呼ばれます。
穴のあるファイルという言葉ははじめて伺いました。
実はかなり無知な方なので、こうやって教えて頂くと助かります。
参考になる書き込みどうもありがとうございました。

No. 1804 # 68user 2001/03/08 (木) 15:14:47
>>1803 rosegarden
> 穴のあるファイルという言葉ははじめて伺いました。
では、ついでに。

穴あきファイルの作り方。
    % perl -e 'open(OUT,">tmp");seek(OUT,1000000,0);print OUT "a"'
穴あき部分のデータは HDD には存在しません。ですから、
    % ls -s tmp
で使用ブロック数を見ると、16 となっています。

しかし、穴あき部分を read(2) すると、最初から 0x00 が
入っているかのように扱われます。ですから、
    % cp tmp tmp2
    % ls -s tmp tmp2
      16 tmp
    992 tmp2
と、ファイルをコピーしただけで一気にファイルサイズが膨らみ、
file system full になってしまう可能性がありますので、注意が必要です。

No. 1805 # 68user 2001/03/08 (木) 15:47:17
>>1798 筋肉。
>>1799 通行人ですが、一言。
>>1801 gixs
ここが 2ch 的な場になるのと、2ch 的システムを取り入れるのは、
gixs さんの言われる通り別問題でしょう。2ch 的システムは結構
使いやすいと思います。

で、これまでスレッドタイプは特に検討していなかったのですが、
    ツリー型
        http://www.so-net.ne.jp/ClubHouse/room/pc_scramble/pc_scramble.html

    非ツリー型
        http://www.wakusei.ne.jp/twn/lng/green/wwwlng.cgi
        http://cocoa.2ch.net/unix/index2.html
がありますね (とほほラウンジも 2ch も、データ構造としては
同じでしょうから、両方の形式で表示できるようにしてもいいし)。

どちらがよいですか。また、その理由があれば教えて下さい。

ちなみに、なぜ現在のようなウナギの寝床式掲示板にしたかと
いうと、管理者が楽だからです。「新しい話題だから新しいスレッドを
立てろ」だの「クソスレ立てんなゴルア」とか「1の主治医です」とか
書かなくて済むし ;-)

でも、情報が混ざって探しづらいということならば検討はしてみます。
# それを補うつもりで >>数字 形式のリンクを導入してみました。
# 将来的にはその情報からツリー形式を抽出できないかな、と。

あと、できればご自分が使いにくいと思う理由を分析していただ
けるととってもありがたいです (それが一番難しいんですけれども)。
使いやすい掲示板というのは永遠の課題ですので、今回のような
大規模な改変や、こまかなユーザインタフェースまわりまで、提案
していただけるのはありがたいことです。

しかし、最近これまでにも増して忙しくなってしまったので、
あまり期待はしないで下さいね。

No. 1806 # rosegarden 2001/03/08 (木) 16:30:21
>>1804 68user
>穴あきファイルの作り方。
> % perl -e 'open(OUT,">tmp");seek(OUT,1000000,0);print OUT "a"'
ああ、わかりました。lseek はファイルサイズを越えても
seek できるという性質を使っているんですね。
古い UNIX のシステムコールの本で見たことあるのですが、
その時には何が何だかさっぱり分かりませんでした。
man lseek しても出てますね。
>The lseek() function allows the file offset to be set beyond the end of
>the existing end-of-file of the file. If data is later written at this
>point, subsequent reads of the data in the gap return bytes of zeros (un-
>til data is actually written into the gap).
色々とありがとうございます。勉強になります。
>>1805 68user
>ちなみに、なぜ現在のようなウナギの寝床式掲示板にしたかと
>いうと、管理者が楽だからです。「新しい話題だから新しいスレッドを
>立てろ」だの「クソスレ立てんなゴルア」とか「1の主治医です」とか
>書かなくて済むし ;-)
これは確かにそうですね。スレッド式にしても書き込む方が神経を
使わないとスレッドの意味が無くなるでしょうし。
個人的にはどちらでも構わないのですが、スレッド式にしたときに
68user さんがどんなスクリプトを書かれるのかは興味のあるところです。

No. 1807 # ひろし。 2001/03/08 (木) 22:27:55
ツリー式だと、レスのレスのレスの・・・ってやってくとどんどん
右端によってって、めちゃ見にくいと思う。
とほほラウンジは、スレ見る度にいちいちマウスうごかすのがめんどう。

ということで、2chは、やはりすばらしいと思う。

No. 1808 # やまま 2001/03/09 (金) 23:28:33
>>1770 68user
http://yamama.51.net/cgi-bin/minibbs.cgi?log=395
うひひひ。

えっと、自動リンクのところを、
こんな感じにしてみた。$strは、もうURLエンコードされてるっていうことで。
&amp;以外は、はっちゃいけないんだから、、、。
$str =~ s#(s?https?://(?:[\-_.!~*'()a-z0-9;/?:\@=+\$,%\#]|&amp)+)#<a href="$1">$1</a>#ig;

No. 1809 # Yuuki [E-mail] 2001/03/10 (土) 15:25:41
Xlibでの質問です。

日本語文字列をウィンドウの左上(x:0,y:0)に表示するのを書いています。
ソースコードはこれです。
http://homepage1.nifty.com/tyuuki/tmp/Makefile
http://homepage1.nifty.com/tyuuki/tmp/drawstr.c

実行結果は(うちのtwmだと)このようになります。
http://homepage1.nifty.com/tyuuki/tmp/drawstr.jpeg

なぜか上の方に隠れてしまいます。
本当は、
http://homepage1.nifty.com/tyuuki/tmp/drawstr2.jpeg
のようになってほしいんです。

# これは、多分タイトルバー(?)の長さを求めてやればいいんでしょうけど…。
XCopyAreaで0, 0を指定してるのにこうなってしまうのは、どうしてなんでしょうか?
教えてください。

No. 1810 # 68user 2001/03/12 (月) 00:52:18
>>1807 ひろし。
> ツリー式だと、レスのレスのレスの・・・ってやってくとどんどん
> 右端によってって、めちゃ見にくいと思う。
それは同感ですね。あと、現 SEGA BBS のような、ツリーを一括して
表示するのは最悪だと思います。とにかく見にくい。

>>1808 やまま
> こんな感じにしてみた。
どうもです。参考になります。

>>1809 Yuuki
> なぜか上の方に隠れてしまいます。
XDrawString/XmbDrawString に与える原点 x,y は、文字列の左下の
座標を与えます。本当はもうちょっと複雑で、原点に 10,10 を与えた
としても、フォントの lbearing, descent の値によっては、9,10 や
10,11 にドットが描画される可能性はあります。そこらへんの情報は
XmbTextExtents で取得できます。

No. 1811 # Donchan 2001/03/12 (月) 07:18:09
このサイトのUNIXシステムコールのopendirの説明にあったサンプルコードを打ち込んでみたのですが、
ファイル名の頭2文字が欠けてしまいます。dir->d_nameに-2すればファイル名の頭を指してくれるのですが
何故なんでしょう。OSは SunOS 5.5.1です。sys/dir.hを見てもちゃんとファイル名エントリがd_nameで定義されているのに。何か障害になるものがあるのでしたらお教え下さい。

No. 1812 # 通行人 2001/03/12 (月) 11:21:13
>>1811 Donchan
SunOS上でファイル名2文字切り落としが発生するということであれば、
おそらく使用されているコンパイラに問題があるものと思われます。
以下のアナウンスが参考になるのではないでしょうか。
http://www.sun.co.jp/tech/faq/solaris2_ja/Q6.19.html

以上、通りすがりの者でした。

No. 1813 # Yuuki [E-mail] 2001/03/12 (月) 14:35:37
>>1810 68user
> XDrawString/XmbDrawString に与える原点 x,y は、文字列の左下の
> 座標を与えます。
今まで左上にだと思いこんでました…。

> そこらへんの情報はXmbTextExtents で取得できます。
これで解決しました。
http://homepage1.nifty.com/tyuuki/tmp/drawstr.c
このようになりました。

ありがとうございます。

No. 1814 # 68user 2001/03/12 (月) 22:35:33
>>1813 Yuuki
> これで解決しました。
> http://homepage1.nifty.com/tyuuki/tmp/drawstr.c
http://homepage1.nifty.com/tyuuki/tmp/drawstr2.c ですよね。
誠に勝手ながら、後から見た人のために drawstr2.c を貼っておきます。
行数短縮のため、少々コードスタイルをいじらせていただきました。
もしまずければ削除いたします。

----
#include <stdio.h>
#include <locale.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

static XFontSet load_font( Display *display, const char *font_names ){
        char **miss_str;
        int miss_cnt;
        char *def_str;
        return XCreateFontSet( display, font_names,
                                      &miss_str, &miss_cnt, &def_str );
}

static int ask_text_height( XFontSet font, const char *str ){
        XRectangle rect;
        XmbTextExtents( font, str, strlen( str ), &rect, NULL );
        return rect.height;
}

int main( int argc, char **argv ){
        Display *display;
        Window window;
        GC gc, gc_clr;
        unsigned long background, foreground;
        XFontSet font;
        Pixmap pixmap;
        const int width = 640;
        const int height = 480;
        const char *message = "こんにちは。";

        if ( setlocale( LC_CTYPE, "" ) == NULL ){
                printf( "setlocale error\n" );
                exit( 0 );
        }
        display = XOpenDisplay( NULL );
        font = load_font( display, "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*" );
        background = WhitePixel( display, 0 );
        foreground = BlackPixel( display, 0 );

        window = XCreateSimpleWindow( display, DefaultRootWindow( display ),
                                            0, 0, width, height, 0, 0, background );
        pixmap = XCreatePixmap( display, window, width, height,
                                DefaultDepth( display, 0 ) );

        gc = XCreateGC( display, window, 0, 0 );
        XSetBackground( display, gc, background );
        XSetForeground( display, gc, foreground );

        gc_clr = XCreateGC( display, window, 0, 0 );
        XSetBackground( display, gc_clr, background );
        XSetForeground( display, gc_clr, background );

        XMapRaised( display, window );
        XSelectInput( display, window, ExposureMask );
        while ( 1 ){
                XEvent event;
                XNextEvent( display, &event );
                switch ( event.type ){
                case Expose :
                        XFillRectangle( display, pixmap, gc_clr, 0, 0, width, height );
                        XmbDrawString( display, pixmap, font, gc,
                                              0, ask_text_height( font, message ),
                                              message, strlen( message ) );
                        XCopyArea( display, pixmap, window, gc, 0, 0, width, height, 0, 0 );
                        break;
                }
        }
}

No. 1815 # Yuuki [E-mail] 2001/03/13 (火) 19:02:24
>>1814 68user
> http://homepage1.nifty.com/tyuuki/tmp/drawstr2.c ですよね。
すいません。
間違えていました…。

> もしまずければ削除いたします。
全然まずくないです。

今までのファイルをまとめておきました。
http://homepage1.nifty.com/tyuuki/archive/drawstr.tar.gz

No. 1816 # taka 2001/03/13 (火) 23:30:24
FreeBSD4.2R をインストールしたのですが、サウンドの設定がよくわからずつ
まずいてしまいました。いろいろHPや書籍を調べて以下のような処理を行いま
したが、以前としてサウンドが鳴りません。設定で間違っている箇所が
あれば指摘して頂きたいです。ちなみに、サウンドカードはYamahaのYMF740です。

1. カーネルの再構築
      # cd /usr/src/sys/i386/conf/
      # cp GENERIC MY_KERNEL
      # vi MY_KERNEL
          -------------------------
          以下の内容を追加
          # For PnP/PCI sound cards
          device pcm
          -------------------------
      # config MY_KERNEL
      # cd ../../compile/MY_KERNEL
      # make depend
      # make install

2. デバイスファイルの作成
      # cd /dev
      # ./MAKEDEV snd0

以下は関係ありそうなエラーログです。
> dmesg | grep pcm
pcm0: <Yamaha DS-1 (YMF740?)> irq 9 at device 10.0 on pci0
pcm0: unable to map register space
device_probe_and_attach: pcm0 attach returned 6

> cat /dev/sndstat
cat: /dev/sndstat: Device not configured

No. 1817 # 68user 2001/03/14 (水) 00:29:16
>>1816 taka
> FreeBSD4.2R をインストールしたのですが、サウンドの設定が
> よくわからずつまずいてしまいました。
えっと、サウンド・PnP まわりはいまだに何がなにやらわかりません。
うちでは device pcm を追加し、OS ブート時に boot -cv でコンフィグ
モードにして
    > pnp 1 0 bios enable irq0 5 drq0 1 port0 0x220 port1 0x0 port2 0x388
と設定しました。

なんで IRQ が 5 なのか、なんで PnP なのに手動で設定しないと
いけないのかさっぱりわかりません。pnpinfo(8) の出力も全く理解
できないし…。

僕は、IRQ って ISA のみにしかない概念? PCI のサウンドカードって
あるの? …てな知識レベルなので、FreeBSD-users-jp などで質問された
方が早いかもしれません。

どこかにわかりやすい解説はないかなぁ。

No. 1818 # rosegarden 2001/03/14 (水) 01:32:44
>>1816 taka
私の場合次のようになっています。もっとも 4.3-BETA ですが、
要領は同じだと思います。

# For non-pnp sound cards with no bridge drivers only:
device pcm0 at isa? irq 10 drq 1 flags 0x0
#
# For PnP/PCI sound cards
device pcm

# The bridge drivers for sound cards. These can be seperately configured
# for providing services to the likes of new-midi (not in the tree yet).
# When used with 'device pcm' they also provide pcm sound services.
#
# sbc: Creative SoundBlaster ISA PnP/non-PnP
# Supports ESS and Avance ISA chips as well.
# gusc: Gravis UltraSound ISA PnP/non-PnP
# csa: Crystal Semiconductor CS461x/428x PCI

# For non-PnP cards:
device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15
#device gusc0 at isa? port 0x220 irq 5 drq 1 flags 0x13

sbc ドライバか gusc ドライバのいずれかを有効にしてみてください。
このへんは試行錯誤がいるかもしれません。
LINT から関係する部分を copy&paste してきて
自分に関係ない部分をコメントアウトすると面倒ないです。

No. 1819 # Donchan 2001/03/14 (水) 07:49:45
>>1812 通行人
パスの先頭に/opt/SUNWspro/bin/を追加することで正常に動作しました。互換性の問題だったのね……。

No. 1820 # みみ 2001/03/14 (水) 11:56:04
いきなりの質問でごめんなさい。
こちらの掲示板にはかなり詳しい方がいらっしゃるようなので、
教えて頂きたいのです。

今、UNIX上で動くクライアントサーバをC言語で作っています。
(ほとんど経験がないので、勉強しながらという感じです。)
ちょうど、こちらに参考になるサンプルがあったので、それを元に
作っているところです。
自分の環境で、クライアントとサーバ間のソケット通信をすることが
できることを確認したところです。

ここからが良くわからないところなのですが、
クライアントが複数あって、それぞれが別の処理を行う時、
サーバ側としては、そのクライアントをどう区別したら良いのでしょうか?
selectを使って、任意のソケットに対して任意のデータを送信することは
わかるのですが、では、任意のクライアントプロセスを区別するのは
どうすれば良いのかが、いまひとつ、ぴんとこないのです。
たとえば、サーバ側の処理として、
クライアントA:サーバに「aaa」→「AAA」と変換してecho。
クライアントB:サーバに「bbb」→「BBBBB」と変換してecho。
クライアントC:サーバに「ccc」→「C」と変換してecho。
というのがあるとします。
各クライアントが順不同のタイミングで接続してきた場合、
どのクライアントがどのソケットに接続しているのかを知るのには、
どのような方法があるのでしょうか?
ついでですが、クライアントは、おなじ内容のものが複数接続してくる
場合もあります。(AとA'とA''、みたいに。)

つまり、ソケットディスクリプタのID(と言って良いのでしょうか?
よく、 sd[0]とかsd[i]とかと書かれているものです。)と
クライアントをどうリンクさせれば良いのかがわからない、んです。
C言語で処理するレベルでの話だろうとは思うのですが、
具体的なサンプルがなくて、方法を理解することもできず、困っています。
どうぞ、知恵をお貸しください。
いきなり現れて勝手なお願いをしていますが、よろしくお願いします。

No. 1821 # 68user 2001/03/14 (水) 12:23:19
>>1820 みみ
> 各クライアントが順不同のタイミングで接続してきた場合、
> どのクライアントがどのソケットに接続しているのかを知るのには、
> どのような方法があるのでしょうか?

http://X68000.startshop.co.jp/~68user/net/c-echo-2.html
を見てください。
    getpeername(sock, (struct sockaddr *)&peer_sin, &len)
でソケットの接続先のアドレス (IP アドレス+ポート番号の
情報) が peer_sin に格納されます。

    - IP アドレス … inet_ntoa(peer_sin.sin_addr)
    - ホスト名 … gethostbyaddr
    - ポート番号 … ntohs(peer_sin.sin_port)
でそれぞれ取得できます。

そのページのサンプルの echo-server-select.c では、
accept したときに struct CLIENT_INFO という構造体に
ホスト名・IP アドレス・ポート番号を格納し、その後
クライアントの情報が必要になったら struct CLIENT_INFO を
参照していますが、毎回ソケットに対して getpeername
しても動作はします。

No. 1822 # みみ 2001/03/14 (水) 17:56:54
素早い解答、ありがとうございます。
確認の意味で、質問をさせて頂きます。

そうすると、サーバ側の処理としては、下記のように
なるということでしょうか?
・クライアントからの接続がある。
  (sd[i]がインクリメントされる。)
・接続してきたクライアントからの処理要求がある。
  (ここで、クライアント側のプロセスが何なのかが判明する。)
・getpeername を行うことで、sd[i]の”i”の値を得る。
  (これにより、接続元クライアントのプロセスとを
    リンクさせることができる。)

上記のような解釈で、誤りがありませんでしょうか?

getpeername については、もう少し勉強をしてみます。
(実は、サンプルプログラムで良く理解できていなかった部分です。
クライアント情報を格納しているのは判ったのですが。
付け焼き刃のかなしさです。でも頑張ります。)

本当に、ありがとうございます。
後程、結果を報告に来ます。

No. 1823 # 68user 2001/03/15 (木) 01:57:20
>>1822 みみ
> ・クライアントからの接続がある。
>  (sd[i]がインクリメントされる。)
> ・接続してきたクライアントからの処理要求がある。
> (ここで、クライアント側のプロセスが何なのかが判明する。)
> ・getpeername を行うことで、sd[i]の”i”の値を得る。
>  (これにより、接続元クライアントのプロセスとを
>   リンクさせることができる。)
うーん、説明が難しいですね。一度わかってしまえば何てことはない
のですが…。

クライアントとサーバとの接続点がソケットです。複数のソケットが
あるとき、それらを識別するのはソケットディスクリプタ (3 とか 4
などの整数値) です。別のソケットには、必ず別のソケットディスク
リプタが割り振られます。

http://X68000.startshop.co.jp/~68user/net/c-echo-2.html で言うと、
    for ( i=0 ; i<FD_SETSIZE ; i++ ){
            if ( FD_ISSET(i, &target_fds) ){
                    if ( i == listening_socket ){
                          accept して、新クライアントのソケットディスクリプタを取得
                    } else {
                          ソケットディスクリプタ i からデータが送られてきた
                    }
            }
    }
という感じです。例えば i==5 のとき FD_ISSET が真ならば、
今からやりとりしたいのは「ソケットディスクリプタ 5」です。
このクライアントとの接続が切れない限り、この番号は不変です。
データを読みたいなら read(5, buf, sizeof(buf)) すればよいし、
データを送りたいなら write(5, "hoge", sizeof("hoge")-1) とします。
                    if ( i == listening_socket ){
                          accept して、新クライアントのソケットディスクリプタを取得
                    } else {
                          len = read(5, buf, sizeof(buf));
                          write(5, buf, len);
                    }
とすれば、それで echo サーバのでき上がりです。ソケット
ディスクリプタ 5 からデータを読んで、ソケットディスクリプタ
5 にデータを書いているので、echo した結果が別クライアントに
送られることはありません。

つまり、ソケットがいくつあっても「ソケットディスクリプタが
確定している=クライアントが識別できる」と言えます。

getpeername は、相手側の IP アドレスやポート番号を知りたい
場合に使いますが、根本的にはそれらの情報がなくてもどの
クライアントとやりとりしているのか区別できます。

No. 1824 # みみ 2001/03/15 (木) 10:55:34
あ、また書き込んでくださったのですね。
重ね重ね、ありがとうございます。

>>1823の内容からすると、
「selectにより、各クライアントを固有のものとして認識できる為、
サーバ側でプログラム的に管理しなくても大丈夫。」
ということなのでしょうか?
(うう、一所懸命にプログラム書いちゃいましたけど。)

昨日の書き込み(1822)の内容の処理を行うプログラムは、
意図した通りの動作をしていることは、確認できました。
が。
システムコールに依存した方が信頼性は高いので、
もう一度、見直すことにします。

ありがとうございました。
また、報告に伺います。

No. 1825 # 68user 2001/03/15 (木) 13:22:11
最初のご質問では
>>1820 みみ
> どのクライアントがどのソケットに接続しているのかを知るのには
とありましたので、IP アドレスやポート番号などの情報が
得たいのかと思い getpeername を使えばよいという回答を
しましたが、どうやらそうではないのですね。

TCP で、複数のクライアントが接続してきたときに、クライアントを
区別するために、サーバ側で何か処理を行う必要があるか、という
意味ならば、

>>1824 みみ
> 「selectにより、各クライアントを固有のものとして認識できる為、
> サーバ側でプログラム的に管理しなくても大丈夫。」
という認識でよろしいかと思います。

No. 1826 # taka 2001/03/16 (金) 00:51:14
せっかく指摘して頂いたのに返答遅れてすいませんでした。

>>1818 rosegarden

指摘して頂いたとおり、LINTを見ると関係ありそうなものはいかの
通りでした。

# snd: Voxware sound support code
# sb: SoundBlaster PCM - SoundBlaster, SB Pro, SB16, ProAudioSpectrum
# sbxvi: SoundBlaster 16
# sbmidi: SoundBlaster 16 MIDI interface
# pas: ProAudioSpectrum PCM and MIDI
# gus: Gravis Ultrasound - Ultrasound, Ultrasound 16, Ultrasound MAX
# gusxvi: Gravis Ultrasound 16-bit PCM (do not use)
# mss: Microsoft Sound System
# css: Crystal Sound System (CSS 423x PnP)
# sscape: Ensoniq Soundscape MIDI interface
# sscape_mss: Ensoniq Soundscape PCM (requires sscape)
# opl: Yamaha OPL-2 and OPL-3 FM - SB, SB Pro, SB 16, ProAudioSpectrum
# uart: stand-alone 6850 UART for MIDI
# mpu: Roland MPU-401 stand-alone card

sbcドライバかguscドライバのいずれかを有効にすればよいとの後指摘でした
が、私の使用しているドライバはYamahaのYMF740なので上記のうち
「opl」を有効にするのかなと初心者なりに考えて見たのですが。


>>1817 68user
まだ、勉強不足でよくわからないのですが、コンフィグモードというもので
設定すると何らかの設定ファイルが書き変わるのでしょうか?
まだ、恐くて試していません。

No. 1827 # rosegarden 2001/03/16 (金) 01:50:02
>>1826 taka
> 指摘して頂いたとおり、LINTを見ると関係ありそうなものはいかの
> 通りでした。
>
> # snd: Voxware sound support code
> # sb: SoundBlaster PCM - SoundBlaster, SB Pro, SB16, ProAudioSpectrum
> # sbxvi: SoundBlaster 16

4.2-RELEASE でサウンドを利用する場合 2 通りの方法があります。
(1) pcm ドライバを使う
(2) snd ドライバを使う

4.2-RELEASE までなら、snd ドライバが使えます。
で、taka さんが関係ありそうとおっしゃっている opl ドライバは
snd ドライバを使う際に使います。
これは pcm ドライバとは一緒に使えません。
(忘れたのですが、指定しても片方が無効になるのだと思いました。)

pcm ドライバを使うのなら前の私の書き込みのように
sbc ドライバか gusc ドライバあたりを有効にします。

一方, snd ドライバを使うのなら、taka さんの場合なら、
おそらく snd, sb, sbxvi, sbmidi, opl あたりを有効にするのだと
思います。sbxvi あたり存在しないというメッセージが出るかも知れませんが、
そのへんは試行錯誤でやってみてください。
どうしても opl がよさそう、あるいは、簡単そうというのなら、
snd ドライバを有効にして pcm ドライバは使いません。

余談ですが、snd ドライバを使う方法は「FreeBSD 徹底入門」あたりに
書かれている方法ですが、このドライバ自体かなり古いので、
現在では起動時に warning が出ます。
この warning が出ても害はないので心配はいりません。
ところが、snd ドライバは今年に入ってからなくなったと思うので、
4.3-RELEASE からは snd ドライバは使えません。

No. 1828 # taka 2001/03/18 (日) 01:19:57
>>1827 rosegarden

親切に説明して頂きありがとうございます。

>4.2-RELEASE でサウンドを利用する場合 2 通りの方法があります。
>(1) pcm ドライバを使う
>(2) snd ドライバを使う

早速、上記(1)の方法でカーネルの再構築を行ってみました。
以前の書き込みを参考にして

# For non-pnp sound cards with no bridge drivers only:
device pcm0 at isa? irq 10 drq 1 flags 0x0
#
# For PnP/PCI sound cards
device pcm

を追加し、sbcドライバ、guscドライバを交互に有効にしてみました。

dmesgの関係ありそうなログは前と変わらず、下記の通りでした。
pcm0: <Yamaha DS-1 (YMF740?)> irq 9 at device 10.0 on pci0
pcm0: unable to map register space

% cat /dev/sndstat
cat: /dev/sndstat: Device not configured

どちらのドライバを用いても認識していないみたいでした。

---
ところで、話は変わるのですがやはり初心者にはFreeBSDは敷居が高いものな
のでしょうか?Linuxなどは書籍などが豊富で分かりやすく書かれたものが多
い印象を受けます。一方、FreeBSDは書籍も少なく、またある程度の知識を
もっていないと私の場合のようにすぐつまづくように感じました。

No. 1829 # rosegarden 2001/03/19 (月) 06:41:08
>>1828 taka
> mesgの関係ありそうなログは前と変わらず、下記の通りでした。
> pcm0: <Yamaha DS-1 (YMF740?)> irq 9 at device 10.0 on pci0
> pcm0: unable to map register space
うーん、4.2-RELEASE だとまだ pcm ドライバが完全じゃないからかな?
いま出張中で、-current のソースしかてもとに無いし、
cvsweb で時間をかけて調べられる状態でもないので、
はっきりしたことは言えませんが、
ds1.c:
          $FreeBSD: src/sys/dev/sound/pci/ds1.c,v 1.21 2000/12/25 01:42:13 cg Exp $
となっていますので、snd ドライバを使うしかないのかも知れません。
上の 2000/12/25 という日付は 4.2-RELEASE が出た後の日付ですから。

あと変だなと思う点は port アドレスが認識されていない点です。
>pcm0: <Yamaha DS-1E (YMF744)> port 0xfc8c-0xfc8f,0xfcc0-0xfcff \
>mem 0xfedf8000-0xfedfffff irq 9 at device 9.0 on pci0
ちゃんと認識されている場合、こんな感じになると思うのですが。

私の知っている範囲で言えば、サウンドドライバの設定には問題無いので、
他の設定、例えば PnP BIOS とかノートパソコンなら PCCARD
の設定なんかの問題も考えられるように思います。

No. 1830 # taka 2001/03/20 (火) 01:14:00
>>1829 rosegarden

度々すいません。

>ds1.c:
> $FreeBSD: src/sys/dev/sound/pci/ds1.c,v 1.21 2000/12/25 01:42:13 cg Exp $

確認して見たところ
ds1.c :
        $FreeBSD: src/sys/dev/sound/pci/ds1.c,v 1.8.2.4 2000/10/05 05:12:31 cg Exp $

となっていて、随分古いような気がしました。

そこで、良く分からないのですが単純に「ds1.c」だけ currentから最新のものをダ
ウンロードしてカーネルを再構築するという方法でよろしいのでしょうか?
いろいろ関連するソースもあると思うので、単純にそのようにしてよいものか
分かりませんが

No. 1831 # sakachan 2001/03/20 (火) 11:30:26
いつもこのページを参照させていただいております。
今回初めて書きこませていただきます。

Linux上のTrueColorのディスプレイで実験データ表示用の
カラー等高線の図を書くXプログラミングの必要に迫られました。
当初は等高値に値するRGBの各256値を配列に入れて、
XlibのXCreateImage()を使って画面表示すればOKと思っておりました。
しかし、どうやらXウインドウにRGBAフォーマットで渡さなければうまく
表示出来ないようで、単色の色をRGB値で設定してもアルファー値の設定
方法がわからないために「砂あらし」画面の様な画面しか表示されません。
(白、黒などはRGB=各0256、アルファー=0,256とすれば表示できる)
設定を変えて何とかしても良いのでしょうが、RGBAについて理解して
おきたいために、RGBAでの表示にこだわりたいと思います。

何らかのX11上のライブラリ、もしくはRGBA規格についてご存じのお方
ご教授お願いいたします。

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

No. 1832 # rosegarden 2001/03/20 (火) 19:58:40
>>1830 taka
> そこで、良く分からないのですが単純に「ds1.c」だけ currentから最新のものをダ
> ウンロードしてカーネルを再構築するという方法でよろしいのでしょうか?
> いろいろ関連するソースもあると思うので、単純にそのようにしてよいものか
> 分かりませんが
いま自宅に戻ったので、ソースを見比べてみたのですが、だいぶ変わっていますね。
このソースの感じをみると ds1.c の入れ換えだけでは無理だと思います。
4.2-RELEASE 相当のソースと最新のソースを比べると激しく変化しています。
結局、カーネルのソース全体を入れ換えねばならず、そうすると今度は
全部の基本コマンドと /etc 以下のファイルの入れ換えが必要になってきます。

あと数日で 4.3-RELEASE が出るので、新しくしたい場合にはそれを
待った方が良いです。急ぐのなら、4.3-BETA というのが
ftp://current.jp.FreeBSD.org/pub/FreeBSD/snapshots/i386/4-LATEST/
にあります。マシンが 2 台あるのなら、片方にこのファイルをダウンロードして
目標とするマシンにインストールすることも可能です。これは
かなり 4.3-RELEASE に近い物になるはずです。

しかしながら、初心者の方にこれを使うことはお勧めできません。もっと厄介な
問題を抱える可能性があります。

話を原点に戻しましょう。

サウンドを使うという場合には次のことをまず考慮した方が良いと思います。

(1) snd ドライバの使用。
(2) PnP が有効になっているか
(3) ノートパソコンだと PCCARD 関係の設定。PCCARD のドライバが
        使う irq とサウンド関係はバッティングしがちです。
(4) PnP を止めて、Legacy モードでマシンを起動するようにして、
        Windows (同じマシンに入っていれば) の
        デバイスドライバのところをみて irq とか iomem などを
        メモして、それをカーネルの設定ファイルに指定して再構築します。

(3) までやってだめなら、FreeBSD-users-jp というメーリングリスト
があるのでそれに参加して質問してみた方が私なんかを相手にするよりも良いかも
しれません。メーリングリストの購読の案内は
http://www.jp.freebsd.org/ml.html#FreeBSD-users-jp
にあります。その際には、カーネルの設定ファイル全部と dmesg の出力
「全部」を添付してください。理想的なのは /boot/loader.conf に

kernel_options="-v"

というのをいれて再起動し dmesg をとってください。より詳細な情報が
dmesg でみられます。みる人がみれば、普通の dmesg よりも
アドバイスしやすいはずです。

どうも、サウンドの設定には問題がないようなので、
他のものと衝突しているような気がします。この場合に重要なのは
ノートパソコンで PCCARD を使っているかどうかです。
あとは普通に質問を書けば良いかと思います。検索をしましたが、YMF740 の
報告は見当たらず、資料さえ全部添付すれば、
そのまま質問をしても怒られるようなことはないと思います。

それで駄目なら、ソースの問題ということになります。
ファイルの入れ換えは本当に最後の手段です。

No. 1833 # rosegarden 2001/03/20 (火) 20:08:23
>>1832 rosegarden
> マシンが 2 台あるのなら、片方にこのファイルをダウンロードして
> 目標とするマシンにインストールすることも可能です。これは
> かなり 4.3-RELEASE に近い物になるはずです。
補足です。サイズは X 抜きで、200MB 弱です。通常のアナログ回線での
ダウンロードだと 17 時間程みてください。専用線なら、30 分程度で
すむ場合もあります。ISDN なら 14 時間程度ですむかも知れません。

インストールフロッピィのイメージだけダウンロードして ftp でインストール
という手段もありますが、これはもう絶望的に時間がかかります。
やるのなら、別マシンにダウンロードしてから、そのマシンから ftp インストール
というのが実際的です。

どちらにしても、初心者の方がするのはきつすぎます。

ともかく、入れ換えを検討する前に出来ることはあると思いますから、
考えてください。

No. 1834 # taka 2001/03/21 (水) 02:38:17
>>1832 rosegarden
毎回の早い返答ありがとうございます。

>サウンドを使うという場合には次のことをまず考慮した方が良いと思います。

>(1) snd ドライバの使用。
「4.3-RELESEからsndドライバは使用されない」とおっしゃっていたので
将来性を考えて(?)pcmドライバのみ試してみました。

>(2) PnP が有効になっているか
BIOSセットアップでプラグ&プレイが有効になっていることを確認しました。

>(3) ノートパソコンだと PCCARD 関係の設定。PCCARD のドライバが
> 使う irq とサウンド関係はバッティングしがちです。
デスクトップで、またPCCARDもないのでこれは関係ないかも(?)

>(4) PnP を止めて、Legacy モードでマシンを起動するようにして、
> Windows (同じマシンに入っていれば) の
> デバイスドライバのところをみて irq とか iomem などを
> メモして、それをカーネルの設定ファイルに指定して再構築します。


ハードウェア関係の設定(irq,iomemなど)は、自分の勉強不足のせいもあって
よくわからないのが現状です。これから、ハード関係の勉強をして最低限の
ことは覚えて行こうと思います。とりあえず、マシンも1台しかないので
雑誌などに4.3-RELEASEが添付されたときにOSを再インストールしてみようと
思います。

初心者の私に丁寧に解説して頂いてどうもありがとうございました。

No. 1835 # 68user 2001/03/21 (水) 07:07:23
>>1831 sakachan
> 何らかのX11上のライブラリ、もしくはRGBA規格についてご存じのお方
> ご教授お願いいたします。
少なくとも X11R6.3 では RGBA には対応していないような気がします。
# 根拠は cd /usr/X11R6/include; grep -i rgba *,*/*。

gtk+、Qt、OpenGL あたりにそれらしき関数があったので それを使うか、
あるいはアルファ値を自前で計算することになると思います。

No. 1836 # ふくし 2001/03/21 (水) 15:37:35
たまに出てきてアホな質問で住みません。
Perl で質問です。

(1)

$path = '/usr/local/nantoka/us/us/file';

の /us/ を /jp/ に変えようと思ったら、

$path = s|/us/|/jp/|g;

ではうまくいきません。

$path =~ s|/us/|/jp/| while $path =~ m|/us/|;

ではうまくいったのですが、こんなんでいいんでしょうか。

(2)

コマンドラインの mkdir -p で中間的なディレクトリをイッキに
作ってくれますが、Perl の mkdir では作ってくれません。
いまは `` でコマンドを呼んでいますが、これもしょうがないでしょうか。

No. 1837 # 68user 2001/03/21 (水) 17:06:50
>>1836 ふくし
> $path = s|/us/|/jp/|g;
> ではうまくいきません。
= じゃなくて =~ という話でしょうか。

> コマンドラインの mkdir -p で中間的なディレクトリをイッキに
> 作ってくれますが、Perl の mkdir では作ってくれません。
perl5 の標準モジュール File::Path にある mkpath がご希望の
ものでしょう。使い方は perldoc File::Path をご覧下さい。

No. 1838 # ふくし 2001/03/21 (水) 18:31:49
>= じゃなくて =~ という話でしょうか。
あっすいません、これは掲示板の書き違いです。
正しく動かないスクリプトはちゃんと =~ と書いています。

../us/us/.. の場合、先頭の /us/ を置換したら続きの us/ から
処理するので s///g ではいかない、という話のようです。

File::Path はありがとうございました!

No. 1839 # 68user 2001/03/21 (水) 19:58:36
>>1838 ふくし
> ../us/us/.. の場合、先頭の /us/ を置換したら続きの us/ から
> 処理するので s///g ではいかない、という話のようです
であれば、man perlre に
    \G … Match only where previous m//g left off (works only with /g)
とありますので、
    $path =~ s|\G/us/|/jp/|g;
ではどうでしょうか。

>>1836 ふくし
> $path =~ s|/us/|/jp/| while $path =~ m|/us/|;
でもいいのですが、定番の書き方としては、
    1 while ($path =~ s|/us/|/jp/|);
というのがありますね。

No. 1840 # 68user 2001/03/21 (水) 20:02:09
>>1839 68user
> $path =~ s|\G/us/|/jp/|g;
> ではどうでしょうか。
ありゃ、全然ダメだ。というか、意味が全く逆ですね。
こういうときに使う perl の regexp ってなかったっけなぁ。

No. 1841 # ふくし 2001/03/21 (水) 20:46:28
にゃるほど、1 while でがんばります。(ヘンな日本語)
ありがとうございました。

もいっこズにのって質問。
stat や split をリストに代入して1番目と5番めと7番目を
使いたい、とかいうとき、ぼくは他のを $dummy というので
受けていますが、たまに -w で、1回しか使ってないけど
書き間違えてませんかと言われます。
これを言われないような /dev/nul みたいな変数ってないんでしょうか。

No. 1842 # rosegarden 2001/03/21 (水) 23:22:14
>>1834 taka
> >(1) snd ドライバの使用。
> 「4.3-RELESEからsndドライバは使用されない」とおっしゃっていたので
> 将来性を考えて(?)pcmドライバのみ試してみました。
ええ、出来ればその方が良いのですが、しかし、鳴らないものを使っても
いまの taka さんの needs にはあわないだろうということで、
snd ドライバをお勧めしたのです。

しかし、最初は設定ファイルのレベルだと思ったので、
お節介をしたのですが、
まったく役に立たず、時間ばかりとってしまいました。
申し訳ありませんです。

No. 1843 # 68user 2001/03/21 (水) 23:30:56
>>1841 ふくし
    ($dummy, $dummy, $dummy, $num1, $num2) = (0,1,2,3,4,5);
と、一度に複数回 $dummy を使えば
    used only once: possible typo
の warning は抑止できます。あと、
    ($num1, $num2, $num3) = (split(/ /))[1,5,7];
という手もありますが、可読性が低下しますね。

本質的には 「1番目と5番めと7番目を使いたい」という
使い方をせずに
    $foo = $o->getFoo;
    $bar = $o->getBar;
    $baz = $o->getBaz;
などと書くように努めるべきだと思いますが、全ての場面で
それができるわけでもなく、悩ましい限りです。

No. 1844 # ふじ [URL] 2001/03/22 (木) 02:40:55
はじめまして。

いきなりですが、
>これを言われないような /dev/nul みたいな変数ってないんでしょうか。
(undef, undef, undef, $num1, $num2)=(0,1,2,3,4);

こんなのでどうですか?

No. 1845 # rosegarden 2001/03/22 (木) 03:37:21
>>1841 ふくし
>>1843 68user
>>1844 ふじ
つぎのようにすれば文句をいわれませんでした。

#!/usr/bin/perl -w

my ($login, $pass, $uid, $gid) = getpwnam('root');

print "$login:(password):$uid:$gid\n";
exit;

my をとったものと、較べてください。
ちなみに動作環境は perl 5.00503 ないしは perl 5.6.0 です。

No. 1846 # rosegarden 2001/03/22 (木) 06:15:44
>>1845 rosegarden
この他にも

#!/usr/bin/perl -w

use vars qw($login $pass $uid $gid);

($login, $pass, $uid, $gid) = getpwnam('root');

print "$login:(password):$uid:$gid\n";
exit;

などと、use vars で宣言しておけば文句を言われないようです。
詳しくは、perldoc vars してみてください。

No. 1847 # ふくし 2001/03/22 (木) 10:09:46
にゃるほど、

ふじさん>
リスト要素にすれば undef を左辺に持っていけるんですね。
undef = 3; だと怒られますけどね。(当たり前)
これは言いたいことを強烈に表現できているような気がします。

rosegarden さん>
my や use vars を使った方法もいいですね。
この問題がよく出てくるのはファイルの stat を受けるときなんですが、
こういう意味のある変数のときは変数名をつけておいて使わない
(そのうち使うかもしれないので)
というのが便利なので、使わせていただきます。

みなさんどうもありがとうございました。勉強になるー

No. 1848 # d-jiro 2001/03/22 (木) 18:54:15
いつも拝見しながら勉強させていただいています。
Perlを使ったソケット通信について質問があります。

HTTPSサーバに対してのソケット通信です。

http://X68000.startshop.co.jp/~68user/net/http-2.html
にあるように、通常のソケット通信はできたのですが、
相手がHTTPSになるとヘッダの都合か、まったくうまくいきません。
たとえば、

自分のサーバ →POST→ 相手のCGIのあるサーバ(https)
                                                                      ↓
ブラウザ上にデータを表示 ← 相手が出力したデータを取得

このようなイメージです。
通常のHTTPでのソケット通信の場合、出力するヘッダは、
  "POST /sample.cgi HTTP/1.0\r\n"
  "\r\n(空行)"
  "(POSTで送信するデータ群)"
このような感じだと思うのですが、HTTPS相手だと
まったく受け付けてくれません・・・。
これってSSLを相手が利用している以上、不可能なことなのでしょうか?
皆様の知識と知恵を貸してください、お願いします。

No. 1849 # 68user 2001/03/23 (金) 13:22:14
>>1848 d-jiro
> このような感じだと思うのですが、HTTPS相手だと
> まったく受け付けてくれません・・・。
としたいなら、自前で相手サーバのポート 443 (https の
ポート番号) に繋げて、自前でデータを暗号化してから
ソケットに送り、受け取ったデータは復号化する必要が
あります。これを全部やるのはとてもとても面倒なので、
モジュールを使いましょう。

まず、OpenSSL (http://www.openssl.org) をインストール
してください。で、
    http://www.cpan.org/modules/by-module/Net/
から Crypt-SSLeay モジュールを入れて下さい。これは LWP を
使うことを前提としたもののようです。

あるいは、Crypt-SSLeay モジュールの代わりに Net::SSLeay
というモジュールもあり、socket like に使えますが、現在は
保守されていないのかもしれません。

# http://www.cpan.org/modules/by-module/Net/Crypt-SSLeay-0.23.readme
# http://www.cpan.org/modules/by-module/Net/Net_SSLeay.pm-1.05.readme

なお、どちらも使ったことがないので、上に書いたことは
全て想像です。成功したか失敗したか結果を教えて下さい。

>>1844 ふじ
そうか、undef っちゅうのがありましたね…。

>>1846 rosegarden
これとは逆に、use vars すると warning が出なくなって
困ったことがあります (そのときは warning を出してほしかった)。

No. 1850 # whoisおしえてください 2001/03/23 (金) 16:43:32
whoisのプログラムをプログラムソースを探しているのですが、
どちらにあるかご存知ありませんか?
できればperlがいいのですが。

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

No. 1851 # 68user 2001/03/23 (金) 17:38:02
>>1850 whoisおしえてください
> whoisのプログラムをプログラムソースを探しているのですが、
    perl 版
        http://ring.asahi-net.or.jp/pub/lang/perl/CPAN/authors/id/D/DH/DHUDES/

    ついでに C言語版 (FreeBSD の whois。最近のは IPv6 化されています)
        http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/usr.bin/whois/whois.c

    whois プロトコル
        http://ring.asahi-net.or.jp/pub/doc/RFC/rfc1834.txt

てなところでしょうか。

No. 1852 # d-jiro 2001/03/23 (金) 23:08:37
>>1849 68user
>http://www.cpan.org/modules/by-module/Net/
>から Crypt-SSLeay モジュールを入れて下さい。これは LWP を
>使うことを前提としたもののようです。

こちらの方法で試してみることにします。

おそらく数日後に結果が報告できると思います。
つまづきながらですが、また質問させていただくかもしれません。
ありがとうございました。

No. 1853 # PHP 2001/03/25 (日) 03:06:26
こんばんは、現在検索エンジンを作成中ですが、キーワード入力の所で
いきなりつまずいています。
良く検索エンジン(goo,infoseek)等で検索文字を複数キーワード入力
し、キーワード間はスペースもしくは”|”パイプで区切る事をします。
単一キーワードは簡単に出来るのですが、このスペース区切りで
複数キーワードを引数にする方法がわかりませんが、宜しければお教え
いただけないでしょうか?

No. 1854 # d-jiro 2001/03/25 (日) 20:00:22
先日HTTPS接続のことで質問したものです。

HTTPS相手のPOSTでのCGI接続は、
Crypt-SSLeayモジュールを導入し、
LWPを使うことで解決しました。
部分的な引用でわかりにくいかもしれませんが、

$req = HTTP::Request->new( POST => "$url" );
$req->content_type('text/plain');
$req->content('$postdata');

とすることで、HTTPSだと意識することなく
レスポンスをもらうことができました。

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

No. 1855 # 68user 2001/03/26 (月) 22:55:38
>>1854 d-jiro
> HTTPS相手のPOSTでのCGI接続は、Crypt-SSLeayモジュールを導入し、
> LWPを使うことで解決しました。
それはよかった。こちらの環境でも試してみましたが、
うまくいったようです。

>>1853 PHP
> 一キーワードは簡単に出来るのですが、このスペース区切りで
> 複数キーワードを引数にする方法がわかりません
複数キーワードに分割というのは
    $keyword = 'foo bar baz';
    @keywords = split(/\s+/, $keyword);
といったことですか? あるいは、複数のキーワードで検索するという
ことですか? 後者ならば
    http://wakusei.cplaza.ne.jp/twn/wwwsrch.htm
というのが参考になるかもしれません。

この CGI スクリプトは素直な書き方になっていますが、サーバへの
負荷はかなりのもので、実用には向きません。

最初のとっかかりとして、参考程度にとどめておくのがいいでしょう。
高速化のヒントは eval です。

No. 1856 # 68user 2001/03/27 (火) 00:02:52
http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
    ・環境はできるだけ詳しく
    ・マルチポスト禁止
    ・回答をもらったら結果を報告する
という注意点を追加しました。この場でいちいち注意したくはないので、
質問する前に是非ご一読下さい。

また、各メッセージの「No.1504 # 68user」などという表示の「#」を
クリックすると、
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1500-1600#1504
というリンクに飛ぶようにしました。

# 更新履歴:
# http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi

やはり設計が甘かったようで、この掲示板に美しく機能拡張するのは
もう無理みたいです。スクラッチから書き直したいけど、きれいに
書ける自信がない…。

No. 1857 # ケンMK2 2001/03/27 (火) 18:37:47
初めて書き込みをします。
早速ですが質問があります。

現在osをredhat6.2Jでsendmail8-9-3を使いメールサーバーを構築中です。
そこでcgiを使いメールを発信させると受信したメールのヘッダーのRecievedの部分の
Fromがnobody@localhostとなってしまいます。。
こちらとしてはホストのアドレスを載せたいのですが・・・。

cgiは、

#! /usr/bin/perl

$toname = 'xxx@aaa.bbb';
$fromname = 'yyy@ccc.ddd';
    open(MAIL, "| /usr/lib/sendmail -t -i -f yyy") || die;
    print MAIL "from:$fromname\n";
    print MAIL "to:$toname\n";
    print MAIL "Subject: TEST\n";
    print MAIL "Content-Type: text/plain;\n\n";
    print MAIL "TEST\n";
    close(MAIL);

print "Content-type: text/html\n\n";
print <<END_OF_DATA;
<HTML>
<BODY>SendMail $err</BODY></HTML>

END_OF_DATA

exit;

fromで指定したほうがもちろんサーバー側で,toで指定した方がクライアント側です。
sendmail.cfの編集にはsendmail.defを使っています。

はたしてcgiが悪いのかsendmailの設定がまずいのでしょうか?
sendmail.defの設定がまずいなら一体どこを変えればいいのか。
ご教授の程をお願いいたします。

No. 1858 # 68user 2001/03/27 (火) 20:26:52
>>1857 ケンMK2
> Fromがnobody@localhostとなってしまいます。。
これってやっぱりまずいのかなぁ? Received に名前解決不可能な
サーバ名が書いてあるメールって結構ありますよね。でも、それは
ファイアウォールの中からだから許されるのかな。さすがに
localhost はまずいかもしれない。

sendmail をまともに管理したことがないため正しい解決策はわかり
ませんが、手元にある sendmail.def (sendmail-v8.def をいじった
もの) には、
    OFFICIAL_NAME='foo.bar.com'
とあります。その他は特に設定していません。それを元に生成した
/etc/sendmail.cf には
    Djfoo.bar.com
と書いてあります。
    Dj(サーバの FQDN)
ですね。

あと、ユーザ名が nobody になるのもどうなんでしょうねぇ。
他の行に envelope from yyy などと -f で指定したユーザ名が
書いてあると思うので、それはそれでよいような気もするんですが…。
ちなみに手元の環境でも envelope from nobody となりますが、
僕がいいかげんに管理している sendmail なので、正しいか
どうかはかなり怪しいです。

No. 1859 # ふくし 2001/03/27 (火) 20:42:53
ケンさん>

わーい。回答が書けるー
わたしは、このようにしています。

$from = "kaori.iida\@morning.musume";
$to = "natsumi.abe\@morning.musume";

open MAIL, "|/usr/local/bin/nkf -j |/usr/sbin/sendmail -t -f $from" or die $!;
print MAIL <<EOM;
To: $to
From:$from
Subject: こんにちはー
元気だべさ。
EOM
close MAIL;

これで、次のようなメールが届きます。

To: natsumi.abe@morning.musume
From: kaori.iida@morning.musume
Subject: こんにちはー

元気だべさ。

ポイントは、-f パラメタで渡すのはエラーのときの戻りメールの宛て先で、
From: フィールドをメールの中に再度書かないといけないようです。
なお、スクリプトは EUC で、メールは JIS でないと文字化けするので、
nkf -j をかましています。

No. 1860 # 68user 2001/03/28 (水) 02:53:42
>>1858 68user
>> Fromがnobody@localhostとなってしまいます。。
> これってやっぱりまずいのかなぁ? Received に名前解決不可能な
> サーバ名が書いてあるメールって結構ありますよね。でも、それは
> ファイアウォールの中からだから許されるのかな。さすがに
> localhost はまずいかもしれない。
jp.FreeBSD.org の sendmail 君が付けた received も localhost に
なっていました。少なくともあそこは変な設定になってはいない
だろうということで、問題ないんじゃないでしょうか。

No. 1861 # すな 2001/03/28 (水) 21:56:36
質問では有りませんが、気になったもので・・・

自分の借りているレンタルサーバーのログに以下のような行がありました。

xxx.xxx.xxx.xxx - - [28/Mar/2001:20:00:52+0900] "GET http://www.intel.com/ HTTP/1.1" 200 1846 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)"

これってどう解釈すればいいのでしょう?
当然ですが該当するURLにファイルはありません。

試しに自己保有のLinux版Apacheに telnet でいろいろ試してみましたが、
ステータス 200 が出ることは有りませんでした。

単にサーバーのログ記録ミス(エラー?)なのでしょうか?
こちらでも、こんなログが残る事は有りましたでしょうか?
なんとなく気持ちが悪いので、判る方がいらっしゃれば教えてください。

No. 1862 # 68user 2001/03/28 (水) 22:17:58
>>1861 すな
> 試しに自己保有のLinux版Apacheに telnet でいろいろ試してみましたが、
> ステータス 200 が出ることは有りませんでした。
FreeBSD 4.1-RELEASE + apache-1.3.12 で、
    GET http://www.intel.com/ HTTP/1.0
でステータス 200 が出ました。ブラウザを普通に使っていれば、
PATH は必ず / から始まるはずですが、先頭が / でない PATH を
要求すると 200 が返るんですね。これって仕様かしら?

Prev< No. 1765〜1862> Next  [最新発言に戻る] [過去ログ一覧]