68user's page 掲示板

Prev< No. 4481〜4520> Next  [最新発言に戻る] [過去ログ一覧]
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関数の第一引数でした。
ありがとうございました。

No. 4511 # blueeyes 2006/02/07 (火) 19:07:44
はじめまして
先日freebsd 6.0をインストールをしました。昨日までxdm順調に動いていました。
今日、xdmでloginできなくなりました。ユーザー名とパスワードを入力したら、また
登録画面が出てきました。本来welcome to hostname のところは今welcome to 1に
なりました。どういう原因でしょうか。よろしくお願いします。

No. 4512 # 2006/02/11 (土) 13:40:16
>>4500 zsh
(NR と FNR では、複数ファイルを入力とした時に値が異なります。)
どうなるのでしょうか。
どのように確認できますか。

No. 4514 # ロー 2006/02/11 (土) 18:39:14
UNIXのシェルで2点教えて頂きたいことがあります。

●1点目
sedコマンドを使用して置換したいのですが、sed内で変数は
使用可能なのでしょうか。

-----------------
#!/bin/sh

DIR="/home/guest/"
ls ${DIR}*.CSV | sed 's/$DIR}//g'

置換されずにそのまま出力されます。
シェル内の変数を、sedに渡して置換させることは可能なのでしょうか。

ls ${DIR}*.CSV | sed 's/\/.*\///g'
削除した部分がディレクトリと言う事なので、「's/\/.*\///g'」として
みたのですが、正しい使い方なのでしゅか。

●2点目
変数に格納されているファイル名から番号が一番大きいファイル名
を作りたいのですが、awkを使用して簡単にできますか。

例えば、/tmp配下に、
test0001.CSV
test0002.CSV
test0004.CSV
とファイルがあるとします。
ls、変数に格納し、awk等で、「test0005.CSV」を求めたいのですが。

---------
#!/bin/sh

FileLst=`ls /tmp/*.CSV`
echo $FileLst | awk ?????

No. 4515 # ロー 2006/02/11 (土) 18:41:13
>>4514 ロー
環境を書き忘れました。

UNIX:Soralis8
シェル:Bシェル

No. 4516 # 68user 2006/02/13 (月) 11:45:19
UNIX の部屋 http://x68000.q-e-d.net/~68user/unix/ を更新しました。

>>4460 mkt
> ・fgrep と Gimp の解説文が途中で切れてしまっているように思います。
fgrep については、とりあえず掲示板での発言にリンクを張りました。
    http://x68000.q-e-d.net/~68user/unix/pickup?fgrep

> ・記号の 2 項目め(「"」の項と思われる部分)の見出し行が抜け落ちてしまってます。
正しく表示されるようにしました。
    http://x68000.q-e-d.net/~68user/unix/pickup?%22

" の解決のため、10年近くつぎはぎでやってきた汚い部分を全面的に見直し
たため、もしかしたら UNIX の部屋の検索部分にエンバグしている可能性が
あります。怪しい挙動を見つけられた方は教えていただけると幸いです。

>>4501 hidemaru
> SSLv3のハンドシェイク処理の部分を実際に(Cで)実現する方法
>>4502 hidemaru
> 環境は、vine linux 、 openssl-0.9.7d-0vl3.2 です。
OpenSSL を使っていいなら SSL_connect(3) を使えばいいですし、OpenSSL を
使わないなら「環境は OpenSSL」とわざわざ書く理由がわからないです。

>>4508 dynamite
> SSL_shutdown()で0を返しERR_print_errors_fp には何も出力しないと
> 推測しているのですが
わたしもよくわかってませんが調べる時間がないです。すみません。
マニュアルにそう書いてありますか?

>>4511 blueeyes
> 本来welcome to hostname のところは今welcome to 1になりました。
原因はわかりません。リブートしても同じ挙動かどうか、シングル
ユーザモードで起動するとどうなるか、/var/log に何か出ていないかを
確認してください。

>>4514 ロー
> ls ${DIR}*.CSV | sed 's/$DIR}//g'
'' で囲んだら変数展開されないので、"" で囲みましょう。変数展開できた
としても s//home/guest///g は sed 的にエラーですが、これはまた別の話。

> ls、変数に格納し、awk等で、「test0005.CSV」を求めたいのですが。
「ls で表示したときに最後に表示される行」とみなせるのであれば、
    echo $FileLst | awk '{print $NF}'
など ($NF は gawk では動きましたが、一般的な awk で使用できるかどうかは
わかりません)。

まぁ、awk には列で渡すのではなく、行で渡した方が幸せだと思うので、
    ls /tmp/*.CSV | awk 'END { print }'
の方がいいと思います。とか言い出すと、
    ls /tmp/*.CSV | tail -1
でいいじゃん、って話になりますけどね。

No. 4517 # ロー 2006/02/13 (月) 13:22:09
>>4516 68user

ありがとうございます。
>> ls ${DIR}*.CSV | sed 's/$DIR}//g'
>'' で囲んだら変数展開されないので、"" で囲みましょう。変数展開できた
>としても s//home/guest///g は sed 的にエラーですが、これはまた別の話。
ダブル「""」で囲んだら展開されませんでした。シングル「''」で囲んだら展開
されました。

> echo $FileLst | awk '{print $NF}'
>など ($NF は gawk では動きましたが、一般的な awk で使用できるかどうかは
>わかりません)。
一般的なawkでも使用できました。

>ls /tmp/*.CSV | awk 'END { print }'
は、ダメでした
結果が得られませんでした。

No. 4518 # zsh 2006/02/15 (水) 11:38:18
>>4512
FNR に現在処理しているファイルのカレントレコード番号が
セットされるのに対して、NR には (n)awk が実行されてから
読み込んだレコード数がセットされています。
  $ nawk '{ print "NR:" NR "/FNR:" FNR }' a.txt b.txt
等とすれば違いが確認できると思います。

>>4517 ロー
Solarisの(n)awkでは
  $ /tmp/*.CSV | awk '{ f=$0; } END { print f }'
のようにしないといけないようです。

No. 4519 # 2006/02/15 (水) 17:14:16
>>4518 zsh
ありがとうございます。

awkのmatch関数なのですが、awk内で使用するとエラーが
ですのですが、どこか使い方がいけないのでしょうか。

抜粋ですが、
awk '
{
pos=match($1,/.CSV$/);
}' ${TEMPFILE}
ファイル名から拡張子以降を取り除くため、拡張子までの
位置を求めようとしています。

awk: syntax error near line 10
awk: illegal statement near line 10
awk: 構文エラー (10 行目の周辺)
awk: 不正な文を検出しました。 (10 行目の周辺)
が発生します。

No. 4520 # zsh 2006/02/15 (水) 19:21:20
>>4519
Solaris 標準の awk (/usr/bin/awk) には、match 関数が存在しません。
対応策としては
  (1)index 関数を使用する
        →ただし、index 関数は正規表現を使用できません。
  (2)nawk を使用する
  (3)/usr/xpg4/bin/awk を使用する
といった所でしょうか。

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