68user's page 掲示板

Prev< No. 3001〜3040> Next  [最新発言に戻る] [過去ログ一覧]
No. 3001 # kiki 2002/12/25 (水) 11:14:10
>3000 68user様
お返事ありがとうございます.kikiです.
やってみましたところ、なんとかできました。
ありがとうございました。

No. 3002 # koko 2002/12/25 (水) 15:21:54
C言語で複数のプロセスが同一のファイルに対してログを出力する処理を作成したいのですが、このような共有書き込み用のファイルを設ける方法としてUNIXでよくやる方法というものはあるでしょうか。
もちろん、定石でなくても良いです。
できれば、書き込み時に自分でファイルをロック、アンロックしない、要するにできるだけ楽をしたいです。
ログの書き込みは同時に発生する可能性があります。
Windowsであれば、共有書き込みでファイルを開く関数があるのですが...。

●処理イメージ
1.親プロセスでログファイルを開く。
2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。
3.全子プロセス終了後にログファイルを閉じる。

よろしくお願い致します。

No. 3003 # yuuji 2002/12/25 (水) 15:37:40
はじまめして
UNIXのファイルアクセスでつまづいています。
Aという、所有者がnobody のファイルがあるのですが、あるunixサーバでは
webというユーザからアクセス(名前変更)ができます。
ところが、同じOSの別のサーバにあるBという、所有者がnobodyのファイル
にはwebというユーザからアクセスできません。
nobodyのファイルはどのユーザでもアクセスできると認識しているのです
が、ソフトのインストールやセキュリティの設定などでアクセスできないようにすることが可能なのでしょうか?
どなたかご存知の方いらっしゃいましたら教えてください。

No. 3004 # Japper 2002/12/25 (水) 22:25:47
>>2992 68user

ご回答ありがとうございます
パスワード的なことはやはりcrypt関数を使うことで解決できそうな気がします

>> Root権限でコマンドが実行されているような気がします
>perl スクリプト中で
> print "$<\n";
> print "$>\n";
>の結果のいずれかが 0 なら root 権限を得ています

やはり両方とも 0 を返しました
このことからRoot権限を得ているのでしょうか?
Root権限を与えない方法はどのようにすればよいのでしょうか?

よろしくお願いします

No. 3005 # Eiichi 2002/12/26 (木) 10:45:40
> 3003 yuuji

WebサーバがApacheならsuEXECを使えばいいと思いますよ。
http://httpd.apache.org/docs/suexec.html

No. 3006 # ruku 2002/12/26 (木) 13:20:22
>>2999 hsj
ありがとうございます。わかりました。頑張ってみます。

No. 3007 # 68user 2002/12/27 (金) 01:33:01
>>3002 koko
> できれば、書き込み時に自分でファイルをロック、アンロックしない、
> 要するにできるだけ楽をしたいです。
これを第一に考えるなら syslog か、syslog-ng を使いましょう。

daemon を立ち上げておけないのなら、open で O_SHLOCK を使うとか
(ま、結局ロックしているわけですが)。

また、
> 1.親プロセスでログファイルを開く。
> 2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。
という形態であれば、普通は pipe(2) して、fork(2) して、子が親にデータを
渡し、親がログに書く、というふうになるでしょう。
      http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/links/link-check.pl?rev=HEAD&content-type=text/x-cvsweb-markup
は子が親に 1行だけデータを渡す例です。

あるいは親が名前付きパイプを作成し、子がそこに書き込むとか。

いずれにせよ、syslog が使えないなら、syslog 相当のものを
自作する必要はあります。

No. 3008 # 68user 2002/12/27 (金) 01:44:34
>>3003 yuuji
> nobodyのファイルはどのユーザでもアクセスできると認識して
> いるのですが
誤りです。nobody はただの一ユーザであって、所有者が nobody の
ファイルを扱えるかどうかは そのファイルのパーミッションと、ファイルが
置かれているディレクトリのパーミッションによります。

UNIX においては、誰よりも権限が高いユーザは存在しますが (root)、
誰よりも権限が低いユーザというのは存在しません。


>>3004 Japper
> このことからRoot権限を得ているのでしょうか?
そうです。

