68user's page 掲示板

Prev< No. 4429〜4510> Next  [最新発言に戻る] [過去ログ一覧]
No. 4429 # tamama 2005/12/17 (土) 17:53:52
こんにちは、初めて質問させていただきます。
こちらに載っているOpenSSLを用いたRSA暗号を動かして見たいので、
Windows上でのOpenSSLのインストールの仕方を教えてもらえませんか。
OSはXPでVisual C++.NETを使っています。

No. 4430 # tamama 2005/12/18 (日) 14:10:38
お騒がせしました。
自己解決しました。

No. 4431 # まっちゅう@ペガサス流星拳 2005/12/21 (水) 14:11:13
こんにちは!!
HP-UNIXなんですが、どなたか教えてください。
lsコマンドのタイムスタンプを常に西暦を表示するようにしたいのですが
そのままls -l では直近6ヵ月未満までは西暦がでません。
該当するオプションがあるのでしょうか?
ちなみに-Tはだめでした。
よろしくお願いします。

No. 4432 # 68user 2005/12/22 (木) 13:15:43
>>4431 まっちゅう@ペガサス流星拳
HP-UX 標準の ls では無理だと思います。代案としては、
    - tar cf - ファイル | tar tvf -
    - sed で置換
    - perl などを使う
など。

No. 4433 # fan 2005/12/22 (木) 15:05:38
ありがとうございます。
運良くFinishedメッセージは解決できました。
その次のAppricationDataの暗号化で質問があるのですが、
SSLCompressedが良く分からないです。
もし、ご存知なら、教えていただけないでしょうか。
お願いします。お願いします。

No. 4434 # まっちゅう@ペガサス流星拳 2005/12/22 (木) 17:23:10
やっぱり無理ですか。。。。
代案までありがとうございました。

No. 4435 # hagu 2005/12/24 (土) 15:23:32
tarコマンドで、コマンドの実行ディレクトリからサブディレクトリも含めて、
ワイルドカードで指定したファイル、例えば、「*.txt」の様に指定して、
すべてのファイルを1つのアーカイブにまとめたいのですが、可能なので
しょうか。
ディレクトリも含めたかたちにしたいのですが。

tar -cvf aaa.tar *.txt だと、直下のファイルのみ
tar -cvf aaa.tar *.* だと、すべてのファイル

No. 4436 # zsh 2005/12/24 (土) 22:29:16
>>4435 hagu
いくつか方法はあると思いますが、
$ find . -name "*.txt" | xargs tar cvf outfile.tar
等とすればできます。

No. 4437 # hagu 2005/12/24 (土) 23:07:40
>> 4436

ありがとうございます。
試してみます。

No. 4438 # 68user 2005/12/25 (日) 22:17:24
>>4436 zsh
Solaris の xargs (だったような気がしますが) は、LINE_MAX の長さがかなり
短くて、たしか 10KB 程度しかなかったような気がします。この使い方だと
複数回 tar コマンドが実行された場合、最後の方しかアーカイブに含まれない
ので注意が必要です。

No. 4439 # DNS勉強中 2005/12/26 (月) 00:16:19
>>4408 68user
亀レスすいません。
DNS のプログラミングのアドバイスをしていただいたものです。
出張先の住まいがレオパレスでネット環境があると聞いていたので、
すぐに閲覧できると思いましたが、いろいろ問題があり今までかかりました。
今後は普通に対応できると思います。
よろしくお願いします。

No. 4440 # zsh 2005/12/26 (月) 10:44:00
>>4438 68user
ご指摘ありがとうございます。
確かに複数回実行された場合の考慮が漏れていました。
ちなみに、Solaris の LINE_MAX の値は 2KB のようです。

No. 4441 # hagu 2005/12/26 (月) 11:49:22
>>4438 68user
>>4440 zsh

試して見ました。
ご指摘の通りでした。

標準出力には、すべて出てきましたが、
最後の方しかアーカイブに含まれていませんでした。

どう対応すればよいのですか。

No. 4442 # とーりすがり 2005/12/26 (月) 22:08:58
>>4441 hagu

カナリ遅いですが.

cat /dev/null>outfile.tar && find . -name "*.txt" | while read F in; do tar rvf outfile.tar "$F"; done

No. 4443 # 不明5号 2005/12/26 (月) 22:55:20
サーバーアドレスの見方はどうすれば??教えてください!

No. 4444 # zsh 2005/12/26 (月) 23:37:46
>>4441 hagu
試してませんが、
$ find . -name "*.txt" | xargs tar rvf outfile.tar
でいけると思います。
(tar は r を指定すると追記になります。)

No. 4445 # 68user 2005/12/27 (火) 00:30:52
>>4439 DNS勉強中
宣言した「今月中」もあと残すところ 6日。一度言ったことは守れよ、と
自分にプレッシャーをかける毎日です。

>>4441 hagu
その他。
    - tar cf outfile.tar `find . -name "*.txt"`
        (長すぎると Argument list too long になるが、エラーかどうかがはっきり
          わかるので使えなくもない)
    - tar の、ファイル名一覧をファイルから取得するオプションを使う。

>>4443 不明5号
質問の意味がわかりません。

No. 4446 # 2005/12/28 (水) 00:16:05
>>4445 68user
>>4444 zsh

ありがとうございます。
試してみます。

