68user's page 掲示板

Prev< No. 1799〜1899> Next  [最新発言に戻る] [過去ログ一覧]
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をとりあえず送って、
強制終了させる物と思っていたのですが、この考えが方が間違いでしょうか?

No. 1891 # 68user 2001/04/11 (水) 23:42:45
>>1890 dio
ん〜、SIGKILL, SIGSTOP の必要性はわかるが、ブロックできないんだから
「シグナル」として扱うのは変ではないか。SIGKILL, SIGSTOP と同等の
機能を持たせたシステムコールを新設した方がよいのではないか、という
ことでしょうか?

じゃなくて、OS が SIGKILL や SIGSTOP を送るのはわかるが、
コマンドラインで kill コマンドを使って SIGKILL, SIGSTOP を
送れるのは変ではないか、ということですか?

No. 1892 # dio [E-mail] 2001/04/12 (木) 14:09:56
前者のほうにちかいです
プロセスを殺すのはOSなのですよね?
プロセスにSIGKILLやSIGSTOPが送られても
プロセスはそれに対して何も出来ないのなら、
なぜ送られてくるのかな?と。
プロセスはSIGKILLやSIGSTOPを認識出来ないのではないのですか?

No. 1893 # 68user 2001/04/12 (木) 14:47:46
>>1892 dio
> プロセスはSIGKILLやSIGSTOPを認識出来ないのではないのですか?
できないです。

OS はプロセスごとにシグナルのテーブルを保持しています。例えば
SIGTERM を無視する場合はテーブルの SIGTERM の項目を 1 に、
シグナルハンドラをセットする場合は、SIGTERM の項目にシグナル
ハンドラ (関数) のアドレスをセットする、というふうに。

で、シグナルが飛んできたら、OS は対象のプロセスのテーブルを
参照し、無視すべきか、ハンドラを実行すべきかなどを決めます。

しかし SIGKILL/SIGSTOP は、
    - テーブルの書き換えができない
    - シグナル発生時に OS がテーブルを参照することなくプロセスを操作する
のどちらかの理由のため (どっちが本当かは知りません)、プロセス
からブロックすることはできません。


だから、実際に OS が何かをプロセスに送っているわけではありません。

…で、回答になりましたか?

ちなみにシグナルは FreeBSD なら ここらへんで処理してます。
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sys/kern/kern_sig.c?rev=1.115

No. 1894 # dio [E-mail] 2001/04/12 (木) 21:11:57
>で、シグナルが飛んできたら、OS は対象のプロセスのテーブルを
>参照し、無視すべきか、ハンドラを実行すべきかなどを決めます。
なるほど、シグナルを受け取るのはOSなんですか。

>だから、実際に OS が何かをプロセスに送っているわけではありません。
そうでしたか。
私の考え方がWindows的でした。
(WindowsのMessageのような物と考えてました;)

>…で、回答になりましたか?
はい、どうもありがとうございました。

No. 1895 # クワ [E-mail] 2001/04/14 (土) 18:24:57
>>1884 68user
>それは、問題のマシンで
> % telnet localhost
>でログインできないということですね?
お返事が遅くなってしまいました。すみません。
上記のように入力すると、
SunOS5.6
....(省略)普通といっしょ。

connection closed by foreign host.
といわれます。
UNIXの相当詳しい人に見てもらったのですが、ぜんぜんおかしい
部分がないとのことでした。

来週OSをインストールしなおすとその方がおっしゃっておりました。
ご迷惑をおかけしました。
また分からないことがありましたらよろしくお願いします。

No. 1896 # りんたろお。 [E-mail] 2001/04/17 (火) 19:42:34
初めまして。

現在文字コードの変換について色々と模索中です。で、
このページの過去ログを見つけたのですが、情報を
うまく理解することができなかったので質問させて
ください。

まずバックグラウンドとして、Solaris2.6のWebサーバを
今まで他の人が管理してきたものの引継ぎで管理する事
になったのですが、そのWebサーバは文字の変換に
/bin/iconvを利用しています。htmlファイルはeucJPで
かかれていました。さらにソースの中でMETAタグに
「charset=x-euc-jp」という記述がありました。
またユーザからの情報をCGIからOracle(Solaris2.6上)に
データを格納しています。この際CGIではeucからUTF-8に
変換を行なう記述がなされています。

# DBは個人的に触ることができない状態です。Solaris2.6
# の/bin/iconvを利用するところも変えられません。

通常インターネットを意識した時にはWindows環境(もち
ろんこの中にも色々ありますが)だけを意識するのではなく、
色々な環境を意識してhtmlファイルを書くべきなのだと
思うのです(私見?)。

前置きが長くなりましたが質問です。

