68user's page 掲示板

Prev< No. 3075〜3349> Next  [最新発言に戻る] [過去ログ一覧]
No. 3075 # 美春 [E-mail] 2003/01/28 (火) 14:53:19
はじめまして。
考えても考えてもわからないことが
ありますのでご教授下さい。

あるファイルに
    aaaaああああaaaa
    いbbbbbbbbbbbい
のような行があって、
各行から2バイトの文字だけを
抜き出したいのですがどうすれば
できるのでしょうか?
イメージとしては上のファイルを
このように出力したいのです。
    ああああ
    いい

どうしてもわからないので
よろしくお願いします。

No. 3076 # 山田 2003/01/28 (火) 14:57:01
>>3067 68user
私もcompress→uncompressと試してみました。
解凍後のファイルサイズも一致しており、上手くいっているようです。
とても助かりました。ありがとうございます。

実はもうひとつ教えていただきたいことがありまして・・・
cshellで文字列操作は可能なのでしょうか?
下記を解決する方法があれば教えて下さい。
Q1.指定したディレクトリからファイル名を変数に取得。
Q2.上記Q1でAAA_YYYYMMDD.txtと言う名前を取得できたとして、
        YYYYMMDDのみを切り出して、shell内で用意した日付と大小を
        比較出来るのでしょうか?

ご存知の方、教えて下さい(T_T)

No. 3077 # 児嶋 2003/01/28 (火) 15:37:21
>>3074 68user
ありがとうございました。
環境が整ったときにtcshで確認しようと思います。

No. 3078 # koko 2003/01/28 (火) 17:02:53
親プロセスで子プロセスをforkするC言語プログラムがあります。
子プロセスは複数作成され、処理が終わると自動的に消滅します。
親プロセスで現在存在している子プロセスの数を把握したいのですが、簡単な方法はありますでしょうか。
子プロセスの数だけ分かれば良いです。
子プロセス数カウンタを設け、forkでインクリメントし、子プロセスの終了を検知してデクリメントする方法もあるかと思いますが、もっと簡単な方法があれば教えていただけますでしょうか。
よろしくお願いします。

No. 3079 # 68user 2003/01/29 (水) 02:28:50
>>3075 美春
考え方を変えて、日本語以外を除くとするなら
    % sed 's/[a-zA-Z0-9]//g' < file
など。本当に日本語だけを拾いたいなら
    http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
を参考に perl でやるのがよいでしょう。

>>3076 山田
> cshellで文字列操作は可能なのでしょうか?
foreach file (AAA_*.txt)
    set date=`echo $file | sed 's/^AAA_\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/'`
    echo '$file -> $date'
    if ( $date < '20020114' ) then
          echo $date
    endif
end

仕事や課題を丸投げされると答える側もつまらないです。質問するなら
もっとおもしろい質問をしてください。

お金を払っていただけるなら、(お仕事として) つまらん質問にも
答えますけど。

>>3078 koko
> 親プロセスで現在存在している子プロセスの数を把握
> したいのですが、簡単な方法はありますでしょうか。
簡単、というか適当な調べ方でよいなら、ps して、親プロセスが
自分であるプロセス一覧を取得、などがあると思いますが、
ps しているプロセスは除くとか余計な処理をしなきゃいけない
と思うので、結果的にはあまり簡単じゃないと思います。

    - 親がいろんな仕事をするのなら、fork するときに
        インクリメントして、SIGCHLD を受けるたびに
        デクリメント (>>2988 を参照)
    - 親は子の終了を待つだけなら、fork するときに
        インクリメントして、wait して、wait から戻って
        きたらデクリメント。

でいいんじゃないでしょうか。

No. 3080 # koko 2003/01/29 (水) 09:47:13
>>3079 68user
やはり、ご指摘の方法が妥当なところのようですね。
この方法で対応する事とします。
ありがとう御座いました。

No. 3081 # 山田 2003/01/29 (水) 09:59:35
>>3076 山田
ご回答ありがとうございます。
>仕事や課題を丸投げされると答える側もつまらないです。質問するなら
>もっとおもしろい質問をしてください。
了解しました。
先日、ほぼ一日調査してたのですが出来なかったもので。。。
申し訳ないです。。

No. 3082 # 美春 2003/01/29 (水) 11:49:51
>>3067 68user
うまくいきました。
本当にありがとうございました。
perlの方も挑戦してみます。
度々の質問で申し訳ありませんが、
grepの正規表現で"'"(シングルクォーテーション)
を出さないようにしたいのですが、
うまくいきません。
grep '[\']' <file>
だとダメみたいです。
どうすればよいのでしょうか?
初心者の質問ですみません。
よろしくお願いします。

No. 3083 # has 2003/01/30 (木) 00:01:24
>>3082 美春
grepは行単位で処理するので、シングルクォートを含む行を表示しない、
という処理は可能です。grepに-vをつけると、条件に合わない行のみを
出力するので、

% grep -v "'" filename

とすればfilenameファイル内のシングルクォートを含まない行のみを
出力してくれます。

もしシングルクォートを文字単位で削除したいのであれば、

% sed -e "s/'//g" < filename

とすればよいと思います。

No. 3084 # 美春 2003/01/31 (金) 14:06:07
No. 3083 has
感動してしまいました。
manで調べろと怒られるかと
思ったのにご丁寧に
ありがとうございました。

No. 3085 # 山田 2003/02/05 (水) 16:11:14
こんにちは、山田です。
shellにワイルドカードを含んだ引数を文字列として渡したいのですが上手くいきません。
例えば、
aaa.sh zz*.txt

aaa.sh zz\*.txt
と渡すとローカルにある対象となるtxtファイルを全て引数としてもってきてしまいます。
aaa.sh zz'\''*'.txt
などとしてもダメなようです。
出来ないのでしょうか?
申しわけありませんが、教えて下さい。

No. 3086 # ふくし 2003/02/05 (水) 16:19:59
>>3085 山田
さん、

シェルはなんでしょうか?
zsh だと

    > echo *.txt
    aaa.txt bbb.txt ccc.txt

    > echo '*.txt'
    *.txt

のようになりました。

No. 3087 # 山田 2003/02/05 (水) 18:33:15
>>3086 ふくし
様、ご回答ありがとうございます。
cshです。
やりたいことは、
aaa.sh ZZ*.txt
と指定した時にshell内で、
set filename = arg[1]とし、
filenameに"ZZ*.txt"という文字列をセットしたいのです。

No. 3088 # ふくし 2003/02/05 (水) 20:05:51
>>3087 山田
さん