>tar の、ファイル名一覧をファイルから取得するオプションを使う。
探して見たのですが、使い方がわかりませんでした。
使い方教えてください。

No. 4447 # hagu 2005/12/28 (水) 00:17:47
>>4445 68user
>>4444 zsh

ゴミすみません。
名前のところに”お”が入ったままで書いてしまった。

ありがとうございます。
試してみます。

>tar の、ファイル名一覧をファイルから取得するオプションを使う。
探して見たのですが、使い方がわかりませんでした。
使い方教えてください。

No. 4448 # 68user 2005/12/28 (水) 03:44:29
>>4447 hagu
http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse にあるように、
OS 名を明らかにすれば期待する回答が返ってくる可能性が高まると思われます。

No. 4449 # hagu 2005/12/29 (木) 09:27:24
>>4448 68user

すみません。
UNIXで、Solaris8 です。

No. 4450 # zsh 2005/12/29 (木) 11:07:56
>>4449 hagu
man tar で出てきますが・・・
http://docs.sun.com/app/docs/doc/816-3518/6m9ptvr58?l=ja&a=view

No. 4451 # 68user 2005/12/29 (木) 13:06:57
>>4449 hagu
具体的には
    % find . -name "*.txt" > filelist.txt
    % tar cf outfile.tar -I filelist.txt
てな感じで。手元に Solaris がないので動くかどうかはわかりません。

No. 4452 # 68user 2005/12/31 (土) 18:25:28
>>4404 DNS勉強中
> resolver-1.pl 互換を目指した Linux 版
> http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1160.zip
今月中にと宣言したのでレビューをしようとしたのですが、上記ファイルが
not found になっていて見ることができませんでした。

自宅のマシンには以前ダウンロードしたファイルがあるかもしれませんが、
今は出先なので見ることができません。もたもたしていてすみません。

とりあえず、1関数 1ソースはやめた方がよいとわたしは考えます。普通は
    プログラム全体 > モジュール > 関数 > ブロック
という階層構造があり、例えば変数については
    - グローバル変数にする
    - ファイル内で static としてそのソース内 (モジュール) からのみ参照できるようにする
    - 関数内のローカル変数にする
などの選択肢がありますが、1関数 1ソースだと、ここで言うモジュールという
選択肢がなくなってしまいます。

あとは Makefile を書くのがダルい、というデメリットもありますね。

No. 4453 # DNS勉強中 2005/12/31 (土) 23:36:08
>>4452 68user
すいません。
アップロードしなおしました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1374.zip
ただこれは1関数1ソースバージョンです。
今出張先でこのソースバージョンしか持っていないです。
それと1関数1ソースのデメリット分かりました。
特にMakefileは書いてて同じ事を感じてました。

No. 4454 # DNS勉強中 2005/12/31 (土) 23:56:31
一応1ソースバージョンもアップロードしました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1375.zip
ただこれは学校に提出したバージョンのため、>>4453のソースの1つ前のバージョンのソースとなります。

No. 4455 # 68user 2006/01/09 (月) 05:54:07
>>4453 DNS勉強中
> http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1374.zip
そろそろケチをつけるところもあまりなくて、重箱の隅的ではありますがいくつか。

> char *tc_search(int tc){
> static char tc_result[20];
> ...
> return tc_result;
> }
こういうふうにしてしまうと
      char *p = tc_search(tc_1);
      char *q = tc_search(tc_2);
という使い方ができなくなります (p が指す内容が上書きされてしまうため)。
スレッドセーフでなくなるのと、利用者のレベルが低ければ余計なバグを生む
危険性があります。

UNIX のライブラリ関数でも、最初は localtime・ctime・strtok・gethostbyname などの
非スレッドセーフ版しかありませんでしたが、localtime_r・ctime_r・strtok_r・
gethostbyname_r などのスレッドセーフ版を用意する羽目になってしまいました。

承知の上でそうしておられるならば問題ないと思います。

> /* フラグ一覧を出力 */
> qr = (DNS_response.int_data[DNS_response.pos] & 0x80) >> 7;
> printf(" QR: (Query/Response): %s\n", qr_search(qr));
>
> opcode = ((DNS_response.int_data[DNS_response.pos] & 0x40) >> 6) * 8;
> opcode += ((DNS_response.int_data[DNS_response.pos] & 0x20) >> 5) * 4;
> opcode += ((DNS_response.int_data[DNS_response.pos] & 0x10) >> 4) * 2;
> opcode += (DNS_response.int_data[DNS_response.pos] & 0x08) >> 3;
> printf(" OPCODE: %s\n", opcode_search(opcode));
わかりやすい変数名を使うこと自体は非常によいのですが、同じ値を繰り返し
使用する場合は、

    int flag = DNS_response.int_data[DNS_response.pos];
    qr = (flag & 0x80) >> 7;
    printf(" QR: (Query/Response): %s\n", qr_search(qr));

    opcode = ((flag & 0x40) >> 6) * 8;
    opcode += ((flag & 0x20) >> 5) * 4;
    opcode += ((flag & 0x10) >> 4) * 2;
    opcode += (flag & 0x08) >> 3;
    printf(" OPCODE: %s\n", opcode_search(opcode));

