68user's page 掲示板

Prev< No. 1790〜1890> Next  [最新発言に戻る] [過去ログ一覧]
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 が返るんですね。これって仕様かしら?

No. 1863 # すな 2001/03/28 (水) 23:46:17
>>1862 68user
あら・・・
環境が関係するようですねぇ。

Vine Linux 1.1CR
Server version: Apache/1.3.3 (Unix) (Red Hat/Linux)
な環境で、
$ telnet localhost 80
GET http://www.yahoo.co.jp/ HTTP/1.0
とすると、
HTTP/1.1 302 Found が返り…

GET http://www.yahoo.co.jp/ HTTP/1.1
とすると、 400 Bad Request が返りました。

最初のログでは、HTTP/1.1 となっていたのに何故?
アクセス元は、JPNICとINTERNICで調べられなかったので、新手の
攻撃かとも考えましたが違うようですね。

このログが出たApacheのバージョンは、Server: Apache/1.3.6 (Unix)
でした…

さらに上のサーバーで、
GET http://www.yahoo.co.jp HTTP/1.0
としたら、/ にした際のドキュメントが返って来ました。
もう一つおまけにWin版1.3.12のApacheでもステータス200で同じ動作でした。
#この動作は何???

う〜ん、すっきりしないなぁ…
ともあれ試してもらってありがとうございました。
# サーバーの管理者に聞けば判るのかなぁ…

No. 1864 # 68user 2001/03/29 (木) 03:17:23
>>1863 すな
> GET http://www.yahoo.co.jp/ HTTP/1.1
> とすると、 400 Bad Request が返りました。
HTTP/1.1 では、Host ヘッダが必須ですが、これは大丈夫ですか?

    http://X68000.startshop.co.jp/~68user/net/http-4.html
        なお、HTTP/1.1 を使う場合は Host ヘッダを必ず付けなくてはいけません。

> / にした際のドキュメントが返って来ました。
うちもそうでした。

apache のバージョンに依存するようなので、本当のところを
調べたければ http://www.apache.org/websrc/viewcvs.cgi/
更新履歴を調べるのがよさげですが、時間がとれない…。

あるいは src/CHANGES に、変更理由が書いてあったりするかも
しれません。

No. 1865 # はてな 2001/03/29 (木) 09:38:10
初めまして。
UNIXは、初めて触ってたのですが、本やHPで調べても答えがわからないので、質問させてください。

リモートで、クライアントのWin98にX for Windowsをインストールしましたが、文字化けを起こしました。FON形式に変換されています。
相手のソラリスにはOpen WindowとX Windowがインストールされてます。
クライアントがアクセスするとOpen Windowが立ち上がるよう、設定されていましたので、
/usr/openwin /bin/openwin

/usr/openwin /bin/Xに書き換えたんですが、状態は相変わらずです。
文がおかしいのでしょうか?

よろしくお願いします。

No. 1866 # なべぞう 2001/03/29 (木) 12:57:42
はじめまして。突然ですが、ポート番号の対応表について質問させ
てください。

こちらのサイトに「Windows なら C:\windows\services です。
ここに載っているプロトコルは「well-known port」と言えるでし
ょう。」とあります。

しかし、C:\windows\servicesが見当たりません。なお私はwin
NTを主に使用しています、バージョンによって異なるものなんで
しょうか!?

No. 1867 # すな 2001/03/29 (木) 13:40:20
>>1864 68user
>HTTP/1.1 では、Host ヘッダが必須ですが、これは大丈夫ですか?
あたたた…
忘れていました。
で、host www.yahoo.co.jp:80 として再度やってみましたが同じ結果でした。
サーバー管理者へメールで問い合わせてみましたので解決したら報告します。
・・・と書いている所へ管理者からメールが。

クライアントがURL欄に「http://www.intel.com/http://www.intel.com/
と誤って記入すると、そのようなログが記録されます。
との返答。「えっ?」と思いながらやってみると、

GET http://www.yahoo.co.jp HTTP/1.1
host www.yahoo.co.jp:80

ログ内容
"GET http://www.yahoo.co.jp HTTP/1.1" 400 387 "-" "-"

/ からはじまらないパスを記録させる事は出来ましたが、やはり
ステータス 400 でした・・・
う〜ん、眠れなくなりそうなんでこの件は諦めます(笑)

>http://www.apache.org/websrc/viewcvs.cgi/
↑これは知りませんでした。時間があるときにじっくり見てみます。
# いつもながら何かしら勉強させて頂いてますm(_ _)m