下で書いたつもりだったんですが (^^;;;
引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります?

No. 3089 # 山田 2003/02/05 (水) 21:20:34
>>3086 ふくし

>引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります?
やはりカレントの該当するファイルが引数に入ってしまいます。
arg[1]の内容が"ZZa.txt ZZb.txt ZZc.txt"というような感じです。
んー、こまっております(^^;)

No. 3090 # 68user 2003/02/05 (水) 21:48:17
>>3089 山田
    % cat hoge
    set filename='*.c'
    echo $filename

    % csh -fx hoge
    set filename=*.c
    echo *.c
    a.c b.c c.c d.c

というわけで、csh では ただの文字列として set しても、
glob 展開されます。よって、参照するたびに
    echo "$filename"
とダブルクォートで囲むか (面倒)、あるいは
    set noglob
で変数を展開しないようにする、と。

もっとよいのは perl や ruby などに乗り換えることです。

No. 3091 # ふくし 2003/02/06 (木) 02:29:54
>>3089 山田
さん、

知らぬこととはいえ失礼しました。
そんな致命的な非互換があろうとは、、。

シュバング行で
  #! /bin/sh
と書いてしまって、Bourne Shell で書き直すってのは
どうでしょうね。
コマンドを手入力するのは csh 系が、
シェルスクリプトを組むのは Bsh 系がいいって聞いた気がします。
(気のせいか? ;;;
もっぱら私はちょっとでも論理のあることは
Perl にするのでどっちも知りませんが、、。

No. 3092 # op 2003/02/07 (金) 00:33:46
始めましてopといいます。
・・・いきなり質問で申し訳ないのですが、

掲示板を作っていて
コメントを書き込んだ後に更新をすると、
前のコメントが追加されてしまいます
これを回避する為にはいったいどんなコードに
書けがよいのでしょうか?

宜しければアドバイスの程お願いします。

No. 3093 # DQN..cc [URL] 2003/02/07 (金) 00:48:48
>>3092 op
書き込み後に↓こんなHTMLを表示すればいいのでは。

<html><head><title>書きこみました。</title><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><meta content=5 http-equiv=refresh></head><body>書きこみが終わりました。<br><br>画面を切り替えるまでしばらくお待ち下さい。<br><br></body></html>

別のページに移動させたければ、
<meta content=5 http-equiv=refresh>
ではなく、
<meta content=5;URL=../homepage/index.html http-equiv=refresh>
としてみる。

・・・といった方法ではどうでしょう。

No. 3094 # しん 2003/02/07 (金) 13:59:17
以前にBASIC認証の質問のご回答を頂きありがとうございました。
おかげさまで認証を行うサイトへのアクセスが出来るようになりました。
現在はPOSTが行えるクライアントを作成中です。

POST及びchunkedに関する質問ですが、
あるサイトにアクセスした際に

Content-type: text/x-hdml; Charset=Shift_JIS
Transfer-Encoding: chunked
省略
postmethod="post" postdata="xxxxxxx"
省略

とのレスポンスがあり

print SOCKET "POST /$path HTTP/1.1\r\n";
print SOCKET "Host: $host\r\n";
print SOCKET "User-Agent等リクエストヘッダ"

$message = "xxxxxxx";
$len = length($message);
print SOCKET "Content-length: $len"."\r\n\r\n";
print SOCKET "$message";

にてPOSTを行っているのですが、POSTされません。
原因としてはどういった事が考えられますでしょうか。
chunkedでエンコードされ送られたデータはPOSTする際もchunkedで
エンコードして送り返さなければいけないのでしょうか。
もしエンコードしたデータをPOSTしなければいけない場合はchunkedの
エンコード方法をお教え下さい。
宜しくお願い致します。

No. 3095 # op 2003/02/07 (金) 20:13:36
>>3093 DQN..cc様
早速のレス有難う御座います♪

なるほど・・・。
確かにこういった処理をする掲示板なんどか見かけた事がありました
本来の意味はこういう事?だったのですね(多分

それと、また質問で恐縮なのですが
リフレッシュ以外にも他の方法なんかありますかね?(^^;

No. 3096 # has 2003/02/08 (土) 01:37:29
>>3095 op
ここの掲示板では書き込みのたびに書き込み内容のMD5を作成し、
キャッシュしておいた最新数件分のMD5と同一の場合には記録しない、
という方式を採用しています。

詳しくはここの掲示板のソースを参照してみてください。

No. 3097 # H-Hash [URL] 2003/02/09 (日) 01:14:35
>>3094 しん
>chunkedでエンコードされ送られたデータはPOSTする際もchunkedで
>エンコードして送り返さなければいけないのでしょうか。
そんなことは無いです。

>もしエンコードしたデータをPOSTしなければいけない場合はchunkedの
>エンコード方法をお教え下さい。
要するにデータを細切れ(例えば1024byte毎)にして、
サイズ(16進)
データ
サイズ(16進)
データ

0
とすればいいだけです。(see http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.6.1)

で、解決方法ですが、とりあえずHTTP/1.0で送ってみて下さい。
それでも失敗した場合は、とりあえずチャンク周りが原因ではありません。

No. 3098 # op 2003/02/09 (日) 01:44:52
>>3096 has様
MD5ですかぁ〜レベルが一気に上がったような気がしますが、
これからさっそく勉強していきたいと思います(苦笑

ほんとにhasさん、DQN..ccさん有難う御座いました。

No. 3099 # ふくし 2003/02/13 (木) 19:18:56
Linux User という本に5つのディストリビューションが一気に
付録についてるので慌てて買ったんですけど、
よく考えるとコレ(よく考えなくても)CD じゃなくて
DVD なんですよね、、。
会社で遊んでるマシンが1個あって、ただし会社のマシン管理のヒトが
バックアップしてくれないから、バックアップデバイス兼ねて
この機会に DVD-RAM を入れようかなあと思ったんですが、
Linux で読める DVD-RAM ドライブってあるんでしょうかね。
じっさいにはネットワーク経由で Debian(woody)を入れたので、
もう雑誌の付録は必要なくなったんですが、、

No. 3100 # 68user 2003/02/15 (土) 02:44:18
>>3099 ふくし
> Linux で読める DVD-RAM ドライブってあるんでしょうかね。
FreeBSD でも DVD-RAM を読み書きできるくらいですから、
できなくはないでしょうけど、具体的な機種名などは
わかりません。

検索すると DVD-RAM 対応カーネルパッチが云々などと
いうのが引っかかるのですが、Linux 事情に疎いので
それが最新の情報なのか判断できないです。

# てゆーか、DVD-RAM どころか CD-R さえ使ったことが
# ないので。

No. 3101 # bebe 2003/02/17 (月) 11:23:45
findコマンドについて教えてください。
find . -user root とするとカレントディレクトリ以下の
所有者がrootになっているファイルが引っかかるかと思い
ます。
それではなくて、所有者がrootになっていないファイルを
引っ掛けたいと思うのですが、その場合findコマンドはどの
ように使えばいいでしょうか?
宜しくお願いします。

No. 3102 # 68user 2003/02/17 (月) 19:54:30
>>3101 bebe
> 所有者がrootになっていないファイル
    % find . ! -user root
    % find . -false -user root
    % find . -not -user root
などなど。

FreeBSD 4.7-RELEASE のマニュアルには ! と -false と -not が
書いてあるのに
        % find . -not -name \*.c
        find: -not: unknown option
となってしまう。なぜだろう。ソースを見ると -not は効きそうなんだけれども。

http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=find&dir=jpman-4.7.0%2Fman

No. 3103 # wataru [E-mail] 2003/02/18 (火) 14:45:54
send()について教えてください。

send()にてデータを送信しようとするとperrorにて「Illegal Seek」
と返ってきます。もちろんデータも送信できていません。

この現象の原因と対処法を教えていただけないでしょうか?
socketとconnectはできています。

No. 3104 # 68user 2003/02/18 (火) 15:02:41
>>3103 wataru
> Illegal Seek
ってことは errno が ESPIPE なのでしょうけれど、手もとにある FreeBSD と
Solaris2.6/8 を見ても、send(2) が ESPIPE を返すとは書いてありませんので、
わかりません。

てゆーか、OS 名も、OS のバージョンも、エラーの起こるコード例も提示せず
質問している、あなたという人間がわかりません。

No. 3105 # wataru [E-mail] 2003/02/18 (火) 16:09:42
ご無礼大変申し訳ありませんでした。現在私はHard Hut Linux2.0
でプログラムを組んでいます。

原因のソースコードは以下の様です。

    if ((*s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { // TCPでソケットを開く
        perror("socket");
        s_vMsgSnd(TSK_ER , 71 , 40);
        return -1;
    }
    syslog(LOG_DEBUG,"s = %d",*s);
    syslog(LOG_DEBUG,"port = %d",port);
    
    // 接続に必要な情報を設定する
    memset((char *) &server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = dst_ip; //<GT_0010>
    server.sin_port = htons(port);

    s_vSigTimer(TIMER_START);
    alarm(TIMEOUT_SEC);
        if (connect(*s, (struct sockaddr *) &server, sizeof server) < 0) { // サーバとのコネクションを確立する
            perror("connect");
            s_vSigTimer(TIMER_STOP); return -1; //<GT_0003> add
        }
        s_vSigTimer(TIMER_STOP);
        signal(SIGPIPE,ReCNCT);
        if(usCnctNG == FLAG_ON)
            return -1;

上記の方法でconnectまで持っていきます。
その後

    while(sendbytes < MaxLENGTH){
            nSended=send(*s,psz,strlen(psz),0);
        if(nSended == -1){
            perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57);
            s_vSigTimer(TIMER_STOP);return -1;
        }else if(counttim > 0){
            syslog(LOG_DEBUG,"+*+*+*+*time over +*+*+*+*");
            s_vSigTimer(TIMER_STOP);return -1;
        }
        psz+=nSended;
        sendbytes+=nSended;
    }

でMaxLENGTHに達するまでデータを送信します。

No. 3106 # bebe 2003/02/18 (火) 17:32:36
>>3102 68user
解凍有り難うございました。
        (1)% find . ! -user root ⇒うまくいきました。
        (2)% find . -false -user root
        (3)% find . -not -user root

(2)(3)は、ダメでした。オプションエラーになってしまいます。
でも、(1)だけでも使えればとりあえずはOKなので、重宝しています。

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

No. 3107 # 68user 2003/02/18 (火) 20:56:27
>>3105 wataru
> Hard Hut Linux2.0
Embedded ですか (Hut じゃなくて Hat ですね)。この OS の存在を
初めて知りました。

    http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html
の内容が正しければ、Linux の send(2) は ESPIPE を返しません。

ただし開発元がカーネルに手を入れている可能性があるので
Hard Hat Linux の send(2) は ESPIPE を返すのかもしれません。
マニュアルに send(2) がどういうときに ESPIPE を返すか書いて
ありませんか?

# まぁライセンスは GPL でしょうから、最悪ソースを読めばわかる
# わけで。

あと、
>>3105 wataru
のソースを眺めましたが、間違いらしきものは見付けられませんでした。

ただ、TCP では普通 send(2) は使いません。別に使っても構わない
はずですが、埋もれているバグを踏まないという意味では、素直に
write(2) を使った方がよいと思います。ただ、それで直るかどうかは
わかりません。

あとは、マルチスレッド環境なので errno の値が別のスレッドに上書き
されたとか…(多分違うと思いますけど)。

No. 3108 # 68user 2003/02/18 (火) 23:02:18
>>3102 68user
> ソースを見ると -not は効きそうなんだけれども。
そっか。

options はソートされていることが前提なのに (bsearch(3) に渡すから)、
        { "-nouser",c_nouser,f_nouser,0 },
        { "-not",c_simple,f_not,0 },
の順で並んでいるからか。

# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c?rev=HEAD

No. 3109 # wataru [E-mail] 2003/02/19 (水) 14:13:27
ありがとうございます。
大変もうしわけありませんが、もう一つ教えていただけないでしょうか?

SSLでの通信も行っているのですが、SSL_write()を使用する際に
タイムアウトの時間を設定したいのですが、方法がわかりません。

selectを使えばできるとも聞いたのですが、具体的にどうすればよいでしょうか

ソースは以下の様です。

    MaxLENGTH = strlen(psz);
    while(sendbytes < MaxLENGTH){
        syslog(LOG_DEBUG,"Send");
        nSended = SSL_write(SOKET, psz, strlen(psz));

        if(nSended == -1){
            perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57);
            return -1;
        psz+=nSended;
        sendbytes+=nSended;
    }
    return 0;
}

お手数ですがよろしくお願いします。

No. 3110 # wataru [E-mail] 2003/02/19 (水) 14:15:38
ESPIPEの件は、また別のところで起こっていたようです。
仰る通り、sendによるものではありませんでした。
お手数をおかけしました。

No. 3111 # ふくし 2003/02/19 (水) 23:22:06
そういや(質問でも答でもなく雑談ですが、いいんですかね)
せっかく自分のサーバー立てたんだから、XML::DOM 入れてみよう!(^^)

No. 3112 # 68user 2003/02/21 (金) 22:22:21
>>3110 wataru
> ESPIPEの件は、また別のところで起こっていたようです。
しょーもないミスですが、ありがちですね。

>>3109 wataru
> SSLでの通信も行っているのですが、SSL_write()を使用する際に
> タイムアウトの時間を設定したいのですが、方法がわかりません。
使ったことはありませんが、
    http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
とか、
    http://www.openssl.org/docs/ssl/SSL_get_fd.html
でディスクリプタを取得して select とか、あるいは単純に
alarm とか、でしょうか。

No. 3113 # Japper 2003/02/24 (月) 00:01:36
こんばんわ
CGIのフォームメールで添付ファイルを送っているのですが
途中で通信を中止すると
サーバー上にファイルが残ってしまうということに悩まされています

そのフォームメールはQMAILを用いてメールを配信しています
POPサーバーはVPOPMAILです

対処法はなにかありますでしょうか?

No. 3114 # 68user 2003/02/24 (月) 17:27:34
>>3113 Japper
シグナルをキャッチするという方法もありますが、単にファイルを
消したいだけなら
    - 送信し終わったらファイル名をリネーム or ファイルの置き場所を
        変える (mv)
    - フォームメールが起動したとき、リネーム前 or 実行途中の置き場所
        にあるファイルで、タイムスタンプが古いものを消す。
が単純でよいと思います。

No. 3115 # koko 2003/02/24 (月) 19:36:35
親プロセスでFILE* fpに対してファイルをオープンします。
その後、forkで子プロセスを生成し、子プロセスですぐにfclose(fp)を行います。(子プロセスではファイルを使用しない為。)
子プロセスでファイルをfcloseした後、親プロセスでは引き続きfpに対して読み込みや書き込みを行えるでしょうか。
ファイルディスクリプタは、子プロセスで閉じても親プロセスに影響無いようですが、ファイルポインタは共有されている(?)様なので影響がありそうな気がするのですが、いかがでしょうか。
■知りたい事
1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
    (開いたものは必要であれば明示的に閉じるようにしたい。)
2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

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

No. 3116 # 68user 2003/02/24 (月) 19:55:02
>>3115 koko
> 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
> 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

fork したときの出力用バッファにデータがたまっていれば、子の
fclose でバッファがフラッシュされます。そこで親も fclose すれば
同じ内容のバッファがファイルに出力され、同じ内容のデータが
2回書かれることになります。

なお fclose(3) しなかったとしても、exit(3) すれば結局は fclose されます。
# _exit(2) ならされません。

よって、
    1. fflush(fp)
    2. fork
    3. 子は fclose (*A)、親は引き続き fp を使う
がよろしいかと。

*A は、してもしなくても変わりませんが、子で使わないという
意志を明確に示すために fclose(3) した方がよいと僕は思います。

No. 3117 # koko 2003/02/24 (月) 20:56:21
>>3115 koko
早速回答頂き、ありがとうございます。
動作を確認しましたところ、fflushしないと二重でデータが書き込まれていました。
fflushして回避する事にします。
もうひとつ、教えて頂けますでしょうか。
FILE*ではなく、ファイルディスクリプタに対してopen、write、closeで同じ事をした場合、ファイルディスクリプタはバッファリングされないのでfflushのような事をしなくても二重書き込みにはならないでしょうか。
実は、FILE*とファイルディスクリプタの両方を使用して同じ事をしている為、ちょっと心配になりました。
実動作を見た限りでは、ファイルディスクリプタは二重で書き込まれていない様なので大丈夫だとは思いますが...。
よろしくお願い致します。

No. 3118 # koko 2003/02/24 (月) 20:58:35
>>3316 tomotomo
No.3317は>>3316の間違いです。
すいません。

No. 3119 # 68user 2003/02/24 (月) 21:34:23
>>3117 koko
> ファイルディスクリプタはバッファリングされないのでfflushのような事を
> しなくても二重書き込みにはならないでしょうか。
されません。低レベル入出力システムコールはバッファリングが
ないので大丈夫です。

No. 3120 # koko 2003/02/24 (月) 21:36:31
>>3119 68user
回答頂き、ありがとうございます。
安心しました。

No. 3121 # Japper 2003/02/25 (火) 20:32:23
>>3114 68user
ご回答ありがとうございました
大変助かりました

さて、findコマンドでファイルを検索をかけていますが
大きいファイル順に並べ替えるなど
そのようなことはできないでしょうか?

No. 3122 # koko 2003/02/25 (火) 22:59:54
C言語のプログラムでsystem関数でプログラムを呼び出します。
引数に存在しないプログラムを指定した場合のsystem関数の戻り値が-1になる時と256になる時があります。
256の時は、上位8ビットが1なのでシェルのexitコードが1のような気がするのですが、何も環境を変えていないのに戻り値が-1や256に変わる理由が思い浮かびません。
何度も繰り返していると-1と256が不規則に交互します。
この情報だけで何か分かりますでしょうか。
よろしくお願いします。

No. 3123 # 68user 2003/02/26 (水) 01:40:04
>>3121 Japper
> さて、findコマンドでファイルを検索をかけていますが
> 大きいファイル順に並べ替えるなど
大きいってファイルサイズのことですか?
もしそうなら find . -ls | sort +7 とか。

>>3122 koko
> system関数の戻り値が-1になる時と256になる時があります。
FreeBSD の system(3) がおっしゃるには
          The system() function returns the exit status of the shell as returned by
          waitpid(2), or -1 if an error occurred when invoking fork(2) or
          waitpid(2). A return value of 127 means the execution of the shell
          failed.
だそうです。

No. 3124 # koko 2003/02/26 (水) 09:49:46
>>3123 68user
確かに、私が調べたところでも同じ事が記述されていました。
試しに簡単なmainを作って存在しないコマンドをsystemで呼び出すとsystemの戻りは256(おそらくシェルの返すexitコード=1)だけでした。
-1は戻りませんでした。
256と-1が交互になるのは何か他の原因かもしれません。
もう少し調べてみます。
ありがとうございました。

No. 3125 # koko 2003/02/26 (水) 11:46:06
>>3124 koko
256と-1が交互になる件は解決しました。
SIGCHLDのシグナルハンドラを登録してあった為、シグナルハンドラが割り込んだ時のみsystemの戻り値が-1になっていた様です。
SIGCHLDをマスクしたところ、戻り値は256で安定しました。

No. 3126 # bebe 2003/02/26 (水) 19:00:41
find コマンドについて質問があります。
ファイル名で検索をかけたいと思うのですが、
UNIXだと英数字の大文字・小文字を区別してしまうので、例えば、
「a」で検索した場合、「A」というファイルは引っかからないかと
思います。
大文字・小文字の区別無く引っ掛けたいと思うのですが、その様な
オプション又は方法はありますか?

No. 3127 # 68user 2003/02/26 (水) 19:36:38
>>3126 bebe
最近の *BSD find や GNU find なら -iname とか -iregex とか。
そうでない find なら広めにひっかけて grep で絞りましょう。

No. 3128 # bebe 2003/02/28 (金) 13:58:18
>>3127 68user
findコマンドで引っ掛けられたらいいかと思ったのですが、
やっぱり広めに検索をかけて、grep等で絞り込むしかなさそ
ですね。
参考になりました。
有り難うございます。

No. 3129 # もも 2003/03/06 (木) 05:42:54
始めまして、いつもこちらでは陰ながら勉強させていtだいてます。
perlスクリプトのことでお教えください
ただ今企画中のスクリプトにおいて
外部コマンド実行時、そのコマンドプロセスの標準入力へ有る意味大量のデータ(文字列)を渡したいのです
しかしこの方法が全く頭に浮かばず情け無い状態であります!
PIPEやファイルシステムの基礎を知らない私にご教授下されば幸いです。

No. 3130 # 68user 2003/03/07 (金) 01:14:46
>>3129 もも
      open(OUT, "| command");
      print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE....";
      close(OUT);
ってことですか?

じゃなくて command の標準入力に渡しつつ、そのコマンドの
出力を受け取りたいなら IPC::Open2 などを使えばできます。
できますが、デッドロック回避などが面倒なので

      open(OUT, "| command > file");
      print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE....";
      close(OUT);
      open(IN, "< file");
      while (<IN>){
            ....
      }

でいーんではと思う軟弱な私。

No. 3131 # もも 2003/03/07 (金) 11:25:16
>>3139 金床
68user様なるほど理解しました前者が出来ればいいのです!
早速試してみます。ありがとうございました!

No. 3132 # koko 2003/03/10 (月) 10:36:24
親プロセスが複数の子プロセスを生成します。
親は子プロセスの終了をシグナル(SIGCHLD)ハンドラで検知し、waitで子プロセスの終了コード(exitの引数)を取得しています。
同時に、子プロセス数を減算します。(forkで子プロセス数を加算しています。)
シグナルハンドラの処理中に、別の子プロセスが終了した場合、SIGCHLDが無視されてしまう。
あるいは、ほぼ同時に複数の子プロセスが終了した場合には、1回しかSIGCHLDのシグナルが発生しないとの記述を見た事があるのですが、正しく全ての子プロセスの終了を検知する方法はありますでしょうか。
以前、頂いたNo. 2988で頂いた以下の方法でこのような懸念が解消されますでしょうか。

SIGCHLDのシグナルハンドラ--------------------------
        int pid,status,code;

        while((pid=waitpid(-1,&status,WNOHANG))>0){
                if(WIFEXITED(status)){
                        code = WEXITSTATUS(status);
                }
        }
--------------------------------------------------
また、waitpidがシグナルに割り込まれるとエラーになり、errnoにEINTRが設定されると思うのですが、WNOHANGを設定していた場合にはそのような事は無いと考えてしまって良いでしょうか。
よろしくお願いします。

No. 3133 # 68user 2003/03/10 (月) 22:33:46
>>3132 koko
まずは sigaction(2) を読んでください。

# わたしもよくわかってないので読んでいるところ。

No. 3134 # koko 2003/03/11 (火) 08:08:55
>> 3133
読んでみます。

No. 3135 # koko 2003/03/14 (金) 17:50:58
ソケット(TCP)に関する質問です。
サーバ(UNIX)とクライアント(WinSock)がソケットで通信しています。
サーバがクライアントに対してwriteでデータを送り、クライアントがrecvでそれを読む処理を作成しました。
サーバでwriteし、すぐにソケットそcloseすると、クライアントではrecvできずにエラーになります。(既に接続が破棄されている。)
サーバ側でwriteして、すぐにcloseしている事が原因の様です。
writeとcloseの間に1秒程度の時間をおくと、クライアントはrecvできました。
このように、writeとcloseが連続すると相手がrecvできないケースは当然の事なのでしょうか。
それとも、通常はrecvできるはずであり、他に問題がありそうでしょうか。
同じ経験をした事のある方がの意見なども聞けると助かります。
よろしくお願いします。

No. 3136 # 68user 2003/03/15 (土) 04:04:27
>>3135 koko
> 通常はrecvできるはず
だと思います。

No. 3137 # koko 2003/03/17 (月) 08:28:29
>>3136 68user
回答ありがとうございます。
他の原因を調べてみます。

No. 3138 # ajmj 2003/03/17 (月) 18:18:45
ファイルハンドルについての質問です。
Net::FTPで動的に作り出したCSVをアップしたいのですが、
ローカルにファイルを書き出さずにputする方法を教えてください。
FileHandle.pmを使って無名のファイルハンドラを作って、
そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる
とイメージしているのですが
よろしくお願いします。

No. 3139 # 金床 [URL] [E-mail] 2003/03/17 (月) 23:24:58
>>3135 koko
ソケットのクローズはどのAPIを使って(どんなソースコードで)行ってらっしゃいますか?
Winsockだと、shutdownを使わずにclosesocketを呼ぶとRSTフラグのセットされたパケットが飛ぶことが
あるような覚えがあります。

いずれにせよ、パケットキャプチャしてみると原因に近づけると思います。

No. 3140 # koko 2003/03/18 (火) 11:17:29
>>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はしていません。

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

No. 3141 # 68user 2003/03/18 (火) 21:02:38
>>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 知らないのでアレですが。

No. 3142 # kaki 2003/03/18 (火) 23:00:14
はじめまして、お世話になります。
kakiと申します。

現在、Linux(Redhat7.1 kernel2.4.2-2)、C言語にて
プログラムの作成をしております。

質問なのですが、プログラム上(C言語)からFD、CFなどのデバイスに
マウントし、FD、CF内のファイルを取得するということは
可能なのでしょうか?

お分かりになる方がおられましたら、ご教授お願いいたします。

No. 3143 # 金床 [URL] [E-mail] 2003/03/18 (火) 23:49:33
>>3140 koko
やっぱりRSTによる「異常終了」が原因のようですね。
shutdown()を使ってみると幸せになれると思います。

No. 3144 # 68user 2003/03/19 (水) 02:04:16
>>3142 kaki
mount(2) をどうぞ。あるいは DOS フォーマットならば mtools の
mtype あたりがお手軽かも。

ところで CF って何ですか? コンパクトフラッシュ?

No. 3145 # kaki 2003/03/19 (水) 09:12:15
>>3144 68user
ご回答ありがとうございます。

mountはコンソール上でのやり方は知っているのですが、
gccでコンパイルしたプログラムからも、
使えるということなのでしょうか?
また、コンソールで使えるコマンド(# mountや# cdなど)を
Cプログラムで使用するにはどのようにするのでしょうか?

実際、やりたいことはプログラムを起動したら、
FD、CF(コンパクトフラッシュ)にマウントし、
ファイルがあればディレクトリにコピーするといったことです。

参考になるサイトや文献などご存知でしたら、
教えてください。
よろしくお願いします。

No. 3146 # FF 2003/03/19 (水) 13:25:20
端末の入出力について質問です。

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

どなたか教えてください。よろしくお願いします。

No. 3147 # 68user 2003/03/19 (水) 13:51:15
>>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 から
実行した場合は端末は割り当てられないので、それは不可能です。

で、あなたが本当は何をしたいかという話になるわけですが、コンソール
(マシンにつながっているモニタ) に文字列を出したいんですか?

あるいはファイルにあらかじめ入力文字列を書いておいて、ファイルに
出力したいんですか?

No. 3148 # FF 2003/03/19 (水) 14:47:05
>> 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を利用しています。

よろしくお願いします。

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

No. 3149 # kaki 2003/03/19 (水) 16:52:19
>>3147 68user
68user さんありがとうございます!!

system("mount /mnt/floppy");
system("ls /home");
など実現できました!!
ありがとうございました。

No. 3150 # 68user 2003/03/20 (木) 00:26:24
>>3148 FF
> cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ
> 正しく動作しているようです。
ほー、FreeBSD で試してみましたが、これ、できるんですねぇ。
知りませんでした。ただ、出力はいいとして、入力については

        ちょうどそのときその端末デバイスからの入力を受け付ける
        プログラム (シェルとか) が走っていた場合、キー入力が
        そのプログラムに渡るか、a.sh に渡るかは不定

なような気がします (FreeBSD で試した限りでは、ですが)。

あとは
    - その端末を読み書きする権限があるかどうか (パーミッションの問題)
    - 誰もログインしていなかったらどうするか
    - 複数の端末があった場合は who などで調べるとしても、
        どの端末を選べばいいのか
    - (ウィンドウシステムがあるとして) たまたま選んだ端末がウィンドウの
        後ろに隠れていたら
とかいろいろ問題ありげなので、お勧めはしません。

No. 3151 # 68user 2003/03/20 (木) 02:03:07
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」
      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

No. 3152 # FF 2003/03/20 (木) 13:40:24
>>3150 68user
68userさんご返答ありがとうございます。

>ちょうどそのときその端末デバイスからの入力を受け付ける
>プログラム (シェルとか) が走っていた場合、キー入力が
>そのプログラムに渡るか、a.sh に渡るかは不定
最初のreadの受け取りで若干おかしな動作をする(シェルのプロ
ンプトが表示される)ようなので、cronを使わず常駐して時間に
なったら動作するようにしました。

ありがとうございました。

No. 3153 # 68user 2003/03/23 (日) 18:50:44
内容あやしげ、そして需要がほとんどないと思われる
    「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連休つぶれちゃったよ。とほほ。

No. 3154 # kaki 2003/03/24 (月) 22:05:55
お世話になります。kakiです。

現在、LAN経由でクライアントから送られてくる(55msec毎)データを、
取得し、表示するHTTPサーバーを作成しています。

サーバー側で、クライアントと接続中にLANケーブルが抜けたのを
検出するのに、受信ループ中のping()で戻り値を判断して、
抜けているかどうかを判断しようとしていますが、
この方法は正攻法なのでしょうか?

また、その方法を試そうと思ったのですが、
accept()後のrecv()で受信待ちをしてしまっている為、
ケーブル断が検出できていません。
受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と
しているのですがrecv()でとまっているようです。
fcntl()の使い方が間違っているのでしょうか?

No. 3155 # 68user 2003/03/24 (月) 23:23:30
>>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);
の方がいいでしょうね。

No. 3156 # ふくし 2003/03/26 (水) 10:11:45
質問です。Windows のDOS窓で
0x01〜0x06、0x10、0x15〜0x17 で水道管みたいな罫線が出たり、
0x12、0x1b〜0x1fでちっちゃな矢印が出ますが、
これらの文字は誰がどこで決めたのでしょうか。
おわかりでしたらご教示ください。

No. 3157 # 68user 2003/03/26 (水) 12:15:26
>>3156 ふくし
調べましたが、わかりませんでした。
      http://czyborra.com/charsets/codepages.html
を見るに、
> 0x12、0x1b〜0x1fでちっちゃな矢印
は CP437 あたりだと思いますが、なぜ 0x01 で 0xC9 な
水道管が出るのかはわかりません。

      http://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/
で質問してみてはどうでしょうか。

No. 3158 # ふくし 2003/03/26 (水) 16:49:02
>>3157 68user
さん、ありがとうございます!
聞いてみます。
ちなみにDOS窓でjpとやると出てくる字から想像するに、
CP932ですよね。
usとやると437に切り替わりますが、そうすると出てくる字は
下で出てきたCP437そのままのようです。

No. 3159 # 68user 2003/03/26 (水) 19:59:17
たまに referer 見てみると、知らないところで突っ込まれて
たりするのでおもしろい。

http://dns.qmail.jp/lies.html
> コンテンツサーバとキャッシュサーバの違いを理解していな可能性が高いから。

うっ。勉強しよう。

No. 3160 # saki 2003/03/26 (水) 20:16:43
お世話になります。

gcc(全般)でコンパイルした実行ファイルには
チェックサムは付加されているのでしょうか?

No. 3161 # 68user 2003/03/26 (水) 20:34:52
>>3160 saki
> チェックサム
の意味がわかりません。

ファイル転送などで化けてしまったバイナリを実行しようと
すると、「チェックサムが一致しません」とか言ってくれる、
ような感じですか? もしそうなら、そういう機能は聞いたこと
ありません。

もしかして、そういうのが可能なコンパイラがあるのでしょうか。

No. 3162 # saki 2003/03/26 (水) 21:16:03
>>3161 68user
68userさん ご返答ありがとうございます。

そのチェックサムです。
ファイルをバイナリで開いて、そのファイルの全バイナリ値の合計のこと
だそうです。(すいません私もあまり詳しくないのです。)

あるファイルをコピー(ダウンロード)する時に、
コピー前のファイルとコピー後のファイルのチェックサムを
比較して、あっていればコピーが正常、あっていなければ異常と
するプログラムを作りたいと思っていまして、

> gcc(全般)でコンパイルした実行ファイルには
> チェックサムは付加されているのでしょうか?
とお聞きしたのは、ファイルそのものにチェックサムが付加されていれば
ファイルをオープンしてチェックサムの値を比べるだけで済むのかなぁと
思いまして・・・。

そういう機能がないのであれば、チェックサム自体をプログラムで
作ろうと思い、
ネットで調べたのですが簡単すぎるからなのか情報があまりありません。

参考になるサイトや本などあれば、勉強したいのですが、
ご存知のかたはいますでしょうか?

No. 3163 # 68user 2003/03/27 (木) 02:40:54
>>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 などのコマンドを利用した方がよいです。

No. 3164 # has 2003/03/27 (木) 03:19:01
>>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()の利用頻度が低いようだったのでやめました。

今後についてはどうするか未定ですが、また調査しつつ改修しつつで
行きたいと思います。

No. 3165 # へにか [URL] 2003/03/27 (木) 08:10:23
かなりお久しぶりです。

>>3163 68user
実は私も、チェックサム=合計と思っていました。cksumのように
CRC演算するものもチェックサムと呼ばれるようになった経緯を何
かご存知でしたら、教えていただけませんか?

#少なくとも、CRC演算は合計(=サム)ではないです・・・

No. 3166 # 68user 2003/03/27 (木) 08:26:35
>>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
を書いたときは、わたしの中では「チェックサム=広義のチェックサム」
だったので、あのような書き方をしましたが、
> ファイルをバイナリで開いて、そのファイルの全バイナリ値の
> 合計のことだそうです。
は正しいですね。失礼しました。

No. 3167 # 68user 2003/03/27 (木) 08:30:37
>>3166 68user
> チェックサムは
> http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2
> で言うところのアルゴリズム 1 なのだろう
あ、加算のたびに右ローテートって書いてあるので、アルゴリズム 1 も
「狭義のチェックサム」とは異なるんですね。

No. 3168 # saki 2003/03/27 (木) 11:54:48
68userさん、へにかさん
ご返答ありがとうございます。

大変、勉強になりました。
チェックサムといっても、いろいろなやり方があるのですね。

>cksum や md5 などのコマンドを利用した方がよいです。
組込のLinuxだったので上記のようなコマンドがなく、
自作しました。
全バイナリ値を合計して、16bit桁あふれしたら、
あふれた分を削除するという簡単なものです。
こんなのでもいいのかなと不安になりますが、
貴重な情報をありがとうございました。

No. 3169 # ふくし 2003/03/27 (木) 19:36:18
すいません、また質問です。

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+改行を出力する
}

No. 3170 # 68user 2003/03/27 (木) 21:09:17
>>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::; でシンボルテーブルを表示し、
片っ端から試してみる、とかですかね。

No. 3171 # ふくし 2003/03/27 (木) 21:53:55
<<3170
さん、

ありがとうございます。
結果として、

while (<ARGV>) {
  ...
}

でも

while (<>) {
  ...
}

同様に動くので、<>のファイルハンドルがARGVであることに
間違いはないようですが、

binmode ARGV;

は効かないようです!? へんだなぁ、、。

No. 3172 # へにか 2003/03/27 (木) 22:38:42
>>3166 68user
なるほど、狭義と広義の差が有るんですね。僕にとっては、
新たな知識です。どうも教えていただいて、ありがとうござ
います。

20年程前のパソコン雑誌に載っていた機械語プログラムには、
横一列の合計が書いてあったのを懐かしんで、こんな質問を
してしまいました。確か最初は何も無く、次に横一列、次に
縦一列と横一列、その次にそれ+CRC演算が出てきたという
記憶があります。確か一列はどちらも1octet x 16個で、CRC
は256octet毎に1octetでした。

僕も、その後GoogleでCRCもチェックサムと呼ぶようになっ
た経緯を調べたのですが、経緯自体は、なかなか見つからな
いですね。
もし、どなたか見つけたら、教えていただければ嬉しいです。

蛇足ですが、単純に足すだけだと間違いが見つかりにくいので、
> 加算のたびに右ローテート
のような工夫がされているんでしょうね(推測です)。

No. 3173 # 68user 2003/04/03 (木) 20:37:47
>>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
あの後、寝てしまいました…。

No. 3174 # has 2003/04/04 (金) 02:27:37
時間のあるときに、遊びつつ飲みつつちょっとずつですが、
linux kernel-2.4.18-24.7.xにてpoll()を追っかけてます。
相当飛ばし読みでやっとこ__pollwait()。
けど先が見えません…。

@68user
あいかわらずですな。またの機会に。

No. 3175 # へにか [URL] 2003/04/04 (金) 07:43:58
>>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で単語の意味を調べてしまいました。;)
とにかく歴史上などの何らかの事由で捻じ曲がったのではないかと推測
していますが、なんとかその確証が得られるよう、調べてみます。
運良く見つけたら、連絡します。見つけられなかったら、次回の(他の
ネタを含む)書き込み時に、その旨お伝えいたします。

#教えて頂いたリンク先、情報の宝庫ですね。ありがとうございます。

No. 3176 # へにか [URL] 2003/04/04 (金) 07:55:14
#連続ですみません。

>>3173 68user
>やっぱりわたしの認識が変なのですかねぇ。
少なくとも、cksumが存在する以上、(繰り返しになりますが)何らかの
事由があったのでしょうから、変と思わなくても良いのではないかと思
います。といいますか、その事由に依存すると思いますので、変かどう
かという問題ではないかもしれません。

#尊敬する68userさんでも困難な問題なので、わたくしごときが調べ
#きれるかどうか自信ないですが、挑戦してみます。

No. 3177 # ある厨 2003/04/05 (土) 00:56:50
ども。以前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で作動してない
ということになりますが、理由がわかりません。

長文で申し訳ありませんがご教授お願いします。

No. 3178 # ある厨 2003/04/05 (土) 01:11:02
あ!
edquota -p info `cat /root/member_id.txt`がcronで作動してないは
edquota -p foo `cat /root/member_id.txt`がcronで作動してないです。

No. 3179 # ある厨 2003/04/05 (土) 02:11:59
すみません。自己解決しました。
cronからメールが来てました。
/bin/sh: edquota: command not found

/usr/sbin/edquotanにしたら解決しました。
板汚してすみませんでした。
で、ついでと言っては何ですが、、、

suEXECを使ったCGIはその所有者の権限で動くわけですが、
その所有者には/bin/falseとしてシェルは利用出来ないようにしています。
でも、コマンドが使える(例えばtelnet.cgi)CGIではcat /etc/passwd
等と出来てしまいます。
これは誰の権限で動いているのでしょうか。
OSはLinuxで鯖はApacheです。

No. 3180 # 68user 2003/04/05 (土) 16:42:15
>>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」という用語を
使ってもいいんじゃないかなぁ、となんとなく思っております。

No. 3181 # ある厨 2003/04/05 (土) 20:10:43
>>3180 68user
なるほど、ただ単にログインできないと言うことであって
実行制限ではないと言うことですか。
勉強になりました。

#やぱり独学では限度があるにゃぁ。

No. 3182 # へにか 2003/04/05 (土) 21:31:38
>>3180 68user
>「データ誤りを検出するためのもの」一般は英語で何て言うんでしょうね?
Error Detecting Code (誤り検出符合)です。

因みに、CRCは、なんと、1bit-errorまでは訂正できてしまいます。
即ち、Error Correcting Code (誤り訂正符合)でもあるところが、parityやchecksumとは違うところで、面白いです。
#訂正方法は遠い昔に忘れました・・・
#hashは方式を知らないので、訂正できるのかどうか分からないです。

#今日本屋で調べても、歴史的なことは見つかりませんでした。A^^;

http://www.wikipedia.org/ は現在crashしているみたいです。

No. 3183 # NPK [E-mail] 2003/04/10 (木) 22:15:27
始めまして。

なんとなくXULの練習でUnixの部屋のMozilla用検索ツールバーを作ってみました
迷惑になるかもしれないので(それと家のサーバーが落ちてるからというのもある)
許可があるまで配布はしてないのですが配布してもよろしいでしょうか?

# 家の鯖と外の鯖両方落ちてる・・・
# なぜ家に居ないときに落ちる・・・

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

No. 3184 # 68user 2003/04/12 (土) 14:30:13
>>3183 NPK
> 配布してもよろしいでしょうか?
はい、構いません。ぜひお願いします。

No. 3185 # ふくし 2003/04/12 (土) 15:25:29
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より先に変数展開が行われるみたいです。
ヘンな感じ、、。

No. 3186 # NPK [URL] [E-mail] 2003/04/12 (土) 16:07:52
>>3184 68user

まだDNSが無いのがちょっとどうかと思いますが(^^;
とりあえず置いてみました。

# 古いdyndnsのパスワード忘れたものでそのうちとろうと思ってとりあえずしばらく放置です(笑)

No. 3187 # Phantom 2003/04/13 (日) 23:38:33
はじめまして。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

No. 3188 # ゆきち(もじら組) [URL] 2003/04/14 (月) 14:02:24
もじら組のゆきちといいます。いつも、こちらの記事は参考にさせていただいています。

>NPKさん
下記で紹介されているツールバーですが、「新もじら瓦版」というニュースサイト(?)があるのですが、そこでツールバーの報道を行なっても良いでしょうか。
ぜひとも、紹介させていただきたいのですが。

No. 3189 # ゆきち(もじら組) [URL] 2003/04/14 (月) 14:07:18
追記
今、InfoseekとX68Kの両方を利用してみたのですが、「新しいタブで開く」(Infoseek)「新しいWindow」(X68K)で開くを利用すると、最大化(全画面表示)になって、かつ、右にスクロールバーが出ない状態です。最大化を解くと、小さくなりますが、スクロールバーが出ませんね。1.4αです。

こんなところですいませんが、とりあえず、利用報告です。

No. 3190 # NPK [URL] 2003/04/14 (月) 19:27:54
ここで会話することじゃないと思いますが(^^;
(68userさんすいません

>>3188 ゆきち(もじら組)
紹介に関しては問題ないです。
鯖が貧弱なので落ちたらごめんなさい(笑)

開発には1.4α使ってるんですが家ではそんなバグは確認されてませんね・・・
もしかしたらほかのXULアプリと衝突を起こしてるのかもしれません。
そのうち調べてみます。

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

No. 3191 # ゆきち(もじら組) 2003/04/15 (火) 00:42:11
ありがとうございます。今、時間がとれないですが、紹介してみようと思います。ありがとうございました。

#管理人さん、すいませんでした。

No. 3192 # 68user 2003/04/15 (火) 06:48:00
>>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
しばし待たれよ。

No. 3193 # ふくし 2003/04/15 (火) 17:14:41
ずっと前に、

while (<>) {
  ...
}

のファイルハンドル ARGV に binmode が適用されないので、

while (<>) {
  ...
}

における ActivePerl の \r\n => \n 置換を抑制できない、
という話をしましたが、5.6 以降では binmode のかわりに

use open IN=>"raw:";

だと動作するようです。PerlIOってやつですね。

No. 3194 # ふくし 2003/04/15 (火) 17:16:48
>>3193 ふくし

自己レスれす。

use open IN=>":raw";

の間違いでした。

No. 3195 # /tk 2003/04/17 (木) 11:05:15
>>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とか…

No. 3196 # 2003/04/17 (木) 15:44:34
改行コードについて質問いたします。
UNIX(HP-UX)の改行コードはLFだと思うのですが、
このコードを削除して複数行のテキストファイルを
一行にすることは可能でしょうか?

No. 3197 # 68user 2003/04/17 (木) 23:25:38
>>3195 /tk
> 「詳説 正規表現」のP245とか…
書いてありました。正規表現エンジンを作ってみる本だと思って
買ってみたらそうじゃなかったので、ほとんど読んでなかったり。

>>3196
tr -d '\n' < file
perl -pe 's/\n//' < file
などなど。

No. 3198 # Phantom 2003/04/18 (金) 01:46:00
>>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がうまく行ってなかったみたいです。それで、フルパスで
書いたら上手く行くようになりました。ここまで、書かなければならない
とは、、、

ご迷惑おかけしました。

No. 3199 # NPK [URL] [E-mail] 2003/04/18 (金) 18:21:10
>>3192 68user

実験的な要素は強いですけど基本的に自分が使うから作ってるのでよさげなら取り込みます(笑)
ってな訳で微妙に弄ってみました。
セレクトボックス以外は大体取り込んだと思います。

No. 3200 # oMH [E-mail] 2003/04/19 (土) 00:24:43
エンベロープを変えてメールを送る方法を超初心者向けにわかりやすく説明していただけませんか?

No. 3201 # 68user 2003/04/21 (月) 01:53:11
>>3199 NPK
FreeBSD 4.7-RELEASE + 昨日あたりの nightly で最新版を
インストールして mozilla を再起動したところ、mozilla が
起動しなくなりました (何かを poll(2) してずっと待っている)。

~/.mozilla/ をリネームしてみたところ起動したのですが、設定が
全部元に戻るのは避けたいので、infoseek transfer だけを削除
する方法を教えてください。

>>3200 oMH
どういう環境で実現したいのか わからないので無理っす。

No. 3202 # NPK 2003/04/21 (月) 11:05:30
>>3201 68user

一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^;

chromeの中にあるchrome.rdfからinfoseek_transferに関する項目を削除
chromeの中にあるoverlayinfoディレクトリ内navigatorディレクトリの
contentの中にあるoverlays.rdfからinfoseek_transferに関する項目を削除

これでアンインストールできます。

No. 3203 # 68user 2003/04/23 (水) 00:23:40
>>3202 NPK
> 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^;
別にクレームをつけているわけではないです。単なる報告と質問の
つもりでした。

で、アンインストールして、再度インストールしたところ正常に動いている
ようです。ありがとうございました。

てゆーか、
    http://ryuzi.dyndns.org/mozx/j_googlebar/index.html
にちゃんと書いてありましたね。失礼しました。

No. 3204 # NPK 2003/04/23 (水) 08:04:22
いや、そういうリスクがあるので自分で治せない場合はやばいっすよ〜みたいなニュアンスで書いたんですが(^^;

別にクレームとしては受け取ってないですよ。
報告はあったほうがありがたいですし。

1.4のナイトリーは大規模な変更が行われてるようですのでたぶんこれからもこういうことがあると思います。
ですので、むしろ報告していただけるほうがありがたいです。

No. 3205 # teru [E-mail] 2003/04/23 (水) 14:55:39
別々のディレクトリのファイルどうしの日付を見てファイル更新が新しければ、コピーするというスクリプトを作りたいんですけど、そのようなコマンドはありますか?

No. 3206 # awa 2003/04/23 (水) 17:21:02
もしご存知でしたら教えてください。
例)
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
というのが質問です。
  
もしご存知でしたらご教授をお願いします。
  
以上
よろしくお願いします。
  

No. 3207 # has 2003/04/23 (水) 23:52:57
>>3205 teru
rsyncというコマンドがあるそうです。
http://www.turbolinux.co.jp/knowledge/public/178.html

>>3206 awa
ls | perl -nle "print \"$PWD/\$_\";"
一応動きます。
#1文字目が'/'なのをフルパスというのでは?

No. 3208 # Phantom 2003/04/24 (木) 02:23:40
分かる人にとっては、下らない質問かもしれませんがお分かりでしたら
お願いします。あと、私は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のファイルを書き換えないと駄目なんでしょうか…。それとも、別の
方法があるのでしょうか?

No. 3209 # 68user 2003/04/24 (木) 09:10:30
>>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
の方をお勧めします。

No. 3210 # Phantom 2003/04/24 (木) 18:09:57
>>3209 68user
> perl hoge.pl && ftp -n < ftp.up
これで、思い通りに出来ました!有難う御座いました。
凄く単純なことにミスをしていたんですね。お恥ずかしい。
sh 系でもエラーはいて欲しいと思いました。

No. 3211 # 11SE 2003/04/29 (火) 23:14:01
はじめまして。

マシン:HITACHI3050
OS:HI-UX
のマシンのIPアドレスを変更したいのですが、
Hostsファイルの変更だけで大丈夫でしょうか?
HP-UXのように、samコマンドみたいなものがあるのでしょうか?

よろしくお願いします。

No. 3212 # 68user 2003/04/30 (水) 00:06:23
>>3211 11SE
HI-UX も HP-UX もさわったことはないのでわかりませんが、一般的な
UNIX なら /etc/hosts は、ただの IP アドレスとホスト名のマッピングを
決めるファイルです。

/etc/hosts はマシン (正確にはインタフェース) の IP アドレスを決める
ファイルではないので、何かしらのファイルを変更しないといけないでしょう。

管理コマンドを探すか、
        # find /etc -type f | xargs fgrep 10.0.0.1
などでどのファイルに何が書かれているのか探しましょう。

No. 3213 # 伊藤@管理初心者 2003/05/04 (日) 00:31:48
はじめまして最近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

No. 3214 # 68user 2003/05/04 (日) 13:15:32
>>3213 伊藤@管理初心者
ディスクアレイの表示画面に ROM ERROR と出ているなら、ディスク
アレイの故障した可能性が限りなく高いと。そっちは業者にまかせる
として、あとはそのディスクアレイなしで OS がブートするかどうか
です (ディスクアレイ中のデータを読み出すことが目的なら、あきら
めて業者を待ちましょう)。

シングルユーザモードで起動して、/etc/vfstab あたりを修正して、
/dev/rrz8* をマウントしないようにするのが UNIX における一般的な
対処です。

ただ、おそらく OS は Tru64 あたりではないかと推測しますが、
さわったことがないので具体的な対処方法はわかりません。

No. 3215 # 伊藤@管理初心者 2003/05/04 (日) 18:48:20
>>3214 68user
お返事ありがとうございます。
やはり、ディスクアレイは故障の可能性が高いと…。
68userさんのおっしゃる通り、ディスクアレイ中のデータを読み出すことが目的だったんですが・・・、わかりました。
いろいろと御助言ありがとうございました。

No. 3216 # 68user 2003/05/05 (月) 21:38:54
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

No. 3217 # 匿名 [URL] 2003/05/07 (水) 01:21:53
「ソースを表示してみよう」の結果が
次のように表示されてしまいます。

1: : Content-type: text/html(LF)
2: : (LF)
3: : <html><body bgcolor=white>(LF)
4: : </body></html>(LF)

No. 3218 # 68user 2003/05/07 (水) 09:17:19
>>3217 匿名
ご報告ありがとうございます。ウチに帰ったら対処します。

No. 3219 # DLT8000user 2003/05/07 (水) 19:05:38
テープメディア(DLTtapeIV)についての質問です。

DLTtapeIVに退避させた、圧縮後のデータの容量を調べる方法がわからず大変困っています。
テープ内の圧縮後データ容量を確認するコマンド、方法があれば教えて下さい。
なにとぞ、なにとぞ宜しくお願い致します。

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

No. 3220 # 匿名 [E-mail] 2003/05/08 (木) 15:20:52
クライアントよりフォルダを指定して、その配下全てのファイルをサーバにアップロードすることはservletで可能でしょうか?
また、そのフォルダに指定したアクセス権限を付与することは可能でしょうか?

No. 3221 # 68user 2003/05/08 (木) 19:06:12
>>3219 DLT8000user
あんまり詳しくないんですが、tar で保存していれば tar tvf
…とかいう話でしょうか? cpio は知りません。

じゃなくて、圧縮率の話?

>>3220 匿名
servlet でというか、HTML 的にはフォルダまるごとのアップロードは
無理だと思います。やるなら Java Applet とか DirectX とかいう
話になるかと。

アクセス権限については環境依存なので、java.lang.Runtime#exec()
で設定でしょうか。

No. 3222 # 68user 2003/05/14 (水) 20:48:36
>>3218 68user
> ウチに帰ったら対処します。
と言いつつ忘れていました。そしてここ数日、このサーバが
落ちていたので、まだ対処できていません。今週末にはなんとか…。

No. 3223 # int 2003/05/17 (土) 18:40:47
ネットワークプログラミングの基礎のところで、
select や fork を「マルチスレッド」と書かれているようですが、
少し違うのではないでしょうか?
新しいスレッドが生成されず、見ため同時に動いていることを
マルチスレッドとは言わないと思います。

No. 3224 # 68user 2003/05/18 (日) 02:25:58
>>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 などの「スレッド」と混同しやすいのは確かです。
より適切なの用語は「多重化」でしょうが、個人的にはわかりにくい
と感じます (だからあえて「スレッド」としてみた)。

何かよい用語はないでしょうか。

No. 3225 # ちゃお 2003/05/18 (日) 03:39:04
初めまして。
突然ですがおききしたいことがあります。
貴HP内にてsocketを使ったHTTPクライアントを作るプログラムを拝見させていただき、独立した環境で同じように組んで実行しましたがホストが存在しないとかえってきました。
これは至極当然なので、$iaddr(指定アドレス)に自分自身(127.0.0.1)を指定して実行しました。

ちなみにANHTTPDが動いています。
perl5でライブラリ上でもsocketは確認しています。

結果はエラーコード500を返すだけでなにも起こりませんでした。
アクセスログもやはりエラーコードは500でした。

自分自身へ試してみて異常がないことを確認できなければ外部に向かって使用するのにはかなり抵抗があったため試してみたことでした。
socketを使っての自分自身へのアクセスはできないのでしょうか?

お暇なときでよろしいですのでお返事よろしくおねがいいたします。

No. 3226 # Netboy 2003/05/18 (日) 11:01:45
>何かよい用語はないでしょうか。

プロセス制御,プロセスの多重化,プロセスの生成と複写,
マルチプロセス,同時実行プロセス

等は如何でしょう.

No. 3227 # 68user 2003/05/19 (月) 04:34:26
>>3225 ちゃお
> 結果はエラーコード500を返すだけでなにも起こりませんでした。
> アクセスログもやはりエラーコードは500でした。
ということは TCP/IP 的には正常に通信できているが、HTTP リクエスト
で送信している内容がよくない、という状況と考えます。

あとは
    - 実行したのが http-client.pl なのか、http-client-2.pl なのか。
    - http-client-2.pl であれば、URL に何と入力したのか。
        その URL をブラウザで見ると正しく表示されるのか。
    - そもそも telnet で成功したのか。その場合は何とタイプしたのか。
と情報がないと何とも言えません。

>>3226 Netboy
apache 起動の件、ありがとうございました。

> プロセス制御,プロセスの多重化,プロセスの生成と複写,
> マルチプロセス,同時実行プロセス
いえ、どういう手法で多重化しているか (プロセス/スレッド/select) は
別として、「見ため同時に動いていること」を何と表記すればよいかが
よくわからないのです。

No. 3228 # ちゃお 2003/05/19 (月) 18:25:34
>>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にしています。

よろしくおねがいします。

No. 3229 # ちゃお 2003/05/19 (月) 18:30:28
連続ですいません。
さっきかきこんだあとおもうところがあって拡張子plで試してみました。
plは設定(http.conf)に登録していないのでいつも使っていませんでした。
もちろん今回も実行したあとはブラウザには表示されませんでした。

しかし、アクセスログには200が残っていました。

これって成功したということでいいのでしょうか?

No. 3230 # 68user 2003/05/20 (火) 22:16:24
>>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
を読んで、実際に試してみてください。

No. 3231 # じゅじゅ [E-mail] 2003/05/21 (水) 19:28:46
c言語でFTPクライアントのプログラムを組んでいます。
プロトコルやソースは大変参考にさせていただいています。

環境は、TurboLinux 8 serverです。

FTPクライアントのプログラムなのですが、ファイルの転送などは問題なく動作しているのですが、ディレクトリ単位の転送の記述部分がわかりません。何度かコマンドのデバッグモードで試して、RFCなどの記述も呼んでいるのですが。参考になるページがあるのでしたら、教えてください。
また、ファイルかディレクトリかを区別する方法もあればと思い、ご教授よろしくお願いいたします。

No. 3232 # 68user 2003/05/21 (水) 23:01:09
>>3231 じゅじゅ
> ディレクトリ単位の転送
おそらく、ディレクトリを LIST or NLST して、一つ一つ RETR する
しかないです。

> ファイルかディレクトリかを区別する方法
ブラウザで anonymous ftp サイトに接続した場合などは、LIST の結果が
drwxr-xr-x ならディレクトリ、とするのが一般的だと思います。もっと
きっちりやるなら、CWD で移動できたらディレクトリとみなす、とか。

基本的に、ftp は UNIX に依存したくなかったため、この辺はあえて
決めてないのではないかと思っています。

もしディレクトリを判別できるようにするなら、名前付きパイプは?
ソケットは? デバイスファイルは? door は? ということになり、
結局 ls の結果をそのまま送る方がよい、と判断されたのではない
でしょうか (そしてわたしは、この判断は誤りであると思っています)。

No. 3233 # じゅじゅ [E-mail] 2003/05/22 (木) 15:28:39
簡単なことかもしれませんが、LISTやNLSTをし、続けてファイルの総数やディレクトリの中にあるファイル名を取得することはできるのでしょうか?それらのデータを取得する記述と、また、
>drwxr-xr-x ならディレクトリを取得する
記述が分かりません。
ご教授よろしくお願いいたします。

No. 3234 # 68user 2003/05/23 (金) 02:21:11
>>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 の下のファイル・
ディレクトリ一覧が返ってきます。

No. 3235 # ちゃお 2003/05/24 (土) 04:43:48
>>3230 68user
前回はちんぷんかんぷんな質問失礼いたしました。
現状ちゃおのマシンにはapacheがインストールされています。
そしてrootにはhtdocsが指定されています。
さらにhtdocsの中にindex.htmlがあります。

まずはtelnetからやりなおしてみました。
コマンドプロンプトから以下のように入力しました。

telnet 127.0.0.1 80
接続成功
GET /index.html HTTP/1.1
HOST:127.0.0.1
Content-type:text/html

ソース取得成功してます。

次にコマンドプロンプトからperlを実行します。
(もちろんperlのあるディレクトリには移動済みで、他のHTMLソースを吐き出させることにも成功しています)

c:\>perl http_client.pl

このときはなにも表示されません。
しかしコードは200を返します。

このときの結果は同じものではないのですか?

>http-client.pl というのは、要はブラウザの代わりをする
プログラムなのですが、その辺は理解されていますか?

つまり$iaddrで指定したアドレスにあるソースを受け取って表示する、
dos上で実行したらbody部分がそのままdosプロンプトに表示されるということでいいんですよね???
それともこのプログラムにさらに引数を与えなければいけないのでしょうか?

長文になってしまい失礼いたしました。
またお時間のあるときにお返事いただければ幸いです。

No. 3236 # かんすけ [E-mail] 2003/05/24 (土) 23:49:04
Makefileでのライブラリの定義について

はじめまして。solaris初心者のかんすけです。
環境はsparc-solaris8です。
Makefileを作成してみたのですが、自分で作成したライブラリファイルをCCのところでうまく定義できません。実行すると「ファイルが見つかりません」とエラーが表示されます。
この場合、まず何を疑えば良いのでしょうか?
正しいMakefileでのライブラリの定義の仕方を教えてください。
また良いサンプルファイルのURL等ありましたら、紹介してください。
よろしくお願いします。

No. 3237 # ちゃお 2003/05/27 (火) 01:28:02
今までの数々の質問大変失礼いたしました。
色々いじっているうちに何故か成功いたしました。
今までありがとうございました。
これからもがんばってください。

No. 3238 # 68user 2003/05/30 (金) 00:19:49
>>3236 かんすけ
デフォルトルールや特殊変数などを全く活用してませんが、

      main: main.o hoge.a
                $(CC) -o $@ $>
      hoge.a: hoge.a(a.o) hoge.a(b.o)
                $(AR) ru $@ $>

とりあえずこんな感じで実現することは可能です。

No. 3239 # 68user 2003/05/30 (金) 04:40:51
OpenSSL による https クライアントをちょっとだけ
バージョンアップしました (解説は更新なし)。
    http://x68000.startshop.co.jp/~68user/net/ssl.html

変更点はこちら。
    http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/https-client.c

しかし SSL は未だによくわからん…。

No. 3240 # 68user 2003/05/31 (土) 21:05:20
苦節 3日。やっと rootCA を組み込む方法がわかった。
忘れないうちにメモメモ。
        ctx = SSL_CTX_new(ssl_method());
        SSL_CTX_load_verify_locations(ctx, "mod_ssl-2.8.9-1.3.26/pkg.sslcfg/ca-bundle.crt", NULL);

No. 3241 # ひろ 2003/06/05 (木) 19:56:39
皆様こんにちは。

僕はサーバースペースを借りてHPを作ってます。

いきなりの質問で失礼と存じますが…

asciiart.cgiの設置方法を教えていただけないでしょうか?

一応、↑検索をかけてみたのですが見当たりませんでした。

                                    パーミッション
asciiart.cgi    755
environment.pl   644(試しに755)

…だけではダメなのでしょうか?

ヨロシクお願いします。

No. 3242 # 68user 2003/06/05 (木) 23:52:06
>>3241 ひろ
> asciiart.cgiの設置方法を教えていただけないでしょうか?
      http://x68000.startshop.co.jp/~68user/unix/pickup?netpbm
に含まれている giftopnm、ppmtopgm などのコマンド群と、
HTTP クライアントである httptalker.pl が必要です。

netpbm はフリーで配布されています。httptalker.pl はわたしが
作ったものですが、wget や fetch などのフリーなダウンローダで
代用可能です。

申し訳ありませんが、解説しはじめると長くなるので、これ以上の
詳細な解説はご勘弁ください。

関係ないですけど、テーブルアートというのがあります。こっちの方が
表現力が高いので、おもしろいかも。
      http://hi.sakura.ne.jp/~okada/table/

No. 3243 # ひろ 2003/06/08 (日) 13:48:14
返答ありがとうございました。

難しいので諦めます。。

asciiart.cgiを設置されてるサイトって有るんですかね?(謎)

因みにasciiart.cgi検索かけても見つかりませんでした。(笑)

No. 3244 # 68user 2003/06/09 (月) 06:08:14
>>3243 ひろ
> asciiart.cgiを設置されてるサイトって有るんですかね?(謎)
ないと思います。うちの CGI プログラム群は、配付しているのではなく
ただ単にソースを公開しているだけなので、わたし以外の人にとっては
設置しづらいでしょう。

No. 3245 # bebe 2003/06/10 (火) 18:36:12
「ls」を入力すると、カレントディレクトリのファイルやディレクトリが表示されますが、ファイルは表示させずにディレクトリだけを表示させることは出来ますか?
ls -d でやってみてもダメでした。

No. 3246 # 68user 2003/06/10 (火) 19:53:53
>>3245 bebe
-d は引数にディレクトリを指定した場合、そのディレクトリの
下でなく、ディレクトリそのものの情報を表示するオプションです。
というわけで、
    % ls | grep ^d
    % find . -type d -maxdepth 1
    % find . -type d -maxdepth 1 -ls
などなど。

No. 3247 # 68user 2003/06/10 (火) 20:04:29
>>3246 68user
> ls | grep ^d
ls -l | grep ^d の間違いでした。

No. 3248 # 68user 2003/06/14 (土) 22:03:14
ネットワークプログラミングの基礎知識
      http://x68000.startshop.co.jp/~68user/net/
に、
      暗号化のお話 (1) - 共通鍵暗号方式
            http://x68000.startshop.co.jp/~68user/net/crypt-1.html
      SSL/TLS でアクセスしてみよう (1) (2)
            http://x68000.startshop.co.jp/~68user/net/ssl-1.html
            http://x68000.startshop.co.jp/~68user/net/ssl-2.html
を追加しました。説明が中途半端ですが、ご容赦を。

cvsweb はこちら
    http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/?sortby=date

No. 3249 # のぐけん。 2003/06/16 (月) 17:54:10
はじめまして。
ここのページでかなり勉強させてもらっています。
いつの間にかDSNクライアント作成講座もできてるみたい
なので、時間があったら読ませてもらいます。

ところで、DNSを使ってみよう でsend関数がでてきましたが、
あれはTCPでは使えないのでしょうか?
UDPはコネクションレス型で、TCPはコネクション型なのは解ってますが・・・。
もし使える方法があれば教えてください。

No. 3250 # terapad 2003/06/17 (火) 11:14:15
はじめまして、terapadと申します。

いくつかのプログラムからarコマンドを用いて、ライブラリを作成するのですが、
スタティックリンク版とダイナミックリンク版を作成したいのです。

ar -r test.a aaa.o bbb.o ccc.o

現在、上記のようなコマンドを用いているのですが、
これはスタティックリンクになるのでしょうか?
ダイナミックリンク版を作成するためには、
arコマンドに何かオプションが必要なのでしょうか?

何も分からず恐縮ですが、ご教授お願いします。

No. 3251 # 68user 2003/06/17 (火) 12:52:12
>>3249 のぐけん。
> ところで、DNSを使ってみよう でsend関数がでてきましたが、
> あれはTCPでは使えないのでしょうか?
        send(SOCKET, $data, 0);
で使えます。

>>3250 terapad
> これはスタティックリンクになるのでしょうか?
そうです。

> ダイナミックリンク版を作成するためには、
こちらをどうぞ。
      http://www.jp.FreeBSD.org/QandA/HTML/401.html

No. 3252 # のぐけん。 2003/06/17 (火) 17:59:41
すいません。
send(SOCKET, $data, 0);
の形は、すでにSOCKETがつながっている時ですよね?
send(SOCK, MSG, 0, TO);
の形では無理でしょうか?

No. 3253 # terapad 2003/06/17 (火) 18:24:26
お返事ありがとうございます。

早速、サンプルプログラムを用意してやってみたところ
cc -fpic -o libshared.SO -c shared.c
は正常に終了しlibshared.SOが作成されました。

次の
cc -shared -Wl, -soname, libshared.so.1 -o libshared.so.1 libshared.SO
のところでは下記のようなエラーが出ます。
cc: 1501-218 file libshared.so.1 contains an incorrect file suffix
cc: 1501-228 input file libshared.so.1 not found
cc: 1501-218 file libshared.SO contains an incorrect file suffix

どのように回避したら良いでしょうか?

No. 3254 # terapad 2003/06/17 (火) 18:36:13
すみません。もう一度コマンドコピーして実行してみたところ、
cc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1 libshared.so
ld: 0706-012 -h フラグが認識できません。
ld: 0706-012 -a フラグが認識できません。
ld: 0706-005 ファイルが見つからないか、オープンできません: libshared.so.1
                ld:open(): このパス名にはファイルまたはディレクトリが存在しません。

このようなメッセージに変わりました。
でも、わかりませんが・・・。

No. 3255 # 68user 2003/06/17 (火) 20:35:29
>>3252 のぐけん。
> send(SOCK, MSG, 0, TO);
> の形では無理でしょうか?
は TCP では無理だと思います。connect しないと 3way
handshake してくれないです。

ちなみに、ご存知かもしれませんが、UDP では
      - socket && connect && send(SOCKET, $data, 0);
      - socket && send(SOCKET, $data, TO);
のいずれも可能です。

>>3254 terapad
      http://www.jp.FreeBSD.org/QandA/HTML/401.html
gcc を使っている場合のやり方です。gcc を使わない
のであれば、お使いの cc のマニュアルを読みましょう。

No. 3256 # 68user 2003/06/18 (水) 00:29:50
UNIX の部屋
      http://x68000.startshop.co.jp/~68user/unix/
を更新しました。

No. 3257 # 68user 2003/06/18 (水) 00:42:07
とってもいまさらですが、
      IPアドレスとホスト名
            http://x68000.startshop.co.jp/~68user/net/net-1.html

      http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=2098
で指摘をいただいた旨追記しました。

No. 3258 # 68user 2003/06/18 (水) 00:51:37
第2回 UNIX の部屋の検索で一件もヒットしなかった
キーワード調査。対象は 2003年1月〜現時点の半年分。

# 第1回: http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=2093-2099

% grep pickup */access.log | grep Nomatch | awk '{print $3}' | sort | uniq -c | sort -nr
1165 useradd
  670 sar
  526 ls
  466 expr
  435 ssh
  426 scp
  320 ftp
  311 cp
  289 Emacs+Lisp+プログラミング入門
  287 Perl/Tk+デスクトップリファレンス
  284 snoop
  257 ln
  256 ユーザー
  232 cpio
  223 ufsdump
  223 rename
  206 rsync
  192 groupadd
  190 iostat
  187 logger
  186 arp
  181 mailx
  179 ipcs
  177 iconv
  168 usradd
  167 rm
  165 usermod
  164 ファイル検索
  147 pkginfo
  142 df
  142 ndd
  141 ps
  138 fdisk
  132 ipconfig
  132 chkconfig
  127 tree
  126 remsh
  125 substr
  125 nawk
  114 jar
  113 dbx
  112 ulimit
  103 userdel
  100 htpasswd
    94 mv
    92 tr
    85 バックアップ
    85 showrev
    85 ioscan
    85 chroot
    84 pkgrm
    84 pdf
    82 mpstat
    79 patchadd
    79 mknod
    75 mkfs
    74 リダイレクション
    73 ufsrestore
    70 lpq
    69 sdiff
    69 prstat
    68 wc
    67 mtime
    66 nmap
    64 スペック
    63 addgroup
    61 pkill
    60 unmount
    59 配列
    59 パーティション
    59 sh
    59 rcp
    58 演算
    58 vim
    58 lpstat
    56 ファイル名変更
    56 ファイル 作成
    56 cc
    56 prtconf
    56 gip
    56 addusr
    55 戻り値
    55 ファイル 検索
    55 sjtoeuc
    55 sftp
    55 access
    53 strcpy
    53 restore
    52 空き容量
    52 typeset
    52 swlist
    52 mkfile
    52 backup
    51 snmp
    51 samba
    50 sqlplus
    49 ファイル名 変更
    49 zgip
    49 ntpq
    49 euctosj
    49 bashrc

結論。調査してもそれを反映しないと意味がない。

というわけで、全角英数字でも検索できるようにしました。

No. 3259 # -9 [E-mail] 2003/06/19 (木) 14:29:04
UNIXの部屋拝見させてもらいました。
すごい詳しくて良かったです。ありがとうございました。
これからも使わせて頂きます。

No. 3260 # bubu [E-mail] 2003/06/19 (木) 22:09:11
はじめまして。私、MADAGASCARという国の地方都市にすんでおります。私の住んでる町に数年前にISPができました。サーバーの管理は直接しておりませんがLAN内でプログラムを作る事を考えています。サーバー以外は、基本的にWINDOWS系です。ヒントいただければ幸いです。

1つのプログラムは、LAN内でサイバーカフェを運営しておりますが、クライアント端末である特定のプログラムを起動させたときにカウントをしようというものですがこれは何とかなりそうです。
こちらが私にとっては難しいのですが2つ目は、サーバーにダイアルアップでログインしてくるユーザー情報を集計しそのデーターを別のところに送信させたいと思います。

サーバー:MANDRAKE 8.1(WWW、MAIL、DNS稼動)
ルーター:CISCO ???

横山

No. 3261 # 68user 2003/06/21 (土) 01:40:05
>>3259 -9
ありがとうございます。間違いやわかりにくい点を見付けたら
ぜひご指摘ください。

>>3260 bubu
> サーバーにダイアルアップでログインしてくるユーザー情報を
> 集計しそのデーターを別のところに送信させたいと思います。
ここらへんほとんど知らないんですが一応回答してみます。

ダイアルアップを受けるサーバ (RAS サーバって言うんでしょうか?)
は Mandarake ですか? それとも CISCO の機器ですか?

前者であれば mgetty や pppd (ppxp?) あたりが /var/log あたりに
ログを残しているかもしれません。また、通常のログインと同じく
utmp や wtmp あたりに記録されるはずなので、who などで集計する
ことができるはずだと思います。

後者であれば、わかりません。マニュアルを読んでください。

もし RAS サーバを管理する立場にないのであれば、集計する
のは無理でしょう。

No. 3262 # bubu [E-mail] 2003/06/21 (土) 02:19:56
回答ありがとうござました。
ダイアルアップを受けるサーバはMandarakeです。RADIUSというソフト(サーバー?)が起動していて/var/log にlogが記録されます。
情報を探してみましたが、SQLなどを介し、上記のlogファイルを利用してデータベースを作成できる事は分かりましたが、Client MachineからサーバーMachineへアクセスし、データを取ってくるその手法がいまだによく分かりません。お手数とは思いますがご教授していただければ幸いです。
サーバーの第一管理者はリモートで管理をしており、私は第2管理者に非常に近いところにおります。

No. 3263 # 68user 2003/06/23 (月) 19:50:28
>>3262 bubu
> Client MachineからサーバーMachineへアクセスし、データを取って
> くるその手法がいまだによく分かりません。
あとは定期的にファイル転送ができればよいのですか? もし
そうなら、ftp で転送するのが一番簡単だと思います。

Windows 付属の ftp.exe やフリーの ftp クライアントを使用
してみてはどうでしょうか。

No. 3264 # あやの 2003/06/26 (木) 01:25:53
ここで相談すべきことじゃないのかもしれませんが、困っています。

PDFを見るためのソフトについて、UNIXにはxpdfなどの軽いツールがあるのに、
WindowsにはAcrobatReaderしかないようなのですが、Windowsにも
他にPDFを見るためのツールはあるのでしょうか?

よろしくおねがいいたします。。

No. 3265 # 68user 2003/06/26 (木) 23:52:58
>>3264 あやの
xpdf の Windows 版はありますが、GUI を持たない変換ツール類しか
提供されていないようですね。
      http://www.foolabs.com/xpdf/download.html

http://www.namazu.org/ml/namazu-win32-users-ja/msg01025.html
を読むと、昔は cygwin 版も上記ページに置かれていたように見えますが、
今は置いてありません。自分でコンパイルして、果して動くのかどうか…。

No. 3266 # UNIX 2003/06/27 (金) 17:35:43
AIXのdateコマンドでは「'1 days ago'」のような機能がありません。
どのように1日前の日付を出力すれば良いんでしょうか?
date -v-1dってできるんですかね?

No. 3267 # 68user 2003/06/27 (金) 17:46:50
>>3266 UNIX
> date -v-1dってできるんですかね?
試してみればいいんじゃないでしょうか。

他には TZ を使うやり方を
      http://x68000.startshop.co.jp/~68user/unix/pickup?date
に書きましたが、AIX の date(1) が期待通り動いてくれるかどうかはわかりません。

No. 3268 # ma-chan 2003/06/28 (土) 16:01:42
C言語でsocketを用いたftpクライアント(Asciiモード)を作成し、solaris上で実行したところ、ftpからのリターンメッセージ、およびgetしたファイルの改行コードに『CR』が付加されてしまい、とても困っております。
これは、どのような要因が考えられますでしょうか?
よろしくお願いします。

No. 3269 # 68user 2003/06/28 (土) 16:55:42
>>3268 ma-chan
ASCII モードは LF を CRLF に置換するわけで、「CR が付加される」
というのは納得できる結果だと思います。というわけで、何に困って
おられるのかよくわかりません。

No. 3270 # ma-chan 2003/06/28 (土) 17:57:43
説明が足りなくて申し訳ありません。
改めまして詳細を説明させて頂きます。

テスト環境は、Solarisサーバー2台で、
片方のサーバー上に作成したPGMを置いて、テキストファイルの
送受信を行っています。
扱うテキストファイルは、Solaris上で作成したファイルで、
改行コードは、『LF』のみです。
で、PGM内からASCIIモードでファイルをPUTする分には、
問題ないのですが、
ファイルをGETすると、改行コードに『CR』が付いてしまうという
現象が発生しております。
(ちなみに、コマンドレベルでftpをASCIIモードで実行した場合は、
『CR』は付きませんでした。)

私の認識では、UNIXサーバー側でファイルをGETする場合は、
改行コードに『CR』は付かないと思うのですが...
(Windows環境でプログラムを動かしてファイルを受信した場合は、
    『CR』が付くと思っています。)
この認識自体が間違っていますか?

よろしくお願いします。

No. 3271 # 68user 2003/06/28 (土) 18:29:31
>>3270 ma-chan
理解しました。

ASCII モードというものをより正確に書くと、

          あなたがデータを送信するときは、事前に NVT-ASCII に変換
          しておいてね

とクライアントとサーバが約束すること、です。そして NVT-ASCII に
おける改行は CRLF です。

なので、TYPE A で CRLF が送られてくるのは正しいわけで、CRLF を
LF に変換するのはクライアント側の仕事なのです。

NVT-ASCII については (読んでませんが) 多分 RFC 854 に書いて
あるんじゃないかと思います。

No. 3272 # keijirou 2003/06/30 (月) 14:02:10
はじめまして。いつも参考にさせて頂いてます。

<環境>
マシン:UNIX B2000(OKITAK9000)
OS:HPーUX Ver.11.0
端末:dtterm
言語:C

上記の環境で、wgetch関数(nodelayモード)を使って、キー入力を受け取る
プログラムを作成しているのですが、2つほど質問させてください。

1.キーボードからの入力をロックする方法。
    キーを入力してもwgetchがコードを返却しないようにしたい。

2.ある特定のキーについて,wgetchが返却するコードを変更する方法。
    たとえば,Insキーが押下されたら0x12を返却するようにしたい。

既出でしたら、申し訳ありません。
よろしくお願い致します。

No. 3273 # Been 2003/07/03 (木) 20:29:40
場違いかも知れませんが藁をも掴むつもりで投稿しました。
FreeBSD4.7にてSSHでPg.pmをインストールしようとしています。
SHELLはtcshなのですが、以下の方法でインストールは可能でしょうか?

cd src
tar zxvf pgsql_perl5-1.9.0.tar.gz
cd pgsql_perl5-1.9.0
setenv POSTGRES_INCLUDE "/usr/local/pgsql/include"
setenv POSTGRES_LIB "/usr/local/pgsql/lib"
perl Makefile.PL
make
make test
root # make install

何かヒントでもいいのでよろしくお願いいたします。

No. 3274 # 68user 2003/07/04 (金) 14:20:25
>>3272 keijirou
curces に詳しくないので回答しなかったのですが、誰か知ってる人
いませんかねぇ。

>>3273 Been
> 以下の方法でインストールは可能でしょうか?
よさそうに見えますが、とりあえず make test、make -n install まで
試してみればいいんじゃないでしょうか。

てゆーか、一般的には DBI と DBD::Pg モジュールを使うことが
多いと思いますが、あえて Pg なのですか?

2000年で更新止まってるし、RDBS 取り換えたら書き直しだし、あまり
いいことはないと思います。

No. 3275 # kotaro 2003/07/05 (土) 12:02:52
はじめまして。kotaroと申します。
さっそくですが、質問をさせていただいてよろしいでしょうか。

C言語において、IPアドレスのみで通信を行うプログラムの作成は可能でしょうか。
socket関数を用いた場合は、
TCPやUDPのトランスポート層の通信になると思いますが、
トランスポート層のプロトコルを解釈せずにIPヘッダーのみで通信を行う、
ルーティングのような機能を実現したいと思っています。
(ネットワークカードは2枚使用し、IPパケットを通過させる仕組み)

突然の質問で申し訳ありませんがよろしくお願いします。

No. 3276 # 68user 2003/07/05 (土) 13:13:21
>>3275 kotaro
> IPアドレスのみで通信を行う
IP (インターネットプロトコル) のみで通信を行う、という
ことでしょうか。

UNIX なら可能です。Windows なら XP からですね。「raw socket」
などで検索してみてください。

No. 3277 # kotaro 2003/07/06 (日) 21:44:53
ありがとうございます。

socket関数にrawIPを使う機能がありました。
この機能を使えば、raw(生)のIPデータグラムを扱えるので
IPヘッダ以外にもTCPやUDPヘッダも自由に付けることができそうです。

No. 3278 # keijirou 2003/07/07 (月) 10:20:46
No3272 で質問させて頂いた者です。同環境でもう1つ質問させてください。
printfで画面出力した文字を、カーソルを文字の先頭に移動させて、再度取得する方法は?
カーソルの移動はエスケープシーケンスで行っています。
cursesを利用すれば表示した文字を再度取得することは可能なのですが、エスケープシーケンスを標準出力する方法が判らないのでしかたなくprintfを使っているという状況です。
cursesでエスケープシーケンスを標準出力できればよいのですが。。。

printfの文字取得、もしくはcursesでのエスケープシーケンスの標準出力、
について情報お持ちの方、回答よろしくお願いします。

No. 3279 # 68user 2003/07/07 (月) 16:12:08
>>3278 keijirou
> printfで画面出力した文字を、カーソルを文字の先頭に移動させて、
> 再度取得する方法は?
原理的に無理でしょう。自分で出力した文字を覚えておくくらいしか
ない (≒curses の再実装) と思います。

> カーソルを文字の先頭に移動させて
これを curses で行えばよいだけのように見えますが、curses では
ダメな理由があったりしますか?

No. 3280 # keijirou 2003/07/07 (月) 18:28:22
>>3279 68user
早速の回答ありがとうございます。
printfの文字を再度取得することは無理なんですね。
実際にprintfで出力した文字の先頭に、cursesで移動して、文字取得を行ったところ、何も取得できませんでした。
おそらく、cursesが持っているバッファからデータを持って来るようなので、printfの文字は取得されないものと思われます。

扱うデータがエスケープシーケンス入りのデータなので、printfがそのまま使えれば、解析せずに済むかと思い、質問させて頂きました。
また、画面に表示した文字のハードコピーを印刷するのにprintfの文字を再取得しようと考えてました。

もし、なにかよい方法がありましたら、またよろしくお願い致します。

No. 3281 # 68user 2003/07/09 (水) 21:49:39
>>3280 keijirou
> printfの文字を再度取得することは無理なんですね。
そうですね。stdio ライブラリは出力した文字を覚えていませんし、
kterm などの端末エミュレータも受け取った文字を覚えていません
ので。

# もし端末エミュレータが覚えていたとしても、アプリが
# 端末エミュレータに文字を問い合わせるような仕組みがない。

> 扱うデータがエスケープシーケンス入りのデータなので
もし curses がそのようなデータを扱えるとしたら、
      1. curses が出力するデータの中身を解析し、エスケープシーケンス取得。
      2. 環境変数 TERM を見て、エスケープシーケンスがその端末でどのような
            挙動をするのかを調べる。
      3. エスケープシーケンスを出力する代わりに、curses のライブラリを叩く。
という機能を持ってないといけないでしょうが、多分そのような
機能はないと思います。

データがエスケープシーケンス入りと言っても、ごく限られた
数種類程度のエスケープシーケンスではないですか?

もしそうであれば、自前でデータを解析し、エスケープシーケンスを
出力する代わりに curses のライブラリ関数を呼ぶ、ってのが簡単
そうな気がします。

No. 3282 # ゆう 2003/07/10 (木) 12:04:13
muleで韓国語を入力したまではよかったのですが・・・
印刷しようとすると化けてしまいます。
コマンドを教えてください。

p.s 「any2ps hangul.tex | lpr -Pstd1pr1」を試してみましたが、
            結果は、m2ps: Invalid argument: hangul.tex でした・・・。

No. 3283 # keijirou 2003/07/10 (木) 14:49:26
>>3281 68user
回答ありがとうございます。
やはり、自前でエスケープシーケンスを判断しなければいけないようですね。
その方向で開発をすすめてみます。
いろいろとありがとうございました。

No. 3284 # 68user 2003/07/10 (木) 18:27:42
>>3282 ゆう
韓国語関連は全く知りませんが、引数ではなく標準入力から
渡さないといけなんじゃないですかね?
      http://www.tk.airnet.ne.jp/nagae/jp/comp/mule/any2ps.html

No. 3285 # umio 2003/07/14 (月) 02:26:42
私はネットワークについて初心者で、検索ページからこのサイトを拝見しました。噛み砕いた説明のおかげで理解しやすくとても参考になり、本当に感謝しています。ありがとうございます。

No. 3286 # ゆみ 2003/07/16 (水) 10:31:25
シェルの環境変数で宣言している物が,未定義変数だといわれ止ってしまいます。エラーが出ない場合のほうが多いのですが,さっきまで回っていたものが、未定義だと言われてとまってしまい,困っています。
なにか、アドバイスいただければ幸いです。

No. 3287 # bebe 2003/07/23 (水) 15:37:31
find コマンドで検索するときに、サブディレクトリを検索させない
ようにすることは、出来ますか?
(例)find / -name *.txt
とすると、/配下のディレクトリまで検索してしまいますが、そうでは
なくて、/だけを検索させたいのですが‥
ちなみに、Solarisを使用しています。

No. 3288 # keijirou 2003/07/23 (水) 16:51:01
いつもお世話になります
早速ですが、cursesの関数で、現在のカーソル位置を記憶する、および
記憶したカーソル位置の復帰を行う関数は存在するでしょうか?
自前で現在位置を覚えておいて、wmoveで移動する方法しかないのでしょうか?

No. 3289 # 通りすがり 2003/07/24 (木) 13:32:36
UNIXの部屋のリファレンスを求めて初めておじゃましました。
ちょっと気づいたのですが、文字コードの指定がない上にShift_JISや
EUCが混在していたりするため、しばしばブラウザが文字コード判定に失敗するようです。
<head>中に<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">等の表記を入れて頂ければうれしく思います。

No. 3290 # 68user 2003/07/24 (木) 16:57:30
>>3285 umio
ありがとうございます。わかりにくい記述などを見つけたらぜひ教えてください。

>>3286 ゆみ
> なにか、アドバイスいただければ幸いです。
情報不足です。ここらへん
      http://www.hyuki.com/writing/techask.html#procedure
を読むとよい質問ができるようになると思います。

>>3287 bebe
> find コマンドで検索するときに、サブディレクトリを検索させない
> ようにすることは、出来ますか?
> ちなみに、Solarisを使用しています。
GNU find などなら find / -maxdepth 1 ですが、Solaris の find では
できない、と思っています。無理矢理やるなら
    % find `ls -dF /* | egrep -v '/$'` -type f -name \*.txt
とかですが、「そんなの ls /*.txt でいいじゃん」と言われるでしょうね。

>>3288 keijirou
> 現在のカーソル位置を記憶する、および記憶したカーソル位置の復帰を
> 行う関数は存在するでしょうか?
curces の全関数を知っているわけではないですが、多分存在しないんじゃ
ないでしょうか。

>>3289 通りすがり
> 文字コードの指定がない上にShift_JISやEUCが混在していたりするため、
> しばしばブラウザが文字コード判定に失敗するようです。
対処します (8月中にはなんとか…)。

しかしすべてのページは EUC-JP で統一していると思っていたんですが、
Shift_JIS なページがありましたっけ?

No. 3291 # Netboy 2003/07/24 (木) 17:49:29
文字コードなんですけど、いろいろな種類のブラウザで
全く文字化けが起きないようにするには工夫がいるみたいです。
特にApache 1.3系では、

・ApacheのAddCharset設定で日本語コードを指定しておく
・各ページにMETAタグを入ておく

の両方を行わないとだめみたいです。
かなり古い話ですがApache 1.3.12の頃からそうなってます。私の経験では

<Directory />
Options FollowSymLinks
AllowOverride None
AddCharset ISO-2022-JP html
AddCharset ISO-2022-JP htm
AddCharset ISO-2022-JP shtml
AddCharset ISO-2022-JP shtm
</Directory>

でISO-2022-JPで決めうちしたあと
METAタグでShift_JISにしたりEUC-JPにするといい感じでした。

http://www.asahi-net.or.jp/~AE5T-KSN/apache/charset-problem.html

No. 3292 # Netboy 2003/07/24 (木) 18:00:22
と思って実際の設定を調べてみたのですが、普通に
AddCharset EUC-JP html
等で済ませてました。これとMETAタグ併用でした。

No. 3293 # kazu [E-mail] 2003/07/25 (金) 14:52:11
はじめましてperlをはじめて半年レベルです。
貴殿のページでネットの勉強はじめましたが、レンタルサーバーのためtelnetが使えません。参考のplを実行させたいのですがどうすればやれますでしょうか。
初歩的な質問で申し訳ありませんがご指導ください。

No. 3294 # 68user 2003/07/28 (月) 09:55:03
>>3291 Netboy
> ・ApacheのAddCharset設定で日本語コードを指定しておく
> ・各ページにMETAタグを入ておく
これ、いまだに迷っているのですが、HTTP ヘッダに charset を
含めるのと、meta で書くのとどっちがいいんですかね。

前者だと、ローカルにある HTML ファイルを直接ブラウザで見たりなんか
すると、charset がないのでエンコーディングを誤判定してしまいます。
# IE は保存時に meta 埋めてくれますが。

でも meta だと、ファイルのエンコーディングを変えたらいちいち
charset を変更しなければいけないのか、って話になりますし。

個人的には、エンコーディングくらいブラウザが自動的に (そして
もっと賢く) 判定しろよ、と思います。

> http://www.asahi-net.or.jp/~AE5T-KSN/apache/charset-problem.html
これについては、apache のソースをいじって charset=iso-8859-1 を
削る対応が好きです。と言っても、x68000.startshop.co.jp では
やってませんが。


>>3293 kazu
> レンタルサーバーのためtelnetが使えません。
ftp でサーバに CGI スクリプトを置いておくだけでいいです。

と言っても、telnet 可能かどうかは作業効率に大きく関わるため、
telnet 可なサーバに乗り換えることをお勧めします。

乗り換えたくないなら、ローカルにも perl や web サーバを入れ、
サーバ側とできるだけ同じ環境を構築して、ローカルでテストが
可能なようにしておくとよいでしょう。

No. 3295 # Netboy 2003/07/28 (月) 10:53:09
>これ、いまだに迷っているのですが、HTTP ヘッダに charset を
>含めるのと、meta で書くのとどっちがいいんですかね。

世間ではMETA優先なんじゃないでしょうか。
でもcharsetでiso-8859-1が来るとコード自動判別とMETAタグが
両方とも無効になるブラウザがあるので
charsetで何か日本語コードが来るようにしないとだめみたいです。

>でも meta だと、ファイルのエンコーディングを変えたらいちいち
>charset を変更しなければいけないのか、って話になりますし。

そういう場合は文字コード判別&タグ入れをスクリプトで自動化して
一括して行うしかないと思います。
全然参考にならなくて済みません。

No. 3296 # >>3293 2003/07/28 (月) 19:37:09
>ftp でサーバに CGI スクリプトを置いておくだけでいいです。
いろいろ試しましたがよく解りませんでした。
ありがとう御座いました。

No. 3297 # kazu 2003/07/28 (月) 19:41:54
>>3293 kazu
>ftp でサーバに CGI スクリプトを置いておくだけでいいです。
いろいろ試してみましたがうまく行きませんでした。
ありがとうございました。

No. 3298 # user326 2003/07/29 (火) 11:18:48
UNIXサーバを自動運転で動かしています。
管理する他のクライアントから、起動・シャットダウンの命令を自動で行うように設定してあります。
一昨日から、UNIXサーバを起動する(自動運転)と時刻がシャットダウンした後(直後の時刻)になってしまいます。
端末については、正常な時刻になっています。
特にntpを使用している訳でもありません。
何か考えられる原因はありますでしょうか?
また、怪しい部分などがありましたら教えてください。

No. 3299 # 68user 2003/07/31 (木) 12:52:25
>>3298 user326
> 何か考えられる原因はありますでしょうか?
まぁ一番に疑うべきはハード故障なんでしょうね。手動でシャット
ダウンしたらどうなるんでしょうか。

> 端末については、正常な時刻になっています。
これは意味がわかりませんでした。端末が時刻を保持している
はずはないし、端末からログインして date を叩くと見ると
正常な時刻ということなら、さらに謎な挙動ですね。

No. 3300 # 68user 2003/08/12 (火) 07:38:14
Netboy さんと startshop さんと両毛インターネットさんの
ご好意で使わせていただいておりました このサーバですが、
諸事情により使えなくなりそうです。

いつ使えなくなるかは現時点ではわかっていないのですが、
もしいきなり接続できなくなった場合は、
      http://210.249.139.22/
      http://home.jp.freebsd.org/~matsu/
のいずれかに移転のお知らせを出します。

が、わたしは現在ネットカフェ経由でないとこのマシンに
ログインできないという情けない状況なので、お知らせが
遅れるかもしれませんがご了承ください。

No. 3301 # 68user 2003/08/12 (火) 21:48:31
とりあえずサーバ自体はしばらく残していただけるそうですが、
ドメインはどうなるかわかりません。

もし急に x68000.startshop.co.jp の名前が引けなくなったら
http://210.249.139.22/~68user/ で見てください。

No. 3302 # ken 2003/08/13 (水) 23:59:46
初めまして。
ネットワークプログラミングの基本を勉強したいと思い、いつも拝見させていただいています。
今はFTPクライアントを勉強中のところなんですが、どうしてもわからないところがあり、教えていただきたいと思って書き込みます。

68userさんのプログラムを参考にした上で、Passiveモードを使ってFTPサーバのファイルリストを取得するのみのプログラムを組んでいます。
サーバ側にまずUSER、PASSコマンドを送信するところまでは成功しました。(レスポンスを見て確認しました)
しかし、その後にPASVコマンドを送っても、サーバから何の応答もありません。
これは何が悪いのでしょうか?
ちなみに相手サーバは、インフォシークのレンタルweb用のFTPサーバです。

No. 3303 # 68user 2003/08/14 (木) 00:27:11
>>3302 ken
なんでですかね。仮に PASV 未対応の FTP サーバであっても、
      500 Commando not understood
程度は返してくると思います (今どき PASV 未対応はありえないと
思いますが)。

一般的に、あらゆる ftp クライアントにデバッグモードが実装されて
いると思うので、まずは今お使いの ftp クライアントで試して、
デバッグ表示を見るのがよいでしょう。

それでも解決しなかったら、telnet で USER・PASS・PASV を叩いた
結果を (ユーザ名・パスワード部分は隠した上で) 見せてください。
あと、もし問題なければ
> インフォシークのレンタルweb用のFTPサーバ
のホスト名を教えてください。

No. 3304 # SL 2003/08/14 (木) 10:22:10
はじめまして、ソケット通信を勉強したくてこちらのHPにたどりつきました。すみませんがひとつ質問させてください。

ソケット通信でindex.htmlというファイルの中身は取得できたのですが、同じようにしてindex.cgiというファイルを指定すると

The requested URL /index.cgi was not found on this server.<P>

という返信が返ってきてしまいます。実行ファイルの場合は何か指定の仕方が違うのでしょうか。
どうぞ宜しくお願い致します。

No. 3305 # 68user 2003/08/14 (木) 11:13:15
>>3304 SL
> 実行ファイルの場合は何か指定の仕方が違うのでしょうか。
同じリクエストの仕方で問題ありません。

        http://www.asahi.com/index.html
は取得できるのに
        http://www.asahi.com/index.cgi
は取得できないのはなぜか?

asahi.com が index.cgi を置いてないからです。

No. 3306 # SL 2003/08/14 (木) 12:07:17
>>3304 68user

ご回答ありがとうございました。

> asahi.com が index.cgi を置いてないからです。

確かにそのとおりでした。すみません。
自分で置いてテストしたのですが、確認したら指定を間違えていました。

他サイトにあるスクリプトをソケット通信で実行したいと思って、やっているのですが、ブラウザからは実行できるのにソケット通信だとできないので、もしかしたら実行ファイルは他の設定があるのかと考えてしまいました。

ブラウザからは実行できるのにソケット通信では実行できないということはあるのでしょうか。

宜しくお願い致します。

No. 3307 # 68user 2003/08/14 (木) 15:44:08
>>3306 SL
> 他サイトにあるスクリプトをソケット通信で実行したいと思って、
> やっているのですが、ブラウザからは実行できるのにソケット通信
> だとできないので
これは index.cgi とは別の問題ですか?

どんなリクエストを送っているかを明らかにしていただくのが早い
んですが、まぁ想像するに Host ヘッダを送ってない、てなところでは
ないかと思いました。

いずれにせよクライアントを作る前に telnet で試してみてください。

No. 3308 # SL 2003/08/14 (木) 18:57:02
>>3307 68user

ご回答ありがとうございます。

> これは index.cgi とは別の問題ですか?

他のサイトにあるスクリプトが実行できないので、自分のところにスクリプトを置いて実験しているだけですので、困っていることはひとつです。

> んですが、まぁ想像するに Host ヘッダを送ってない、てなところ

Hostヘッダというのは送ってないような気がします。68userさんが公開してくださっているソースをそのまま使っただけですので。
ご指摘のhostヘッダの件が問題点のような気がします。

http://www.shop-link.net/tie-up/test/socket4.txt

ソースは上記です。すみませんが見ていただけますか。

宜しくお願い致します。

No. 3309 # 68user 2003/08/14 (木) 19:36:51
>>3308 SL
> ご指摘のhostヘッダの件が問題点のような気がします。
ブラウザで
    http://219.109.215.211/cgi/gp_new.CGI
を見ると not found になるということは、そういうことでしょうね。

http://x68000.startshop.co.jp/~68user/net/http-4.html を見て、
Host ヘッダを追加してみてください。

No. 3310 # SL [E-mail] 2003/08/14 (木) 23:27:04
>>3309 68user

ありがとうございました。
なんとか動くようになりました。

Hostヘッダを追加して、proxyを使用しないようにしました。

本当にありがとうございました。
また何かありましたら宜しくお願い致します(^^;

お礼と言ってはなんですが、メルマガ出してますので、何か宣伝したいことがあったらメールして下さい。<m(_w_)m>

No. 3311 # ken 2003/08/15 (金) 10:58:54
ご返答ありがとうございました。
えっと…結論から言うと、解決しました(^^;

ftpコマンドでもtelnetコマンドでも問題が無かったので、
やはり自分のプログラムに問題があるのだろうと思い、もう一度見直しました。
どうやら、全箇所でレスポンスを受け取ってないのが原因かと思いました。
ぼくは、要所要所でだけ、受け取ったレスポンスを表示させればいいのかと思ってたんですけど、どうやらそれがいけなかったようですね。
それによっていろいろと狂ってきたようです。
レスポンスをすべて表示させたりしたら直りました。
ではでは、ありがとうございましたm(_ _)m

No. 3312 # さんぺい 2003/08/19 (火) 15:57:03
初めて投稿させていただきます。
UNIXはまだ初心者です。
教えていただきたいことなんですが、今Cシェルを作成しています。
その中で処理終了後にメールを送ろうとしているのですがFrom句(差出人)
を任意で変更したいと考えているのですが可能なのでしょうか。
いろいろ調べてみましたがFrom句を変えるようなものはありませんでした。
ご存知のかたがいらっしゃったら教えていただけないでしょうか。
Subjectだけ指定したソースを記載しておきます。
お願いします。
サーバ(username)[1]:/usr/ucb/mail -s "test" test@test.co.jp < test.txt

No. 3313 # 68user 2003/08/19 (火) 18:15:36
>>3312 さんぺい
> /usr/ucb/mail -s "test" test@test.co.jp < test.txt
test.txt に
      From: hoge
      Subject: test
      To: test@test.co.jp

      本文
などとヘッダ類を全部書いて、
      % /usr/ucb/mail -t < test.txt
でいけると思います。

ただ、エラーが発生したときに戻ってくるメールアドレス
(envelope-from) はこれでは書き換わりませんのでご注意を。
もしそれも変更したいなら sendmail を直接呼ぶしかないと
思います。

No. 3314 # mikan [E-mail] 2003/08/21 (木) 10:02:49
初めて投稿させていただきます。
UNIXは学生の時に整った環境で触っていた程度です。

今、職場の方でUNIXにユーザ追加をし、メールユーザを増やそうとしています。
方法としては、
「vipwコマンド」を使用してユーザを追加しました。
ユーザ自体は追加できたのですが、いざメールを使用してみると、パスワード認証エラーがでてはじかれます。
パスワードがおかしいのかと思い、「passwdコマンド」でパスワードを変更してみたのですが結果は同じでした。

他になにか、設定がいるのでしょうか?
ちなみに、「fingerコマンド」を使用して追加したユーザ情報を表示したところ、ユーザは存在すると認識されているようです。
お手数ですが、素人な私にどうかご教示下さい。

No. 3315 # tomtom 2003/08/22 (金) 14:30:33
はじめまして、tomtom といいます。
ソケット通信に興味があり、勉強に励んではや3ヶ月の初心者です。

最近、自分で簡単なクライアントサーバのソケット通信プログラムを
作成してみたのですが、recv関数で受信エラーが発生してしまいます。
メッセージの送信元で、send関数により送信された内容と、
実際にrecv関数で受信した内容を確認してみたところ、きちんと
同じものが受信できているようでした。

そこで、エラー番号から何がおきているのか解析しようとしたのですが、
やり方が間違っているのかエラー番号を何も出力してくれません。

もし、何かお気づきのことがあるようでしたら、
ご指導いただけないでしょうか?

問題の箇所:

if(recv($sock_id, $msg, $MAX_BUFF, 0) eq undef){
                    print "$msg";
    print "errno = $!";
}

No. 3316 # tomotomo 2003/08/22 (金) 16:08:39
度々すみません。
先ほど投稿させていただいたtomtomです。
処理系を書き忘れたので,再度書き込みをさせていただきました。
動かしている処理系は、linuxです。
余談ですが、linux-perlとactive-perlとで、recvやsendなどの
システムコールの処理結果は、異なるのでしょうか?
(NG時undefを返さず、別のものを返す、、など)

クライアントをlinux-perlで、サーバをactive-perl(WinXP)で
起動しおり、サーバの方は、同様のrecv記述で上手く受信できているの
で、なにか関係あるのかな、と素人ながら少し気になりました。

以上、度々失礼しました。

No. 3317 # 68user 2003/08/22 (金) 16:21:46
>>3315 tomtom
> if(recv($sock_id, $msg, $MAX_BUFF, 0) eq undef){
undef かどうかのチェックは、正しくは
    if ( ! defined recv($sock_id, $msg, $MAX_BUFF, 0) ){
です。recv は相手側のアドレス (IP アドレス+ポート番号) を
返すので、それが undef と一致する、と解釈されているのかも
しれません。

# でも、この書き方では undef を返さない限り eq undef と
# ならないような気がするなぁ。

>>3314 mikan
> いざメールを使用してみると、パスワード認証エラーがでて
> はじかれます。
メールを使用というのは、POP を使ってメールを取得してみた
ということですか? もしそうなら、telnet で POP サーバに
アクセスし、本当に認証エラーになっているのか調べてください。
      http://x68000.startshop.co.jp/~68user/net/pop3-1.html

あと、ユーザ追加だけで OK か、というのは職場のメールサーバの
設定次第なので何とも言えません。

No. 3318 # tomtom 2003/08/23 (土) 09:37:45
tomtomです。
68userさん、アドバイスをありがとうございます。
自分が素人であることを実感いたしました。
undefを判別するのには、define関数をもちいるのですね。
アドバイスに感謝いたします。
早速、試してみますね。

ではでは

No. 3319 # スナフキン 2003/08/29 (金) 05:22:17
perlでテキスト処理をしていますが、有るリストをキーとしたハッシュ
を生成したんですが、そのキーとなるファイルのサイズが110Mb程、キー数
(レコード数)は約1000万弱のレコードが有ります。

そのハッシュのキーを使い別のCSVのフィールドの中に同じキーが存在
する場合に必要な処理を行なっています。
if(exists $KEY{$csv_key_field}){ 処理 }

で、実際に動かすと500Mbのメモリを使い切り(何故?)、1Gbのスワップ
さえも使いきり止まってしまいます。

根本的にこのアルゴリズム自体が悪いのか、それとも何かメモリ使用量を
抑える解決方法があるのか教えてください。

ちなみに、キーとなるデータを配列に格納して grep で検索するとさらに
べらぼうに時間が掛かります。

具体的には2つのリストの合成処理なんですが、このくらいの規模になると
DBに置き換えて処理した方が良いのでしょうか?
(最終的には何らかのDBに格納されるそうです)

もちろん、変数は可能な限り局所化しています。(つもりです(^^;)

もっと言えば、上記は最大サイズのリストではありますが、キーリストは
複数あり、それらを順繰りに処理しています。

どうぞお助けくださいm(_ _)m

No. 3320 # 68user 2003/08/29 (金) 22:28:24
>>3319 スナフキン
> そのキーとなるファイルのサイズが110Mb程、キー数(レコード数)は
> 約1000万弱のレコードが有ります。
全体のデータ容量がわからないですが、仮に 300MB 程度だとしても、
1.5GB 喰い尽くしてもおかしくないかなぁとは思います。

perl の内部構造は知りませんが、スカラー 1つ、配列の一要素、
ハッシュ 1キーなど、それぞれに必ず何バイトかずつ管理用データを
perl が保持しているからです。

実感としては、100MB 程度でもデータの持ち方次第ではまともに
動かないこともあるんじゃないかと思います。

> このくらいの規模になるとDBに置き換えて処理した方が良いので
> しょうか?
perl でもがんばれば何とかなるかもしれませんが (実データはファイルに
保存し、ハッシュにアクセスされるたびに tie でそのファイルを見にいくとか)、
    1. データが固定長 (もしくは最大長が決まっている)
    2. CSV の項目名や項目長が変わる可能性は少ない
    3. 処理内容が変わる可能性が少しでもある
          (この条件に引っかかるレコードは除外する、とか)
であれば、DB に突っ込んだ方がよろしいのではないでしょうか。
わたしならそうします。

項目名や項目長も変わるかもしれないなら、DBD::CSV モジュールとか
(使ったことないですけど)。

No. 3321 # スナフキン 2003/08/29 (金) 23:36:11
助言ありがとうございます。

>仮に 300MB 程度だとしても、1.5GB 喰い尽くしてもおかしくないかなぁとは思います。
うーんやはりそうですか。

データの持ち方の影響も大きいとは思いますが、ハッシュは内部で
キーのインデックスを作っているために、キー全体のデータよりも
相当数のメモリを食うのかな?となんとなく考えていましたが、
まさかこれほどとは思いませんでした。

> 1. データが固定長 (もしくは最大長が決まっている)
> 2. CSV の項目名や項目長が変わる可能性は少ない
> 3. 処理内容が変わる可能性が少しでもある
> (この条件に引っかかるレコードは除外する、とか)
>であれば、DB に突っ込んだ方がよろしいのではないでしょうか。
2と3は該当するので、DBに変換して処理する方向でやってみます。

ただ、元の入力ソースの総合計が2.6Gbも有るので、DB化する事に
かかる時間やファイル占有量がわからなくてその選択肢を選びま
せんでした。

全て書き直しになりそうだ・・・汗

No. 3322 # 岩崎 [E-mail] 2003/09/01 (月) 13:06:04
突然のメールですみません。
岩崎と申します。

実は、WebでMewの操作について探していたところ、貴殿を拝見し、
もしかしたら、下記の対応方法をご存じなのではないかと思い、
メールをお送りさせていただいております。

お忙しいとは思われますが、もし、ご存じでしたならば対処方法を
教えてください。

----
質問
----
現在、MewにてMailチェックをしております。
emacs上でM-x Mewとタイプするとパスワードが聞かれると同時に
過去のMail(以前受信したMail)も表示されます。

しかし、昨晩より、M-x Mewと打ち込んでも新規に受信したmail
しか閲覧できません。おかしいとおもい、Mail/inbox配下を
見たところ、確かに1〜3500件までは入っております。

再度、「i」コマンドで新しいMailを受信すると、受信したMailは
3501件目と表示されますが、3500件目より以前のmailは見えません。
「Shift-O」で順番を整理すると、整理はできるようです。

Mewにて何故か?見えなくなった過去のMailを見えるようにするには
どのようにすればよろしいのでしょうか?

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

また、できれば、CCでiwanov@relief.ne.jpまで情報を転送
いただければ幸甚です。、

No. 3323 # pyontan [E-mail] 2003/09/02 (火) 08:07:32
ご存知の方がいらっしゃれば、教えてください。
UNIXサーバで、あるファイルがなくなりました。
いつ、どのように消えてしまったかを知る術はあるのでしょうか?
領域不足で、優先度が低く削除されたとか、
誰かがrmコマンドを実行したとか…。
教えてください。

No. 3324 # 68user 2003/09/05 (金) 01:04:28
>>3322 岩崎
Mew のことは http://www.mew.org で質問した方が早く解決すると思います。


>>3323 pyontan
> いつ、どのように消えてしまったかを知る術はあるのでしょうか?
残念ながら、よっぽど特別な仕掛けでも仕込んでおかない限り
無理だと思います。

> 領域不足で、優先度が低く削除されたとか、
さすがにこれはないでしょう。ちなみに UNIX では、ファイルに
優先度という概念はないです。

> 誰かがrmコマンドを実行したとか…。
というようなログも、一般的な UNIX では用意されていないです。

No. 3325 # ken 2003/09/07 (日) 21:51:47
こんばんは。
現在、DNSクライアントを勉強中です。
サンプルをまだ解析中なんですけど、どうしてもわからない箇所がいくつかあるので…質問させていただきます。

まず、フラグについてです。
えっと…少し説明しにくいんですけど、何故、16ビットと書いてあるのに第15ビットまでの説明までしかないのでしょうか?

次に、ネットワークバイトオーダについてです。
サンプル中で、質問数、回答数、権威数などはpackするときにネットワークバイトオーダに変換しているのに、IDとフラグを変換しないのは何故でしょうか?
どういう物をネットワークバイトオーダに変換しなければいけないのかよくわからなくて…。

最後に、サンプル中に出てくる$restについてです。
データを受信した時、細かく言うと$restにはどういった順番でデータが入っているのでしょうか?
それがよくわからなく、get_domainサブルーチンに渡したときの処理の仕方がよくわかりません…(−−;

以上長々と申し訳ありませんが、どうかよろしくお願いしますm(_ _)m

No. 3326 # 68user 2003/09/08 (月) 13:02:19
>>3325 ken
> 何故、16ビットと書いてあるのに第15ビットまでの説明までしか
> ないのでしょうか?
http://x68000.startshop.co.jp/~68user/net/resolver-2.html#flag
のところですね。わたくしの誤りです。RCODE が 3ビットとなって
いますが、正しくは4ビットです。近いうちに直します。

# 表の部分で「1……15bit」とあるところも、「1……16bit」の
# 誤りですね。

> 質問数、回答数、権威数などはpackするときにネットワークバイト
> オーダに変換しているのに、IDとフラグを変換しないのは何故でしょうか?
http://x68000.startshop.co.jp/~68user/net/resolver-3.html#4
の以下の部分ですね (一部略)。

        sub make_query {
                my ($type, $class) = @_;

                # 識別子設定
                my $id = pack('B16', '0000000000000000');

                  # フラグを構成する各要素を設定
                  my $qr = QR::Query; # 0:質問
                  my $opcode = OPCODE::StandardQuery; # 0:標準照会
                  my $aa = 0; # Authoritative Answer (応答時にセット)

                  # フラグ (0 と 1 の文字列)
                  my $flg_binary = sprintf("%d%04d%d%d%d%d%03d%d", $qr, $opcode, $aa, (略));

                  # フラグ (2バイトのバイナリ)
                  my $flg = pack("B16", $flg_binary);

                  # 質問数のみ 1。回答数、権威数、追加情報数はいずれも 0。
                  my $question_count = pack('n', 1);
                  my $response_count = pack('n', 0);

                  # foo.example.com というホスト名を 3foo7example3com という形に変換。
                  my $query_name = &make_domain($query_host);

                  # リクエストは「識別子+フラグ+質問数+回答数+権威数+追加情報数+質問」からなる。
                  my $request = $id.$flg.$question_count.$response_count.$auth_count.$ext_count.$question;

                  return $request;
          }

ID やフラグは pack('B16') でバイナリデータに変換していますが、
その際に順番が入れ替わることはありません。
          pack('B16', '1111000000000011')
は順序を保持したまま
          1111000000000011
となります。
          0000001111110000
となることはありません。

ただし数値の場合は、Short 値を作ろうとして素直に
            my $question_count = pack('s', 1);
などとしてしまうと、リトルエンディアンな Intel 系では 0x01 0x00、
ビッグエンディアンな Motorola・Sparc 系では 0x00 0x01 となって
しまいます。よってこの場合は
            my $question_count = pack('n', 1);
と n を使って、どの環境でも 0x00 0x01 となるようにするわけです。


> データを受信した時、細かく言うと$restにはどういった順番でデータが
> 入っているのでしょうか?
以下、http://x68000.startshop.co.jp/~68user/net/sample/resolver-1.pl
sub parse_response 関数の説明をします。

        my ($id, $flg, $question_count, $response_count, $auth_count, $ext_count, $rest)
            = unpack('nnnnnna*', $org_dgram);

の時点では、$rest には「(7)質問レコード以降のデータ」(回答レコード・権威
レコード・追加情報レコードも含む) が入っています。

データの順序は
      http://x68000.startshop.co.jp/~68user/net/resolver-2.html#4
の「解析した応答の構成」の順のとおりです。


$rest の先頭のデータは「(7)質問レコード」ですが、「(7)質問レコード」は
      (7.1)照会名 (可変長)
      (7.2)照会タイプ
      (7.3)照会クラス
から成り立っていますので、$rest の先頭データは「(7.1)照会名」であるとも
言えます。

その後、

        foreach my $count ($question_count){
                my $domain;
                # この時点で $rest の先頭データは「(7.1)照会名」
                ($domain, $rest) = get_domain($rest, $org_dgram);
                # この時点で $rest の先頭データは「(7.2)照会タイプ」
                my ($type, $class) = unpack('nn', $rest);
                # ↑「(7.2)照会タイプ」と「(7.3)照会クラス」を取り出す。
                substr($rest, 0, 4) = '';
                # ↑取り出した「(7.2)照会タイプ」と「(7.3)照会クラス」を削る。

                printf "質問: ドメイン名: %s\n", $domain;
                printf "質問: タイプ: %d (%s)\n", $type, TYPE::getName($type);
                printf "質問: クラス: %d (%s)\n", $class, CLASS::getName($class);
                print $hr_line;
        }

といったふうに、$rest の先頭部分から順に、データを取り出す⇒削る
という処理を繰り返します。

質問部分を読み終わると、$rest にはリソースレコード (回答・権威・追加情報) が
残っています。リソースレコードは
      ドメイン名 (可変長)
      タイプ
      クラス
      生存時間 (TTL)
      リソースデータ長
      リソースデータ (可変長)
から成っていますので、

        foreach (1 .. $count){
                my $domain;

                ($domain, $rest) = get_domain($rest, $org_dgram);
                # ↑ここでドメインを切り出す。
                my ($type, $class, $ttl, $rdata_length) = unpack('nnNn', $rest);
                # ↑タイプ・クラス・生存時間・リソースデータ長を取り出す。
                substr($rest, 0, 10) = '';
                # ↑タイプ・クラス・生存時間・リソースデータ長の分を削る。

                my ($rdata) = substr($rest, 0, $rdata_length);
                substr($rest, 0, $rdata_length) = '';
                # ↑リソースデータ取得
        }

と、ここでもやはり「データを先頭から取り出し、削る」の繰り返している
わけです。

No. 3327 # ken 2003/09/09 (火) 13:30:18
なるほど…だいたいよくわかりました、ありがとうございます。
でもまだget_domainサブルーチン中の処理がよくわかりませんねぇ…。
while文の最初のif文の中です。

493: if ( ( $len & 0xc0 ) == 0xc0 ){
    494: # 上位 2ビットが立っていたら、もう 1バイト読みこむ (合計 16ビット)。
    495: # そして上位 2ビットを落とし、残り 14ビットを DNS サーバから
    496: # 返された UDP データグラム先頭からのオフセットとして再帰。。
    497:
    498: my $offset = unpack('n', $data) ^ 0xc000;
    499: my $new_data = substr($org_data, $offset);
    500: substr($data, 0, 2) = '';
    501:
    502: my ($domain_part) = get_domain($new_data, $org_data);
    503: push(@domains, $domain_part);
    504: last;
    505:
    506: } else {
    507: # 上位 2ビットが立っていないので、カウンタとして扱う。
    508: substr($data, 0, 1) = '';
    509: }

まず、if文の中で$dataの上位2ビットが立っていたときに、その2ビットを除いた上位14ビットを$offsetに入れて、$org_dataの$offset番目からのデータを$new_dataに入れて、$dataの上位2ビットを落としたところまではわかりました。
そのあと再びget_domainサブルーチンを呼び出すところからが…どうなるのでしょうか??(^^;

また、else文の中の1行はどういった意味を持っているのでしょうか?
ここでいう「カウンタ」という物もよくわからなくて…。

どうか、よろしくお願いします

No. 3328 # 68user 2003/09/09 (火) 21:36:40
>>3327 ken
> そのあと再びget_domainサブルーチンを呼び出すところからが…
> どうなるのでしょうか??(^^;
http://x68000.startshop.co.jp/~68user/net/resolver-2.html#6 の例だと、
最初に get_domain が受け取った $data が
      (0x04)www2(0xC0)(0x13)....
で、一回目の while ループが終了した時点で
        $data = "(0xC0)(0x13)...."
        @domains=('www2');★1
となっています。

二回目の while ループでは
      my $len = unpack('C', $data);
で $len は 0xC0 になり、
      if ( ( $len & 0xc0 ) == 0xc0 ){
が真なので
      my $offset = unpack('n', $data) ^ 0xc000;
          ⇒ $offset は 0x13
      my $new_data = substr($org_data, $offset);
          ⇒ $new_data は、UDP データグラム全体 ($org_data) の 0x13バイト目
      substr($data, 0, 2) = '';
          ⇒ $data は "(0xC0)(0x13)...." から "...." となる (先頭 2バイトを削る)
となります。$new_data には
      (0x09)startshop(0x02)co(0x02)jp(0x00)
が入っています。

ここで
     my ($domain_part) = get_domain($new_data, $org_data);★2
        push(@domains, $domain_part);★3
と get_domain を再帰呼び出しすると、
      sub get_domain {
            my ($data, $org_data) = @_;
の $data には
      (0x09)startshop(0x02)co(0x02)jp(0x00)....
が入っています。再帰呼び出しされた get_domain が処理を終えるときには
        @domains = ('startshop', 'co', 'jp');
となっており、最終的に
        return 'startshop.co.jp';
とドメインの一部を返します。

で、再帰呼び出しした側の get_domain に処理が戻ると、以下のような
流れになります。
    ★1 の @domains にはすでに www2 が入っている
    ★2 の $domain_part には、再帰呼び出しした get_domain から受け取った startshop.co.jp が入っている
    ★3 で @domains = ('www2', 'startshop.co.jp') となる


> また、else文の中の1行はどういった意味を持っているのでしょうか?
> ここでいう「カウンタ」という物もよくわからなくて…。
      (0x03)www(0x02)jp(0x07)FreeBSD(0x03)org(0x00)
の 3・2・7・3・0 がここでいうカウンタです。$len には
その後に続くバイト長が入っており、
      508: substr($data, 0, 1) = '';
はその $len の部分を削っています。

# 説明文で使用していない用語 (カウンタ) を、ソースで使ってはいけませんね。

No. 3329 # tomtom 2003/09/10 (水) 10:17:13
先日質問させていただいた、tomtomです。
クライアントが受信待ちの状態の時に、サーバに
ソケットをクローズされたら、クライアントは、
どうなるのでしょうか?

以前質問させていただいた時に、undefを受信してしまう
という問題があったのですが、サーバ側で勝手にセッションを
終了してしまっていた可能性があるので、その辺が関係している
かどうか疑問に思ったため、再度質問させていただきました。

No. 3330 # ken 2003/09/10 (水) 23:11:50
あ〜っ、なるほど!
わかりました!完璧にわかって疑問が紐解けましたよ〜!
get_domainの再起呼び出し後はそういう処理だったんですね…。
カウンタの意味もわかりましたし(^^;)、もうばっちりです!
長々と本当にありがとうございましたm(_ _)m
もしまた何かありましたら…よろしくお願いいたします(^^;

No. 3331 # lopper [E-mail] 2003/09/12 (金) 18:51:13
こんにちは、今Perl で UDP 通信を行うスクリプトを作っているの
ですが、少し分からないところがあるので質問させてください。

普通に UDP 通信は問題なく行えているのですが、送信元の IP アドレスが
拾えなくて悩んでおります。
recv 関数の戻り値で「送信元のアドレス」は拾えるのですが、送信元が
「どこへ宛てて送信したか?」が分からないのです。
IO::Socket::INET モジュールを使用していますが、peeraddr メソッドを
使っても何も返ってきません。

http://x68000.startshop.co.jp/~68user/net/udp-3.html に UDP で
connect 出来ると書かれていますが、connect すれば送信先アドレスを
拾う事ができますでしょうか?

ご存じの方、よろしくお願いいたします。

No. 3332 # 68user 2003/09/13 (土) 01:35:39
>>3329 tomtom
> クライアントが受信待ちの状態の時に、サーバにソケットを
> クローズされたら、クライアントは、どうなるのでしょうか?
単に相手がソケットをクローズしただけなら、recv は 0 を
返します。

もし
      A が listen → B が connect → A がソケットクローズ
      → B が send → B が recv
なら、B は SIGPIPE を受けます。


>>3331 lopper
> recv 関数の戻り値で「送信元のアドレス」は拾える
> のですが、送信元が「どこへ宛てて送信したか?」が
> 分からないのです。
ソケットが送信先を記憶していないからです。同じ相手に
連続して UDP データグラムを送信する場合、
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    send(SOCKET, "hoge1", 0, $sock_addr);
    send(SOCKET, "hoge2", 0, $sock_addr);
と、毎回 send の引数に宛先である $sock_addr を指定
しなければいけません。なぜなら、一度目の send を
実行した後、SOCKET は $sock_addr に送信したことを
覚えていないからです。

# ソケットの先のアドレスが確定していないので、相手側で
# エラーがあって ICMP メッセージが返ってきても、カーネルは
# どのソケットにエラーを伝えればよいかわからない。だから
# 非 connect な UDP では相手側のエラーを拾えないわけです。

> connect すれば送信先アドレスを拾う事ができますでしょうか?
できます。
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    connect(SOCKET, $sock_addr);
この処理で SOCKET は「宛先が $sock_addr であること」を
覚えます。よって、この後 send する場合は
    send(SOCKET, "hoge1", 0);
と宛先を省略できるのです。

C で言うと、connect(2) することで、sendto(2) ではなく
send(2) が使えるということです。

No. 3333 # lopper [E-mail] 2003/09/13 (土) 22:21:38
68user さん、お返事ありがとうございます。
socket => connect を行う事で send を呼ぶ時に IP アドレスを
指定しなくても良くなるわけですね。

逆に recv などで受信する時はどうなのでしょうか。
例えば 192.168.0.255 宛のブロードキャストメッセージを受信しても
受信側からはブロードキャストメッセージを受信したのか、ユニキャストを
受信したのか分かりません。
Java などで UDP を使う時は相手が送信した IP アドレスと相手の IP
アドレス両方が分かるようですが、Perl では難しいのでしょうか?

No. 3334 # 68user 2003/09/13 (土) 22:25:12
ちょっと前にこのページが移転するかもと言っていましたが、
継続して使わせていただけることになりました。

68user's page は
      Startshop さん http://www.startshop.co.jp/
      両毛インターネットさん http://www.takauji.or.jp/
      Netboy さん
のご厚意により、回線・マシンを無料で使用させていただいて
おります。ここに改めて感謝の意を表したいと思います。

No. 3335 # 68user 2003/09/13 (土) 23:01:58
>>3333 lopper
> 例えば 192.168.0.255 宛のブロードキャストメッセージを受信しても
> 受信側からはブロードキャストメッセージを受信したのか、ユニキャストを
> 受信したのか分かりません。
一般的な BSD ソケットの API を使う以上は判断できないと思っています。

> Java などで UDP を使う時は相手が送信した IP アドレスと相手の IP
> アドレス両方が分かるようですが、Perl では難しいのでしょうか?
Java なら受け取ったデータグラムがブロードキャスト宛かどうかを
判断できるのでしょうか。

もしそうなら、Java が BSD ソケット API を使用せずネットワーク
機能を自前で作っているとは考えづらいので、BSD ソケット API で
実現可能なのだろうと思います。

DatagramSocket や DatagramPacket を見る限りでは、Java であっても
無理ではないかと思いましたが、もし可能なのであれば Java で記述
したサンプルプログラムを見せていただけますでしょうか。

No. 3336 # へにか 2003/09/13 (土) 23:07:33
おお、それはすばらしいですね。
もし私が両毛地方とか県南・県央(一部重複してますが)に住むことに
なったら、率先して両毛インターネットさんを選びたいという気持ち
でいっぱいです。

No. 3337 # lopper [E-mail] 2003/09/14 (日) 00:31:47
お返事ありがとうございます。
確実に Java で宛て先アドレスを取得できるという確認はしていない
のですが、以下の IP Messenger for Java の中では行っている
ようです。

http://www1.ttv.ne.jp/~digitune/Java/IPMsg/
からソースコードをダウンロードして、その中にある IPMProxyEvent.java
ファイルの中にある、getToIPMAddress で見ている見たいです。

P.S.
私は Java には詳しくはないので、確実かどうかわかりません。

No. 3338 # 68user 2003/09/14 (日) 01:12:32
>>3336 へにか
> 率先して両毛インターネットさんを選びたいという気持ちでいっぱいです。
本当に一銭たりともお金を払っていないので申し訳ないことです。
機会があればぜひとも。

>>3337 lopper
> IPMProxyEvent.java ファイルの中にある、getToIPMAddress で
> 見ている見たいです。
ぱっと見、Java 版 IP Messenger 独自機能である proxy 機能の
ソースのように見えます。README には「proxy 機能は TCP で実装
されている」とありましたので、多分違うのではないかと思います。

ちなみに 本家 IP Messenger は、受けたメッセージがブロード
キャストだと、ログに「(多)」などと表示されます。

しかしこれは UDP のレイヤで判別しているのではなくて、IP
Messenger のアプリで使用するコマンドの IPMSG_BROADCASTOPT が
立っているかどうかで判断しています。

No. 3339 # lopper [E-mail] 2003/09/14 (日) 03:13:58
lopper です。
お返事ありがとうございます。
ブロードキャストの件了解しました。なるほど Java版 ではプロキシに TCP を
使用しているので IP アドレスが拾えるのですね。わかりました。

色々とありがとうございました。自分なりに他の道を探してみます。

No. 3340 # tomtom 2003/09/15 (月) 09:10:42
tomtomです。
68userさん、お返事ありがとうございます。
そうですか、、もし、undefを返すなら以前の
説明がつくと思ったのですが、どうやら見当違い
のようですね。
また、色々考えてみる事にします。
原因が分かったら、また書き込みさせていただきます。

No. 3341 # のぐけん。 2003/09/15 (月) 12:15:50
こんにちわ。以前質問させてもらった者です。

それで、また質問なのですが(笑
Perlカテゴリの中のProxy Serverのことで質問です。
SIGPIPEシグナルが飛んで来た時用
ということで、$SIG{PIPE}を作られていますが、
これはどこで使用されているのでしょうか?
作っとけば勝手にってことなのでしょうか?

お忙しいかと思いますが、よろしくお願いします。

No. 3342 # 68user 2003/09/16 (火) 02:54:15
>>3341 のぐけん。
> $SIG{PIPE}を作られていますが、これはどこで使用
> されているのでしょうか? 作っとけば勝手にって
> ことなのでしょうか?
勝手に使用されます。

シグナルを最初に受けるのはカーネルです。カーネルは
プロセスごとに「SIGINT がきたらどーする、SIGPIPE が
きたらこーする」というテーブルを参照し、適切な動作を
行います。

つまり %SIG の書き換えというのは、自分のプロセスの
シグナル処理用テーブルを更新なわけで。

No. 3343 # 68user 2003/09/16 (火) 02:55:24
ところで、
    http://x68000.startshop.co.jp/~68user/net/link-book.html#8
の「UNIX ネットワークベストプログラミング入門」ですが、
    UNIX ネットワークプログラミング入門
        http://www.gihyo.co.jp/books/syoseki.php/4-7741-1754-4
として新版が出版されてるのを見付けました。

買ってませんが、立ち読みした限りでは htons は使われて
いました (笑)。大幅な内容追加というわけではないようなので、
「ベスト」の方を持っている人は不要かなーという感じです。

クライアントとサーバ両方を自作してみるというのは重要な
ことだと思いますので、改めてお勧めしておきます。

No. 3344 # Tsun 2003/09/17 (水) 16:50:41
始めまして、Tsunと申します。

何時も勉強させて頂いております。
共通鍵暗号のページで3DESでの鍵長が56*3にならない訳ですが、3DESは
DESプロセスを3回繰り返すと言う意味で、使う鍵は実は2個なのです。
具体的に言うと、56ビットの鍵AとBを用意して、以下の様に暗号化します。

元データ→鍵Aで暗号化→鍵Bで復号化→鍵Aで暗号化→暗号データ
                        (1)    (2)   (3)

(2)で(1)で暗号化したものとは別の鍵で復号化する訳ですから、当然正しく復号されません、しかし見方を変えれば、これは別の鍵で暗号化したものと、同値となります。ただ鍵としては56ビットを2つ使っているだけなので、鍵の強度としては112ビットの鍵長と同等となります。

この方式の利点は、実質的には56ビットの演算量+αで112ビット相当の鍵強度が得られる所にあります。
鍵長と演算量の比は対数的ですから、112ビットの鍵を使って1回演算するより、56ビットの鍵を使って、3回演算するほうが有利となります。

No. 3345 # asachio [E-mail] 2003/09/24 (水) 00:17:10
お世話になります。UNIXを学びはじめて1か月半の初心者です。grep, findの使用方法を完全理解していないためだと思いますが、(すみません。)ある文字列を含む、ファイル名を検索するにはどのように、grepあるいは、findを使用すればよろしいでしょうか?

No. 3346 # 4lj [E-mail] 2003/09/24 (水) 19:02:31
はじめまして。私は普段、

find ./ -type f | xargs grep -n "foo"

とかやってますが。後はお好みでgrepに-iつけてみたり。

No. 3347 # pranky [E-mail] 2003/09/25 (木) 01:06:50
こんばんは初めまして。pranky と申します。
ここで、いつもネットワークプログラミングなどを勉強させて頂いております。

今回 TCP で実装してあった双方向のプロトコルをファイアウォールにも
対応させなくてはならなくなり、困っているのでご相談させて下さい。
今のところ考えているのは、現在の TCP のプロトコルを HTTP の上に乗せて
HTTP プロキシに対応する事でファイアウォールを越えようと考えています。

開発言語は Perl を使用しておりますので、テスト的に HTTP:Daemon モジュールを
使用してサーバを構築し、LWP::UserAgent でクライアントとして動作を
させてみました。

1. 基本的に既存のプロトコルが Peer to Peer なので、起動時にクライアント側から
サーバ側へ HTTP 接続をし、その起動中はつないだままにしておきたい。

2. 接続中はクライアント側からもサーバ側からも数KB 位のデータのやりとりを
双方向で行いたい。

この上記2 点は両立するものでしょうか?
上の 1. は keepalive を行えばできそうな感じはしますが、下の 2. はできる
のでしょうか。

通常のブラウザを見ていると
1. サーバ側へファイル要求
2. サーバ側がファイル送信
という事の繰り返しですが、MSN Messenger が HTTP を使用している事を
考えると上記の 1. 2. の両立が出来そうな気がします。

No. 3348 # YK 2003/09/25 (木) 10:25:24
はじめまして。
いつもUNIXの情報を参考にさせて頂いております

現在、あるファイルに書かれたファイル名を取得し
そのファイル名が存在するか判定するCシェルを作成しております

set FILE_NAME = `awk '{printf $1}' fileA`

というコマンドでファイル名は取得できたのですが、
ファイル内で改行されている際に改行コードまで取得してしまい
ファイルの存在判定が正しく行えません

改行を除外してファイル名を取得する事は出来ないでしょうか?

ご存知でしたら御教授して頂きたく思います
宜しくお願い致します

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

No. 3349 # 68user 2003/09/25 (木) 15:40:16
>>3344 Tsun
勉強になります。ありがとうございます。

もうちょっと勉強して自分のモノにしてから web の方も
修正したいと思います。

>>3345 asachio
> ある文字列を含む、ファイル名を検索するには
「ある文字列を含むファイル」の名前の一覧がほしいなら
>>3346 4lj
で紹介していただいた方法で。

じゃなくて「ファイル名にある文字列を含むファイル」の名前の
一覧が欲しいのなら
      % find /dir -name \*hoge\* -print
などなど。

>>3347 pranky
> 1. 基本的に既存のプロトコルが Peer to Peer なので、起動時に
> クライアント側からサーバ側へ HTTP 接続をし、その起動中は
> つないだままにしておきたい。
> 2. 接続中はクライアント側からもサーバ側からも数KB 位のデータの
> やりとりを双方向で行いたい。
1 は keep alive を使ったとしても、proxy のタイムアウトが
ある or あるかもしれないので無理ではないかと思います。

2 も HTTP ではサーバプッシュができないので、純粋な意味での
双方向通信は無理ではないでしょうか (サーバから不定期に
クライアントにデータを送るのは不可能だが、クライアントが
定期的にサーバに接続し、そのレスポンスにサーバからのデータを
載せるなら可能)。

> MSN Messenger が HTTP を使用している事を考えると上記の
> 1. 2. の両立が出来そうな気がします。
MSN Messenger は UPnP を使用しており、UPnP が HTTP の上を
流れているだけです。よって、純粋な HTTP では実現不可能では
ないかと思います。

どこまで実現可能かは、プロトコルの詳細がわからないとなんとも
言えないです。

>>3348 YK
> set FILE_NAME = `awk '{printf $1}' fileA`
> ファイル内で改行されている際に改行コードまで取得してしまい、
> ファイルの存在判定が正しく行えません。
csh は set foo=`bar` とした時点で改行コードを除去すると思う
のですが、改行コードまで取得してしまうというのは本当でしょうか?
どういう方法で改行コードが原因だと確認されましたか?

UNIX の改行コードは 0x0a ですが、DOS や Windows は 0x0d 0x0a
です。それが残っているのであれば、tr などで 0x0d を削除してください。
      http://x68000.startshop.co.jp/~68user/unix/pickup?tr

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