などと一時変数に代入することをお勧めします。狙いは可読性向上と、変更時の
修正ミス防止です。わたしの場合は、

      for ( int i=0 ; i<length ; i++ ){
            struct *hoge_p = hoge_list.buf[x];
            printf("%s\n", hoge_p->foo);
            printf("%s\n", hoge_p->bar);
            printf("%s\n", hoge_p->baz);
      }

などと、ループ中でもよく一時変数に代入します。これは、ループ先頭の

      struct *hoge_p = hoge_list.buf[x];

で、

    このループ中で参照するのは hoge_list.buf[x] だけ。hoge_list.buf[x+1] を
    参照したりはしないよ。

というメッセージを送っているつもりです (効果があるかどうかは知りませんが)。

> DNS_query->data[0] = DNS_packet->id >> 8;
> DNS_query->data[1] = DNS_packet->id & 0xff;
> ...
> DNS_query->data[11] = DNS_packet->ARCOUNT & 0xff;
> for (i=12, j=0; i<12+domain_length; i++, j++)
> DNS_query->data[i] = DNS_question_record->Name[j];
この場合は、変更時の作業量削減とマジックナンバ排除のため一時変数を使うべきです。

      char *data_p = DNS_query->data;
      *(data_p++) = DNS_packet->id >> 8;
      *(data_p++) = DNS_packet->id & 0xff;
      ...
      *(data_p++) = DNS_packet->ARCOUNT & 0xff;
      for ( i=0; i<domain_length; i++)
              *(data_p++) = DNS_question_record->Name[i];


> FLAG flag_list[] = {{ /* 外側の中括弧は構造体の、内側の中括弧は配列の初期値を示す */
> 0,
> ...
> }};
>
> return ((flag_list->qr * 128 + flag_list->opcode * 8 + .... ));
FLAG flag = {
      0,
      ...
};
return (flag.qr*128 + flag.opcode*8 ... );

でよいと思います。あと、ビットシフトをしたい場合は乗算ではなく、>> や << で
表現した方が素直かなと思いました。