> Root権限を与えない方法はどのようにすればよいのでしょうか?
suExec の前に、設定を見直した方がよいでしょう。
  
もし apache ならば、あえてそういうふうに設定しない限り root
権限は得られません。そういう web サーバを使い続けることは
非常に恐いので、まっとうなインストール方法を勉強するか、
web サーバをインストールした人に何をしたのか聞いてみる
ことをお勧めします。

# 「デフォルトが root 権限で動く web サーバ」なら正常動作
# なんでしょうが、そんな web サーバは嫌だ。

No. 3009 # ELVIS 2002/12/31 (火) 22:10:26
こんにちは
もうすぐ2003年ですね
仕事でSolaris8をいじるようになって早くも4年目に突入です
まだまだ未熟者ですがよろしくお願いします

自宅では2001/01版のSolaris8を「WS440BX」で使ってるのですが
最近I845系のマシン(ペンティアム4系)にUPしようと考えるようになりました
当然ながらチップセットやディスクコントローラ、システムコントローラ等の
ドライバを入手する必要があるのですが、苦慮しています
新型機の候補としては「D845GALLY」あたりを考えているのですが
情報等あればよろしくお願いします

No. 3010 # しましま 2003/01/02 (木) 20:11:32
    EWSのデバイス情報(CPUのクロック数、メインメモリ)を知ることができる
UNIXコマンドがありましたら、教えて下さい。

No. 3011 # とむやむ 2003/01/04 (土) 16:51:43
perlでネットワークプログラムを試作してます。
echoをC/Sで動作する事は出来るようになりましたが、ファイルを
ネットワーク越しに転送するにはどうすればいいのでしょうか?
同じくperlによるC/Sです。

No. 3012 # HIGE 2003/01/06 (月) 12:01:19
はじめまして。
echoサーバーサンプルを参考にしてPerlでちょっとしたチャットサーバーなんかを作ってます。
そこでいきなり質問なんですが、PerlでBroken Pipeエラーを回避するようにできないでしょうか?
Broken Pipeとは存在しないソケットに対して書き込んでしまったときにでるエラーのようで、クライアントが強制切断してしまったときなどは回避できません。
どうにか皆様のお知恵をお借りできませんでしょうか。

No. 3013 # kiki 2003/01/06 (月) 18:58:04
あけましておめでとうございます。kikiです。
本年もよろしくお願い致します。

>>68user様
ずいぶんと古い話で申し訳ありませんが、
>>2956 の解決策をためそうとしましたところ、
1. PATH=../../../../../../../home/foo/bar:$PATH とする。
カレントディレクトリの階層があまりに深くなければ、これでいける。

が、どういう事を意味するのかわかりませんでした。
そして、これはどこで行うのでしょうか?
suトロイの実行前の準備としてでしょうか?
ご教授よろしくお願いします。

P.S.
PATH=.:$PATH
にしておくき、suトロイがおいてある場所で、suコマンドを打ち込むと
suトロイが実行され、もう一度suコマンドを打つと
しっかり/bin/suが実行されますが、
suトロイがおいてある場所以外で同じことをしようとすると
suトロイは実行されず、いきなり/bin/suが 実行されました。
コマンドを探す順番は、カレントディレクトリからということでしょうか。
うーん、調べてみます。

No. 3014 # 68user 2003/01/07 (火) 03:03:58
今年こそはちゃんと web を更新するぞ、と。

てなわけで、今年もよろしくお願いします。

>>3009 ELVIS
>>3010 しましま
少なくとも僕はわかりません。申し訳ない。

>>3011 とむやむ
> ファイルをネットワーク越しに転送するにはどうすればいいのでしょうか?
以下のやりとりが参考になるでしょうか。
>>2827 Tetsu
>>2828 68user
ftp クライアントと ftp サーバを作るもよし、自分でプロトコルを
決めるもよし、ということです。

>>3012 HIGE
> PerlでBroken Pipeエラーを回避するようにできないでしょうか?
SIGPIPE をキャッチしてください。使用例はこちら。
    http://x68000.startshop.co.jp/~68user/net/http-proxy.html