1.ソースの中でMETAタグに「charset=x-euc-jp」という
記述がある場合、ブラウザのエンコードで「自動認識」を
指定していれば、ソースは読める状態で表示され、かつ
フォームに入力した文字列はeucJPでWebサーバに送信されて
くるものだと信じているのですが正しいのでしょうか。

2.また正しい場合、表示を強引にSJISなどにしてフォーム
に入力した場合にはeucJPで送られてくるのでしょうか。
それともSJISなのでしょうか。(まだ環境を自由にできない
ので自分では確認できません。)

3.半角が入力されてきた場合にはどのように対処すれば
いいのでしょうか。

4.JIS X 0208の13区、89〜92区、115区〜119区(換算)の
文字を入力するとエラーで返すようにしたいのですが、CGI
でどのように記述すればいいのでしょうか。EUCコードで
ADA1〜ADFE、F9A1〜F9FE、FAA1〜FAFE、FBA1〜FBFE、FCA1〜
FCFE(全て16進数) は不可、のように文字コードそのもので
制限をかけるのでしょうか。Perlでこういった内容を書き
たいのですが、何か参考になるようなものがありましたら
お知らせください。

長い文章になりましたが、ご助力お願いいたします。

No. 1897 # 68user 2001/04/17 (火) 22:15:45
>>1896 りんたろお。
> 色々な環境を意識してhtmlファイルを書くべきなのだと
> 思うのです(私見?)。
このような考えの人が多ければ、UNIX 使いのような
マイノリティはもっと幸せになれるのですが、なかなか
そうもいかないようで…。

> 1 エンコーディング指定
x-euc-jp というのは、まだ EUC-JP というエンコーディング名が
IANA に登録されていなかった頃の暫定エンコーディング名ですので、
現在は EUC-JP とするのが適当です。

ただし、Netscape Navigator 3.x などの古いブラウザでは EUC-JP を
認識できないという問題がありますが、「新しめのブラウザを使え」と
言えるような立場なら EUC-JP にする方がよろしいです。

なお、META でなく、CGI プログラムが出力するヘッダで
    Content-type: text/html; charset=EUC-JP
とした方がよいです。META は、ヘッダにエンコーディングを
明示できない場合の代替手段ですので。

ただし、ブラウザは間抜けなので、エンコーディングを明示しても
自動認識に失敗することはあります。

> 2 フォームのエンコーディング
基本的に、フォームのあるページのエンコーディングで
フォームのデータが送られてきます。少なくとも Netscape
Navigator と Internet Explorer はEUC-JP なページの
フォームで入力すると、入力内容を EUC-JP で送ります。

ただし、規格として決まっているわけではありませんので、
そうでないブラウザもあります (Lynx がそうかな)。

なので、入力データは jcode.pl などで EUC-JP や Shift_JIS に
変換するのがよいでしょう。1行追加するだけなので、たいした
手間ではないです。

> 3 半角入力
これは、半角カナということですか? なら 4 へ。

> 4 機種依存文字
    http://X68000.startshop.co.jp/~68user/webcgi/char-code-2.html
が参考になるかと思います。この掲示板では機種依存文字を自動変換
していますが、「機種依存文字があればエラー」とするのは簡単です。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi
の、sub conv_wrong_char あたりをどうぞ。

No. 1898 # ふくし [E-mail] 2001/04/19 (木) 05:56:45
ずっと以前から悩んでいたことなのですが、どこで聞いていいかわからず、
ここで書きます。よろしくお願いします。

会社の FreeBSD で Perl を使っていますが、nfs mount でいろんな
マシンで同じスクリプトを使えるようになっていますが、
あるスクリプトが急に text file busy と言われます。

語感からするとエディット中に実行したとか、
複数の人が一つのスクリプトを実行しているとか
いう感じですが、そうなっていても実行できるスクリプトは
実行できますし、どう考えてもヒマなファイルが同様の原因で
怒られます。

で、こうなってしまったら、件のスクリプトのディレクトリに行き
% cp busyscript foo
% rm busyscript
% mv foo busyscript
% chmod 755 busyscript
これで百発百中修復します。

なぜなんでしょう。どなたかご教示をお願いします。

No. 1899 # kate [E-mail] 2001/04/19 (木) 10:54:26
つい最近、perlを勉強しはじめた者です。本に掲載されているごく
簡単な例を実際サーバにUPして試しているのですが、
エラーメッセージが出てしまい、困り果てています。
よろしければ、アドバイスをお願い致します。

#!/usr/local/bin/perl5
print "what is your name?";
$name = <STDIN>;
chomp($name) ;
If ($name eq "kate") {
    print "Hello,kate! How good of you to be here!\n";
} else {
    print "Hello, $name\n";
}

以上です。
エラーメッセージは
syntax error at test.cgi line 7, near "}"
Execution of test.cgi aborted due to compilati
on errors.
です。

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