> int make_question_record(struct DNS_Question_Record *DNS_question_record,
> int argc, char *hostname, char *type, char *class){
> /* 照会タイプが何も入力されていなければデフォルトの A を代入する */
> if (argc >= 4)
> strcpy(query_type, type);
> else
> strcpy(query_type, "A");
ここまで argc を引っ張らず、もっと上位の関数で query_type を設定すべきと
思います (preprocessing あたりで)。

argc を引っ張りすぎると、もし引数のインタフェースを変更した場合、ソース
全体を調べて argc 関連の部分を修正することになってしまいます。

> /* DNS_response_before_conv->recv_bufはchar型なので、
> その中に格納されている数字は+127(0000007e)までしか表現できない */
しょーもないことですが、複数行のコメントは

    /* DNS_response_before_conv->recv_bufはchar型なので、
      * その中に格納されている数字は+127(0000007e)までしか表現できない
      */

などと書けば、grep したときにその行がコメントであることが一目でわかります。

> goto comp2;
再起であれば、これまでの状態を脳内スタックに積んで、新たに呼ばれた関数の
引数と戻り値だけを考えればいいですが、こういう goto は覚えておかなくては
ならない状態が多すぎるので、こういう goto はわたしは使いません (というか
頭が混乱してしまうので使えません)。

わたしは、エラー発生時の脱出以外で goto を使わない派です。


1ヶ月以上引っ張ってしまったわりに、たいしたレビューができませんで
申し訳ないです。

No. 4456 # 68user 2006/01/09 (月) 06:03:21
新版 UNIX 由来/読み方辞書
    http://X68000.q-e-d.net/~68user/unix/unix-term-dic.html
なるものを作ってみました。

元々あったオリジナルが 200個、わたしが追加したのが 60個程度です。
オリジナルの記述を読んでると時代を感じますね…。

No. 4457 # Netboy 2006/01/09 (月) 19:35:41
a.outでtypo指摘っす

> 実態にそぐわなかくなったが

No. 4458 # 68user 2006/01/09 (月) 20:11:54
>>4457 Netboy
ありがとうございます。今晩修正します。

追加ネタメモ。
abbrev
yum
xargs

No. 4459 # 68user 2006/01/10 (火) 01:14:20
>>4457 Netboy
修正いたしました。ご指摘ありがとうございました。

No. 4460 # mkt 2006/01/10 (火) 23:54:21
このサイトにはいろいろお世話になっております。
UNIX 用語 由来/読み方辞書 も一気に読ませていただきました。
気になった点をいくつか:

・fgrep と Gimp の解説文が途中で切れてしまっているように
    思います。
・記号の 2 項目め(「"」の項と思われる部分)の見出し行が
    抜け落ちてしまってます。

ついでに(思いっきり重箱の隅ですが)、この掲示板の [使い方]
ページにある「敬省略」っていうのも気になります…

No. 4461 # mkt 2006/01/11 (水) 00:05:00
>>4460 mkt
あれ? 全角空白が &nbsp; 4 個に置換されてる…。

No. 4462 # 2006/01/11 (水) 00:13:09
シェルで、2行を1行にする方法につてい教えてください。

cat file.txt

dn: nm=yamada.taro,o=tokyo,o=test.
  co.jp
nm: nm=yamada.taro
o: o=tokyo
o: o=test.co.jp

dn: nm=yamada.hanako,o=oosaka,o=test.
  co.jp
nm: nm=yamada.hanako
o: o=oosaka
o: o=test.co.jp



dn: nm=yamada.taro,o=tokyo,o=test.co.jp
nm: nm=yamada.taro
o: o=tokyo
o: o=test.co.jp

dn: nm=yamada.hanako,o=oosaka,o=test.co.jp
nm: nm=yamada.hanako
o: o=oosaka
o: o=test.co.jp

のようにしたいのですがどうすればいいのですか。
改行となっている次の行の頭は、半角スペースで始まっています。
また、空白行を消したくないのです。
空白行までを、1ブロック(かたまり)として扱いたいのです。

環境
    Solaris8
    Bシェル

No. 4463 # 68user 2006/01/11 (水) 14:56:38
>>4460 mkt
> ・fgrep と Gimp の解説文が途中で切れてしまっているように
> 思います。
ありがとうございます。Gimp は「Gimp の開発中にできたのが Gtk」、fgrep に
ついては「"Fast GREP" は違うでしょ」と書こうとして、そのままになってしまい
ました。とりあえず今晩書きかけの部分を削除したいと思います。

> ・記号の 2 項目め(「"」の項と思われる部分)の見出し行が
> 抜け落ちてしまってます。
これは HTML 生成スクリプトの修正が必要ですので、少し時間がかかります。


fgrep についてメモ。オリジナル版には

    "Fast GREP" または "Fixed string GREP" の略。

とありますが、

    http://www.nurs.or.jp/~asada/FAQ/UNIX/section1.3.html
        fgrep は、長さが決まっている文字列を検索します。"f" は "fast" という意味では
        ありません。事実、"fgrep footbar *c" の速さは、普通、"egrep footbar *.c" の
        速さより遅いのです

    http://www.bsddiary.net/doc/hierarchy.txt
        熟練者: 誰かが速いと言ったのでfgrepを使っている
        ハッカー: 自分で時間を測った結果egrepを使うことにした

などの他の有名な文献と矛盾しています。

    http://minnie.tuhs.org/TUHS/archive_sites.html
を見ると fgrep・egrep が現れたのが V7 で、V7 と 2.10 BSD のソースはほぼ
同じでした (ソースは別)。4.4BSD Lite2 では grep・fgrep・egrep のソースが
一本化されていました。それをふまえた上で man の記述を見ると、
    V7:
        Fgrep patterns are fixed strings; it is fast and compact.
        http://www.freebsd.org/cgi/man.cgi?query=grep&apropos=0&sektion=0&manpath=Unix+Seventh+Edition&format=html

    2.10 BSD:
        Fgrep patterns are fixed strings; it is fast and compact.
        http://www.freebsd.org/cgi/man.cgi?query=grep&apropos=0&sektion=0&manpath=2.10+BSD&format=html

    4.4BSD Lite2:
        The fgrep utility is quick but can handle only fixed strings
        http://www.freebsd.org/cgi/man.cgi?query=grep&apropos=0&sektion=0&manpath=4.4BSD+Lite2&format=html

    FreeBSD 1.0〜6.0:
        Fgrep is the same as grep -F.
        http://www.freebsd.org/cgi/man.cgi?query=fgrep&apropos=0&sektion=0&manpath=FreeBSD+1.0-RELEASE&format=html

    SunOS 4.1.3:
        In general, egrep is the fastest of these programs.
        http://www.freebsd.org/cgi/man.cgi?query=fgrep&apropos=0&sektion=0&manpath=SunOS+4.1.3&format=html

というわけで、fgrep が "Fast GREP" であるという認識があったとすれば、古代の
man の "fast" という記述が原因ではないかと考えます。

あとは、この時代の fgrep が grep・egrep と比べて fast であるかが気になる
ところですが、これは調査する時間と力量がないのでパスということで。

参考:
    http://groups.google.co.jp/group/fj.questions.unix/browse_thread/thread/e8ea37b4d0dd6372/235ce238f717f19c
    http://katsu.watanabe.name/grep/efgrep.html
    http://katsu.watanabe.name/grep/ohpcontents.html


オリジナル版に関わった方々がそうそうたる面子なので、調べずに突っ込みを
いれるわけにもいかず、なかなか大変です。

> この掲示板の [使い方] ページにある「敬省略」っていうのも気になります…
これまで思いっきり「敬省略」だと思っておりましたが、「敬称略」だったのですね。
ひとつ賢くなれました。これも今晩修正予定です。

>>4461 mkt
全角入りソースをコピペしやすいよう、半角空白に置換しています。

No. 4464 # hagu 2006/01/11 (水) 15:55:55
>>4451 68user

返事送れて申し訳ありません。
Solarisで動きました。

No. 4465 # 68user 2006/01/11 (水) 15:57:57
>>4462
sed で何とかできるのかもしれませんが、わたしは sed をよく知らないので、
sh でやるならこんな感じで。

    IFS=''
    buf=''
    use_buf=0

    cat file.txt | while read -r line; do
        case $line in
        " "*)
            tmpline=`echo -n $line|sed 's/^ *//g'`
            buf="$buf$tmpline"
            use_buf=1
            ;;
        *)
            if [ "$use_buf" = "1" ]; then
                echo "$buf"
            fi
            buf="$line"
            use_buf=1
            ;;
        esac
    done

    if [ "$use_buf" = "1" ]; then
        echo "$buf"
    fi

と思ったのですが、最終行が出ません。sh もよくわかってないわたしには解決
できませんでした (GNU bash, version 3.00.14(1)-release (i386-redhat-linux-gnu))。

perl を使ってよいなら
      perl -e 'undef $/; while (<>){s/\n +//g; print}' file.txt
あたりで。

No. 4466 # 68user 2006/01/11 (水) 16:28:01
>>4465 68user
> と思ったのですが、最終行が出ません。
あー、ループ部分がサブシェルになってるからか。
    while read -r line; do
        ...
    done < file.txt
なら OK ですね。

やはり sh でプログラムなんて書くもんじゃないと思う。誰か
      Sh Programming Considered Harmful
を書いてください。

No. 4467 # 68user 2006/01/11 (水) 16:36:25
>>4466 68user
補足。Solaris の sh では
> while read -r line; do
> done < file.txt
でもダメなようですね。

http://blog.goo.ne.jp/cars-kitahefu/e/4190a337427d7a8cfcb5a62f515c6936

No. 4468 # 2006/01/11 (水) 21:32:54
>> 4467

ありがとうございます。

> while read -r line; do
> done < file.txt
はやはりダメでした。

while read line; do
done < file.txt
としたら上手く動きました。

また、
tmpline=`echo -n $line|sed 's/^ *//g'`
では、1行になるのですが、「-n」オプションが邪魔みたいで、上手く編集
できませんでした。

tmpline=`echo $line|sed 's/^ *//g'`
としたら上手くいきました。

No. 4469 # 2006/01/11 (水) 22:08:12
>> 4468

sed 一発で簡単にできるものなのでしょうか。

No. 4470 # zsh 2006/01/11 (水) 23:19:40
>>4469
完璧ではないですが、こんな感じで。
------
sed -e '/^[^ ]\{1,\}/ {
        N
}
s/^\([^ ]\{1,\}.*\)\n \{1,\}\([^ ]\{1,\}\)/\1\2/g' file.txt
------