>>3013 kiki
> PATH=../../../../../../../home/foo/bar:$PATH とする。
カレントディレクトリが /dir1/dir2/dir3 であるとき、
      ../ は /dir1/dir2 です。
      ../../ は /dir1 です。
      ../../../ は / です。
      ../../../../ は / です。
      ../../../../../ は / です。
      ../../../../../home は /home です。
      ../../../../../home/foo は /home/foo です。
      ../../../../../home/foo/bar は /home/foo/bar です。
ってことです。

> PATH=.:$PATH
> コマンドを探す順番は、カレントディレクトリからということでしょうか。
. はカレントディレクトリですから。

No. 3015 # koko 2003/01/07 (火) 13:04:15
>>3007 68user
ご回答ありがとうございます。
やはり、ファイルに同時書き込みをするにはロック、もしくはそれに相当する制御は欠かせませんね。
素直にsyslogを使用すれば良いのですが都合でsyslogは使用できません。
頂いた参考URL等を参考にしながら対策を検討します。

No. 3016 # ありがとう [URL] 2003/01/07 (火) 14:34:53
★ \(^o^)v 大 発 見 !♪

                 〜♪ とっても 参考にさせて頂いて ♪

    ~~\(^o^)♪ 〜 夢 と 希望 が 叶いました〜♪ (^o^)/~~
                  
             ありがとう  

No. 3017 # ピョンタン [E-mail] 2003/01/07 (火) 16:40:47
もし、ご存知であれば教えてください。
ファイルの日付を比較して新しいほうのファイルを表示したいです。
サーバが異なる場所(ネットワークには接続できる)に、
それぞれファイルが存在するします。
同じマシンであれば、>find file1 -newer file2 -print
で表示されるのです。remshで実行しようとしてもうまくいきません。
ご教授お願いいたします。

No. 3018 # kenken 2003/01/09 (木) 00:58:50
AIX上でファイル内の先頭行と最終行を削除したいのですが
UNIXコマンドで行を指定して削除することはできないのでしょうか?
※C言語の処理内で行いたいのでsystem関数で可能な方法

もしご存知であれば教えてください。
よろしくお願いします。

No. 3019 # 68user 2003/01/09 (木) 09:34:49
>>3017 ピョンタン
remsh でリモートのファイルのタイムスタンプを表示して、ローカルの
方より若ければ rcp するか、とりあえず別のファイル名で rcp して、
ローカルで比較するか、てな感じで。

>>3018 kenken
> AIX上でファイル内の先頭行と最終行を削除したいのですが
      % tail +2 < file | ??? | tail +2 | ???
でいけた記憶があります。??? はファイルの内容を逆順にする
コマンドですが、なんだったっけなー。ど忘れしました。

      % cat -n file | tail +2 | sort -r | tail +2 | sort | sed 's/^.......//'
てな方法もあります。

まぁファイルサイズが大きいなら perl か awk でさくっと書いた方が
よいでしょう。

No. 3020 # ピョンタン [E-mail] 2003/01/09 (木) 11:34:56
ご回答ありがとうございます。
大変助かります。>No.3019(NO3017についての回答)
もうひとつ教えてください。ファイルの
タイムスタンプを取得するのに、
(1)Jan 9 2001  ← 2001/01/09
(2)Dec 10 13:56 ← 2002/12/10
(3)Jun 1 15:00 ← 2003/01/01
というふうに統一性がありません。
特に、(2),(3)だったらどうやって比べればいいのでしょうか?
申し訳ありませんが教えて下さい。

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

No. 3021 # 68user 2003/01/09 (木) 12:53:44
>>3020 ピョンタン
% ls -lT
% ls --fulltime -l
% perl -e 'printf "%d\n", (stat("/foo/bar/baz"))[9]'

などなど。

No. 3022 # ピョンタン [E-mail] 2003/01/09 (木) 16:24:16
お返事ありがとうございました。>No.3021
大変助かりました。
もう少しだけ教えてください。
%ls -fulltime -l
で確認することができましたが、
参考書や、Webで検索しても
の「fulltime」の引数指定意味がよくわかりません。
しかも、私は
×"--fulltime"
○"-fulltime"
で、なんとなくうまくいきました。
本当にお手数をおかけしますが、あともう少しなので
教えて下さい。どうかよろしくお願いします。