>>1866 なべぞう
WinNTの場合は、C:\WinNT\system32\drivers\etc\SERVICES
です。このフォルダには、HOSTS や LMHOSTS も存在します。
スタートメニューの「検索」を最大限に活用すると便利ですよ。

No. 1868 # 68user 2001/03/30 (金) 00:25:20
/~68user/unix/pickup に早稲田大学からの連続アクセスがあり、OS の
リソースを食い潰して open・fork などに失敗してサーバエラーが頻発
していました。load average が 20 近くまで上がってました。

とりあえず pickup は使用不可としましたので、あしからず。
同時に実行するプロセス数を制限する機能を追加したら使用可能に
します。

>>1867 すな
> host www.yahoo.co.jp:80
ではなく、host: www.yahoo.co.jp:80 です。`:' が足りません。

> クライアントがURL欄に「http://www.intel.com/http://www.intel.com/
> と誤って記入すると、そのようなログが記録されます。
> との返答。「えっ?」と思いながらやってみると、
apache-1.3.12 では、ログに
    "GET /http://www.yahoo.co.jp HTTP/1.0" 404
と吐かれていました。その管理者の返答はほんとかなぁ? もし本当
ならば、apache にバグがあって、apache-1.3.12 では修正されて
いるということですね。

> WinNTの場合は、C:\WinNT\system32\drivers\etc\SERVICES です。
なるほど。この文章をそのまま該当部分に追加してよいですか?

>>1865 はてな
> リモートで、クライアントのWin98にX for Windowsをインストール
> しましたが、文字化けを起こしました。FON形式に変換されています。
文字化けの件はわかりませんが、これは X for Windows という商品名の
Windows 用 X サーバですか? Windows 側で X サーバが起動しているなら、
Solaris 側で openwin や X を実行する必要はありません。なぜなら、
openwin や X は X サーバだからです。Solaris 側で実行すべきなのは
kterm などの X クライアントです。

でなくて、なにかしらの仕組みがあって Solaris 側で X サーバを
実行すれば Windows 側で表示されるようなアプリケーションで
あるなら失礼。そのようなアプリは さらに輪をかけてわかりません。

No. 1869 # すな 2001/03/30 (金) 13:46:47
>>1868 68user
>ではなく、host: www.yahoo.co.jp:80 です。`:' が足りません。
ステータス 400 はこれが原因でした。嘘書いてごめんなさい。m(_ _)m

で、該当サーバーに
GET http://www.yahoo.co.jp:80 HTTP/1.1
host: www.yahoo.co.jp:80
とした所、
"GET http://www.yahoo.co.jp:80 HTTP/1.1" 200 1934 "-" "-"
のログが記録された事を確認しました。
この結果は、68userさんと同じくドキュメントルートが出力されました。
Apache1.3.3の方も同じ結果でした。

>>1862 68user
>PATH は必ず / から始まるはずですが、先頭が / でない PATH を
>要求すると 200 が返るんですね。これって仕様かしら?
動作からするとその様ですね。

>>1868 68user
>その管理者の返答はほんとかなぁ?
Apacheの出力結果を見ると管理者の言っている事は間違っているようです。
管理者といってもテクニカルサポートの「誰か」だし、適当にあしらわれ
たのかも?

>なるほど。この文章をそのまま該当部分に追加してよいですか?
もし、サービスパックなどにより変更される場合は判りませんが、
少なくとも自分の環境では上記のフォルダに存在します。
WinNT 4.00.1381 SP5

ちなみに、このフォルダには以下のファイル群が含まれます。
HOSTS
LMHOSTS
NETWORKS
PROTOCOL
SERVICE

drivers\etc
というフォルダに格納するあたり、UNIXを意識しつつドライバーでは
無い内容を格納するのは、M$の苦しい所でしょうか…読みすぎ?;-p

No. 1870 # hsj 2001/03/30 (金) 20:49:22
>>1869 すな
> Apacheの出力結果を見ると管理者の言っている事は間違っているようです。
おそらくそのユーザは、外部利用可能なプロキシを探して
そのサーバにアクセスしたんじゃないでしょうか。
例えばIEにプロキシとしてそのサーバのIPアドレスと
ポート80をセットして、適当なサーバにアクセスしてみると
リクエストラインはこういう感じ↓になるので、
GET http://www.yahoo.co.jp/ HTTP/1.0
そう言うログが残ることになると思います。