>>4468
>while read line; do
>done < file.txt
>としたら上手く動きました。

これだけで動きますか?
whileの前に
exec 0<file.txt
とか要りませんでしたっけ?

>>4466 68user
>やはり sh でプログラムなんて書くもんじゃないと思う。誰か
> Sh Programming Considered Harmful
>を書いてください。

私は、どの程度の事までをシェルスクリプトでやるべきか悩みます。
Perlとか使った方が絶対に効率が良かったりするのに、
何故かシェルスクリプトにこだわる人とかいるし・・・
(で、気がつくと自分以外に判らないスクリプトが出来上がっていると。)

No. 4471 # mkt 2006/01/12 (木) 05:14:32
>>4463 68user
お返事いただきありがとうございます。

書きかけだった部分、もう削除しておられますが、いずれまとまった形で
復活するのを期待しています。

fgrep の話、面白いですね。man の記述の違いも。
でもこれ、何となく「fast = (使うのに)手っ取り早い」って訳すと
つじつまが合うような気がしてきました。quick というのも同様。
正規表現を無効にする(できる)点をアピールする感じで。
で、誤解が生じてしまったので表現を改めた、とか。
勝手な推測ですが。

> http://www.bsddiary.net/doc/hierarchy.txt
> 熟練者: 誰かが速いと言ったのでfgrepを使っている
> ハッカー: 自分で時間を測った結果egrepを使うことにした
の原文は
    http://groups.google.co.jp/group/net.jokes/msg/c49a0c0849fe8bb6
だと思うのですが、これより前に投稿されている
    http://groups.google.co.jp/group/net.jokes/msg/c24e7dccf82df3ff
と比べてやけに grep まわりが強調されてますね。

> オリジナル版に関わった方々がそうそうたる面子なので、調べずに突っ込みを
> いれるわけにもいかず、なかなか大変です。
でも今のまんまだと、矛盾が生じちゃってます(↓)。 ;p
    http://x68000.q-e-d.net/~68user/unix/pickup?keyword=fgrep&target=command&partial=on&regexp=on&case=off

> 全角入りソースをコピペしやすいよう、半角空白に置換しています。
あ、それは理解してたんですが、
[使い方]ページに「全角空白は 2 つ分の半角空白(…)に置換されます。」
とあるのに、どうして行頭に入れた全角空白 1 個が「&nbsp; 4 つ」
に置換されちゃったんだろう? と思った次第です。
# 今回は全部半角空白にしてみた。

No. 4472 # mkt 2006/01/12 (木) 05:20:48
なるほど、半角空白 1 個が「&nbsp; 2 つ」になってるのか…。
失礼しました。

No. 4473 # if 2006/01/12 (木) 11:14:17
>>4462

RFC2822 の folding を戻すのと大体同じですね。

sed -e ':loop' -e '$b' -e 'N;/\n /{s/\n *//;b loop' -e '};P;D;b loop'

でどうでしょうか?
見やすくすると
#!/usr/bin/sed -f
:loop
$b
N
/\n / {
                s/\n *//
                b loop
}
P
D
b loop

No. 4474 # 2006/01/12 (木) 23:49:57
>>4470 zsh
>>4473 if

ありがとうございます。
今、時間がありませんが、試してみます。

シェルスクリプトよりもPerlですか。

No. 4475 # 2006/01/12 (木) 23:54:24
>>4470 zsh

