to 68userさん さっそくですが、IPv6 のアドレス省略について 双方のプログラム(resolver-1.pl, 1058.txt)に バグがあるかも知れないのでご報告します。 一例として、 198.41.0.4 www.yahoo.co.jpと入力して、 {A, B, C, D, E, F}.DNS.jpを表示させたとき、 追加情報の F.DNS.jp の出力結果は下記のとおりになります。 resolver-1.pl 2001:2F8::100::153 私の出力結果 2001:2f8::100:0:0:0:153 ちなみにEtherealの出力結果は下記のとおりです。 2001:2f8:0:100::153 IPv6 のアドレス省略表記に関する説明を下記のサイトで拝見したのですが、 http://www.soi.wide.ad.jp/iw2001/slides/04/04-1/53.html そこには IPv6 のアドレス表記に関して2つの原則が書かれていました。 1,【連続する】0 のブロックは省略できる。 2,省略できるのは【1ヶ所】だけ。 そして出力結果から推察するに、 resolver-1.pl では、原則の1, 2共に満たしてないように見受けられます。 perl が分からないので想像ですが、 resolver-1.pl では 0 を見つけたら即座に :: に置き換え、 何回でも省略が使用できるように組んであるのかなと思われます。 私の方では、一度省略を使用したら、二度と使えないようには組んでいるのですが、 0 は即座に :: に置き換えております。 そのため 0 を見つけたら、次の場所を見て、 ・次の場所も 0 なら :: に置き換える ・次の場所が 0 で無ければ、 0 を出力する。 というコードを追加しないといけないかもしれません。 勘違いでしたらすいません。 |
>>4393 DNS勉強中 ありがとうございます。 とりあえず TYPE=TXT の件と IPv6 の件を bugid20・21 として登録しました。 http://x68000.q-e-d.net/~68user/bugnote/bugindex.php?projectid=1 ちなみになぜわたしが web を更新しないのは、解説文からソースへの リンク方法が http://x68000.q-e-d.net/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/resolver-3.html?rev=1.11&content-type=text/x-cvsweb-markup のように :preinclude 21-106 などと行番号で指定しているため、修正が非常に面倒であるからです (まぁただの言い訳なのですが)。 +10 などの相対指定にしようかとか、 m/bind\(/ などと文字列で引っ掛けようかとか迷いつつここまで来てしまいました。 ご指摘を頂いたことについては大変感謝しておりますが、修正が遅いのは なにとぞご容赦ください。 |
>>4392 DNS勉強中 > ただし、 void class_print(int class) を用いた共用の記述の仕方が > 分からなかったので、 > codelist_t {class, type}_list[] = { ... };をグローバル化して共用しています。 一般的には、codelist_t を扱う関数を別ソースにし、ソース先頭で static codelist_t class_list[] = { ... }; と配列を宣言して、conv_class()・class_print() でその配列を使用 します。static をつければ外部ソースからアクセスできないので、 隠蔽できます。 ただ、複数ファイルに分けると、ヘッダファイルが必要だったり Makefile を 書きたくなったりするので、サンプルであれば分ける必要はないかもしれません。 それはそれとして複数のソースから構成される場合に、グローバル変数の 宣言をヘッダファイルで一元管理する方法をご存知なければ、一度書いて みるとよいでしょう。 --- var.h ---- #ifdef THIS_IS_MAIN #define GLOBAL #else #define GLOBAL extern #endif GLOBAL class_list[] = {...}; --- main.c --- #define THIS_IS_MAIN #include "var.h" --- sub.c --- #include "var.h" こんな感じです。 |
>>4394 68user 修正の件了解致しました。 その後修正したもの ・教えていただいた >struct DNS_Response { > char data[10000]; > int int_data[10000]; > int pos; >}; の構造体を下記のような感じに少し修正し、流用しました。 /* DNSサーバへの質問 */ struct DNS_Query { char data[10000]; int length; }; /* DNSサーバからの応答 */ struct DNS_Response { int int_data[10000]; int pos; }; 今まで int_data と pos の 2 つの引数を渡していたところが、 struct DNS_Response だけを渡せばよくなったので、 分かりやすくなったかなと思います。 ・ linux 版の warning を解消しました。 てっきり netdb.h を include したら sys/socket.h なども include してくれるものだと勘違いしておりました。 そのため、いままでの作ってきた他のソースでも warning がたくさん出ておりました。 大変勉強になりましたm(__)m。 ・ AAAA の表示を仕様に添った形に変更しました。 そんな感じに修正を施した現状のソースをアップロードしておきます(linux版)。 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1091.txt 後、指摘された部分で残っている修正点は ・ hoge_print 関数の書き方 ・ >>4395 全般 くらいかなと思います。 直したつもりで、意図に沿っていない修正をしている箇所はあるかもしれませんが(^^;。 他には、個人的に「フラグを構成する各要素」を resolver-1.pl のように簡単に設定出来た方が良いかなと思ってます。 私のソースでは、下記一行で設定してしまってるのがいまいちかなと。 DNS_packet->flag = 0x0100; ビットフィールドあたりで記述してうまく動作すれば良いのですが。 もっともここ自体は今回のソースでは変更することはなさそうなので、 このままでも良いのかもと思ったりも…。 |
>>4395 68user 今まで一つのソースで完結するものばかり書いていたので、 static の付いたグローバル変数(内部結合グローバル変数)を 使った事はありませんでした。 大変勉強になりました。 後、グローバル変数の宣言を一元管理する方法は存じてなかったので、試してみました。 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1093.txt ただ上記は意図に沿った記述かどうか自信がありません。 それと、この件は今回のソースとは直接関係ないという認識で宜しいでしょうか? 仮に提示どおりソースを分割しても class_list[] は sub.c でしか必要ないのかなと思ったので。 その後修正したもの ・ ソースを main.c, sub.c, var.h に分割しました。 ・ 「フラグを構成する各要素」を resolver-1.pl のような感じに変更しました。 main.c(linux版) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1094.c Makefile(linux版) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1095.txt sub.c(linux版) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1096.txt var.c(linux版) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1097.txt |
>>4397 DNS勉強中 > http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1093.txt > ただ上記は意図に沿った記述かどうか自信がありません。 そういえばわたしには、複数ファイルから参照されるグローバル変数で、 宣言と初期化を同時に行った経験がありませんでした (わたしはこういう 場合は init_hoge() という関数を作るので)。 要は main.c で codelist_t class_list[]; codelist_t class_list[] = { {"INTERNET", 1}, ... }; となるわけですが、これはコンパイル通りますか? 少なくとも警告くらいは 出そうな気がします。 普通はどう書くんでしょうね>どなたか > それと、この件は今回のソースとは直接関係ないという認識で宜しいでしょうか? その通りです。 その他ソースについて。 > int soa_record_print(struct DNS_Response *DNS_response, char *print, int i) 引数が i というのはかなりいただけないので、record_num あたりで。 > for (i=0; type[i]!='\0'; i++) > /* 照会タイプの文字の中に英小文字があれば英大文字に変換 */ > type[i] = toupper(type[i]); そういえば strcasecmp(3) というライブラリ関数があるのを思い出しました (使ったことはないですが)。 > void qr_print(int qr){ > codelist_t qr_list[] = { > ... > }; 動作的には問題ありませんが、関数呼び出しのたびにスタックに qr_list の値が 積まれるのは無駄なので、一般的には static codelist_t qr_list[] = { ... }; とします。これだとスタックではなくヒープに置かれ、初期化は一度しか行われません。 > Makefile(linux版) > http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1095.txt わたしなら以下のように書きますが、あまり Makefile に詳しくないので怪しげです。 TARGET= domain_to_ip OBJS = main.o sub.o CFLAGS = -Wall $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) .c.o: sub.h $(CC) $(CFLAGS) -c $< clean: rm -f *.o *~ core $(TARGET) $(OBJS) あと、main がとても長くて汚い関数に見えますので、 make_query(); send_receive(); parse_response(); の 3行か+エラー処理か、あるいは make_query(); send_query(); receive_response(); parse_response(); の 4行+エラー処理くらいになるとよいかも、と思いました。 続く。 |
>>4398 68user 1093.txtのソースは何故か警告が出ることも無く、コンパイル出来ました。 定義を二回していますので、仰るとおり何か言われてもおかしくないと思われますが。 ちなみに下記はエラーが出ません。 #include <stdio.h> int a; int a = 10; int main(void) { printf("a = %d\n", a); return 0; } ただし下記はエラーが出ます。 #include <stdio.h> int main(void) { int a; int a = 10; printf("a = %d\n", a); return 0; } 上記の結果をみると、グローバルでは複数定義してもかまわないのかもしれません。 それと、本来は定義 codelist_t class_list[] = {...} をmain.cに書いて、 宣言 extern codelist_t class_list[]; を sub.c に書くのかも知れません。 ただ、そういたしますと、どうヘッダで一元管理すれば良いか思いつきませんでした。 修正した所 ・ soa_record_print の引数 ・ codelist_t を auto から static に変更しました。 static はどうしても値を保持し続けておかないといけない物以外には 使う必要がないと思ってました。 auto なら不要になったら解放されますし。 メモリ領域は、よく分かってないので勉強になります。 ・ main 部分を preprocessing(); … 前処理 make_query(); … 照会用の DNS パケットを作成 send_query(); … DNS サーバに問い合わせを送信 receive_response(); … DNS サーバからの応答を受信 parse_response(); … DNS サーバからの応答を解析 に集約しました。 分からなかった所 ・strcasecmp は、「大文字/小文字を無視して二つの文字列を比較する」そうですが、 私のソースでどうすれば有効活用出来るか分かりませんでしたので、使用しておりません。 それと Makefile のサンプルありがとうございません。 その記述で動作することを確認しました。 その書き方ですと、ソースファイルが増えても OBJS に追加するだけで良いので、 大変助かりました。 現状のソース(linux版(1ソース版)) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1101.txt 上記のソースは今までと少し動作が違いまして、 【実行ファイル DNSサーバ 名前解決ホスト名】 と入力しますと、回答が得られるまで名前解決を行います。 現状の問題点 ・ リソースデータがドメイン名だけで、IPアドレスの情報が無いと名前解決が出来ない。 例) 198.41.0.4 www.livedoor.co.jp zns05.data-hotel.net と zns06.data-hotel.net しか返してくれません。 get_domain(); で、ドメイン名のラベルの部分を出力し、 print_domain(); で【.】を出力し、 ドメイン名の終端に達するまで両関数間を行ったりきたりしているのが原因です。 DNS サーバが IP アドレスでしたら、 a_record_print(); で姑息に sprintf で抜き出せたのですが。 そう考えますと、以前仰られていた > あと、hoge_print 関数も、わたしはこういう書き方をせずに > char *a_record_print(int_buf, search); > と文字列を返すほうですが、メモリ確保を行うのは呼び出し側か、関数の > 中で static に持つか、など悩ましいです。すっぱり割り切って関数内で > printf するのも、保守性はともかく可読性は悪くない、と思いました。 の部分が非常に重要かなと思いました。 文字列を上位に返すようにしていれば、流用もしやすかったのかなと。 そういう部分も保守性なのかなと思いました。 |
to 68userさん 急な話ですが、昨日の夜に就職が決まりまして、 来週月曜日からの勤務となりました。 そのため研修は明日で修了となりました。 そして課題の提出も明日となりました。 そのため、ご指摘いただいた箇所すべてを訂正して、 提出することは無理かなと言う感じです。 いろいろ教えていただきましたが、 それらをすべて反映できないことはお許しください。 修正したところ ・ hoge_print 関数を文字列を返す形に変更(それに伴い関数名も変更) resolver-1.pl 互換を目指した Linux 版 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1107.txt 学校の課題用に上記ソースを修正した Linux 版 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1108.txt 表示イメージは下記のとおりです。 実行ファイル名 198.41.0.4 www.livedoor.com DNSサーバ【198.41.0.4】に【www.livedoor.com】の名前解決を依頼 DNSサーバ【198.41.0.4】からの受信データバイト数: 506バイト DNSサーバ【192.12.94.30】に【www.livedoor.com】の名前解決を依頼 DNSサーバ【192.12.94.30】からの受信データバイト数: 120バイト DNSサーバ【203.174.65.123】に【www.livedoor.com】の名前解決を依頼 DNSサーバ【203.174.65.123】からの受信データバイト数: 136バイト 回答(1): リソースデータ: 203.131.197.197 nslookup のような感じの表示に近づけつつ、 実際に再帰的に DNS サーバに問い合わせを行っている事を視覚的にアピールしつつ、 提出期限が迫っているので、現状のソースをなるべく触らない方向でまとめてみました。 なお学校の課題用は最近取り掛かったこともあり、 完成度は前者に比べかなり劣ってます (実用に耐えれないという意味ではどちらも同じですが)。 |
>>4400 DNS勉強中 おめでとうございます。向上心のある方のように見受けられますので、どんな 業界でも能力を発揮できることと思います。ご活躍を期待しております。 わたしの方は指摘点をまとめているところですが、あまり時間が取れず 進んでいません。課題提出後なので意味はありませんが、中途半端なのは 気持ちが悪いので、infoseek の方はしばらくそのままにしていただけると ありがたく思います。 |
>>4401 68user ありがとうございます。 それと本日は作成したプログラムのドキュメント作成などで時間が取れなかったので 結局 >>4400 のソースを二つとも提出しました。 後、指摘点をまとめていただいていると言うことでどうもありがとうございます。 私のほうでも修正し次第アップロードします。 それとアップロード先の infoseek ですが、 私の管理下に無いアップローダにアップロードしております。 そのため何時消えてしまうか分からないのが現状です。 もっとも一年近く前のアップロード品も残っているようなので、 大丈夫だとは思います。 消えたら別の場所にアップロードします。 |
今日は仕事が休みで時間があったのでソースコードを修正しました。 resolver-1.pl 互換を目指した Linux 版 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1142.zip 修正点 ・自作関数が文字列を返すことに伴い、グローバル変数が増えてしまったので、 ローカル static 変数に変更しました。 ・原則 1 つの関数につき、 1 つのソースコードにしました。 そのためソースファイル数が 30 あまりになりました。 ただし、グローバル変数の宣言の定義がよく分からなかったので、 class_list と type_list 関係は type_and_class.c でひとまとめにしました。 ・関数の流れ図?を簡易的に表した html を作成しました。 |
resolver-1.pl 互換を目指した Linux 版 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1160.zip 微修正を加えただけです。 ただこれで、指摘していただきました問題点についてはすべて対応したつもりです。 それと、昨日引越しを伴う出向を言い渡されました。 当分の間ネットにつなげる環境も開発環境も無いと思われます。 そのため何かご指摘いただいても、返答を差し上げることは出来ないと思います。 よろしくお願いします。 |
こんにちは。 だいぶ前に書き込みをしたものですが 今回自力で何とかしてみようとふんばってみたものの、 2週間近く解決できません 助言をお願いいたしたく書き込みをしました。 SSLを↓のHPを参考に設定してみました http://www.rinzo2.jp/~rinzo/apache_ssl/apache_and_ssl_00.htm 何とか起動はしたんですが、 当初の目的では、 課題として作成したmysqlとJSP(Tomcat4.1)を使用し 作成したjspファイルを SSLの状態で表示させることでした。 例) http://localhost:8080/examples/index.jsp を https://localhost:8080/examples/index.jsp の形に 何とかできないかと、Apache2とTomcatを連携させてみたものの できませんでした。 もともとできないのかもわからず、 書き込んでみました。 あたりまえのことができてない といった返答でもいんで なるべくわかりやすく 助言のほどお願いします。 設定等で疑問のほどありましたら わかる範囲で答えますんでよろしくお願いします |
はじめまして、ファンと申します。上海から来ました。いまrsaを勉強していますが、 ちょっと困った事があったので、教えてもらいたいです。 pkcs#1中で、rsa暗号化処理前に、暗号プロックフォーマット処理が必要になりますが、 もし、rsa_no_paddingモードを使用なら、暗号プロックフォーマットの処理必要が なくなりますか。宜しくお願いいたします。 |
はじめまして SSL/TLS でアクセスしてみよう (2)を参考にHTTPSでの接続を行っていたのですが、 2回目のSSL_writeに対して、SSL_readの戻り値(文字列長)が0になってしまいます。 https-client-2.c の167〜187行をfor文に入れて2回呼んだ場合も同じように 2回目は文字列長が0で返ってきました。 リクエスト送信のたびにSSL_CTX_freeまで行って、次回は再接続から行わないとだめなのでしょうか? |
>>4404 DNS勉強中 すみません、まだ書いている途中です。と言ってもそんなに長くはないんですが、 気力充実待ちの状態です。もう見ておられないとは思いますが、今月中には何とか。 >>4405 SSL初心者 とりあえずできることはできるでしょう。Tomcat 単体でも SSL に対応しているし、 Apache と Tomcat で連携するなら mod_jk とか mod_webapps とか mod_jk2 とか いろいろあるようですが、わたしが使ったのは 4年ほど前なので最新事情はよく わかりません。 何をどこまでやって、どううまくいかないのか書いていないので何もアドバイスは できませんが、とりあえず http://www.mki.ne.jp/developers/doc/https/apache20.html を真似てみればよいのではないでしょうか。 と思ったら、今は Jakarta Tomcat Connectors って言うんですかね? それとも mod_jk に戻った? この辺は相変わらずめちゃくちゃですね。 http://tomcat.apache.org/connectors-doc/index.html >>4406 fan lihong > もし、rsa_no_paddingモードを使用なら、暗号プロックフォーマットの処理必要が > なくなりますか。 暗号ブロックフォーマットは PKCS#1 の一部ですから、RSA_NO_PADDING なら必要 ないと思います。 >>4407 びすこ > https-client-2.c の167〜187行をfor文に入れて2回呼んだ場合も同じように > 2回目は文字列長が0で返ってきました。 https-client-2.c の HTTP リクエスト部分をそのまま 2回繰り返すだけなら そうなるでしょうが、それは SSL の問題ではなく単なる HTTP の仕様です。 接続したまま何度もリクエストしたいなら HTTP/1.1 で Connection: keep-alive を付けたりします。とりあえずは、telnet で HTTP を話して試すべきです。 |
awkを使用してカンマ区切りのCSV形式のファイルから指定したフィールド位置 の値を取得しようとしているのですが、以下の様にするとファイル名までが 表示されてしまいます。 正しく、表示するよにはどうしたらいいのですか。 実際には、以下の様に出力されます。 ファイル名:20051201 : 1 ファイル名:20051202 : 3 を以下の様に出力したいのです。 20051201 : 1 20051202 : 3 環境は、Solaris8i Bシェル -------------------- ファイル 年月,名前,ID,値1,値2,値3 20051201,山田 太郎,001,1,1,1 20051201,山田 花子,001,1,2,10 ------------------- 第1パラメータ:年月(YYYYMM) 第2パラメータ:ID -------------------- #!/bin/sh # grep $2 ./$1/DiskCapacityTotal_Daily_$1*.csv | awk -F"," '{printf("%s : %s\n",$1,$4)}' ---------------------- |
>>4409 hagu grep に -h オプションを付けるとか、sed で s/^[^:]*// するとか。 |
>>4409 hagu FreeBSDでやってみたら、正しく表示されましたが。。 |
>>4410 68user >>4411 yasu ありがとうございます。 $1ではなく、$2とか$3と指定すると正しく表示されます。 ファイル名がててきません。 grep $2 ./$1/DiskCapacityTotal_Daily_$1*.csv | awk -F"," '{printf("%s : %s\n",$2,$4)} |
>>4409 hagu grep $2 ./$1/DiskCapacityTotal_Daily_$1*.csv | awk -F"," '{printf("%s : %s\n",$1,$4)' | sed 's/^[^:]*//' としたとき、ファイル名は消えたのですが、 $1の値を表示した際、前に「:」が残ります。 消したいのですが。 ------------ :20051201 : 1 :20051202 : 3 となります。 |
>>4413 だん ・・・・まあgrep自体なくても出来るというのは置いといて。 そもそも「ファイル名:」を付加しているのはgrepなんだから、 4410で68userさんが仰っているように、 grepに-hオプションをつけるだけだと思いますが、 こちらは試しましたか? |
>>No. 4408 68user 回答ありがとうございました。 HTTPでのお試しソースにはConnection: keep-aliveがあって、 HTTPSの方では抜けているのに気がついていませんでした。 HTTPの方でも判ってて書いてたわけではないので、 リクエストについてもっと調べてみます。 |
はじめまして。 ここのソースを参考にさせてもらい、Mac OSX用のFTPクライアントを以前作りました。 今回、POPクライアントを作ろうと思うのですが、C言語で書かれたシンプルなPOPクライアント のソースってないもんでしょうか? 今のところネットを検索していて、 http://www.oss-watch.ac.uk/resources/emailclients.xml にあった、mutt-1.5.10というのがまあまあかと見ていますが、やや面倒。 よろしくお願いします。 |
>>4416 はる fetchmail の前身である popclient はどうでしょうね。 http://www.interlog.com/~esmith/flames/pop.html から popclient-2.21 が落とせますが、手ごろなサイズで、それなりにソースも キレイではないかと思います。 % wc -l *.[ch] 58 config.h 535 pop2.c 533 pop3.c 592 popclient.c 93 popclient.h 175 socket.c 71 socket.h 2057 合計 手元の Linux でコンパイルすると可変長引数あたりでこけましたが、適当に直せば 動くでしょう。 |
>>4417 68userさん これよさそうですね。 cソースが4つしかないし、pop3.cだけ見ていれば分かりそう。 コンパイルは通らなくてもOKです。これを元にいじってしまいますから。 どうもありがとうございます! |
こんにちわ。 シェルにて簡単なメニュー画面作成しているのですが、 一点困ったところがあるので教えてください。 本シェルはrshによって呼び出されていて親シェルとは違うサーバで起動しています。 メニュー画面という事で画面上の掃除のためclearコマンドを使用しているのですが、 rshで呼び出された場合はclear処理が行われておりません。 ローカルでの実行では勿論問題なくclearされます。 rshにて実行する場合画面のclear方法などがご存知でしたら教えてください。 よろしくお願いします。 |
>>4419 KA 状況がよくわかりませんが (rsh でコマンドを指定せず実質的には rlogin を 使用するのと同じなのかとか、rsh 先で端末が割り当てられているのかとか、 端末の種類が違うだけなのかとか)、とりあえず % clear > clear.txt としてシーケンスを保存しておき、そのデータを出力してはどうでしょうか。 |
cronの変更方法を教えて下さい。 Cシェルの場合は以下コマンドでviが開きます。 setenv EDITOR vi cd /var/spool/cron/crontabs crontab -e root shシェルの場合はsetenvが使用できないので 以下コマンドを使いましたが982とか数字がでてきてviが開きません。 EDITOR=vi export EDITOR cd /var/spool/cron/crontabs crontab -e root shシェルでのcrontab -e rootの起動はどうづれば良いのでしょうか。 |
cronの編集について教えて下さい。 Cシェルの場合は以下の方法で編集しています。これでviが起動できます。 setenv EDITOR vi cd /var/spool/cron/crontabs crontab -e root shシェルの場合、以下コマンドを使用しましたがWAIT状態になりviが起動 できません。起動の方法を教えて下さい。 EDITOR=vi export EDITOR cd /var/spool/cron/crontabs crontab -e root |
初めて質問させていただきます。よろしくお願いします。 マシンはUNIX(日立:HI-UX/WE2)です。 cronで1分間隔でシェルを起動しているのですが、mail情報を 削除していなかったため、大量に溜まってしまい「out of i-nodes」の メッセーシ゛が出力され、dfコマント゛で確認するとi-nodesが0となっていました。 /usr/spool/mqueueには50万件のmailがたまっています。 また、mailboxも大量にたまり、mailbox.lockというlockファイルができています。 上記内容について、対処方法がありましたら教えてください。 (cronでmail情報を制御する方法は当ホームページで理解できました。) 以上 よろしくお願いします。 |
>>4422 cafe 手順としては間違っていないと思います (cd は不要ですが)。何がどうなっていて WAIT 状態と判断したのかわからないので、これ以上は何とも言えませんが、普通に % vi 適当なファイル名 で編集はできないのなら vi の問題でしょう。 >>4423 久 ファイル数が多すぎるので、df で i-node が full になっているファイルシステム内の ファイルを削除してください。 > mailboxも大量にたまり、mailbox.lockというlockファイルができています。 おそらく dotlock なファイルでしょうけど、いつまでたっても消えないなら 消していいと思います (心配なら MTA などのサーバ類を終了してから)。 |
回答ありがとうございました。無事RSAの確認できました。 sslv3のFinishedメッセージのことで質問ですが、 ClientKeyExchangeの後のEncrypted HandshakeはFinishedのことでそうか。 あと、Finishedメッセージはmd5_hash[16]+sha_hash[20]と他に何がついてますか。 あと、md5_hash[16]+sha_hash[20]の値が一致しないのですが、何かアドバイスを いただけないでしょうか。 宜しくお願いします。 |
こんばんは。初めて質問させていただきます。 AIXのサーバ上で「各レコードに改行コードが付いておらずファイルの最後に EOF(0a00)だけが付いているファイル」を2個連結したいのですが、 単純にcatで連結すると、2つのファイルのレコードの間に(0a)が入ってしまいます。 (例) ファイル1→ xxxx0a00 ファイル2→ yyyy0a00 の場合 cat ファイル1 ファイル2 > ファイル3 とすると ファイル3→ xxxx0ayyyy0a00 となってしまうが、実は以下のようにしたい ファイル3→ xxxxyyyy0a00 シェルまたはコマンドを用いて(C言語でプログラミングしない)で、 簡単に上記の形でファイルを連結する方法がありましたら教えて頂けないでしょうか? よろしくお願いします。 |
>>4425 fan SSL クライアントを実装したことがないのでわかりません (短めのサンプル ソースを出してもらえばわかるかもしれませんし、やっぱりわからないかも しれません)。 >>4426 shin1 > AIXのサーバ上で「各レコードに改行コードが付いておらずファイルの最後に > EOF(0a00)だけが付いているファイル」を2個連結したいのですが、 0x0A は LF、0x00 は NULL 文字で、EOF ではありません。 コントロールコードにおける EOF は 0x1A です (が、UNIX や Windows で 別にファイル終端コードとしての意味を持つわけではない)。 というわけで何を削除したいのかよくわかりませんが、0x1A ならば http://x68000.q-e-d.net/~68user/unix/pickup?tr など。 0x0A ならば、他の LF も削除してしまうと困るでしょうから、最後の 1バイトを削るのがよいでしょう。sed とか head とか dd とか perl とか を使えばできるのではないかと思います。 |
教えてください。DOSのコマンドで、チェックサムを自動で 計算するコマンドはあるのでしょうか? 例)JX12345-04のチェックサム(E0)を知りたい場合 |
こんにちは、初めて質問させていただきます。 こちらに載っているOpenSSLを用いたRSA暗号を動かして見たいので、 Windows上でのOpenSSLのインストールの仕方を教えてもらえませんか。 OSはXPでVisual C++.NETを使っています。 |
お騒がせしました。 自己解決しました。 |
こんにちは!! HP-UNIXなんですが、どなたか教えてください。 lsコマンドのタイムスタンプを常に西暦を表示するようにしたいのですが そのままls -l では直近6ヵ月未満までは西暦がでません。 該当するオプションがあるのでしょうか? ちなみに-Tはだめでした。 よろしくお願いします。 |
>>4431 まっちゅう@ペガサス流星拳 HP-UX 標準の ls では無理だと思います。代案としては、 - tar cf - ファイル | tar tvf - - sed で置換 - perl などを使う など。 |
ありがとうございます。 運良くFinishedメッセージは解決できました。 その次のAppricationDataの暗号化で質問があるのですが、 SSLCompressedが良く分からないです。 もし、ご存知なら、教えていただけないでしょうか。 お願いします。お願いします。 |
やっぱり無理ですか。。。。 代案までありがとうございました。 |
tarコマンドで、コマンドの実行ディレクトリからサブディレクトリも含めて、 ワイルドカードで指定したファイル、例えば、「*.txt」の様に指定して、 すべてのファイルを1つのアーカイブにまとめたいのですが、可能なので しょうか。 ディレクトリも含めたかたちにしたいのですが。 tar -cvf aaa.tar *.txt だと、直下のファイルのみ tar -cvf aaa.tar *.* だと、すべてのファイル |
>>4435 hagu いくつか方法はあると思いますが、 $ find . -name "*.txt" | xargs tar cvf outfile.tar 等とすればできます。 |
>> 4436 ありがとうございます。 試してみます。 |
>>4436 zsh Solaris の xargs (だったような気がしますが) は、LINE_MAX の長さがかなり 短くて、たしか 10KB 程度しかなかったような気がします。この使い方だと 複数回 tar コマンドが実行された場合、最後の方しかアーカイブに含まれない ので注意が必要です。 |
>>4408 68user 亀レスすいません。 DNS のプログラミングのアドバイスをしていただいたものです。 出張先の住まいがレオパレスでネット環境があると聞いていたので、 すぐに閲覧できると思いましたが、いろいろ問題があり今までかかりました。 今後は普通に対応できると思います。 よろしくお願いします。 |
>>4438 68user ご指摘ありがとうございます。 確かに複数回実行された場合の考慮が漏れていました。 ちなみに、Solaris の LINE_MAX の値は 2KB のようです。 |
>>4438 68user >>4440 zsh 試して見ました。 ご指摘の通りでした。 標準出力には、すべて出てきましたが、 最後の方しかアーカイブに含まれていませんでした。 どう対応すればよいのですか。 |
>>4441 hagu カナリ遅いですが. cat /dev/null>outfile.tar && find . -name "*.txt" | while read F in; do tar rvf outfile.tar "$F"; done |
サーバーアドレスの見方はどうすれば??教えてください! |
>>4441 hagu 試してませんが、 $ find . -name "*.txt" | xargs tar rvf outfile.tar でいけると思います。 (tar は r を指定すると追記になります。) |
>>4439 DNS勉強中 宣言した「今月中」もあと残すところ 6日。一度言ったことは守れよ、と 自分にプレッシャーをかける毎日です。 >>4441 hagu その他。 - tar cf outfile.tar `find . -name "*.txt"` (長すぎると Argument list too long になるが、エラーかどうかがはっきり わかるので使えなくもない) - tar の、ファイル名一覧をファイルから取得するオプションを使う。 >>4443 不明5号 質問の意味がわかりません。 |
>>4445 68user >>4444 zsh ありがとうございます。 試してみます。 >tar の、ファイル名一覧をファイルから取得するオプションを使う。 探して見たのですが、使い方がわかりませんでした。 使い方教えてください。 |
>>4445 68user >>4444 zsh ゴミすみません。 名前のところに”お”が入ったままで書いてしまった。 ありがとうございます。 試してみます。 >tar の、ファイル名一覧をファイルから取得するオプションを使う。 探して見たのですが、使い方がわかりませんでした。 使い方教えてください。 |
>>4447 hagu http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse にあるように、 OS 名を明らかにすれば期待する回答が返ってくる可能性が高まると思われます。 |
>>4448 68user すみません。 UNIXで、Solaris8 です。 |
>>4449 hagu man tar で出てきますが・・・ http://docs.sun.com/app/docs/doc/816-3518/6m9ptvr58?l=ja&a=view |
>>4449 hagu 具体的には % find . -name "*.txt" > filelist.txt % tar cf outfile.tar -I filelist.txt てな感じで。手元に Solaris がないので動くかどうかはわかりません。 |
>>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 を書くのがダルい、というデメリットもありますね。 |
>>4452 68user すいません。 アップロードしなおしました。 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1374.zip ただこれは1関数1ソースバージョンです。 今出張先でこのソースバージョンしか持っていないです。 それと1関数1ソースのデメリット分かりました。 特にMakefileは書いてて同じ事を感じてました。 |
一応1ソースバージョンもアップロードしました。 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1375.zip ただこれは学校に提出したバージョンのため、>>4453のソースの1つ前のバージョンのソースとなります。 |
>>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ヶ月以上引っ張ってしまったわりに、たいしたレビューができませんで 申し訳ないです。 |
新版 UNIX 由来/読み方辞書 http://X68000.q-e-d.net/~68user/unix/unix-term-dic.html なるものを作ってみました。 元々あったオリジナルが 200個、わたしが追加したのが 60個程度です。 オリジナルの記述を読んでると時代を感じますね…。 |
a.outでtypo指摘っす > 実態にそぐわなかくなったが |
>>4457 Netboy ありがとうございます。今晩修正します。 追加ネタメモ。 abbrev yum xargs |
>>4457 Netboy 修正いたしました。ご指摘ありがとうございました。 |
このサイトにはいろいろお世話になっております。 UNIX 用語 由来/読み方辞書 も一気に読ませていただきました。 気になった点をいくつか: ・fgrep と Gimp の解説文が途中で切れてしまっているように 思います。 ・記号の 2 項目め(「"」の項と思われる部分)の見出し行が 抜け落ちてしまってます。 ついでに(思いっきり重箱の隅ですが)、この掲示板の [使い方] ページにある「敬省略」っていうのも気になります… |
>>4460 mkt あれ? 全角空白が 4 個に置換されてる…。 |
シェルで、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シェル |
>>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 全角入りソースをコピペしやすいよう、半角空白に置換しています。 |
>>4451 68user 返事送れて申し訳ありません。 Solarisで動きました。 |
>>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 あたりで。 |
>>4465 68user > と思ったのですが、最終行が出ません。 あー、ループ部分がサブシェルになってるからか。 while read -r line; do ... done < file.txt なら OK ですね。 やはり sh でプログラムなんて書くもんじゃないと思う。誰か Sh Programming Considered Harmful を書いてください。 |
>>4466 68user 補足。Solaris の sh では > while read -r line; do > done < file.txt でもダメなようですね。 http://blog.goo.ne.jp/cars-kitahefu/e/4190a337427d7a8cfcb5a62f515c6936 |
>> 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'` としたら上手くいきました。 |
>> 4468 sed 一発で簡単にできるものなのでしょうか。 |
>>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とか使った方が絶対に効率が良かったりするのに、 何故かシェルスクリプトにこだわる人とかいるし・・・ (で、気がつくと自分以外に判らないスクリプトが出来上がっていると。) |
>>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®exp=on&case=off > 全角入りソースをコピペしやすいよう、半角空白に置換しています。 あ、それは理解してたんですが、 [使い方]ページに「全角空白は 2 つ分の半角空白(…)に置換されます。」 とあるのに、どうして行頭に入れた全角空白 1 個が「 4 つ」 に置換されちゃったんだろう? と思った次第です。 # 今回は全部半角空白にしてみた。 |
なるほど、半角空白 1 個が「 2 つ」になってるのか…。 失礼しました。 |
>>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 |
>>4470 zsh >>4473 if ありがとうございます。 今、時間がありませんが、試してみます。 シェルスクリプトよりもPerlですか。 |
>>4470 zsh >これだけで動きますか? >whileの前に >exec 0<file.txt >とか要りませんでしたっけ? 要りませんでした。 while read line; do done < file.txt または、 while read line do done < file.txt で動きました。 |
>>4475 お Solaris9のsh |
>>4475 お Solaris9のshで確認しましたが、 やはりwhileの前に exec 0<file.txt を入れないと、最終行が表示されません。 恐らく、元のファイルの最終行が空行なので問題ないのだと思います。 >>68user様 記述途中で送信してしまい、大変失礼しました。 |
>>4455 68user ご指摘ありがとうございます。 スレッドセーフやマジックナンバなどは考えておりませんでした。 それと goto の部分は使いたくなかったのですが、うまくプログラムの流れを制御できなかったためやむなく使用しました。 確かに分かりにくいと思います。 今後修正してみようと思います。 かなり忘れている部分が多いので、思い出すところからはじめないといけないのですが。 |
>>4471 mkt > 書きかけだった部分、もう削除しておられますが、いずれまとまった形で > 復活するのを期待しています。 はい、そのうちまとめて更新したいと思います。 >>4477 zsh > やはりwhileの前に > exec 0<file.txt > を入れないと、最終行が表示されません。 わたくしのまわりには Solaris がないので試せませんが、これは何が原因で 最終行が表示されないのでしょうか? >>4478 DNS勉強中 > 今後修正してみようと思います。 > かなり忘れている部分が多いので、思い出すところからはじめないといけないのですが。 細かな指摘ですので修正は不要かと思います。もし DNS にこだわりがあるなら、 ライブラリ化したり、他のレゾルバのソースを読んだり、 http://www5d.biglobe.ne.jp/~stssk/dns.html を片っ端から実装するのがいいのではないでしょうか。 |
>>4479 68user >わたくしのまわりには Solaris がないので試せませんが、これは何が原因で >最終行が表示されないのでしょうか? パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。 Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを オープンしていました。 (ksh/bash/zshはサブシェルで動作しないので問題なし。) |
>>4480 zsh >パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。 >Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを >オープンしていました。 サブシェルで動作するとは、子プロセスでシェル起動しているというこ ですか。 whileの前に exec 0<file.txt を入れないと、最終行が表示されないということですか。 |
>>4480 zsh あー、なるほど。 >>4467 68user > 補足。Solaris の sh では >> while read -r line; do >> done < file.txt > でもダメなようですね のことですね。別件かと勘違いしておりました。 |
>>4481 お >サブシェルで動作するとは、子プロセスでシェル起動しているというこ >ですか。 その通りです。 >whileの前に >exec 0<file.txt >を入れないと、最終行が表示されないということですか。 サブシェル(while)内で use_buf=1 としても、親シェルには引き継がれないので 最後の if 文が必ず偽になります。 よって、最終行(最終行が半角スペースで始まる場合には最終 2 行)が 表示されないと思います。 |
>>4483 zsh 試して見ました。 ファイルの最後が空行(最終行が改行コードで終了)の場合、 whileの前に exec 0<file.txt を入れないくても、最終行が表示されました。 最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、 catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る ファイルをやると、最終行が表示されません。 whileの前に exec 0<file.txt を入れた場合でも。 |
>>4485 お >ファイルの最後が空行(最終行が改行コードで終了)の場合、 >whileの前に >exec 0<file.txt >を入れないくても、最終行が表示されました。 試してみましたが、最終行(空行)は表示されませんでした。 Solaris 標準の sh ですよね? >最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、 >catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る >ファイルをやると、最終行が表示されません。 それは read コマンドが読込めないので、仕方がないというか そこまでやるならシェルスクリプトにこだわらない方が良いかと。 |
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 |
はじめまして。 おじゃまいたします。 早速ですが 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()を呼び出す |
はじめまして。 おじゃまいたします。 早速ですが 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()を呼び出す |
>>4488 take >>4489 take 2度書きしてしまいました。 申し訳ありません。 |
>>4489 take > DH鍵交換の実装方法がなかなか調べても分からない状況です。 わたしにもさっぱりわかりませんが、以下の URL はチェック済ですか? http://www.openssl.org/docs/crypto/dh.html http://matagi.sakura.ne.jp/mt/archives/2005/03/openssldh.html |
>>4491 68user >わたしにもさっぱりわかりませんが、以下の URL はチェック済ですか? > http://www.openssl.org/docs/crypto/dh.html > http://matagi.sakura.ne.jp/mt/archives/2005/03/openssldh.html お返事ありがとうございます。 DH法用の関数はこれなんですね。 お教え頂いた情報を参考に、更に調べてまいります。 |
シェルスクリプトで、 ファイルからフィールド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 |