No. 1871 # すな 2001/03/30 (金) 21:59:39
>>1869 すな
はじめまして>hsjさん
>おそらくそのユーザは、外部利用可能なプロキシを探して
おぉ!なるほど。
IE5でプロキシ設定を施してアクセスした所、最初に疑問になったログ
結果と、ブラウザバージョン以外同じ結果となりました。
はぁ、なんかすっきりしました(笑)

片っ端からアクセスして調べているんでしょうか?
ご苦労様なことです(^^;

自分はフレッツISDN接続なんですが、ここ3〜4ヶ月ルーターのログに
明らかにアタックと思われる攻撃が増えたので、過敏になっていました。
情報ありがとうございました。>hsjさん

No. 1872 # ケンMK2 2001/03/30 (金) 22:39:59
どうもレスが遅くなり申し訳御座いません
>>1860 68user
>jp.FreeBSD.org の sendmail 君が付けた received も localhost に
>なっていました。少なくともあそこは変な設定になってはいない
>だろうということで、問題ないんじゃないでしょうか。
へ〜そうなんですか・・・。
私もあれから試行錯誤しましたが、どうにもならず、結局気にしないこと
にしました(笑)
と言っても諦めるわけでなく、sendmail.cfを直接弄って何とかできるの
では・・・と思いたちましたので、そちらの方法をしばらく模索していこ
うと思います
それではご迷惑をお掛けいたしました

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

No. 1873 # dio [E-mail] 2001/03/31 (土) 02:34:14
こんにちは、初めまして。
排他処理のことを読ませていただきまして、
フリーのCGIスクリプトに自分でシグナルに関する部分を追加しようと思いました。
ここでは
$SIG{PIPE} = \&lock_off;
というようにしておられますが、他のところでは、
$SIG{'PIPE'} = 'lock_off';
といった感じに書いていました。
これらは同じ意味なのでしょうか?(\&というのがよくわかりません)
それから、こういったハンドラの定義は、ソース中のどの位置に書いても
同じなのでしょうか。最初の方に書いた方がいいのでしょうか?
そして、ハンドラの中で変数の値を参照する場合、
その変数の初期化前にそのハンドラを書いて問題ないでしょうか?
sub lock_off {
      if ($lockkey) { &unlock; }
      exit;
}
・・・
$lockkey = 1;
といった感じで。
Perlはまだよくわかっていないので、常識なことなのかもしれないですが、
よろしくご教授お願いします。

No. 1874 # なるっち 2001/04/01 (日) 01:01:27
はじめまして。
CGIで環境変数を取得していると、「(compatible; MSIE 5.5; 〜〜」等で表示されるはずが、「好きな名前〜〜〜」でアクセスす人がまれにいるのです。これはどううことなのでしょうか?

No. 1875 # dio [E-mail] 2001/04/01 (日) 15:10:12
>CGIで環境変数を取得していると、「(compatible; MSIE 5.5; 〜〜」
>等で表示されるはずが、「好きな名前〜〜〜」でアクセスす人がまれにい
>るのです。これはどううことなのでしょうか?
クライアント(ブラウザ)がサーバに送るUser Agent 文字列を自由に設定できるソフトを使っているからではないでしょうか。
私の使っているフリーのタブブラウザ、「DonutR」でも、UserAgentを
自由に設定できます。

No. 1876 # 68user 2001/04/01 (日) 16:24:11
>>1873 dio
> $SIG{PIPE} = \&lock_off;
\& は関数へのリファレンスです。ちなみに
    $SIG{PIPE} = sub { unlink($lock_file); exit; }
と等価です。

> $SIG{'PIPE'} = 'lock_off';
これだと、シグナルハンドラ lock_off の関数定義が同一ファイル
内にないといけません。別ファイルに sub lock_off を書いて、
それを require している場合は動かないということです。

関数へのリファレンスを使えば、どこで関数が定義されて
いようと動きます。

これらの事柄はラクダ本に書いてありますので、もちお持ちで
ないなら、購入されることをお薦めします。

> ハンドラの中で変数の値を参照する場合、その変数の初期化前に
> そのハンドラを書いて問題ないでしょうか?
これは、ハンドラ特有の問題ではなく、関数一般の話になります。
    #!/usr/bin/perl
    &lock_off;
    sub lock_off { print $lockkey }
    $lockkey = 1;
    exit;

    #!/usr/bin/perl
    $lockkey = 1;
    &lock_off;
    sub lock_off { print $lockkey }
    exit;
では、前者はよろしくないことはわかりますね。

シグナルハンドラの場合も、%SIG にセットしてしまうとその後いつ
シグナルハンドラが呼ばれるかわからないので、%SIG にセットする
前に必要な変数を全て設定しておきましょう。

No. 1877 # dio [E-mail] 2001/04/01 (日) 17:12:52
>\& は関数へのリファレンスです。ちなみに
>・・・・・・
>関数へのリファレンスを使えば、どこで関数が定義されて
>いようと動きます。
なるほど
そういう違いなのですか。

>シグナルハンドラの場合も、%SIG にセットしてしまうとその後いつ
>シグナルハンドラが呼ばれるかわからないので、%SIG にセットする
>前に必要な変数を全て設定しておきましょう。
わかりました。
どうもありがとうございます。

No. 1878 # 68user 2001/04/03 (火) 17:40:08
http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835092&tid=echoa4ka4da4a4a4f&sid=1835092&mid=4
> ↓には、「ping への応答」と書いてます。
> http://www.nspl.co.jp/Solaris/Security/inetd.html

誤りです。ping に応答するのは ICMP reply です。TCP/UDP の echo は、
    http://ring.ocn.ad.jp/pub/doc/RFC/rfc862.txt
を参照のこと。
    A very useful debugging and measurement tool is an echo service.
ってことですね。人様が直接使うものです。

…と yahoo BBS に書こうと思ったけどできなかったので、どなたか
伝えて下さい。

No. 1879 # 68user 2001/04/06 (金) 00:15:45
>>1868 68user
> とりあえず pickup は使用不可としましたので、あしからず。
> 同時に実行するプロセス数を制限する機能を追加したら使用可能にします。
使用可能になりました。ちゃんと制限が効いてるかどうかは
試してませんが。

>>1878 68user
> …と yahoo BBS に書こうと思ったけどできなかったので、
> どなたか伝えて下さい。
どもです>dio さん (ですよね?)

No. 1880 # dio [E-mail] 2001/04/06 (金) 00:54:56
>どもです>dio さん (ですよね?)
あ、はい
このページ参考にさせてもらったり、
お世話になったので。

No. 1881 # akihiro 2001/04/06 (金) 11:50:53
ご存知であれば 教えてください
psコマンド(ps -l)を実行したときの C 項目の数値の意味
なんですけどマイナス値のプロセスがあったのですが
どのような状態を意味するのでしょうか?

No. 1882 # クワ [E-mail] 2001/04/08 (日) 17:27:09
教えていただきたいことがあります。
UNIXについてはほとんど初心者なのですが、あるとき急に管理をしろ!
と言われてしまいました。はじめはなんのトラブルもなかったのですが、
何日か前に急に他のマシンから自マシンへtelnet接続ができなくなって
しまいました。
    原因はなんなのでしょう?
機種は
  SUN ULTRA60 Solaris2.6が入ってます。もちろん自マシンにログイン後
自マシンの他のユーザへのtelnetでのログインもできないのです。
お願いします。

No. 1883 # YOUKO 2001/04/08 (日) 17:51:12
はじめまして、YOUKOと申します。
C-ISAMを使ってAPLを作成したいのですが
初めてで右も左もわかりません。
どこか初心者用のHPありませんか?
OS:Solaris7です。

No. 1884 # 68user 2001/04/08 (日) 23:29:37
>>1881 akihiro
> psコマンド(ps -l)を実行したときの C 項目の数値の意味
> なんですけどマイナス値のプロセスがあったのですが
OS は何ですか? FreeBSD には C という項目はないように
思えます。Solaris2.6 では「スケジューリングのための
プロセッサ利用率、ただし obsolete」と man に書いて
あったような気がしますが、それ以上の事はわかりません。

>>1882 クワ
> 何日か前に急に他のマシンから自マシンへtelnet接続が
> できなくなってしまいました。もちろん自マシンにログイン後
> 自マシンの他のユーザへのtelnetでのログインもできないのです。
それは、問題のマシンで
    % telnet localhost
でログインできないということですね?

全体的に情報が不足しています。「できない」とはどういう意味ですか?
何かエラーメッセージが出ますか? 何秒か待たされたりしますか?
login: プロンプトは出ますか?

一般的には inetd が telnet ポートを見張り、接続があると inetd が
telnetd を実行し、telnetd が認証を行います。もし
    % netstat -a | grep telnet
    tcp4 0 0 *.telnet *.* LISTEN
という出力が出ないならば、telnet ポートを監視するサーバがいない
ということなので、inetd の問題です。/etc/inetd.conf をチェック
しましょう。

他にも tcpwrapper が接続を弾いている、などの可能性もありますが、
そこらへんは /var/log/ の下のログを見ましょう。telnet した後、
ls -lt /var/log すれば、最終更新時刻順にファイル一覧が表示
されますので、最も最近に更新されたログファイルの中を見れば
何かメッセージが書いてあるかもしれません。

>>1883 YOUKO
> C-ISAMを使ってAPLを作成したいのですが
C-ISAM という物を知らないのですが、Informix の DB 関係の
ライブラリか何かでしょうか。そういうものは Informix の出して
いるマニュアルを読むのが早道かと思います。

# 同様に、個人が提供している Oracle の情報も少ないですね。

No. 1885 # akihiro 2001/04/09 (月) 09:14:41
>> psコマンド(ps -l)を実行したときの C 項目の数値の意味
>> なんですけどマイナス値のプロセスがあったのですが
>OS は何ですか? ..(略)..、それ以上の事はわかりません。
HP-UNIXです。私なりに調査していますので解りましたら
載せさせていただきます。

No. 1886 # chie 2001/04/09 (月) 15:02:13
排他処理のページを見て質問なのですが、シグナル処理でCGIを終了
させたくない場合はどうすればよいのでしょうか?
シグナルを無視みたいなことはできないんでしょうかね??

よろしくお願いします。

No. 1887 # 68user 2001/04/09 (月) 18:59:22
>>1886 chie
> シグナルを無視みたいなことはできないんでしょうかね??
perl なら
    $SIG{QUIT} = 'IGNORE';
などとすれば無視できます。ただし、SIGKILL と SIGSTOP
だけは無視できません (ハンドラの設定も不可)。

No. 1888 # dio [E-mail] 2001/04/10 (火) 17:15:22
>ただし、SIGKILL と SIGSTOP
>だけは無視できません (ハンドラの設定も不可)。
横からすみませんが、無視できずハンドラの設定不可な
シグナルは、どのような意味があるのでしょうか?
(なぜ送られてくるのでしょうか?)

No. 1889 # 68user 2001/04/10 (火) 22:28:55
>>1888 dio
> 無視できずハンドラの設定不可なシグナルは、
> どのような意味があるのでしょうか?
シグナルをブロックしたプログラムが誤って無限ループしてしまったら
止める術がなくなります。

なので、プロセス側から制御できない SIGKILL や SIGSTOP という
シグナルを飛ばすことで、OS に強制的にプロセスを殺したり、動作を
止めたりするわけです。例をあげると、
    #!/usr/bin/perl
    $SIG{TERM} = sub { print "TERM!\n" }; # kill コマンド対策
    $SIG{INT} = sub { print "INT!\n" }; # Ctrl-C 対策
    while (1){
            printf("%d\n", $i++);
            sleep 1;
    }
というプログラムを実行すると、Ctrl-C や kill プロセス番号 で
終了させることはできません。しかし Ctrl-Z で動作を止めたり、
kill -9 (=kill -KILL) でプロセスを殺すことはできます。

# 実際は他にもシグナルはありますので、kill -HUP などで
# 殺すことが可能ですが、全てプログラム側でブロック可能です。

なお、SIGINT や SIGTERM を受けると、ファイルなどの後始末を
行ってから終了するプログラムは多いです。なので、いきなり
SIGKILL で強制終了させるのはおすすめできません。まず SIGTERM や
SIGINT を試して、それでも死ななければ SIGKILL を使うように
して下さい。

No. 1890 # dio [E-mail] 2001/04/11 (水) 14:45:02
えーと、私は何か勘違いをしていたかもしれません;

>なので、プロセス側から制御できない SIGKILL や SIGSTOP という
>シグナルを飛ばすことで、OS に強制的にプロセスを殺したり、動作を
>止めたりするわけです。
これはわかります。SIGKILL、SIGSTOPの必要性はわかるのですが、
プロセスから制御できない物をなぜシグナルとして送る
必要があるのだろうかと思ったのです。
私はOSがプロセスにSIGKILL や SIGSTOPをとりあえず送って、
強制終了させる物と思っていたのですが、この考えが方が間違いでしょうか?

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