>これだけで動きますか?
>whileの前に
>exec 0<file.txt
>とか要りませんでしたっけ?

要りませんでした。
while read line; do
done < file.txt
または、
while read line
do
done < file.txt
で動きました。

No. 4476 # zsh 2006/01/13 (金) 15:03:09
>>4475
Solaris9のsh

No. 4477 # zsh 2006/01/13 (金) 15:07:31
>>4475
Solaris9のshで確認しましたが、
やはりwhileの前に
exec 0<file.txt
を入れないと、最終行が表示されません。
恐らく、元のファイルの最終行が空行なので問題ないのだと思います。

>>68user様
記述途中で送信してしまい、大変失礼しました。

No. 4478 # DNS勉強中 2006/01/14 (土) 14:05:00
>>4455 68user
ご指摘ありがとうございます。
スレッドセーフやマジックナンバなどは考えておりませんでした。
それと goto の部分は使いたくなかったのですが、うまくプログラムの流れを制御できなかったためやむなく使用しました。
確かに分かりにくいと思います。
今後修正してみようと思います。
かなり忘れている部分が多いので、思い出すところからはじめないといけないのですが。

No. 4479 # 68user 2006/01/16 (月) 12:43:51
>>4471 mkt
> 書きかけだった部分、もう削除しておられますが、いずれまとまった形で
> 復活するのを期待しています。
はい、そのうちまとめて更新したいと思います。

>>4477 zsh
> やはりwhileの前に
> exec 0<file.txt
> を入れないと、最終行が表示されません。
わたくしのまわりには Solaris がないので試せませんが、これは何が原因で
最終行が表示されないのでしょうか?

>>4478 DNS勉強中
> 今後修正してみようと思います。
> かなり忘れている部分が多いので、思い出すところからはじめないといけないのですが。
細かな指摘ですので修正は不要かと思います。もし DNS にこだわりがあるなら、
ライブラリ化したり、他のレゾルバのソースを読んだり、
      http://www5d.biglobe.ne.jp/~stssk/dns.html
を片っ端から実装するのがいいのではないでしょうか。

No. 4480 # zsh 2006/01/16 (月) 15:10:38
>>4479 68user
>わたくしのまわりには Solaris がないので試せませんが、これは何が原因で
>最終行が表示されないのでしょうか?

パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。
Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを
オープンしていました。
(ksh/bash/zshはサブシェルで動作しないので問題なし。)

No. 4481 # 2006/01/16 (月) 23:39:42
>>4480 zsh

>パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。
>Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを
>オープンしていました。
サブシェルで動作するとは、子プロセスでシェル起動しているというこ
ですか。

whileの前に
exec 0<file.txt
を入れないと、最終行が表示されないということですか。

No. 4482 # 68user 2006/01/17 (火) 10:45:07
>>4480 zsh
あー、なるほど。
>>4467 68user
> 補足。Solaris の sh では
>> while read -r line; do
>> done < file.txt
> でもダメなようですね
のことですね。別件かと勘違いしておりました。

No. 4483 # zsh 2006/01/17 (火) 10:51:51
>>4481
>サブシェルで動作するとは、子プロセスでシェル起動しているというこ
>ですか。

その通りです。

>whileの前に
>exec 0<file.txt
>を入れないと、最終行が表示されないということですか。

サブシェル(while)内で
use_buf=1
としても、親シェルには引き継がれないので
最後の if 文が必ず偽になります。
よって、最終行(最終行が半角スペースで始まる場合には最終 2 行)が
表示されないと思います。

No. 4485 # 2006/01/17 (火) 12:54:25
>>4483 zsh
試して見ました。

ファイルの最後が空行(最終行が改行コードで終了)の場合、
whileの前に
exec 0<file.txt
を入れないくても、最終行が表示されました。

最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、
catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る
ファイルをやると、最終行が表示されません。
whileの前に
exec 0<file.txt
を入れた場合でも。

No. 4486 # zsh 2006/01/20 (金) 11:01:34
>>4485
>ファイルの最後が空行(最終行が改行コードで終了)の場合、
>whileの前に
>exec 0<file.txt
>を入れないくても、最終行が表示されました。

試してみましたが、最終行(空行)は表示されませんでした。
Solaris 標準の sh ですよね?

>最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、
>catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る
>ファイルをやると、最終行が表示されません。

それは read コマンドが読込めないので、仕方がないというか
そこまでやるならシェルスクリプトにこだわらない方が良いかと。

No. 4487 # 68user 2006/01/23 (月) 01:49:38
GD::Graph で遊んでみました。
    http://x68000.q-e-d.net/~68user/webcgi/gd-graph.html
    http://x68000.q-e-d.net/~68user/webcgi/sample/perl/graph-maker.cgi

No. 4488 # take 2006/01/23 (月) 11:04:50
はじめまして。
おじゃまいたします。

早速ですが
Opensslライブラリを使用して復号処理を実装したいと考えておりまして
RSA鍵交換の場合は、おおまかに分かりましたが
DH鍵交換の実装方法がなかなか調べても分からない状況です。
おそらくRSAとは使用するI/Fが異なるのではないかと考えています。

ご存知の方いらっしゃいましたら
ご教授頂けないでしょうか。

RSA鍵交換の場合は下記のような感じです(秘密鍵は知っている前提)

