>>3136 68user 回答ありがとうございます。 他の原因を調べてみます。 |
ファイルハンドルについての質問です。 Net::FTPで動的に作り出したCSVをアップしたいのですが、 ローカルにファイルを書き出さずにputする方法を教えてください。 FileHandle.pmを使って無名のファイルハンドラを作って、 そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる とイメージしているのですが よろしくお願いします。 |
>>3135 koko ソケットのクローズはどのAPIを使って(どんなソースコードで)行ってらっしゃいますか? Winsockだと、shutdownを使わずにclosesocketを呼ぶとRSTフラグのセットされたパケットが飛ぶことが あるような覚えがあります。 いずれにせよ、パケットキャプチャしてみると原因に近づけると思います。 |
>>3139 金床 パケットをキャプチャしてみたところ、サーバからクライアントにRSTフラグのセットされたパケットは飛んでいました。 試したケースを整理します。 (1)accept直後にクライアントからの送信データをreadせずに、サーバ側から write、closeすると、クライアントではサーバがwriteしたデータを受信できません。 (2)accept直後にクライアントからの送信データを1バイトでも良いのでreadし、サーバ側からwrite、closeすると、クライアントではサーバがwriteしたデータを受信できます。 (2)では、RSTフラグのセットされたパケットが飛ぶ前に、FIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでおり、(1)ではFIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでいません。 サーバ側でクライアントの送信電文を1バイト読む事で動きが変わるようなのですが、この辺が何か関係があるのかもしれません。 ちなみに、APIは以下の通りです。 サーバ(UNIX):socket,bind,listen,accept,select,read,write,close クライアント(WIN):socket,bind,connect,listen,recv,send,closesocket サーバ側でのソケットのクローズは、acceptの戻り値を引数にしてcloseをしているのみで、shutdownはしていません。 |
>>3138 ajmj > FileHandle.pmを使って無名のファイルハンドラを作って、 > そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる というのが実現可能なのかどうかはわかりませんが (できない ような気がする)、別解としては 1. put じゃなくて stor("ファイル名") を呼ぶと、Net::FTP::dataconn オブジェクトが返ってくるので、それに対して write する。 2. POSIX::mkfifo で名前付きパイプを作り、fork して、 子が CSV データを作成、名前付きパイプに書き込む。 親は Net::FTP::put に名前付きパイプを渡す。 あたりですかね。1 は perldoc Net::FTP を流し読んだだけで、 できるかどうかわかりません。2 は試していませんが、一応実現は できるでしょう。 >>3140 koko http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#howclose ですかね? あと、情報を小出しにせず、最小限まで削ったソースコードを最初に 載せれば、話が早そうなのになぁと思ったりします。 まぁわたしは Winsock 知らないのでアレですが。 |
はじめまして、お世話になります。 kakiと申します。 現在、Linux(Redhat7.1 kernel2.4.2-2)、C言語にて プログラムの作成をしております。 質問なのですが、プログラム上(C言語)からFD、CFなどのデバイスに マウントし、FD、CF内のファイルを取得するということは 可能なのでしょうか? お分かりになる方がおられましたら、ご教授お願いいたします。 |
>>3140 koko やっぱりRSTによる「異常終了」が原因のようですね。 shutdown()を使ってみると幸せになれると思います。 |
>>3142 kaki mount(2) をどうぞ。あるいは DOS フォーマットならば mtools の mtype あたりがお手軽かも。 ところで CF って何ですか? コンパクトフラッシュ? |
>>3144 68user ご回答ありがとうございます。 mountはコンソール上でのやり方は知っているのですが、 gccでコンパイルしたプログラムからも、 使えるということなのでしょうか? また、コンソールで使えるコマンド(# mountや# cdなど)を Cプログラムで使用するにはどのようにするのでしょうか? 実際、やりたいことはプログラムを起動したら、 FD、CF(コンパクトフラッシュ)にマウントし、 ファイルがあればディレクトリにコピーするといったことです。 参考になるサイトや文献などご存知でしたら、 教えてください。 よろしくお願いします。 |
端末の入出力について質問です。 cronで実行されたシェルの出力を端末に出力したり、 端末からの入力を受けたりしたいのですが、どのよう にすればよいのでしょうか? 次のようなやり方ではダメでした。 #ファイル名 a.sh #!/bin/ksh while [ : ] do read INPUT?'?' if [[ $INPUT = 'q' ]]; then exit fi done #スクリプト終了 % a.sh < /dev/pts/13 > /dev/pts/13 2&>1 どなたか教えてください。よろしくお願いします。 |
>>3145 kaki > mountはコンソール上でのやり方は知っているのですが、 > gccでコンパイルしたプログラムからも、 > 使えるということなのでしょうか? mount(1) は内部で mount(2) を呼んでいるだけなので、自分で mount(2) を呼んでやればよいわけです。 mount(1) のマニュアル http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html mount(2) のマニュアル http://www.linux.or.jp/JM/html/LDP_man-pages/man2/mount.2.html セクションとは? http://www.linux.or.jp/JM/section.html > また、コンソールで使えるコマンド(# mountや# cdなど)を > Cプログラムで使用するにはどのようにするのでしょうか? system(3) を使います。 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html なお、cd は海より深い理由により、system(3) からは使えません。 chdir(2) を自分で発行してください。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/chdir.2.html >>3146 FF > cronで実行されたシェルの出力を端末に出力したり、 > 端末からの入力を受けたりしたいのですが、 おそらく「端末」という用語を誤解されていると思いますが、cron から 実行した場合は端末は割り当てられないので、それは不可能です。 で、あなたが本当は何をしたいかという話になるわけですが、コンソール (マシンにつながっているモニタ) に文字列を出したいんですか? あるいはファイルにあらかじめ入力文字列を書いておいて、ファイルに 出力したいんですか? |
>> 3147 68user >おそらく「端末」という用語を誤解されていると思いますが、cron から >実行した場合は端末は割り当てられないので、それは不可能です。 「端末」は、画面と入力が行える(ディスプレイとキーボード)と認識 してましたが間違っているでしょうか?また、cronに端末が割り当てら れないのは認識していましたが、何らかの方法で端末を割り当てるか、 リダイレクトなどで入出力できないものかと思って質問させていただき ました。 質問時には、コマンドラインでシェルを実行し確認したところ、 readのpromptが適切に表示できないなど若干問題があったので質問 させていただいたのですが、cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ正しく動作しているよう です。現在は、本当にこれでいいのか(コマンドラインではうまく いかなかったので)、動作で注意すべき点はないか(どのデバイス に出力すればよいか)悩んでいるところです。なにかアドバイスが あればよろしくお願いします。 >で、あなたが本当は何をしたいかという話になるわけですが、コンソール >(マシンにつながっているモニタ) に文字列を出したいんですか? コンソールに入力を促す文字列を出力し、ユーザからの入力を受け取り たいのです。(read INPUT?'?'を行いたい) UNIX汎用だとおもったので環境は書かなかったのですが、一応記述します。 NCRのUNIX V(らしい)でK Shellを利用しています。 よろしくお願いします。 |
>>3147 68user 68user さんありがとうございます!! system("mount /mnt/floppy"); system("ls /home"); など実現できました!! ありがとうございました。 |
>>3148 FF > cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ > 正しく動作しているようです。 ほー、FreeBSD で試してみましたが、これ、できるんですねぇ。 知りませんでした。ただ、出力はいいとして、入力については ちょうどそのときその端末デバイスからの入力を受け付ける プログラム (シェルとか) が走っていた場合、キー入力が そのプログラムに渡るか、a.sh に渡るかは不定 なような気がします (FreeBSD で試した限りでは、ですが)。 あとは - その端末を読み書きする権限があるかどうか (パーミッションの問題) - 誰もログインしていなかったらどうするか - 複数の端末があった場合は who などで調べるとしても、 どの端末を選べばいいのか - (ウィンドウシステムがあるとして) たまたま選んだ端末がウィンドウの 後ろに隠れていたら とかいろいろ問題ありげなので、お勧めはしません。 |
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」 http://x68000.startshop.co.jp/~68user/net/link-book.html にちょろっと追加しました。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/link-book.html |
>>3150 68user 68userさんご返答ありがとうございます。 >ちょうどそのときその端末デバイスからの入力を受け付ける >プログラム (シェルとか) が走っていた場合、キー入力が >そのプログラムに渡るか、a.sh に渡るかは不定 最初のreadの受け取りで若干おかしな動作をする(シェルのプロ ンプトが表示される)ようなので、cronを使わず常駐して時間に なったら動作するようにしました。 ありがとうございました。 |
内容あやしげ、そして需要がほとんどないと思われる 「DNS クライアントを作ってみよう」 を書きました。 http://x68000.startshop.co.jp/~68user/net/resolver-1.html http://x68000.startshop.co.jp/~68user/net/resolver-2.html http://x68000.startshop.co.jp/~68user/net/resolver-3.html 3連休つぶれちゃったよ。とほほ。 |
お世話になります。kakiです。 現在、LAN経由でクライアントから送られてくる(55msec毎)データを、 取得し、表示するHTTPサーバーを作成しています。 サーバー側で、クライアントと接続中にLANケーブルが抜けたのを 検出するのに、受信ループ中のping()で戻り値を判断して、 抜けているかどうかを判断しようとしていますが、 この方法は正攻法なのでしょうか? また、その方法を試そうと思ったのですが、 accept()後のrecv()で受信待ちをしてしまっている為、 ケーブル断が検出できていません。 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と しているのですがrecv()でとまっているようです。 fcntl()の使い方が間違っているのでしょうか? |
>>3154 kaki > この方法は正攻法なのでしょうか? 正攻法とは何かという話になってしまいますが、TCP/IP の設計思想的には 誤りです。ケーブルが抜けようがルータが落ちようが、その部分が復旧したら 元通りに通信できるべきである、という考えだからです。 と言っても、タイムアウトを実装したいというケースもあるでしょうが、 わたしなら select したり non-blocking socket 使うと思います。ケーブル 断だけでなく、クライアント側のバグなどで いつまでたっても反応がない 場合なども対応できるからです。 サーバ側のケーブル断であれば >>1301 rosegarden という話もあったりしますが、通信できない原因はたくさん考えられるのに、 なぜサーバ側のケーブル断だけ特別扱いするのか、という話になるのではないかと。 > 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と > しているのですがrecv()でとまっているようです。 > fcntl()の使い方が間違っているのでしょうか? non-blocking socket を使ったことがないのでわかりませんが、あってる ような気がします。 多分これは関係ないでしょうけど、とりあえず int val = fcntl(s, F_GETFL, 0); fcntl(s, F_SETFL, val | O_NONBLOCK); の方がいいでしょうね。 |
質問です。Windows のDOS窓で 0x01〜0x06、0x10、0x15〜0x17 で水道管みたいな罫線が出たり、 0x12、0x1b〜0x1fでちっちゃな矢印が出ますが、 これらの文字は誰がどこで決めたのでしょうか。 おわかりでしたらご教示ください。 |
>>3156 ふくし 調べましたが、わかりませんでした。 http://czyborra.com/charsets/codepages.html を見るに、 > 0x12、0x1b〜0x1fでちっちゃな矢印 は CP437 あたりだと思いますが、なぜ 0x01 で 0xC9 な 水道管が出るのかはわかりません。 http://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/ で質問してみてはどうでしょうか。 |
>>3157 68user さん、ありがとうございます! 聞いてみます。 ちなみにDOS窓でjpとやると出てくる字から想像するに、 CP932ですよね。 usとやると437に切り替わりますが、そうすると出てくる字は 下で出てきたCP437そのままのようです。 |
たまに referer 見てみると、知らないところで突っ込まれて たりするのでおもしろい。 http://dns.qmail.jp/lies.html > コンテンツサーバとキャッシュサーバの違いを理解していな可能性が高いから。 うっ。勉強しよう。 |
お世話になります。 gcc(全般)でコンパイルした実行ファイルには チェックサムは付加されているのでしょうか? |
>>3160 saki > チェックサム の意味がわかりません。 ファイル転送などで化けてしまったバイナリを実行しようと すると、「チェックサムが一致しません」とか言ってくれる、 ような感じですか? もしそうなら、そういう機能は聞いたこと ありません。 もしかして、そういうのが可能なコンパイラがあるのでしょうか。 |
>>3161 68user 68userさん ご返答ありがとうございます。 そのチェックサムです。 ファイルをバイナリで開いて、そのファイルの全バイナリ値の合計のこと だそうです。(すいません私もあまり詳しくないのです。) あるファイルをコピー(ダウンロード)する時に、 コピー前のファイルとコピー後のファイルのチェックサムを 比較して、あっていればコピーが正常、あっていなければ異常と するプログラムを作りたいと思っていまして、 > gcc(全般)でコンパイルした実行ファイルには > チェックサムは付加されているのでしょうか? とお聞きしたのは、ファイルそのものにチェックサムが付加されていれば ファイルをオープンしてチェックサムの値を比べるだけで済むのかなぁと 思いまして・・・。 そういう機能がないのであれば、チェックサム自体をプログラムで 作ろうと思い、 ネットで調べたのですが簡単すぎるからなのか情報があまりありません。 参考になるサイトや本などあれば、勉強したいのですが、 ご存知のかたはいますでしょうか? |
>>3162 saki チェックしたいのがバイナリだけでいいのか、データファイルも 含むファイル一般なのかわかりませんが、前者であれば gzexe http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=gzexe&dir=jpman-5.0.0%2Fman を使うのが簡単でしょう。gzexe は実行ファイルを圧縮しておく ためのコマンドですが、実行時に gzip で展開するので、結果的に gzip の誤り検出機能をそのまま利用できます。gzexe も 圧縮した 実行ファイルも、いずれも sh スクリプトですので、改造も簡単 でしょう。 後者であれば、単に gzip を使う手もありますし、あるいは cksum や md5 などのコマンドを利用するのもいいでしょう。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=md5&dir=jpman-5.0.0%2Fman http://www3.cds.ne.jp/~marimo/data/rfc/rfc1321-jp.txt なお、誤り検出のアルゴリズムとしては、 > ファイルをバイナリで開いて、そのファイルの全バイナリ値の > 合計のことだそうです。 は単純すぎます。言っちゃ悪いですが、この程度の認識しか持っていない のであれば、cksum や md5 などのコマンドを利用した方がよいです。 |
>>3153 68user なんかわざわざ書いてもらったようで恐縮です。 なんでもそうですが、自分が必要と思う部分を理解するには その周りの事情全てを勉強しておけ、というのが世間の常識なので、 俺みたくよこしまな考えでDNS関連の本やらWEBやらRFCやらを 眺めている輩にはなかなかハードルが高かったのですが、 おかげでDNS関連の資料に目を通すのにも少し抵抗が和らぎました。 ところで例の話の続きなんですが、うちのlinux(kernel-2.4.18+ glibc-2.2.4)では、bind-8.3.4-RELのdig8.3で名前解決できません。 straceしてみると、どうもpoll()で受信を検出できていないようです。 glibcの名前解決も同様のコーディングだったので、poll()を試しに select(),pselect()に変えてみましたがダメでした。 一方でbind9.1.3付属のdigでは名前解決ができました。 というわけで、そのコードをglibcに移植してしまえ、と思ったのですが、 iscライブラリというのが理解できず、結局移植はできていません。 一時はgethostbyname()内部を、正常に動作するdig9.1.3をsystem()で 呼び出し、その結果を拾ってくるように書き換えようと思いましたが、 どうやらgethostbyname()の利用頻度が低いようだったのでやめました。 今後についてはどうするか未定ですが、また調査しつつ改修しつつで 行きたいと思います。 |
かなりお久しぶりです。 >>3163 68user 実は私も、チェックサム=合計と思っていました。cksumのように CRC演算するものもチェックサムと呼ばれるようになった経緯を何 かご存知でしたら、教えていただけませんか? #少なくとも、CRC演算は合計(=サム)ではないです・・・ |
>>3165 へにか > 実は私も、チェックサム=合計と思っていました。 広義のチェックサムと狭義のチェックサムがあって、狭義の チェックサムは http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2 で言うところのアルゴリズム 1 なのだろうとわたしは思って います。このマニュアルではアルゴリズム 2・3 も「チェックサム」 と呼んでますね (それが一般的なのかどうかはわかりませんが)。 >>3163 68user を書いたときは、わたしの中では「チェックサム=広義のチェックサム」 だったので、あのような書き方をしましたが、 > ファイルをバイナリで開いて、そのファイルの全バイナリ値の > 合計のことだそうです。 は正しいですね。失礼しました。 |
>>3166 68user > チェックサムは > http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2 > で言うところのアルゴリズム 1 なのだろう あ、加算のたびに右ローテートって書いてあるので、アルゴリズム 1 も 「狭義のチェックサム」とは異なるんですね。 |
68userさん、へにかさん ご返答ありがとうございます。 大変、勉強になりました。 チェックサムといっても、いろいろなやり方があるのですね。 >cksum や md5 などのコマンドを利用した方がよいです。 組込のLinuxだったので上記のようなコマンドがなく、 自作しました。 全バイナリ値を合計して、16bit桁あふれしたら、 あふれた分を削除するという簡単なものです。 こんなのでもいいのかなと不安になりますが、 貴重な情報をありがとうございました。 |
すいません、また質問です。 Windows で ActivePerl を使うと、 \r\n を読み込むと \n を読み込んだと思い込み、 \n を書き出すと \r\n を書き出そうとする習性があります。 これを停止するために binmode STDIN; binmode STDOUT; とするのですが、こうすると while (<>) { ... } で読み込もうとするときに、 C:\> perl スクリプト名 < ファイル だとうまくいくのですが、 C:\> perl スクリプト名 ファイル だとうまくいきません。 つまり、<> は引数でファイル名を渡されると、 STDIN 以外のファイルハンドルからファイルを読んでいるようなのですが、 このファイルハンドル名は分かるでしょうか? ActivePerl を Windows 2000 以降で使うと、 スクリプト名に .pl という拡張子を付けると C:\> スクリプト名 でいきなり実行できて便利なのですが、 このスクリプトの中で <> を使うと、 C:\> スクリプト名 ファイル名 だとうまくいくのですが、 C:\> スクリプト名 < ファイル名 だと '<' を第1の引数と思い込んでうまくありません。 動かそうとしてるのはしょうもないファイルダンプツールです。 # fdump.pl #$file = shift; #open IN, $file; #binmode IN; binmode STDIN; binmode STDOUT; #$/ = "\r\n"; while (<>) { # 1行ずつ読み込み $line1 = $line2 = $line3 = ""; # 作業域を初期化 @char = split //; # 1文字ずつ分解 foreach $char (@char) { # 1文字ずつ処理 $line1 .= $char; # 文字をそのまま $line1 にくっつける $hex = unpack "H2", $char; # $charを16進数値に変換して$hexに格納 ($hex1, $hex2) = split //, $hex; # $hexを1文字ずつ分解して$hex1、$hex2に格納 $line2 .= $hex1; # 16進数の前半を$line2にくっつける $line3 .= $hex2; # 16進数の後半を$line3にくっつける } print $line1; # $line1を出力する(改行はもともとついている) print "$line2\r\n"; # $line2+改行を出力する print "$line3\r\n"; # $line2+改行を出力する } |
>>3164 has > straceしてみると、どうもpoll()で受信を検出できていないようです。 ほほう、glibc の問題かカーネルの問題かはわかりませんが、今どきの Linux でそんな問題にぶちあたるとは運がいいですね。 ここは一気に UDP・IP スタックを解析して、Linus にパッチを送付する まで頑張ってください。しかし粘りますねぇ (笑) # NIC を変えたらすんなり直ったりして。 >>3169 ふくし % grep '<>' /usr/src/contrib/perl5/* /usr/src/contrib/perl5/toke.c: /* turn <> into <ARGV> */ となったので、それを手がかりに調べてみると、perl(1) に 以下のように書いてありました。 次のループは、 while (<>) { ... # 各行に対するコード } 以下の疑似コードと同等になります。 unshift(@ARGV, '-') if $#ARGV < $[; while ($ARGV = shift) { open(ARGV, $ARGV); while (<ARGV>) { ... # 各行に対するコード } } 本当に binmode ARGV でうまくいくのかどうかは試していません。 他の調べ方としては print %main::; でシンボルテーブルを表示し、 片っ端から試してみる、とかですかね。 |
<<3170 さん、 ありがとうございます。 結果として、 while (<ARGV>) { ... } でも while (<>) { ... } 同様に動くので、<>のファイルハンドルがARGVであることに 間違いはないようですが、 binmode ARGV; は効かないようです!? へんだなぁ、、。 |
>>3166 68user なるほど、狭義と広義の差が有るんですね。僕にとっては、 新たな知識です。どうも教えていただいて、ありがとうござ います。 20年程前のパソコン雑誌に載っていた機械語プログラムには、 横一列の合計が書いてあったのを懐かしんで、こんな質問を してしまいました。確か最初は何も無く、次に横一列、次に 縦一列と横一列、その次にそれ+CRC演算が出てきたという 記憶があります。確か一列はどちらも1octet x 16個で、CRC は256octet毎に1octetでした。 僕も、その後GoogleでCRCもチェックサムと呼ぶようになっ た経緯を調べたのですが、経緯自体は、なかなか見つからな いですね。 もし、どなたか見つけたら、教えていただければ嬉しいです。 蛇足ですが、単純に足すだけだと間違いが見つかりにくいので、 > 加算のたびに右ローテート のような工夫がされているんでしょうね(推測です)。 |
>>3172 へにか > なるほど、狭義と広義の差が有るんですね。僕にとっては、 > 新たな知識です。 わたしが世の中の「チェックサム」という用語の使われ方を見る限り、 広義のチェックサムと狭義のチェックサムがあるのでは、と思った だけですので、誤解のなきよう。 例えば IP・UDP・TCP のチェックサムは「1の補数和の 1の補数」で 狭義のチェックサムだと思いますが、一方 java.utik.zip.CRC32 http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/zip/CRC32.html は Checksum インタフェースを implements していますが、この「Checksum」 は広義のチェックサムかなぁと。…ってなんか苦しい例だなぁ。 http://www.onelook.com/?w=checksum&ls=a#all_com を見ても、わたしの思う「狭義のチェックサム」しか載ってないよう ですし、やっぱりわたしの認識が変なのですかねぇ。 ちなみに http://www.jisc.go.jp/index.html で JIS を調べてみましたが、「チェックサム」の定義は見付けられませんでした。 >>has あの後、寝てしまいました…。 |
時間のあるときに、遊びつつ飲みつつちょっとずつですが、 linux kernel-2.4.18-24.7.xにてpoll()を追っかけてます。 相当飛ばし読みでやっとこ__pollwait()。 けど先が見えません…。 @68user あいかわらずですな。またの機会に。 |
>>3173 68user > 誤解のなきよう。 了解しました。 色々調べていただいて、ありがとうございます。 http://www.onelook.com/?w=checksum&ls=a#all_com のリンク先、これから追いかけてみます。 そこで、早速二箇所追いかけたところ、面白い記述を見つけました。 http://www.wikipedia.org/wiki/Checksum > Note: The term 'checksum' is also often used incorrectly to mean a CRC. http://www.wikipedia.org/wiki/CRC >CRC's are often referred to as "checksums," but such > designations are not accurate since, technically, > a checksum is calculated through addition, not division. incorrectlyを始め、思わずbabylonで単語の意味を調べてしまいました。;) とにかく歴史上などの何らかの事由で捻じ曲がったのではないかと推測 していますが、なんとかその確証が得られるよう、調べてみます。 運良く見つけたら、連絡します。見つけられなかったら、次回の(他の ネタを含む)書き込み時に、その旨お伝えいたします。 #教えて頂いたリンク先、情報の宝庫ですね。ありがとうございます。 |
#連続ですみません。 >>3173 68user >やっぱりわたしの認識が変なのですかねぇ。 少なくとも、cksumが存在する以上、(繰り返しになりますが)何らかの 事由があったのでしょうから、変と思わなくても良いのではないかと思 います。といいますか、その事由に依存すると思いますので、変かどう かという問題ではないかもしれません。 #尊敬する68userさんでも困難な問題なので、わたくしごときが調べ #きれるかどうか自信ないですが、挑戦してみます。 |
ども。以前erro.cgiの件でお世話になった者ですが、 どうしても解決できない事が有り、質問させてください。 Web上にてユーザーがアカウントを自動登録できるようにしたのですが 登録したユーザーのquotaをcronで設定したく下記のようにしてみました。 つか見つけてきました。 */5 * * * * edquota -p foo `awk -F":" '$3 > 1000 {print $1}' /etc/passwd` idが1000以上のユーザーに予め設けたユーザーfooのquotaを例えばsoft 20000 と同じに設定すると言うものですが、これをcronで走らせても なぜか登録ユーザーのquotaには反映されません。 しかし、直接#rootで上記コマンドを打つと反映されます。 で、コマンドが長すぎるのかとも思い、 下記のように二つに分けてcronで走らせてもだめでした。 勿論、直接コマンドではOKです。 */5 * * * * awk -F":" '$3 > 1000 {print $1}' /etc/passwd > member_id.txt */6 * * * * edquota -p foo `cat /root/member_id.txt` 二つに分けた場合ではmember_id.txtは作成されているから edquota -p info `cat /root/member_id.txt`がcronで作動してない ということになりますが、理由がわかりません。 長文で申し訳ありませんがご教授お願いします。 |
あ! edquota -p info `cat /root/member_id.txt`がcronで作動してないは edquota -p foo `cat /root/member_id.txt`がcronで作動してないです。 |
すみません。自己解決しました。 cronからメールが来てました。 /bin/sh: edquota: command not found /usr/sbin/edquotanにしたら解決しました。 板汚してすみませんでした。 で、ついでと言っては何ですが、、、 suEXECを使ったCGIはその所有者の権限で動くわけですが、 その所有者には/bin/falseとしてシェルは利用出来ないようにしています。 でも、コマンドが使える(例えばtelnet.cgi)CGIではcat /etc/passwd 等と出来てしまいます。 これは誰の権限で動いているのでしょうか。 OSはLinuxで鯖はApacheです。 |
>>3179 ある厨 > その所有者には/bin/falseとしてシェルは利用出来ないようにしています。 /etc/passwd に書くログインシェルはあくまで 「ログインするときに起動するシェル」 です。 ログインとは telnet や rlogin や ssh 経由でログインすることを指します。 よって、cron から起動したり、setuid(2) して exec(3) する場合は関係 ありません。 web サーバは nobody や www 権限で動かされることが多いでしょうが、 /etc/passwd で nobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin などと /sbin/nologin となっているのは、単にその権限でログインさせない という設定になっているだけで、その権限でのプロセスの実行を制限している わけではありません。 >>3176 へにか (狭義の) checksum や parity や CRC や hash はデータ誤りを検出するための 一方式だと思うのですが、「データ誤りを検出するためのもの」一般は英語で 何て言うんでしょうね? http://www.wikipedia.org/wiki/Checksum にあるように「integrity-protection measure」としか言いようがないなら、 「データ誤りを検出するためのもの」という意味で「checksum」という用語を 使ってもいいんじゃないかなぁ、となんとなく思っております。 |
>>3180 68user なるほど、ただ単にログインできないと言うことであって 実行制限ではないと言うことですか。 勉強になりました。 #やぱり独学では限度があるにゃぁ。 |
>>3180 68user >「データ誤りを検出するためのもの」一般は英語で何て言うんでしょうね? Error Detecting Code (誤り検出符合)です。 因みに、CRCは、なんと、1bit-errorまでは訂正できてしまいます。 即ち、Error Correcting Code (誤り訂正符合)でもあるところが、parityやchecksumとは違うところで、面白いです。 #訂正方法は遠い昔に忘れました・・・ #hashは方式を知らないので、訂正できるのかどうか分からないです。 #今日本屋で調べても、歴史的なことは見つかりませんでした。A^^; #http://www.wikipedia.org/ は現在crashしているみたいです。 |
始めまして。 なんとなくXULの練習でUnixの部屋のMozilla用検索ツールバーを作ってみました 迷惑になるかもしれないので(それと家のサーバーが落ちてるからというのもある) 許可があるまで配布はしてないのですが配布してもよろしいでしょうか? # 家の鯖と外の鯖両方落ちてる・・・ # なぜ家に居ないときに落ちる・・・ |
>>3183 NPK > 配布してもよろしいでしょうか? はい、構いません。ぜひお願いします。 |
ASCIIでプログラミングして ISO-2022-JPを出力するプログラムを書いていますが (なんのために #! /usr/local/bin/perl -w print "\e\$B\$3\$s\$K\$A\$O\n"; だとうまくいくけど、 #! /usr/local/bin/perl -w print "\e\Q$B$3$s$K$A$O\E\n"; だとダメですね。 \Q〜\Eより先に変数展開が行われるみたいです。 ヘンな感じ、、。 |
>>3184 68user まだDNSが無いのがちょっとどうかと思いますが(^^; とりあえず置いてみました。 # 古いdyndnsのパスワード忘れたものでそのうちとろうと思ってとりあえずしばらく放置です(笑) |
はじめまして。unix初心者です。 定期的にhtmlをftpでファイルをアップロードしたいと思いました。それで、cronで実現しようと考えcrontabで編集したのですが上手く動いてくれません。コマンドが間違っているかと思い、console上で実際にやってみたところ普通に動きました。どうしてcronでは上手く動いてくれないのでしょうか? 以下の様にやっています。 10 0 * * * ftp -n < /home/hogehoge/ftp.sh ftp.shの中身 open ftp-server user hogehoge passwd ascii prompt cd data/ put index.html quit |
もじら組のゆきちといいます。いつも、こちらの記事は参考にさせていただいています。 >NPKさん 下記で紹介されているツールバーですが、「新もじら瓦版」というニュースサイト(?)があるのですが、そこでツールバーの報道を行なっても良いでしょうか。 ぜひとも、紹介させていただきたいのですが。 |
追記 今、InfoseekとX68Kの両方を利用してみたのですが、「新しいタブで開く」(Infoseek)「新しいWindow」(X68K)で開くを利用すると、最大化(全画面表示)になって、かつ、右にスクロールバーが出ない状態です。最大化を解くと、小さくなりますが、スクロールバーが出ませんね。1.4αです。 こんなところですいませんが、とりあえず、利用報告です。 |
ここで会話することじゃないと思いますが(^^; (68userさんすいません >>3188 ゆきち(もじら組) 紹介に関しては問題ないです。 鯖が貧弱なので落ちたらごめんなさい(笑) 開発には1.4α使ってるんですが家ではそんなバグは確認されてませんね・・・。 もしかしたらほかのXULアプリと衝突を起こしてるのかもしれません。 そのうち調べてみます。 |
ありがとうございます。今、時間がとれないですが、紹介してみようと思います。ありがとうございました。 #管理人さん、すいませんでした。 |
>>3185 ふくし > \Q〜\Eより先に変数展開が行われるみたいです。 プログラミング Perl 第 3版では、その辺の評価順序は明示 されていないみたいですね。 >>3187 Phantom 普通、/var/mail/$USER などに実行結果がメールで届くはずです。 そこに何か情報があるかもしれません。 >>3189 ゆきち(もじら組) FreeBSD 4.7-RELEASE + mozilla-1.4b (2003041308) ですが、再現 しませんでした。ただ、「新しいタブで開く」としても、(タブでなく) 新しいウィンドウが開いてしまいます。 infoseek の方ですが、アプリとしての感想を述べさせていただくと、 - うちの常用のサイズではウィンドウの幅が足らず、「新しいタブで開く」が 切れる (ウィンドウサイズを広げれば表示される) 「Search by Dictionary」と単語入力フォームが広すぎるのかも。 -「Search」で検索じゃなくて、「国語」「和英」「英和」それぞれを押せば 検索するといいかも (そしたら「Search」は不要) - 「和英」と「英和」はひとつにまとめて、フォームの内容が ASCII なら 英和、日本語なら和英、だといいかも。 - てなところを設定で変更できたりするとうれしいかも。 - 「英→日」はとても便利ですねぇ。 - 入力した単語の履歴が残って、さらに補完してくれたりすると素晴らしい。 てな感じです。 勉強用にとりあえず作ってみただけなのか、あるいは継続的に 開発されるのかわかりませんが、もし後者であればご検討ください。 >>3190 NPK > ここで会話することじゃないと思いますが(^^; 全く問題ないです。 >>has しばし待たれよ。 |
ずっと前に、 while (<>) { ... } のファイルハンドル ARGV に binmode が適用されないので、 while (<>) { ... } における ActivePerl の \r\n => \n 置換を抑制できない、 という話をしましたが、5.6 以降では binmode のかわりに use open IN=>"raw:"; だと動作するようです。PerlIOってやつですね。 |
>>3193 ふくし 自己レスれす。 use open IN=>":raw"; の間違いでした。 |
>>3185 ふくし perldoc perlre > You cannot include a literal "$" or "@" within a "\Q" sequence. An > unescaped "$" or "@" interpolates the corresponding variable, while > escaping will cause the literal string "\$" to be matched. You'll need > to write something like "m/\Quser\E\@\Qhost/". >>3192 68user > その辺の評価順序 「詳説 正規表現」のP245とか… |
改行コードについて質問いたします。 UNIX(HP-UX)の改行コードはLFだと思うのですが、 このコードを削除して複数行のテキストファイルを 一行にすることは可能でしょうか? |
>>3195 /tk > 「詳説 正規表現」のP245とか… 書いてありました。正規表現エンジンを作ってみる本だと思って 買ってみたらそうじゃなかったので、ほとんど読んでなかったり。 >>3196 天 tr -d '\n' < file perl -pe 's/\n//' < file などなど。 |
>>3192 68user > 普通、/var/mail/$USER などに実行結果がメールで届くはずです。 という事でしたが、何故か何も届いていませんでした。 それで、もう1度すべて見直して、ftp.shの中身を以下のようにしたら 出来ました。 ftp.sh open ftp-server user hoge passwd prompt cd data/ ascii del index.html put /home/hoge/public_html/index.html ./index.html quit なんか、putがうまく行ってなかったみたいです。それで、フルパスで 書いたら上手く行くようになりました。ここまで、書かなければならない とは、、、 ご迷惑おかけしました。 |
>>3192 68user 実験的な要素は強いですけど基本的に自分が使うから作ってるのでよさげなら取り込みます(笑) ってな訳で微妙に弄ってみました。 セレクトボックス以外は大体取り込んだと思います。 |
エンベロープを変えてメールを送る方法を超初心者向けにわかりやすく説明していただけませんか? |
>>3199 NPK FreeBSD 4.7-RELEASE + 昨日あたりの nightly で最新版を インストールして mozilla を再起動したところ、mozilla が 起動しなくなりました (何かを poll(2) してずっと待っている)。 ~/.mozilla/ をリネームしてみたところ起動したのですが、設定が 全部元に戻るのは避けたいので、infoseek transfer だけを削除 する方法を教えてください。 >>3200 oMH どういう環境で実現したいのか わからないので無理っす。 |
>>3201 68user 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^; chromeの中にあるchrome.rdfからinfoseek_transferに関する項目を削除 chromeの中にあるoverlayinfoディレクトリ内navigatorディレクトリの contentの中にあるoverlays.rdfからinfoseek_transferに関する項目を削除 これでアンインストールできます。 |
>>3202 NPK > 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^; 別にクレームをつけているわけではないです。単なる報告と質問の つもりでした。 で、アンインストールして、再度インストールしたところ正常に動いている ようです。ありがとうございました。 てゆーか、 http://ryuzi.dyndns.org/mozx/j_googlebar/index.html にちゃんと書いてありましたね。失礼しました。 |
いや、そういうリスクがあるので自分で治せない場合はやばいっすよ〜みたいなニュアンスで書いたんですが(^^; 別にクレームとしては受け取ってないですよ。 報告はあったほうがありがたいですし。 1.4のナイトリーは大規模な変更が行われてるようですのでたぶんこれからもこういうことがあると思います。 ですので、むしろ報告していただけるほうがありがたいです。 |
別々のディレクトリのファイルどうしの日付を見てファイル更新が新しければ、コピーするというスクリプトを作りたいんですけど、そのようなコマンドはありますか? |
もしご存知でしたら教えてください。 例) temp/aaa/bbb/ccc cccディレクトリの中に 111 222 333 と3つのファイルがあるとします。 その時に cccディレクトリに行き 「ls」コマンドを打つと 111 222 333 と表示されると思いますが この表示を以下のようにフルパスにしたい。 temp/aaa/bbb/ccc/111 temp/aaa/bbb/ccc/222 temp/aaa/bbb/ccc/333 というのが質問です。 もしご存知でしたらご教授をお願いします。 以上 よろしくお願いします。 |
>>3205 teru rsyncというコマンドがあるそうです。 http://www.turbolinux.co.jp/knowledge/public/178.html >>3206 awa ls | perl -nle "print \"$PWD/\$_\";" 一応動きます。 #1文字目が'/'なのをフルパスというのでは? |
分かる人にとっては、下らない質問かもしれませんがお分かりでしたら お願いします。あと、私はperlは全然分かりません。。。 perlで実行した内容結果がindex.htmlというHTMLファイルで出力されるの ですが、それをcronで決まった時間で実行しています。そして、その出力さ れたファイルをftpでアップしたいと考えています。しかし、以下のように cronを書くと駄目でした。 20,50 0-23/2 * * * perl hoge.pl | ftp -n < ftp.up どう駄目かというと、説明する必要ないかもしれないのですが、ftp上に置 かれるindex.htmlファイルが最新のものではなく、その前の時間のファイル になってしまうのです。(0時50分に更新すると、ファイルの時間は0時20分 のものになってしまうということです。)原因は明確的で、perlが実行され 出力される前のファイルをftpでアップしている事、にあるのは分かってい ます。ただ、その解決方法がわかりません。 perlのファイルを書き換えないと駄目なんでしょうか…。それとも、別の 方法があるのでしょうか? |
>>3204 NPK > そういうリスクがあるので自分で治せない場合はやばいっすよ〜 ごもっともです。精進します。 >>3205 teru もしシェルスクリプトでやるのであれば test(1) を使って if [ "$fromdir/file1" -nt "$todir/file1" ]; then cp -f $fromdir/file1 $todir/file1 fi など。 >>3208 Phantom > perl hoge.pl | ftp -n < ftp.up perl と ftp を同時に実行しているので、perl が書き換える 前に ftp で put しているのでしょう。 そもそも % command1 | command2 < file というのはおかしいです。command2 の標準入力に渡したいのは、 command1 の出力なのか、あるいは file なのかが不明確だから です。sh 系だとなぜかエラーにならないようですが、csh 系だと Ambiguous input redirect. と怒られます。 というわけで、 perl hoge.pl ; ftp -n < ftp.up でしょう。 もし hoge.pl が - 正常終了時には 0 を返す (exit(0)) - 異常終了時には 1 以上を返す という UNIX コマンドの一般的なルールに従っていて、hoge.pl が 異常終了した場合には ftp を実行したくないのであれば、 perl hoge.pl && ftp -n < ftp.up の方をお勧めします。 |
>>3209 68user > perl hoge.pl && ftp -n < ftp.up これで、思い通りに出来ました!有難う御座いました。 凄く単純なことにミスをしていたんですね。お恥ずかしい。 sh 系でもエラーはいて欲しいと思いました。 |
はじめまして。 マシン:HITACHI3050 OS:HI-UX のマシンのIPアドレスを変更したいのですが、 Hostsファイルの変更だけで大丈夫でしょうか? HP-UXのように、samコマンドみたいなものがあるのでしょうか? よろしくお願いします。 |
>>3211 11SE HI-UX も HP-UX もさわったことはないのでわかりませんが、一般的な UNIX なら /etc/hosts は、ただの IP アドレスとホスト名のマッピングを 決めるファイルです。 /etc/hosts はマシン (正確にはインタフェース) の IP アドレスを決める ファイルではないので、何かしらのファイルを変更しないといけないでしょう。 管理コマンドを探すか、 # find /etc -type f | xargs fgrep 10.0.0.1 などでどのファイルに何が書かれているのか探しましょう。 |
はじめまして最近Laboの管理者にはじめてなった伊藤と申すものです。 まず、状況から説明したいと思います。先日Laboの電気工事のため停電があり、WS(ワークステーション)を停めなくてはいけませんでした。 本日復旧作業をしていたのですが、ディスクアレイに繋がっているWSがうまく起動しません。また、ディスクアレイの表示画面にもROM ERROR と出ています。これは何が悪いのでしょうか?GW中なので、業者にも連絡がつかず八方塞がりな状態です。よろしくお願いします。 以下に詳しいlogの内容を記載しておきます。 (WS<COMPAQ XP1000>のlog) Checking local filesystems /sbin/ufs_fsck -p Can't open /dev/rrz8g : No such device or address /dev/rrz8g : CAN'T CHECK FILE SYSTEM Can't open /dev/rrz8h : No such device or address /dev/rrz8h : CAN'T CHECK FILE SYSTEM THE FOLLOWING FILE SYSTEMS HAD AN UNEXPECTED INCONSYSTENCY /dev/rrz8g(/raid) /dev/rrz8h(raid2) Unknown error in reboot (ディスクアレイ<proware 型番不明>の表示パネルに出てくるMessage) ROM ERROR 19200,8,1,N |
>>3213 伊藤@管理初心者 ディスクアレイの表示画面に ROM ERROR と出ているなら、ディスク アレイの故障した可能性が限りなく高いと。そっちは業者にまかせる として、あとはそのディスクアレイなしで OS がブートするかどうか です (ディスクアレイ中のデータを読み出すことが目的なら、あきら めて業者を待ちましょう)。 シングルユーザモードで起動して、/etc/vfstab あたりを修正して、 /dev/rrz8* をマウントしないようにするのが UNIX における一般的な 対処です。 ただ、おそらく OS は Tru64 あたりではないかと推測しますが、 さわったことがないので具体的な対処方法はわかりません。 |
>>3214 68user お返事ありがとうございます。 やはり、ディスクアレイは故障の可能性が高いと…。 68userさんのおっしゃる通り、ディスクアレイ中のデータを読み出すことが目的だったんですが・・・、わかりました。 いろいろと御助言ありがとうございました。 |
memo http://www.coins.tsukuba.ac.jp/~yas/classes/dsys-2002/2003-03-04/index.html http://www-6.ibm.com/jp/developerworks/security/011005/j_s-stun.html |
「ソースを表示してみよう」の結果が 次のように表示されてしまいます。 1: : Content-type: text/html(LF) 2: : (LF) 3: : <html><body bgcolor=white>(LF) 4: : </body></html>(LF) |
>>3217 匿名 ご報告ありがとうございます。ウチに帰ったら対処します。 |
テープメディア(DLTtapeIV)についての質問です。 DLTtapeIVに退避させた、圧縮後のデータの容量を調べる方法がわからず大変困っています。 テープ内の圧縮後データ容量を確認するコマンド、方法があれば教えて下さい。 なにとぞ、なにとぞ宜しくお願い致します。 |
クライアントよりフォルダを指定して、その配下全てのファイルをサーバにアップロードすることはservletで可能でしょうか? また、そのフォルダに指定したアクセス権限を付与することは可能でしょうか? |
>>3219 DLT8000user あんまり詳しくないんですが、tar で保存していれば tar tvf …とかいう話でしょうか? cpio は知りません。 じゃなくて、圧縮率の話? >>3220 匿名 servlet でというか、HTML 的にはフォルダまるごとのアップロードは 無理だと思います。やるなら Java Applet とか DirectX とかいう 話になるかと。 アクセス権限については環境依存なので、java.lang.Runtime#exec() で設定でしょうか。 |
>>3218 68user > ウチに帰ったら対処します。 と言いつつ忘れていました。そしてここ数日、このサーバが 落ちていたので、まだ対処できていません。今週末にはなんとか…。 |
ネットワークプログラミングの基礎のところで、 select や fork を「マルチスレッド」と書かれているようですが、 少し違うのではないでしょうか? 新しいスレッドが生成されず、見ため同時に動いていることを マルチスレッドとは言わないと思います。 |
>>3024 テクノソルジャー いまさらですが http-proxy.pl のメモリリークを修正しました。 ご指摘ありがとうございました。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/http-proxy.pl >>3217 匿名 > 「ソースを表示してみよう」の結果が次のように表示されてしまいます。 修正しました。ご指摘ありがとうございました。 >>3223 int > 見ため同時に動いていることをマルチスレッドとは言わないと思います。 「見ため同時に動いていること」を「マルチスレッド」と表記している 本があったのでそれを真似しているんですが、やっぱり変でしょうか (と言ってもその本が見付けられないので、勘違いかも)。 とはいえ、pthread などの「スレッド」と混同しやすいのは確かです。 より適切なの用語は「多重化」でしょうが、個人的にはわかりにくい と感じます (だからあえて「スレッド」としてみた)。 何かよい用語はないでしょうか。 |
初めまして。 突然ですがおききしたいことがあります。 貴HP内にてsocketを使ったHTTPクライアントを作るプログラムを拝見させていただき、独立した環境で同じように組んで実行しましたがホストが存在しないとかえってきました。 これは至極当然なので、$iaddr(指定アドレス)に自分自身(127.0.0.1)を指定して実行しました。 ちなみにANHTTPDが動いています。 perl5でライブラリ上でもsocketは確認しています。 結果はエラーコード500を返すだけでなにも起こりませんでした。 アクセスログもやはりエラーコードは500でした。 自分自身へ試してみて異常がないことを確認できなければ外部に向かって使用するのにはかなり抵抗があったため試してみたことでした。 socketを使っての自分自身へのアクセスはできないのでしょうか? お暇なときでよろしいですのでお返事よろしくおねがいいたします。 |
>何かよい用語はないでしょうか。 プロセス制御,プロセスの多重化,プロセスの生成と複写, マルチプロセス,同時実行プロセス 等は如何でしょう. |
>>3225 ちゃお > 結果はエラーコード500を返すだけでなにも起こりませんでした。 > アクセスログもやはりエラーコードは500でした。 ということは TCP/IP 的には正常に通信できているが、HTTP リクエスト で送信している内容がよくない、という状況と考えます。 あとは - 実行したのが http-client.pl なのか、http-client-2.pl なのか。 - http-client-2.pl であれば、URL に何と入力したのか。 その URL をブラウザで見ると正しく表示されるのか。 - そもそも telnet で成功したのか。その場合は何とタイプしたのか。 と情報がないと何とも言えません。 >>3226 Netboy apache 起動の件、ありがとうございました。 > プロセス制御,プロセスの多重化,プロセスの生成と複写, > マルチプロセス,同時実行プロセス いえ、どういう手法で多重化しているか (プロセス/スレッド/select) は 別として、「見ため同時に動いていること」を何と表記すればよいかが よくわからないのです。 |
>>3227 68user お返事ありがとうございます。 そして言葉足らず失礼いたしました。 >実行したのが http-client.pl なのか、http-client-2.pl なのか 実行したプログラムはhttp-client.plのほうです。 >telnet で成功したのか telnetでは127.0.0.1にポート80で接続できました。 でもそのあとのheloコマンドでは501を返してきました。 またメインマシンがwinMEなので最初の接続(open)はDOSプロンプトからできません。 >URL をブラウザで見ると正しく表示されるのか ブラウザではエラー500を返してきます。 またURLには127.0.0.1/root/http_client.cgiとしています。 拡張子はcgiにしています。 よろしくおねがいします。 |
連続ですいません。 さっきかきこんだあとおもうところがあって拡張子plで試してみました。 plは設定(http.conf)に登録していないのでいつも使っていませんでした。 もちろん今回も実行したあとはブラウザには表示されませんでした。 しかし、アクセスログには200が残っていました。 これって成功したということでいいのでしょうか? |
>>3228 ちゃお > でもそのあとのheloコマンドでは501を返してきました。 わたしの知る限り HELO と言えば SMTP です。そして ポート 80 の先にいるのは HTTP サーバです。HTTP サーバは SMTP を解さないので、エラーになるでしょう。 http-client.pl というのは、要はブラウザの代わりをする プログラムなのですが、その辺は理解されていますか? > またURLには127.0.0.1/root/http_client.cgiとしています。 あなたがブラウザで普通に見られるような URL を試しましょう。 http://127.0.0.1/ で何かコンテンツが表示されるなら、まずそれで試すべきです。 とりあえず http://x68000.startshop.co.jp/~68user/net/http-1.html を読んで、実際に試してみてください。 |
c言語でFTPクライアントのプログラムを組んでいます。 プロトコルやソースは大変参考にさせていただいています。 環境は、TurboLinux 8 serverです。 FTPクライアントのプログラムなのですが、ファイルの転送などは問題なく動作しているのですが、ディレクトリ単位の転送の記述部分がわかりません。何度かコマンドのデバッグモードで試して、RFCなどの記述も呼んでいるのですが。参考になるページがあるのでしたら、教えてください。 また、ファイルかディレクトリかを区別する方法もあればと思い、ご教授よろしくお願いいたします。 |
>>3231 じゅじゅ > ディレクトリ単位の転送 おそらく、ディレクトリを LIST or NLST して、一つ一つ RETR する しかないです。 > ファイルかディレクトリかを区別する方法 ブラウザで anonymous ftp サイトに接続した場合などは、LIST の結果が drwxr-xr-x ならディレクトリ、とするのが一般的だと思います。もっと きっちりやるなら、CWD で移動できたらディレクトリとみなす、とか。 基本的に、ftp は UNIX に依存したくなかったため、この辺はあえて 決めてないのではないかと思っています。 もしディレクトリを判別できるようにするなら、名前付きパイプは? ソケットは? デバイスファイルは? door は? ということになり、 結局 ls の結果をそのまま送る方がよい、と判断されたのではない でしょうか (そしてわたしは、この判断は誤りであると思っています)。 |
簡単なことかもしれませんが、LISTやNLSTをし、続けてファイルの総数やディレクトリの中にあるファイル名を取得することはできるのでしょうか?それらのデータを取得する記述と、また、 >drwxr-xr-x ならディレクトリを取得する 記述が分かりません。 ご教授よろしくお願いいたします。 |
>>3233 じゅじゅ LIST すれば drwxr-xr-x 9 user group 512 Apr 28 2001 dir1 drwxr-xr-x 10 user group 512 Jul 30 2000 dir2 -rw-r--r-- 1 user group 122 Mar 29 2000 file などという結果が返ってくるので、行頭が d である dir1 と dir2 がディレクトリであることがわかります。 さらに LIST dir1 とすれば dir1 の下のファイル・ ディレクトリ一覧が返ってきます。 |