No. 3023 # 68user 2003/01/09 (木) 22:19:01
      % ls --fulltime -l

      % ls --full-time -l
の間違いでした。

>>3022 ピョンタン
> ○"-fulltime"
お使いの OS に興味があります。OS の名前を教えてください (てゆーか
質問する際に OS や環境を明示してくださいね)。

意味については
        % man ls
に説明があるはずです。

No. 3024 # テクノソルジャー 2003/01/10 (金) 15:15:07
初めまして、お世話になります。
68userさんのページのhttp-proxy
http://x68000.startshop.co.jp/~68user/net/http-proxy.html
をhttpポートフォワーダーに改造して使わせてもらっている物です。
Linuxですが、、連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)、いろいろ手を加えてみましたが、未だにこのMEM増加を改善できませんでした。
そこでこれをforkを使ったechoサーバを参考にfork版に修正しました。
while (my $sock = $sock_waiting->accept){
        my $pid = fork();
        my $cpid = $pid ;
        if ($pid!=0) {
    close($sock) ;
    next ;#parlent process
        }
        print " FROM Browser. Accept $sock.\n";
        #Child process
        my ($buf,$request);
        while (1){
                my $brs = sysread($sock, $buf, 10000);
                $request .= $buf;
                if ($brs) {
                        last ;
                }
        }
        print " FROM Browser. Read OK.\n";
        ここに転送先サーバ側とのソケット作成と受信&ブラウザへの返信を記述
        print " FROM Browser. Finished.\n";
        close($sock);
        print " FROM Browser. process End \n";
        exit ;
}

の様に子プロセスのexit文もいれました。なのにpsで見ると、、
hoge 19438 12855 0 14:55 pts/21 00:00:00 perl http-proxy2.pl
hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
hoge 19579 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
hoge 19580 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
hoge 19581 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
アクセスした分この様なプロセスが残りっぱなしになります。
当然大元スクリプトを停止すればプロセスは消えます。
どうか宜しくご意見ください。

No. 3025 # 68user 2003/01/11 (土) 00:22:35
>>3024 テクノソルジャー
> hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
> アクセスした分この様なプロセスが残りっぱなしになります。
wait していないからです。以前指摘をいただいたのですが、時間が
とれず手付かずになっています (申し訳ない)。
>>2584 persianopeh
をどうぞ。

> 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)
どうもオリジナル版のバグっぽいですね。久々に使ってみましたが、
確かにメモリ使用量がだんだん増えていきました。調べておきます。

# と言っても暇がない〜。

No. 3026 # 68user 2003/01/11 (土) 00:38:38
>>3024 テクノソルジャー
> 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)
コネクションを切断しても %conn_table_rev が IO::Socket::INET の
オブジェクトを指しているみたいです。

あと、%conn_table もキーが増えつづけるようです (値は undef かな?)
%conn_table_rev ほどではありませんが (一回あたり数十バイトくらい
でしょうか)、メモリリークなのは確かですね。

