68user's page 掲示板

Prev< No. 1793〜1856> Next  [最新発言に戻る] [過去ログ一覧]
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

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

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