|
メールでいただいた質問ですが、勉強になったのでこちらでお返事。 > 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 を指定します。 |
|
>>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) で 展開してくれるものもあります。 |
|
>>1941 68user > アドレスファミリ(PF_*) プロトコルファミリでした。 ちなみに、うちの web ではアドレスファミリ (AF_*) と プロトコルファミリ (PF_*) の使い分けがいいかげんだった ような気がします。いまだに違いがよくわからんなぁ。 |
|
68userさん> SEGA BBS以外は問題ないです。 理由はまあ掲示板の中身です… 友人が私の名前を使って書いたものなのですが。 部分的に消去とかはできるのでしょうか? |
|
>>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というのは何だか不思議な仕様だと思いました。 |
|
>>1944 ED > 友人が私の名前を使って書いたものなのですが。 > 部分的に消去とかはできるのでしょうか? 基本的には消したくありません。それをやり出すと、「恥ずかしいので 昔書いた私の発言を消して」というような要望にまで対応しなければ いけないからです。 また、これはこっちの都合ですが、消去は手作業になります。URL を 入力してボタン一発で消去というわけにはいかないので、この作業に 時間を取られるようなら SEGA BBS 過去ログの公開は中止となります。 とは言っても、やはり見られては困る場合もあるでしょうし、こちらも 公開している以上はちゃんと管理する責任がありますので、「どうしても 困る」ということであれば消します。 あるいは、goo などのロボットよけを書いておけば OK ということで あれば、そっちの方向で対処するかもしれません。 というわけで、質問です。 Q1. できればやりたくないのですが、どうしても消さなければいけませんか? Q2. 発言を消さずに、ロボットよけを書くという対処でも OK ですか? |