なので、remove_contable で適切にハッシュを delete してやればよい
のかもしれませんが、明日も仕事なのでこの辺で… (´・ω・`)

No. 3027 # テクノソルジャー 2003/01/11 (土) 07:36:54
お忙しいところ調査並びご返事ありがとうございます!
>>3025 68user
なるほど、、その仕組みが理解できませんが、、
連休明けには会社で早速処置してみます!
>>3026 68user
こちらはclose漏れかといじって見ましたが、、ハッシュにバインドされているから生成オブジェクトが開放されなかったのですね〜
ハッシュにdefunで増加など考えもしませんでした。
私的に貴重な知識を得ましたです!

No. 3028 # 68user 2003/01/12 (日) 00:37:28
久々にこのサーバのメンテナンスしようとしたら、cron (デーモン) は
2001/11 から止まってるわ、間違って ~/bin/ は消してしまうわで もう散々。

いろいろ動かなくなっていると思いますが、なるべく早く直したいと思います。

No. 3029 # VTOK 2003/01/12 (日) 01:27:21
はじめまして、こんにちは。

いつも参考にさせていただいております。
sedコマンドを使用して文字列の置換をする処理をしたいのですが、
エラーになってしまいます。

やりたいことは、
「aa aaa aaab aac bbb」から『aaa』だけを消したいのです。
---------------------------------------------------
Sample)aaa.sh
#!/bin/sh
testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g`
---------------------------------------------------
としたとき、「//g」が見つかりませんとなります。
※ただし「testA」は、「aa aaab aac bbb」となっていますが、、。
ちなみにシェルではなく単純に実行するとエラーはでません。
    > echo aa aaa aaab aac bbb | sed s/aaa\b//g
    > aa aaab aac bbb
※シェル内では\bは「\\」をつけています。

どなたかお力を貸していただけないでしょうか。
また、「sed」以外の方法でもよいです。

-環境:Linux(RedHat 7.2)

宜しくお願いいたします。

No. 3030 # 68user 2003/01/12 (日) 02:59:48
>>3029 VTOK
手元の FreeBSD の sh や bash ではエラーにならなかったので
よくわかりませんが、そもそも
      % echo aa aaa aaab aac bbb | sed s/aaa\b//g
この aaa\b はシェルが解釈すると aaab になるので、
      % echo aa aaa aaab aac bbb | sed s/aaa\b//g

      % echo aa aaa aaab aac bbb | sed s/aaab//g
と等価だと思います。

ただしスクリプト中の
      testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g`
は正しいと思います。なんでエラーになるんだろう。

No. 3031 # ふくし [E-mail] 2003/01/12 (日) 23:01:07
あけましておめでとうございます。
いつもお世話になりっぱなしですが、今年もよろしくお願いします。
68user さん Perl 5.8 入れてみましたか ;;;

いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、
EUC-JP モードであれば EUC-JP の、
Shift_JIS モードであれば Shift_JIS の漢字を真にしてくれて
便利だったんですが、Perl 5.8 に変えたので
使えなくなってしまいました。
encoding で切り替えられるかと思ったんですがダメでした。
あくまで -T を使いたいとしたらどうすればいいか、
どなたかお分かりであればご教示ください。

No. 3032 # akuro [E-mail] 2003/01/13 (月) 01:19:58
初めましてakuroと申します。

最近、ここを知り色々と勉強させて頂いています。
「HTTP クライアントを作ってみよう(4)」にてお聞きしたい事があるのですが。

HTTP CLIENTを実際に作成して動かしてみたのですが、
「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた
場合、変換しなければならないとあるのですが、処理を記述しないで
試しに

http://x68000.startshop.co.jp/~68user/

と入力してみたのですが、問題なく表示されました。
これはどういう事なのでしょうか?

それと、次の項目の「301 Moved Permanently」なのですが、
これも/(スラッシ)無しでも表示されました。
(HEADの場合HTTP/1.1 301 Moved Permanentlyと出ましたが、
BODYもちゃんと表示されました)
これもなぜ表示されるかわかりません。


質問が長くなってしまいましたが、よろしくお願いします。
(HTTP_CLIENTは少し変更して、CGI版にしていますが、処理自体は
変更していません。)

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

No. 3033 # 68user 2003/01/13 (月) 04:02:59
また長ったらしい文章を書いてしまった…。

>>3031 ふくし
> 68user さん Perl 5.8 入れてみましたか ;;;
5.8 どころか最近は 5.004_04 を使ってますよ。退化してます。

> いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、
> EUC-JP モードであれば EUC-JP の、Shift_JIS モードであれば Shift_JIS の
> 漢字を真にしてくれて便利だったんですが、Perl 5.8 に変えたので
perl-5.8.0/pp_sys.c には
          PP(pp_fttext)
          {
                  for (i = 0; i < len; i++, s++) {
                          if (!*s) { /* null never allowed in text */
                                  odd += len; break;
                          }
          #ifdef USE_LOCALE
                                  if (IN_LOCALE_RUNTIME && isALPHA_LC(*s))
                                          continue;
          #endif
                                  /* utf8 characters don't count as odd */
                                  if (UTF8_IS_START(*s)) { ... }
                                  ...
                          }
                          else if (*s < 32 &&
                              *s != '\n' && *s != '\r' && *s != '\b' && *s != '\t' && *s != '\f' && *s != 27)
                                  odd++;
        }
とかなんとか書いてあったりします (UTF8 は OK のような雰囲気ですね)。

USE_LOCALE で IN_LOCALE_RUNTIME ならもしかして! …というわけでさらにおっかけていくと
        % find . -type f | xargs grep isALPHA_LC
        ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
        % find . -type f | xargs grep NXIsAlpha
        ./handy.h: (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_')
        ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
てなわけで NXIsAlpha とやらが定義されていません。isALPHA_LC を
よく見てみると
        #ifdef USE_NEXT_CTYPE
        # define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
        #else
        # define isALPHA_LC(c) isalpha((unsigned char)(c))
        #endif
てな感じなので、将来は実装するぞ、てなところでしょうか。


>>3032 akuro
> 「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた
> 場合、変換しなければならないとあるのですが
URI を定義しているのは RFC1738 です。
      http://www.ietf.org/rfc/rfc1738.txt?number=1738
そこには
      httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
とあります。/~68user/ や /%7E68user/ という部分は hpath に相当します。

      hpath = hsegment *[ "/" hsegment ]
      → hpath は hsegment を / で結合したもの。

      hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
      → hsegment は uchar か上記記号の 0 個以上の繰返し。

      uchar = unreserved | escape
      → uchar は unreserved か escape。

      unreserved = alpha | digit | safe | extra
      escape = "%" hex hex
      → unreserved は alpha, digit, safe, extra のいずれか。escape は %XX 形式。

      alpha = lowalpha | hialpha
      digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
      safe = "$" | "-" | "_" | "." | "+"
      extra = "!" | "*" | "'" | "(" | ")" | ","
      → alpha, digit, safe, extra は上記の文字 (lowalpha は英小文字、hialpha は英大文字)。

上記のどこにも ~ は含まれていません。よって、hpath には ~ を
含めてはならず、/~68user/ は間違いで /%7E68user/ は正しいのです。



…というのはその文書を書いた当時の話。今 URI を規定しているのは RFC2396 です。
      http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt

/~68user/ に相当するのは abs_path です (*1)。
            abs_path = "/" path_segments
            path_segments = segment *( "/" segment )
            segment = *pchar *( ";" param )
            param = *pchar
            pchar = unreserved | escaped |
                                            ":" | "@" | "&" | "=" | "+" | "$" | ","
            reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
            unreserved = alphanum | mark
            mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

mark に ~ が含まれているため、URI として ~ を記述することが認められています。

また、上記ページの「G.2. RFC 1738及びRFC 1808からの修正点」には

> チルダ文字"~"を"unreserved"集合に追加した。ある種のキーボードではこの文字の
> 入力に困難を伴うが、インターネットにおいて広く用いられているためである。

とあります。

よって、現在では /~68user/ というリクエストを送っても問題ありません。ただし
/%7E68user/ という表記も間違いではありません。/~68user/ と /%7E68user/ は
等価です。

# …という解釈でいいのかなぁ。自信がないなぁ。

じゃー昔は /%7E68user/ と書かずに /~68user/ とするとエラーになったのか
というと、そんなことはありませんでした。その理由は
        「~ を ~ として解釈しても誰も (web サーバも web クライアントも)
            困らないので (むしろ便利)、web サーバが気をきかせてくれたから」
だと思います。


(*1)
なぜ /~68user/ が abs_path なのかというと、
      RFC2616 (http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.2.1)

      http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
と定義してあり、さらに
      URL 構文やセマンティクスの定義についての情報については、(RFC 1738 [4] と
      RFC 1808 [11] を置き換えた)
          "Uniform Resource Identifiers (URI): Generic Syntax and Semantics," RFC 2396 参照。
      この規格書では、その規格書にある、"URI-reference", "absoluteURI", "relativeURI",
      "port", "host", "abs_path", "rel_path", "authority" の定義を採用する。
とあるからです。

> それと、次の項目の「301 Moved Permanently」なのですが、
> これも/(スラッシ)無しでも表示されました。
こちらで試してみたところ、

        GET /~68user HTTP/1.0

        HTTP/1.1 301 Moved Permanently
        (略)
        Location: http://jfx.startshop.co.jp/~68user/
        (略)

        <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
        (略)
        </BODY></HTML>

となりました。ここで BODY 部に表示されているのは、
      「あなたが要求したドキュメントはここにあるのでクリックしてね」
という web サーバが生成した文章ですので、正しい挙動だと思います。

No. 3034 # ふくし [E-mail] 2003/01/13 (月) 08:03:06
あっそうそう、utf8 は実装してるんですよ、言い忘れました。
ソースを追ってくれてありがとうございます。
そうやって見るんですね〜

5.004_04 って for (0..100000) でメモリはじけませんか。
ぼくは例の BigInt の件もあるし、encoding の件もあるしで、
無批判に最新版を使うようにしています。

No. 3035 # ゴラス 2003/01/13 (月) 23:02:11
68userさん詳しい解説ありがとうございました。

正直、自分はネットワークに関する知識が低く、100%解説を
理解できたわけではないのですが、大雑把にですが理解しました。
(RFCも始めて閲覧しました)

これからも色々と勉強させていただきたいと思います。

No. 3036 # アロエ 2003/01/14 (火) 09:25:48
教えてください。
メモリ使用率が知りたいのです。Linuxではsysinfoというシステムコールを使って出せましたが、SolarisとHP-UXで出せません。
知ってる方がいましたら教えてください。

No. 3037 # 68user 2003/01/15 (水) 01:40:47
>>3036 アロエ
HP-UX は知りませんが、Solaris なら vmstat とか。
sar でもいけたっけかな?

とかいいつつ、僕は top 入れてますけれども。

No. 3038 # ピョンタン [E-mail] 2003/01/16 (木) 08:50:03
お返事遅くなりました。(>>3023)
OSはUNIX(HP)です。
man lsでfulltimeを探したのですが
見つかりませんでした…。しかも、
「-fulltime」でうまくいったかと思ったのですが、
そうでもなさそうでした。
いろいろありがとうございました。

No. 3039 # コーコー [E-mail] 2003/01/16 (木) 21:01:28
はじめまして、初めて書き込みます。
僕は高校3年生で、こんなところに書き込むのは若干場違いなのですがどの書籍を見てもよくわからなかったので書き込みました。
今、学校でLinuxを使ってHTTPについて勉強しているのですがどうしてもファイル転送ができません。
サンプルプログラムで実行しても出来ません。(その作者のホストにはちゃんとアクセスできます)
Not FoundやForbiddenというのがでます。
chmodでそのファイルを他からも読み書きできるようにしているのですが無理でした。どうしたらいいでしょうか??
あとサンプルでは全てhtmlファイルなんですが、htmlファイルしかダメというわけでしょうか?
詳しい知識もなく、このような場を借りることは失礼だと思いましたが真剣に今の研究をやりとげたいと思いメールしました。
宜しくお願いします。

No. 3040 # 68user 2003/01/16 (木) 22:05:27
>>3038 ピョンタン
あー、-f、-u、-l、-t、-i、-m、-e 全てのオプションを
受け付ける ls なら -fulltime でもエラーにならないかも
しれないですね。想像ですが、HP-UX の ls では無理でしょう。
perl・awk などの別解でやってみてください。

>>3039 コーコー
> ファイル転送ができません。
ファイル転送とはアップロード? ダウンロード?

> サンプルプログラムで実行しても出来ません。
そのサンプルプログラムを提示しないと誰にもわからんでしょう。

> (その作者のホストにはちゃんとアクセスできます)
なぜ作者のホストが関係あるのですか? 作者のホストに
アクセスするようなサンプルプログラム? と思ったら、

> chmodでそのファイルを他からも読み書きできるように
> しているのですが無理でした。
chmod できるということは自分の web ページに対して
アクセスしている?

> どうしたらいいでしょうか??
自分が何を意図して何をした結果うまくいかないのか、を説明する
ことだと思います。

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