(1) pre_master_secretを取得する
        RSA_private_decrypt()を呼び出す

(2) 上記のpre_master_secretとclient_randomとserver_random値より
      master_secretを生成

(3) データを復号する(master_secretが分かれば復号できる)
        EVP_Cipher()を呼び出す

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

No. 4489 # take 2006/01/23 (月) 11:10:06
はじめまして。
おじゃまいたします。

早速ですが
Opensslライブラリを使用して復号処理を実装したいと考えておりまして
RSA鍵交換の場合は、おおまかに分かりましたが
DH鍵交換の実装方法がなかなか調べても分からない状況です。
おそらくRSAとは使用するI/Fが異なるのではないかと考えています。

ご存知の方いらっしゃいましたら
ご教授頂けないでしょうか。

RSA鍵交換の場合は下記のような感じです(秘密鍵は知っている前提)

(1) pre_master_secretを取得する
        RSA_private_decrypt()を呼び出す

(2) 上記のpre_master_secretとclient_randomとserver_random値より
      master_secretを生成

(3) データを復号する(master_secretが分かれば復号できる)
        EVP_Cipher()を呼び出す

No. 4490 # take 2006/01/23 (月) 11:13:08
>>4488 take
>>4489 take
2度書きしてしまいました。
申し訳ありません。

No. 4491 # 68user 2006/01/23 (月) 16:08:33
>>4489 take
> DH鍵交換の実装方法がなかなか調べても分からない状況です。
わたしにもさっぱりわかりませんが、以下の URL はチェック済ですか?
    http://www.openssl.org/docs/crypto/dh.html
    http://matagi.sakura.ne.jp/mt/archives/2005/03/openssldh.html

No. 4492 # take 2006/01/24 (火) 13:52:18
>>4491 68user
>わたしにもさっぱりわかりませんが、以下の URL はチェック済ですか?
> http://www.openssl.org/docs/crypto/dh.html
> http://matagi.sakura.ne.jp/mt/archives/2005/03/openssldh.html

お返事ありがとうございます。

DH法用の関数はこれなんですね。
お教え頂いた情報を参考に、更に調べてまいります。

No. 4493 # 2006/02/02 (木) 13:06:23
シェルスクリプトで、
ファイルからフィールド1を読み込み、前後にシングルクォーテーション「'」を
付けて、区切りの1行にしたいのですが、「'」を上手く付けることができません。
「'」の使い方が不正とかで怒られます。

#!/bin/csh

nawk -F"," ' { \
  if (FNR==1) printf("\'%s\'", $1); \
  else printf(",\'%s\'", $1) \
}' file.txt

一度、ダブルクォーテーション「"」にしてからsedで置換しよとしたのですが、
sedでも「'」の使い方が不正とかで怒られます。

nawk -F"," ' { \\
  if (FNR==1) printf("\"%s\"", $1); \\
  else printf(",\"%s\"", $1) \\
}' file.txt | sed 's/"/\'/g'

または、

set a = `nawk -F"," ' { \\
  if (FNR==1) printf("\"%s\"", $1); \\
  else printf(",\"%s\"", $1) \\
}' file.txt`
echo $a | sed 's/"/\'/g'

どのようにすればよいのですか。

OSは、Solairs8

No. 4494 # 2006/02/02 (木) 13:08:17
>>4493
参照するファイルについて書いていませんでした。
# cat file.txt
Tokyo,
Oosaka,
Nagoya,
Kyoto,
Kyusyu,

No. 4495 # 68user 2006/02/02 (木) 14:04:20
>>4493
csh は馬鹿なので、シングルクォートの中にシングルクォートを書くことはできません。
つまり、
    echo '\''
はエラーです (sh も同様)。同様に
    echo "\""
もエラーになります (sh ならこっちは OK)。

で、csh には (sh も)
        echo "文字列1""文字列2""文字列3"
        echo "文字列1"文字列2"文字列3"
        echo '文字列1''文字列2''文字列3'
        echo '文字列1'文字列2'文字列3'
のいずれも、
        echo "文字列1文字列2文字列3"
と (基本的には) 同じ、という性質があります。

よって、csh で
    'abcdef'
を出力したい場合は、
    echo "'"abcdef"'"
    echo "'""abcdef""'"
などとします。

シェルのクォートは「ネストさせない」が鉄則です。

No. 4496 # 2006/02/03 (金) 15:40:28
>> 4495
無理なのですか。

一度、ファイルから取得したものループでechoコマンドを
使いながら編集するということですね。

#!/bin/csh

set ALL="Tokyo Oosaka Nagoya Kyoto"

@ i = 1
foreach EACH ($ALL)

        if ($i == 1) then
                set ALLS=`echo "'"$EACH"'"`
        else
                set ALLS=`echo $ALLS",'"$EACH"'"`
        endif
        @ i++
end
echo $ALLS

No. 4497 # zsh 2006/02/03 (金) 18:39:14
>>4496
確認していませんが、awk のプログラム部分を別ファイルにして
-f オプションで指定しても出来ると思います。
(この場合はシングルクォートのエスケープは不要です。)

No. 4498 # 68user 2006/02/03 (金) 18:43:58
>>4496
> 無理なのですか。
いいえ。
    awk -F"," '{if (FNR==1){printf "'"'"'%s'"'"'",$1}else{printf ",'"'"'%s'"'"'",$1}}'<file.txt

