68user's page 掲示板

Prev< No. 1941〜1946> Next  [最新発言に戻る] [過去ログ一覧]
No. 1941 # 68user 2001/05/10 (木) 19:49:04
メールでいただいた質問ですが、勉強になったのでこちらでお返事。

> http://x68000.startshop.co.jp/~68user/net/perl4.html
> にも書かれていますが
> Perl4では SOCK_STREAM の値を直接指定しなければならない
> となっておりますが、Perl4の場合
> require 'sys/socket.ph';
> とするのでは無いでしょうか?
> (perl4環境が無く、人づてなので当てずっぽうです。)
なるほど、既に perl4 のラクダ本も手元になく、常用環境には
perl5 しかないので知りませんでした。あのページには perl4
なら sys/socket.ph を使うよう追記しておきます。

> また、サンプルの
> > socket(SOCKET,PF_INET,SOCK_STREAM,0);
> ですが、protocol だけが直接、値を指定しているのは
> 何故でしょうか?
TCP や UDP を使う場合は 0 でよいです。/etc/protocols には
    ip 0 IP # internet protocol, pseudo protocol number
    tcp 6 TCP # transmission control protocol
    udp 17 UDP # user datagram protocol
となっていますので、TCP を使う場合は
    socket(SOCKET, PF_INET, SOCK_STREAM, 6);
    socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
などと明示的に指定してもいいです (可読性と、NIS への対応
という面から見ると後者がよい)。

しかし、アドレスファミリ(PF_*) とソケットタイプ (SOCK_*) の
値が決まると、プロトコルは一意に定まります (なぜかはよく
わかりません)。なので、プロトコルに 0 を指定すれば、自動的に
適切なプロトコルが決定されます。

FreeBSD なら socket(2) の下請け関数である socreate で
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sys/kern/uipc_socket.c?rev=1.97
    int
    socreate(dom, aso, type, proto, p)
                if (proto)
                                prp = pffindproto(dom, proto, type);
                else
                                prp = pffindtype(dom, type);
と検索を行う関数 pffindtype が呼ばれています。

なお、ICMP をしゃべったり、IP データグラムを直接生成する
ために raw ソケットを生成したい場合は 非 0 を指定します。

No. 1942 # 68user 2001/05/10 (木) 20:08:11
>>1939 hsj
> そのファイルをフルパスで指定すれば消せませんか?
> DELE /home/hoge/~hogehoge
> みたいに。
FTP サーバの実装依存でしょうが、FreeBSD 4.3-RELEASE 付属の
ftpd だと、カレントディレクトリに ~hogehoge がある状態で
    > rm ~hogehoge
    DELE ~hogehoge
となり消せました。

ただ、
    > rm ./~hogehoge
    > rm /home/user/~hogehoge
は同じく 4.3-RELEASE 付属の ftp コマンドが何を勘違いしたのか
    RMD ./~hogehoge
    RMD /home/user/~hogehoge
とディレクトリを削除しようとして失敗していました。
    > quote DELE ./~hogehoge
    DELE ./~hogehoge
と、直接 FTP コマンドを送ると OK でした。

UNIX 界では、~hoge が「hoge ユーザのホームディレクトリ」と
解釈されるのは ~ が先頭にあるときのみですから、フルパスで
書いたり ./~hoge などとすればよいです。ただし、
    % perl Makefile.PL INSTALLMAN3DIR=~/install
のように、アプリケーション側 (この場合は ExtUtils::MakeMaker) で
展開してくれるものもあります。

No. 1943 # 68user 2001/05/10 (木) 20:13:49
>>1941 68user
> アドレスファミリ(PF_*)
プロトコルファミリでした。

ちなみに、うちの web ではアドレスファミリ (AF_*) と
プロトコルファミリ (PF_*) の使い分けがいいかげんだった
ような気がします。いまだに違いがよくわからんなぁ。

No. 1944 # ED 2001/05/10 (木) 21:26:36
68userさん>
SEGA BBS以外は問題ないです。
理由はまあ掲示板の中身です…

友人が私の名前を使って書いたものなのですが。

部分的に消去とかはできるのでしょうか?

No. 1945 # CZ 2001/05/11 (金) 00:15:55
>>1939 hsj
>>1942 68user

無事削除できました。回答してくださったお二方に感謝します。

そのサーバ(ProFTPD 1.2.0rc3)では
    >DELE /user/www/~hogehoge.html
    250 DELE command successful.
および
    >DELE ./~hogehoge.html
    250 DELE command successful.
のどちらでも成功しました。

で,実験していて気が付いたのですが,
    >STOR ~hogehoge
    550 ~hogehoge: No such file or directory
はダメで,
    >STOR ~hogehoge.html
    150 Opening ASCII mode data connection for ~hoge.hoge.
    226 Transfer complete.
のように拡張子が付くとOKというのは何だか不思議な仕様だと思いました。

No. 1946 # 68user 2001/05/12 (土) 02:27:40
>>1944 ED
> 友人が私の名前を使って書いたものなのですが。
> 部分的に消去とかはできるのでしょうか?
基本的には消したくありません。それをやり出すと、「恥ずかしいので
昔書いた私の発言を消して」というような要望にまで対応しなければ
いけないからです。

また、これはこっちの都合ですが、消去は手作業になります。URL を
入力してボタン一発で消去というわけにはいかないので、この作業に
時間を取られるようなら SEGA BBS 過去ログの公開は中止となります。

とは言っても、やはり見られては困る場合もあるでしょうし、こちらも
公開している以上はちゃんと管理する責任がありますので、「どうしても
困る」ということであれば消します。

あるいは、goo などのロボットよけを書いておけば OK ということで
あれば、そっちの方向で対処するかもしれません。

というわけで、質問です。
    Q1. できればやりたくないのですが、どうしても消さなければいけませんか?
    Q2. 発言を消さずに、ロボットよけを書くという対処でも OK ですか?

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