No. 4499 # 2006/02/04 (土) 10:03:49
>>4497 zsh
>>4498 68user
zshさん、68userさん
ありがとうございます。
出来ました。

「'」を「"」で囲って連続して付けることは試してはいたのですが、
私が試していたのとは違っていました。
それよりも、「'%s'」とするのには気が付きませんでした。
常に「"%s"」としていました。

ただ、
awkで行うと、
,'Tokyo','Oosaka','Nagoya','Kyoto','Kyusyu'
と1行目に読み込んだものにもカンマ「,」がついてしまします。
nawkで行うと
'Tokyo','Oosaka','Nagoya','Kyoto','Kyusyu'
となります。
何が違いとかあるのでしょうか。

No. 4500 # zsh 2006/02/05 (日) 00:07:23
>>4499
Solaris の awk では FNR という変数はありません。
NR に変更すれば動作すると思います。
(NR と FNR では、複数ファイルを入力とした時に値が異なります。)

No. 4501 # hidemaru [E-mail] 2006/02/05 (日) 12:02:32
はじめまして、漠然とした質問なのですが、
SSLv3のハンドシェイク処理の部分を実際に
(Cで)実現する方法を知っている方、もしくは
何か参考になるものがあれば教えてください。

No. 4502 # hidemaru 2006/02/05 (日) 12:08:35
環境は、vine linux 、 openssl-0.9.7d-0vl3.2 です。

No. 4503 # esam 2006/02/06 (月) 19:01:18
はじめましてe。いつもいろいろと参考にさせてもらってます。
いろいろ試したのですが、わからないので質問させて下さい。
http://tomorrows-wind.at.webry.info/200507/article_21.html
↑ちょうど私の書いたプログラムとほぼ同じだったので
ちょっと勝手に拝借したんですが、このソース
私のやってる環境では、エラーがでるんですよね。
エラーが出るのは、最後のRSA_private_decrypt関数です。
これは私だけなんでしょうか?どなたか試していただけませんか?
鍵に関しては、コマンドラインから暗号化,復号化に成功しているので
問題ないと思われます。
お願いします。
実行環境:vine linux OpenSSL 0.9.7d 17 Mar 2004

No. 4504 # tkoba 2006/02/06 (月) 19:54:42
>>4503 esam
dectxt = malloc(RSA_size(rsapriv));
を、
dectxt = calloc(1, RSA_size(rsapriv));
と書き換えることでエラーが消えることを確認しました。

(環境: Vine Linux 3.2, OpenSSL 0.9.7d 0vl3.2)

No. 4505 # tkoba 2006/02/06 (月) 20:15:29
>>4503 esam

>>4504 は無視してください。

> http://tomorrows-wind.at.webry.info/200507/article_21.html

plaintxt = malloc(sizeof(char)*7);
strcpy(plaintxt, "abcdefg");
というのがおかしいですね。ここを直せばうまく動いた気がします。

No. 4506 # tkoba 2006/02/06 (月) 20:55:40
>>4503 esam
たびたびすみません。

if((enclen = RSA_public_encrypt(strlen(plaintxt), ...

if((enclen = RSA_public_encrypt(strlen(plaintxt) + 1, ...
とし、
if((declen = RSA_private_decrypt(strlen(enctxt), ...

if((declen = RSA_private_decrypt(RSA_size(rsapub), ...
としなければいけません。

No. 4507 # tkoba 2006/02/06 (月) 20:59:14
>>4503 esam

if((declen = RSA_private_decrypt(RSA_size(rsapub), ...

if((declen = RSA_private_decrypt(enclen, ...
のほうがスマートな気がしてきました。

No. 4508 # dynamite [E-mail] 2006/02/07 (火) 00:42:39
はじめまして、68userさん
おじゃまいたします。

ネットワークプログラミングの基礎知識
大変参考にさせてもらってます!

現在、SSL/TLS でアクセスしてみよう (1)
や >>3958 の記事のsslでkeep-aliveを参考にして
sslでの接続を勉強させて頂いています。

早速ですが
https-client-keep-alive.c や
テストで接続と切断を関数化して分けてみて、
リクエストを送らず受信もしないと
SSL_shutdown()で0を返します。
(丁度、https-client.c のソースの118行目から146行目までを削った状態です)

ためしに接続、受信、切断とすると
SSL_shutdown()で1を返すので、
(丁度、https-client.c のソースの118行目から128行目までを削った状態です)

受信が最後まで完了しなければ、
SSL_shutdown()で0を返しERR_print_errors_fp
には何も出力しないと推測しているのですが、
間違っていないでしょうか?

ご存知の方いらっしゃいましたら
ご教授頂けないでしょうか。m(_ _)m

(環境: fedora core 4, gcc-4.0.2-8.fc4, openssl-0.9.7f-7.10)

No. 4509 # esam 2006/02/07 (火) 12:39:49
>>tkobaさん
早急な返信ありがとうございました。
いわれたとおりになおしてみました。
あとは、>>4505の部分ですが。。。
いろいろためしてみましたがやはりエラーがでてしまいます。

No. 4510 # esam 2006/02/07 (火) 12:48:39
>>tkobaさん
すみませんできていました。
問題は ご指摘のとおりRSA_private_decrypt関数の第一引数でした。
ありがとうございました。

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