|
>>4174 68user へにかです。 例のCGI経由で、お伝えしました。お時間が許せばで結構ですので、 再送の程、宜しくお願いいたします。 |
|
転職活動は終了しましたので、転職先募集のページは閉じました。 最初はただの雑談のつもりだったのですが、結果的には希望通りの 転職先が見つかり、満足しています。情報を寄せていただいた みなさまには本当に感謝しております。ありがとうございました。 自分の web 上で転職活動をするとどうなるか興味があるかたも いらっしゃるかと思うので、結果を簡単に。 頂いた情報は 18日間で 17件でした。内訳は以下の通りです。 - この会社はよさそうでは?: 3件 - 知り合いがここに勤めてます: 3件 - ウチくる?: 8件 - 転職紹介サイトなど紹介: 2件 - ここはやめとけ: 1件 あと、どこかの blog で「はてなとかどう?」というコメントを 見かけました。 よかったところ、悪かったところは以下の通り。 よかったところ: - 「上流から下流まで全てを手がけたい」「自社システム開発あるいは元請」 など、希望条件を明確に提示できる。普通の人材募集のページには 「〜以下の工程を担当可能です。それより上は元請会社の仕事です」 「うちは下請けばっかりです」 なんてことは書いてない。 - 予想以上の情報が集まった (2〜3件程度かと思っていた) - 事前に web を見てもらっているので、技術面での力量をかなり正確に 把握してもらえる - まずはメールで質問できるので、情報収集には苦労しない (通常は 履歴書送付から始まるので、質問できる段階に行き着くまでが長い) - このページを見ている人は技術者が大半と思われるので、現場の 雰囲気や作業内容など、細かな情報も聞くことができる - 運がよかった 悪かったところ: - (面接に行くと) 顔バレ・名前バレ (仕方ないけど) - (転職すると) web バレ (これも仕方ない) - 大きな会社に行きたい場合は向かない (わたしは小さなところを 希望していたのでデメリットではないんですが) お返事を差し上げなかった方についてはまことに申し訳なく思って おります。勤務場所・仕事内容・会社の規模 (大きすぎる) などで 希望条件と合致いたしませんでした。なにとぞご容赦ください。 >>4175 へにか メール送ります。 |
|
というわけで、お礼がわりと言うのもおこがましいですが、当掲示板 での質問受け付けを再開します。痛い質問者によって精神的に疲弊 してしまったら、またクローズして充電します :-) 今後ともよろしくお願いします。 |
|
すみません、どなたかご教授ください。 HP-UNIXであるコマンド(シェルで起動したC)の出力結果の一部日本語出力が文字化けします。 teratermで接続していますが、teratermの設定をSJISからEUCに変更すると見えるようになります。 UNIXは元々SJISですので、 setenv LANG ja_JP.EUCを入れて実行したのですが、結果は同じです。 どなたか解決策を授けてください。お願いします。 |
|
ftp上のlsの挙動に関する質問です。 ftpサーバはsolaris8とsolaris10です。 (両方OS標準のftpサーバです。) クライアントはwindows98です。 solaris8に接続してlsをフルパスですると、 結果がファイル名だけ帰ってきます。 例) ftp> ls /etc 結果 vfstab しかし solaris10に接続してlsをフルパスですると、 結果がフルパスで帰ってきます。 例) ftp>ls /etc 結果 /etc/vfstab solaris10の結果をsolaris8にあわすことが出来ないでしょうか? 結果ファイルを使って後の処理をしているので違う結果になると いままで作ったプログラムを手直ししないといけないのでなんとかしたいです。 よろしくお願いします。 |
|
>>4178 あんどろめだ 1. C のプログラムが Shift_JIS 文字列を吐くよう修正する。普通に printf などで出力しているなら、ソースを Shift_JIS に変更して から再コンパイル (それで動作するかどうかは要検証)。 2. 出力を Shift_JIS に変換してから受け取る Ex: result=`command | iconv -f eucJP -t sjis` >>4179 シロネコ Solaris9 以降は wu-ftpd ベースらしいので、 >>3374 とーりすがり のように /bin/ls に変更してやれば変わるかもしれません (デフォルトでは /bin/ls を使っていないようなので)。それでもダメなら、ディレクトリ名を 削除する以下のような自作の ls を作って指定するとか (あまりに場当たり的 ではありますが)。 #!/bin/sh /bin/ls "$@" | sed 's|/.*/||'" あと、結果ファイル処理プログラムを書き換えないまでも、リクエストの 出し方を変えてよいのであれば - cd /etc してから ls する (まぁそれができるならわざわざ質問 しないでしょうけど) - ls /etc "| sed 's|/.*/||'" と、別プログラムをかませる (Windows98 に sed はないので適当に工夫する。ただし Windows の ftp.exe で "| ..." が効くかどうかは不明) とか。 |
|
>>4180 68user > #!/bin/sh > /bin/ls "$@" | sed 's|/.*/||'" 最後の " は余計でした。 |
|
68userさん 2の方法でうまくいきました。(iconvコマンド初めて知りました) ありがとうございました!! |
|
ありがとうございました。 でも、やってみましたが、 /bin/lsを変更する方法も、 自作のlsを使う方法もだめでした。 やり方が悪かったのでしょうか? |
|
>>4183 シロネコ FreeBSD に wu-ftpd-2.6.2 を入れて試してみましたが、そもそも > 結果がフルパスで帰ってきます。 となりませんでした。 手元に Solaris10 がないのでこれ以上はわかりません。いまさらでは ありますが、ftp サーバが wu-ftpd なのかを調べた方がよいと思います。 |
|
こんにちは。お世話になります。 すいませんが質問させてください。 メーリングリストサーバのfmlで、特定のアドレスから来たメールや、 特定のサブジェクトのメールをメーリングリストに流さないように したいのですが、どのようにすれば良いでしょうか。 具体的な資料があれば、教えていただけると助かります。 唐突ですいません。 |
|
>>4185 りゅう http://www.fml.org/software/fml/variable-list.ja.html#Section-Misc-Misc の $REJECT_ADDR http://www.fml.org/software/fml/Japanese/examples/spam_check.ph の &DEFINE_FIELD_PAT_TO_REJECT などでしょうか。 |
|
>>4186 68user どうもありがとうございます。 参考にして、試してみます。 |
|
>>4186 68user 試してみたら、うまくスパムメールを弾いてくれました。 ありがとうございました。 |
|
68user's page の正式なサーバ名は X68000.q-e-d.net ですが、 これまでは他の CNAME や IP アドレスを指定した場合でも閲覧 できていました。 Ex: www.usami.com/~68user/cgi-bin/wwwboard.cgi さきほどホスト名が m/^X68000\.q-e-d\.net$/i にマッチしない 場合はエラーとするよう修正しました。もし問題がある場合は 教えてください。 と言っても、問題があったらこの掲示板にはたどり着けないのですが。 # http://x68000.q-e-d.net/~68user/cgi-bin/cvsweb.cgi/public_html/.htaccess |
|
PHP の習作として、バグ管理ツール bugnote を作ってみました。 http://X68000.q-e-d.net/~68user/bugnote/ 自分でバグを登録して自分で直すだけの、ただのメモ代わりの ツールですが、せっかく作ったので公開します。 もし以前指摘したのに直ってない、bugnote にも載ってない、 という問題がありましたらお教えてください。 |
|
お世話になっています。 管理人様へ質問なのですが、プログラムなどの著作権はどうなっているのでしょうか? もし、明示されている場所があれば教えてください。 |
|
>>4191 無題 著作権は放棄することができないのでわたしに属しますが、ライセンスに ついては http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4089 をどうぞ。近日中にわかりやすいところにも明記いたします。 |
|
>>4192 68user 早速の回答ありがとうございます。 プログラムを参考にさせていただきますね。 |
|
いまさらですが、昨日ある方に mixi に誘っていただきましたので、 >>4170 68user のメールアドレスは使えないようにしました。 |
|
すみませんが、どなたか『VC++(6.0)』でOpenSSLを使うための 設定法を教えていただきたいのですが…… |
|
>>4195 ド素人 - OpenSSL に同梱されている INSTALL.W32 を読んで、OpenSSL をビルド - プロジェクト (と言うのはどうか知りませんが) の設定で、以下の項目を追加 - インクルードパス - ライブラリパス - ライブラリ名 でいけるはずです。 |
|
同一PC上(UNIX)でサーバー、クライアントを作りSocket通信をしています。 send→select→FD_ISSET→Recvを行い、データのやりとりをしています。 何回かうまく送受信できるのですが、突然止まってしまいます。 sendはうまくいっているみたい(sendの返り値は正常)なのですが、 Recvをしてくれません。 netstatでSocket状態を確認すると以下のようになります。 tcp4 922 0 192.168.0.69.24019 192.168.0.69.61361 ESTABLISHED tcp4 0 0 192.168.0.69.61361 192.168.0.69.24019 ESTABLISHED tcp4 0 0 192.168.0.69.24019 *.* LISTEN どうもRecv-Qに送信されたデータが溜まっているみたいです。 色々調べてみたのですが、よく分かりません。 どなたか救いの手を差し伸べていただけないでしょうか。 |
|
>>4197 アメリカ在住 OS 名とソースを提示してください。 |
|
dblinkについての質問なのですが、dblinkで他のデータベースのテーブルと結合させる テーブルを作りたいのですが、CREATE文でFOREIGN KEYを使う事が前提となっていて、 どうやって記述すればうまくいくのかがわからず、困っています。うまくいったとして、 結合させる処理も考え付きません。 ビューを使えば結合はできたのですが、ビューはFOREIGN KEY には使えないのでだめで した。 create table DB1_T1( A1 char(3),B char(3),C char(3),primary key(A),foreign key(C) REFERENCES データベース DB2のテーブル2(C); という風にしたくて、foreign(C) REFERENCES dblink( 'dbname=DB2','select * from DB_T2') AS DB2_T2(C char(3),NAME varchar(50))(C) としてみたのですが、dbname=DB2 でエラーが起こってしまいます。 何かいい方法があればどうかお願いします。 バージョン Postgres7.3.3 |
|
>>4199 中川 PostgreSQL の dblink がいつのまに DB2 に対応したのかと 1時間 悩んでしまいました。 dblink は result set を返すものですが、foreign key は テーブル名・項目名を記述するものなので、無理じゃないですかね。 # Oracle なら foreign key(C) references DB_T2@dblinkname (c) # でいけそうですが。 やるなら DB1_T1 にトリガを設定して、UPDATE・INSERT・DELETE された ときに DB_T2 を見にいくとか。 |
|
大変早いお返事本当にありがとうございます。 とても悩んでいたので助かりました。 一番上にPostgreSQL と書くべきでした。 PostgresでdblinkとForeign keyを使うのは無理でしたか。 dblink以外を使って他のデータベースのテーブルをForeign key制約 に指定する方法はないのでしょうか? 上司に無理です。と言い切るしかないかもしれません。 |
|
>>4201 中川 外部キーにこだわるなら、 - 定期的に他データベースからデータを取得してローカルのテーブルに入れる - 他データベースからトリガでローカルのテーブルに反映する くらいしかないのでは、とわたしは思います。 |
|
大変早いお返事本当にありがとうございます。 とても悩んでいたので助かりました。 一番上にPostgreSQL と書くべきでした。 PostgresでdblinkとForeign keyを使うのは無理でしたか。 dblink以外を使って他のデータベースのテーブルをForeign key制約 に指定する方法はないのでしょうか? 上司にForeign keyにdblinkは無理です。と言ったところ、 データベースA データベースB テーブルT_A テーブルT_B A B C A B C 1 0 0 2 0 0 3 0 0 データベースAのテーブルT_Aの列E_1の選択した値だけ(1だけ や 2だけ)を データベースBのテーブルT_Bの列 Aに、INSERTする。 そのときテーブルT_Bの列BにはデータベースBのテーブルT_Cの列BをINSERT し、Cにはすきな値を入れる。 という処理をする事になりました。 dblinkとビューを使ってデータベースBのテーブルT_Bに変わるものを作れば いいと思ったのですが、selectした値をそれぞれの列に入れ込む処理が見当 たらず停滞しています。 いい案がありましたらよろしくお願いします |
|
>>4203 中川 - 最終的に何をしたいのか - 現状のどこが問題なのか を読み取ることができません。 |
|
わかりづらくて申し訳ありませんでした。 やりたい処理は テーブル1の列Aには、テーブル2の列A テーブル1の列Bには、テーブル3の列B テーブル1の列Cには、その場で作った 値をINSERTさせる という処理がした いのですが、解決策が見つかりません。 副問いで、SELECTした値をINSERTさせ ようとしたのですが、SELECTは一つし か使えないようなので複数SELECTして それぞれの列にINSERTさせるというの は無理なのでしょうか。 |
|
>>4205 中川 INSERT INTO T1 (A, B, C) SELECT T2.A, T3.B, 'HOGE' FROM T2, T3 WHERE (T2 と T3 に関する条件) ということですか? 手元に PostgreSQL はないので確認できませんが、Oracle では一応動きました。 |
|
何度もありがとうございました。大変助かりました。 SQL初心者なのでこれを機にテクニカルを身に付けようと思います。 度々すみませんが、また質問です 昨日の質問なのですが、データベースの異なるテーブル にトリガーを使って外部キーをつけるという処理を 今日一日悩んだのですが、トリガーを使ったことがなく、 少しも理解できていません。 トリガーを使って異なるデータベースのテーブルに外部キ ー制約を行う方法を教えていただけないでしょうか。 |
|
>>4207 中川 またそこから始めるんですか? 全然 4202 から状況が変わってないように見えますが、 4203-4206 のやりとりは何だったんでしょうか。 まぁ、それはそれとして、トリガを使う案は - DB1 にテーブル T1、DB2 にテーブル T2 がある - DB1 の T1 のカラム A には、DB2 の T2 のカラム A に存在する値しか入れたくない - しかし PostgreSQL の外部キーでは、dblink を使えないようだ - ならば DB2 の T2 と同じ内容のテーブル T2 を DB1 にも作って、そこに外部キーを設定しては - となると DB2 の T2 と、DB1 の T2 の間でテーブル内容の同期をとる必要がある - では DB2 の T2 にトリガをセットして、T2 に対する INSERT・UPDATE・DELETE が 発生したら、自動的に DB1 の T2 に同じデータを反映するようにするのがいいのでは というものです。DB2 の T2 がごくまれにしか更新されないテーブルであれば、 トリガを使う必要はないかもしれません (30分に一回 INSERT INTO SELECT で DB2 の T2 の内容を DB1 の T2 にコピーするとか)。 別の案としては、DB1 の T1 に INSERT・UPDATE がかかったときに、トリガで DB2 の T2 のカラム A を見にいって、データが存在しなかったら RAISE して エラーにする、というのもあります。 http://www.postgresql.jp/document/pg803doc/html/plpgsql-errors-and-messages.html いずれも何も試さずに言ってます。念のため。 |
|
皆様こんにちは。 ここはcshの質問をしても宜しいのでしょうか? sedを使ってCSVファイルをTSVファイルに変換しようとしているのですが 変換元と変換先のファイル名にシェルの引数を認識してくれません。 if ($4 == CSV) then #TSVに変換 sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw $LOG_DIR/$1.bad' endif アクセス権がありませんとか、オープンできませんというエラーになります。 下記のようにフルパスにすると正常に処理してくれます。 sed -e 's/","/ /g' /disk1/FNC021.bad | sed -n -e 's/"//gw /disk1/FNC021.bad' ファイル名を「`」でくくったり\でエスケープ?してみましたがダメでした。 sedを知らないので頓珍漢なことをしているのかもしれません。 有識者の皆様、助けて下さい。m(_ _)m |
|
すみません!!! 過去ログを眺めていて、適当に sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw '$LOG_DIR/$1.bad'' と’’をつけたら動いてしまいました。。 どうもお騒がせしました。m(_ _)m m(_ _)m |
|
>>4210 まつ 今後は #!/bin/csh -fx などと -x オプションを付けてデバッグすることをお勧めします。 |
|
こんにちわ。 スクリプト内1行目に-fxオプションをつければよいのでしょうか? 知りませんでした。。御恥ずかしい。 どのような結果になるのか月曜にでも確認してみます。 どうもありがとうございました! m(__)m |
|
UNIX の部屋を更新しました。 http://X68000.q-e-d.net/~68user/unix/ 未稿の部分が多くて恐縮ですが、書けども書けども終わりが見えないので、 いったん公開することにします。 |
|
はじめまして、sekiと申します。 ftpに関しまして、分からない事があり質問させて頂きます。 どなたかご存知の方おられましたら、ご教示をお願い致します。 【環境】 ・Solaris8 ・in.ftpdを使用 【問題】 ・バッチ処理にて、バーチャルIPでftpを行い、他ホストに作成された ファイルを取得する。 ネットワーク障害時や他ホストdown時、バーチャルIPが見えなくなる場合、 ftpのconnect:接続の時間切れとなるが、その場合約4分も待たされる。 【知りたい事】 ・上記のような障害時、1ノードで約4分も待たされるのは長いので、設定で 短く出来るのであれば短くしたい。 【検証】 (1) OSパラメータのtcp_time_wait_interval=240000(4分)になっていたので、 ftpがconnect_timeoutになるのは、上位のTCPのタイマーに引っかかるのでは と思い、nddコマンドにて60000(1分)にしてinetdデーモンを、kill -HUPした。 変更後、バーチャルIPが見えないHostに対しftpを行なったが、以前4分で ftp_connect:接続の時間切れとなる。 (2) /etc/inet/inetd.confの、ftp記述部分を下記のように-tオプションにて タイムアウトを設定し、inetdデーモンを、kill -HUPした。 こちらも変更後、バーチャルIPが見えないHostに対しftpを行なったが、 以前4分でftp_connect:接続の時間切れとなった。 ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d ※ 下記のURLを参考にさせて頂きましたが、FTPクライアントがFTP サーバに PORTコマンドを投げて応答なしで、データ用コネクションも張れない場合は どこの設定でクライアントはtimeoutを判断するのでしょうか? 私の推測のようにTCPに依存するものなのでしょうか? http://x68000.q-e-d.net/~68user/net/ftp-1.html |
|
はじめまして、sekiと申します。 ftpに関しまして、分からない事があり質問させて頂きます。 どなたかご存知の方おられましたら、ご教示をお願い致します。 【環境】 ・Solaris8 ・in.ftpdを使用 【問題】 ・バッチ処理にて、バーチャルIPでftpを行い、他ホストに作成された ファイルを取得する。 ネットワーク障害時や他ホストdown時、バーチャルIPが見えなくなる場合、 ftpのconnect:接続の時間切れとなるが、その場合約4分も待たされる。 【知りたい事】 ・上記のような障害時、1ノードで約4分も待たされるのは長いので、設定で 短く出来るのであれば短くしたい。 【検証】 1 OSパラメータのtcp_time_wait_interval=240000(4分)になっていたので、 ftpがconnect_timeoutになるのは、上位のTCPのタイマーに引っかかるのでは と思い、nddコマンドにて60000(1分)にしてinetdデーモンを、kill -HUPした。 変更後、バーチャルIPが見えないHostに対しftpを行なったが、以前4分で ftp_connect:接続の時間切れとなる。 2 /etc/inet/inetd.confの、ftp記述部分を下記のように-tオプションにて タイムアウトを設定し、inetdデーモンを、kill -HUPした。 こちらも変更後、バーチャルIPが見えないHostに対しftpを行なったが、 以前4分でftp_connect:接続の時間切れとなった。 ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d ※ 下記のURLを参考にさせて頂きましたが、FTPクライアントがFTP サーバに PORTコマンドを投げて応答なしで、データ用コネクションも張れない場合は どこの設定でクライアントはtimeoutを判断するのでしょうか? 私の推測のようにTCPに依存するものなのでしょうか? http://x68000.q-e-d.net/~68user/net/ftp-1.html |
|
>>4215 seki > tcp_time_wait_interval=240000(4分)になっていたので、 tcp_time_wait_intrval は TIME_WAIT な時間を設定するものなので、 関係ありません。 http://docs.sun.com/app/docs/doc/816-0607/6m735r5ga?a=view > ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d タイムアウト設定をしたいのは ftp であり、ftpd ではないので 関係ありません。そもそもネットワーク障害や他ホストが down して いるのであれば、ftpd まで行き着いていません。 今回設定したいのは、 http://X68000.q-e-d.net/~68user/net/tcp-connect-1.html における connect のタイムアウト時間と思われますが、OS の設定で 変更できるかどうかは知りません。ただし、普通は OS の設定は変更 しません。たとえば今後、 - FTP 接続だけは 10秒でタイムアウトさせたい - それ以外のプログラムでは 4分待たせたい というときにどうしようもなくなるからです。 対策としては、 - ftp に -T [タイムアウト秒数] オプションを付ける (試していませんが) - ftp の前に ping してみる (タイムアウト秒数を指定) - 監視用プロセスをたて、一定時間反応がなければ ftp を kill する てな感じでしょうか。 |
|
>>4216 68user > たとえば今後、 > - FTP 接続だけは 10秒でタイムアウトさせたい > - それ以外のプログラムでは 4分待たせたい > というときにどうしようもなくなるからです。 → 誠に早急なご返答、及びご教示の程、ありがとうございます。 上記の返答、ごもっともです。 - ftp に -Tをつけるのは、一つの手だと思いますが、APLに手を 入れる事なく設定変更で済ませれるのであれば済ませたいです。 申し訳ございませんが、ftpのソースコードなどは開示されていないので しょうか?? (4分でタイムアウトするという事は必ずどこかを見て判断しているはずですので ソースにじか書きしている可能性もある?かと思われるため確認したいです。) |
|
>>4218 seki 横からすみません. ftpのポート21でconnectできるかチェックするPerlスクリプトを 書いてみました.試していただけますか? use Socket; $SIG{'ALRM'} = sub { close(SOCK); $sTimeout='(timeout)'; }; # ConnectTest(IPアドレス,ポート,タイムアウト秒数) if (!&ConnectTest('192.168.x.x',21,5)){ print "cannot make a ftp connection.\n"; exit; } # 正常ならばftpコマンドを実行 system ('ftp hogehoge'); exit; sub ConnectTest { local($sIP,$nPort,$nTimeout)=@_; local($iaddr,$paddr,$flag,$protoTCP,$sTimeout); $iaddr = inet_aton($sIP) || die "no host: $sIP"; $protoTCP = getprotobyname('tcp'); $paddr = sockaddr_in($nPort, $iaddr); $flag=socket(SOCK, PF_INET, SOCK_STREAM, $protoTCP); if (!$flag){ goto J1_1; } $flag=0;$sTimeout=''; eval { alarm($nTimeout); $flag=connect(SOCK, $paddr); alarm(0); }; if (!$flag){ goto J1_1; } if ($sTimeout){ goto J1_1; } close (SOCK); return 1; J1_1: close (SOCK); return 0; } |
|
>>4218 seki > ftpのソースコードなどは開示されていないのでしょうか?? Solaris8 のソースは配られていたかどうかは忘れましたが、いずれにせよ ソース中には 4分という記載はありません (見てませんが)。connect(2) の タイムアウトを決めるのはカーネルの仕事です。 で、 http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.5 によると、 # ndd -set /dev/tcp tcp_ip_abort_cinterval 180000 で変更可能なようです。 > APLに手を入れる事なく設定変更で済ませれるのであれば済ませたいです プログラムに手を入れるよりもカーネルの設定を変える方がよいというのは 間違った判断だと思います。 まぁ客や上司の意向とか、ソース触ったら契約がどうこうとか、世の中には うっとうしいことがいろいろあるので別にいいですが。 >>4219 Netboy ウチの環境では動きました。 |
|
usen-221x242x135x85.ap-US01.usen.ad.jp (221.242.135.85) の方、 /~68user/net/sample/http-auth/secret.html に 21分間で 25万回アクセスするのは、ぜひともやめていただきたい。 って言っても、どうせ見てないんだろうし、deny したところでおそらく動的に IP アドレスを振ってるだろうし、こういう輩はどうしたらいいんですかねぇ。 |
|
>>4221 68user いや、もう、それは管理部門に連絡するのが良いでしょう。 満足いく内容かどうかはともかく、大抵は何らかの返答はありますよ。 #釈迦に説法のような気がしてなりませんが。 |
|
>>4222 へにか なるほど、そういうものですか。usen ならここらへんでしょうか。 http://www.fttx.co.jp/jp/contact/abuse.html ただ、マシンが落ちるなどの実害はなかったことと、usen の web によると 実名を書けだの、仲介しかしないだの、めんどくさそうなので今回は 放置します。 ちなみに「どうしたらいいのか」というのは技術的な解決方法はないですかねぇ、 という意味でした。たとえば一定時間に指定の閾値を超えた IP アドレスは deny するような apache のモジュールがどこかにありそうですよね。 というわけで探したらありました。 http://www.netnice.org/pukiwiki.php?%B4%FB%C2%B8%A4%CEApache%A5%C8%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%C0%A9%B8%E6%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB まぁほんとにしつこくやってくるようなら usen ごと deny するので 別にいいんですけどね。 |
|
あぁ、技術的な話でしたか。 それに似た話は、某掲示板群で話題になってますね。 http://qb5.2ch.net/operate/kako/1113/11135/1113508190.html http://qb5.2ch.net/test/read.cgi/operate/1113647422/ しつこいクローラー&過剰リロード対策についての議論です。ご参考までに。 因みに、他の業者に対しては本名を名乗ったことはありません(へにかのまま)。 usenも変な話で、被害をこうむったほうの名前は聞くけど、被害を出したほうの 名前は出さないっていうことですよね? その辺を突っついてみると、なんらか の回答が出るかもしれません。・・・が、放置されるとの事ですので、補足意見 とさせてください。 |
|
"ネットワークプログラミングの基礎知識"等にある サンプルプログラムのライセンスはどうなっているのでしょうか? |
|
>>4222 へにか 危ない その輩は server:os-ns01.usen.ad.jp address:61.122.127.122 name:221x242x135x85.ap.221.ftth.ucom.ne.jp address:221.242.135.85 私は server:os-ns01.usen.ad.jp address:61.122.127.122 name:******* address:61.116.228.135 なんですけどサーバーが同じだと危ないのですかね? |
|
>>4225 mmm 過去ログ読んでから質問した方がいいですよ。 ライセンスについては >>4089 68user にあります。 |
|
すいません、質問させてください。 UNIX上で、ファイルをmac用にstuffit形式に圧縮できるツールを探しているのですが、 ありますでしょうか。 |
|
素人ですが質問させてください。 solaris9 cにて開発しています。 クライアントサーバ間を常駐プロセス1:1(クライアント1、サーバ1プロセス)にて TCP/IPソケット通信しようと考えています。 1接続毎にconnect/closeするのではなく、常にconnectionし続けようと考えています。 そこで、質問ですが、通信中にサーバ側がなんらかの理由により切断された場合、クライアント側は connectからやり直す必要があるのでしょうか? それともsendを行えば内部的にconnectを行って、sendしてくれるんでしょうか? 質問が下手ですみません。 |
|
環境はSunOS 5.8です。 ------------------------ #!/bin/csh -fx setenv LANG ja_JP.PCK ・・・ ------------------------ というrootから起動されるshellスクリプトを実行すると (あるバッチ処理管理ソフトを使って起動するとrootから起動されるのです) setenv LANG ja_JP.PCK Locale could not be set properly というエラーになってしまうのですが、何故か分からず困っています。 助けて下さい。 m(_ _)m telnetでuser01でログインしてsetenvを実行すると LANG=ja_JP.PCK となっていますが、上記スクリプトにsetenvを記述すると LANGは表示されません。 スクリプトにsetenv LANG ja_JP.PCKを記述しないと echo チェックリスト作成処理(/disk1/hoge/hoge01/sh/AAA001.csh) 開始 Unmatched ` というエラーになります。 telnetでuser01でログインして実行するとsetenv LANG ja_JP.PCKが なくても正常終了します。 どうぞ宜しくお願い致します。 |
|
>>4226 匿名 > なんですけどサーバーが同じだと危ないのですかね? う〜ん、僕には力不足で答えられないです。ところで危ないって、どういう局面を想定されていますか? しかし、その輩、ftth.ucom.ne.jpって、FTTH! うらやましいなぁ。そんな贅沢な帯域があるんだったら、有効に使ってほしい今日この頃です。 |
|
>>4224 へにか なるほど、そちらも参考にさせていただきます。 >>4226 匿名 > server:os-ns01.usen.ad.jp というのは、あなたが使用している DNS サーバが os-ns01.usen.ad.jp であることを示しているだけです。普通は、どの IP アドレス・FQDN に ついて正引きや逆引きをしても、「server」の部分は変化しません。 >>4228 りゅう シェアウェアっぽいですが、 http://www.stuffit.com/unix/index.html など。あと、 http://www.asl.ee.meisei-u.ac.jp/kaken/stuffit.j.html によると netatalk にも含まれているとか。 >>4229 しず > connectからやり直す必要があるのでしょうか? コネクションが切れた場合は、connect しなおす必要があります。 >>4230 まつ よくわかりませんが、手元の Solaris8 でも同様の結果になりました。setenv が 呼ばれると、シェルは putenv(3) するだけではなく setlocale(3) あたりも呼ぶ 必要があるような気がしますが、Solaris8 の csh はそこの処理にバグがあるのでは ないかと思います。 csh をやめて sh・tcsh・ksh などに切り替えるか、あるいは #!/bin/sh exec env LANG=ja_JP.PCK 実行したいスクリプト名 というような wrapper スクリプトをかませてはどうでしょうか。 |
|
>>4232 68user 他のサーバー(同じくSunOS5.8だったはずです)では同じように rootから実行できているのです。何かが違うのでしょうね。。 両サーバーのrootの環境を比較するなりしてみます。 #サーバー管理者へ依頼する必要があるのですが・・・ 社内の人より下記で逃げられるという指摘もありました が、他サーバーで出来ているので腑に落ちません。 ----------------------------- unsetenv LC_ALL setenv LANG ja_JP.PCK setenv PATH .:$PATH /usr/bin/env set echocmd=/usr/bin/echo $echocmd 'チェックリスト作成処理($0) 開始' ----------------------------- それでも分からなければwrapperスクリプトをかませてみます。 他に何かありましたらご教示下さい。 |
|
>>4233 まつ > が、他サーバーで出来ているので腑に落ちません。 想像ですが、OS インストール時に ja_JP.PCK を選択すると うまく動くのかもしれません。 |
|
>>4233 まつ 問題のあるサーバだけLC_ALLが設定されていませんか? localeコマンドの結果を比較してみてください。 どちらのサーバでも設定されているのであれば 導入されているロケールパッケージ(?)の差だと思います。 |
|
>>4235 zsh お察しの通り、問題のあるサーバだけLC_ALLが設定されていました! --動かないサーバー----------- LANG= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL=JA16SJIS --問題ないサーバー----------- LANG=ja_JP.PCK LC_CTYPE="ja_JP.PCK" LC_NUMERIC="ja_JP.PCK" LC_TIME="ja_JP.PCK" LC_COLLATE="ja_JP.PCK" LC_MONETARY="ja_JP.PCK" LC_MESSAGES="ja_JP.PCK" LC_ALL= ----------------------------- 1、rootでLC_ALLが設定されているという事でしょうか? 2、問題ないサーバーと同じ環境にするには何処を直せば良いのでしょうか? 3、2がサーバー管理方針などで変更できない場合、C-Shellで unsetenv LC_ALL setenv LANG ja_JP.PCK とすれば良いのでしょうか? 宜しくお願い致します。 |
|
>>4232 68user >コネクションが切れた場合は、connect しなおす必要があります。 コレクションが切れているか否かの検知ですが、クライアントからsendを 行ったときのタイムアウトを検知したときが一般的でしょうか (むしろこれしかない?) 宜しくお願いします。 |
|
>>4235 zsh 試しに下記を実行してみましたが、元に戻ってしまいました。。 echo内の日本語が文字化け?して「`」になっている為でしょうが 何故未だ日本語が表示できないのでしょうか? 問題ないサーバーではダブルコーテーションで囲まれてるのに 下記結果では囲まれてないのがダメなのでしょうか? ---------------------------------------------------- #!/usr/bin/csh -fx locale unsetenv LC_ALL setenv LANG ja_JP.PCK setenv LC_CTYPE ja_JP.PCK setenv LC_NUMERIC ja_JP.PCK setenv LC_TIME ja_JP.PCK setenv LC_COLLATE ja_JP.PCK setenv LC_MONETARY ja_JP.PCK setenv LC_MESSAGES ja_JP.PCK locale echo "ロードエラーチェックリスト作成処理($0) 開始" ---------------------------------------------------- locale LANG= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL=JA16SJIS unsetenv LC_ALL setenv LANG ja_JP.PCK setenv LC_CTYPE ja_JP.PCK setenv LC_NUMERIC ja_JP.PCK setenv LC_TIME ja_JP.PCK setenv LC_COLLATE ja_JP.PCK setenv LC_MONETARY ja_JP.PCK setenv LC_MESSAGES ja_JP.PCK locale LANG=ja_JP.PCK LC_CTYPE=ja_JP.PCK LC_NUMERIC=ja_JP.PCK LC_TIME=ja_JP.PCK LC_COLLATE=ja_JP.PCK LC_MONETARY=ja_JP.PCK LC_MESSAGES=ja_JP.PCK LC_ALL= echo [hG[`FbNXgャ(/disk18/acua/acua01/sh/FNC07998.csh) Jn 不整合 - ` ---------------------------------------------------- |
|
>>4238 まつ 実験してみましたが、うまくいかないサーバには ja_JP.PCK の ロケールがインストールされていないようです。 >>4232 68user で「csh のバグでは」と言いましたがこれは誤りで、csh だけが 真面目にエラーチェックしているような感じです。 動かないマシン (Solaris8) の /usr/lib/locale/ja_JP.PCK/: LC_MESSAGES/ 動くマシン (Solaris2.6) の /usr/lib/locale/ja_JP.PCK/: LC_CTYPE/ LC_MESSAGES/ LC_TIME/ ja_JP.PCK.so.1 locale_description methods_ja_JP.PCK.so.1 そして ja_JP.PCK ロケールが含まれているマシンであっても、 #!/bin/csh setenv LANG ja_JP.PCK echo "ロードエラーチェックリスト作成処理($0) 開始" このスクリプトは動作しませんでした。おそらく、ja_JP.PCK にした 時点では、既にスクリプトの字句解析は終了しているからだろうと思います。 対策案は 3つ。 案1. - ja_JP.PCK ロケールをインストールする。インストール方法は知りませんが、 以前他のマシンから /usr/lib/locale/ja_JP.PCK/ をぶっこ抜いてきたことが あったっけ。 - さらに wrapper スクリプトを作る 案2. Shift_JIS の「チ」の 2バイト目が ` であることが直接の原因なわけで、 echo 'ロードエラーチェックリスト作成処理('$0') 開始' などと '' で囲んで ` を解釈させないようにする。 案3. 一番いいのは、スクリプトを EUC-JP に変えて、ロケールを混在 させないこと。 あと、 > LC_ALL=JA16SJIS というロケールは存在しないので、おそらく無効なロケール扱いされて いるでしょう。JA16SJIS って Oracle 的なロケール表記ですから。 LANG と LC_* の関係は以下の URL をどうぞ。 http://www.jp.freebsd.org/QandA/HTML/2199.html http://www.jp.freebsd.org/QandA/HTML/2200.html |
|
>>4237 しず send はローカルの mbuf にデータをコピーしたら正常終了と みなすので、エラーになりません。 recv でエラーになるか、次回の send で EPIPE が発生するかの いずれかです。 |
|
>>4239 68user /usr/lib/locale/ja_JP.PCK/:を両サーバーで比較しましたが同じでした。 そして上手く行くサーバーでは #!/bin/csh setenv LANG ja_JP.PCK echo "ロードエラーチェックリスト作成処理($0) 開始" も動作しました。 LANG と LC_* の関係、有り難うございます。勉強になります。 #!/bin/csh -fx locale unsetenv LC_ALL setenv LC_ALL ja_JP.PCK setenv LANG ja_JP.PCK unsetenv LC_ALL locale env として、うまくいくサーバーと同じlocaleに出来ましたがそれでも不整合になります。 env実行結果 --上手く行くサーバー----------------------------------------- HOME=/export/home/adm HZ=100 LANG=ja_JP.PCK LOGNAME=adm MAIL=/var/mail/adm PATH=/opt/oracle/product/8.1.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin: PS1=# PWD=/opt/netos/bin SHELL=/bin/csh TERM=vt100 TZ=Japan USER=adm _INIT_NET_STRATEGY=none _INIT_PREV_LEVEL=S _INIT_RUN_LEVEL=3 _INIT_RUN_NPREV=0 _INIT_UTS_ISA=sparc _INIT_UTS_MACHINE=sun4u _INIT_UTS_NODENAME=isv1dm10 _INIT_UTS_PLATFORM=SUNW,Ultra-Enterprise-10000 _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-16 --上手く行かないサーバー----------------------------------------- HOME=/ HZ=100 LOGNAME=root PATH=/usr/sbin:/usr/bin:/opt/EMCpower/bin:/etc:/usr/ccs/bin:/usr/local/bin SHELL=/sbin/sh TERM=vt100 TZ=Japan PWD=/opt/netos5/bin USER=root LANG=ja_JP.PCK ----------------------------------------------------------------- この辺の環境が違うのがダメなのでしょうか? 案1はja_JP.PCK ロケールはインストールされており上記でLANGの設定も 出来たので、案からは外れたと思います。 案2ですが、echoをダブルコーテーションで囲むのとシングルコーテーションで 囲むのでは解釈が異なるのですね?? 知りませんでした。。 案3ですが、うまくいくサーバーではShift_JISで動作しているので 腑に落ちません。。envの結果に差があるのが原因でしょうか?? 文字コードって奥が深いというか複雑というか厄介ですね。。(^^; |
|
>>4241 まつ > /usr/lib/locale/ja_JP.PCK/:を両サーバーで比較しましたが同じでした。 そうですか、謎ですね。 > そして上手く行くサーバーでは > #!/bin/csh > setenv LANG ja_JP.PCK > echo "ロードエラーチェックリスト作成処理($0) 開始" > も動作しました。 それは最初から LC_CTYPE が ja_JP.PCK になっているからではないですか? LANG・LC_* を全部クリアして、このスクリプトが動きますか? うちの ja_JP.PCK ロケールがインストールされている Solaris2.6 ではエラーになりました。 > 案3ですが、うまくいくサーバーではShift_JISで動作しているので > 腑に落ちません。。envの結果に差があるのが原因でしょうか?? ロケールを統一ってのは、例えばログのエンコーディングがばらばら だったりすると grep するにも面倒でしょ、というレベルの話です。 うまくいかないサーバで、 #!/bin/csh -f echo "ロードエラーチェックリスト作成処理($0) 開始" のスクリプトを root で % env LANG=ja_JP.PCK [スクリプト名] とすると動くのですよね? あと、うまくいかないサーバで、 - root で実行するとエラー - user01 で実行するとうまく動く ということですよね? root と user01 のログイン後の env 結果を比較してみてはどうですか? |
|
>>4242 68user 上手く行くサーバーで ---------------- unsetenv LC_ALL unsetenv LANG locale env echo "ロードエラーチェックリスト作成処理($0) 開始" ---------------- としたら ----------------------------------------- LANG= LC_CTYPE="C" ・・・ _INIT_UTS_VERSION=Generic_108528-16 (/data/keisu/ffile/shell/Data_Unqget.sh) ----------------------------------------- となりました。。二バイト文字が無視されている?? > うまくいかないサーバで、 > #!/bin/csh -f > echo "ロードエラーチェックリスト作成処理($0) 開始" > のスクリプトを root で > % env LANG=ja_JP.PCK [スクリプト名] > とすると動くのですよね? 私にはrootで実行する権限がなく、あるバッチ管理ツール経由で 起動させているのですが、そのツールに env LANG=ja_JP.PCK /disk01/hoge/hoge.csh と記述して起動させると stat: No such file or directory となってしまいました。。 > あと、うまくいかないサーバで、 > - root で実行するとエラー > - user01 で実行するとうまく動く > ということですよね? そうです。 バッチ管理ツールはそのツールプロセスを起動させた時点の 起動したユーザ環境が引き継がれるのですが、rootでその ツールを起動させています。 telnetでuser01でログインして実行すると上手く動くのです。 > root と user01 のログイン後の env 結果を比較してみてはどうですか? 以下のとおりです。 ------------root------------------------------------------------- #スクリプトにenvを書いてツールから実行させて吐き出した結果です HOME=/ HZ=100 LOGNAME=root PATH=/usr/sbin:/usr/bin:/opt/EMCpower/bin:/etc:/usr/ccs/bin:/usr/local/bin SHELL=/sbin/sh TERM=vt100 TZ=Japan PWD=/opt/netos5/bin USER=root LANG=ja_JP.PCK ------------user01------------------------------------------------- HOME=/export/home/user01 PATH=/opt/ora8i/app/oracle/product/8.1.7/bin:/usr/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/ucb: /etc:. LOGNAME=user01 HZ=100 TERM=vt100 TZ=Japan SHELL=/bin/csh MAIL=/var/mail/user01 LANG=ja_JP.PCK _INIT_NET_STRATEGY=none _INIT_PREV_LEVEL=S _INIT_RUN_LEVEL=3 _INIT_RUN_NPREV=0 _INIT_UTS_ISA=sparc _INIT_UTS_MACHINE=sun4u _INIT_UTS_NODENAME=atras01 _INIT_UTS_PLATFORM=SUNW,Sun-Fire-480R _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-22 PWD=/export/home/user01 USER=user02 ORACLE_BASE=/opt/ora8i/app/oracle ORACLE_HOME=/opt/ora8i/app/oracle/product/8.1.7 ORACLE_SID=SID_A NLS_LANG=Japanese_Japan.JA16SJIS ORA_NLS33=/opt/ora8i/app/oracle/product/8.1.7/ocommon/nls/admin/data LD_LIBRARY_PATH=/opt/ora8i/app/oracle/product/8.1.7/lib ----------------------------------------------------------------- 何が悪いのか分かりますか?? |
|
>>4243 まつ わたしが言いたいのは - スクリプトの先頭で LANG を設定しても、既に字句解析は 終了しているのだから意味がないのでは。 - うまく動く環境では、元々 ja_JP.PCK が設定されていただけでは。 ということです。 > stat: No such file or directory これは別問題ですよね。 #!/bin/csh -f echo "チェック" が動くかどうかを確認すべきです。 |
|
あと、 Locale could not be set properly についてはわかりません。 こちらの環境では、ja_JP.PCK ロケールがない場合のみ このエラーが出て、ロケールがある環境ではうまく動きました。 |
|
>>4243 まつ メッセージの意味としては、選択されたロケールが使用できない状態(つまりインストールされていない) である事を示しています。 恐らく今の状態は 1./etc/profile か /.profileで LC_ALL を設定している。(且つ間違い) 2.当然 root から生成された子プロセスにも LC_ALL が設定されている(且つ間違い) 3.LANG を変更する際に( LC_ALL が空ではないので) LC_ALL のロケールについても チェックされる →存在しないロケールなので「Locale could not be set properly」を出力 (ただし LANG は変更されている筈) だと思います。 一般ユーザで動作するのであれば、PCK ロケールはインストールされているので 文字化けの原因は、親プロセスの環境変数の違いによるのかも知れません。つまり >>4244 68user ではないかと。 (確認するためには wrapper スクリプトかますのが簡単だと思います。) |
|
>>4246 zsh > 3.LANG を変更する際に( LC_ALL が空ではないので) LC_ALL のロケールに > ついてもチェックされる なるほど、それは気がつきませんでした。 ja_JP.PCK ロケールがインストールされている Solaris2.6 で、LC_ALL に JA16SJIS をセットして、さらに LANG に ja_JP.PCK をセットすると、 Locale could not be set properly となりました。 |
|
68user様、zsh様、返事が遅くなり大変申し訳ございません。m(_ _)m >>4246 zsh とてもよく分かりました。 .profileは / にも /etc にもありませんでしたが、子プロセス起動時に 間違ったLC_ALLを設定しているのが原因なのですね。 子プロセスを再起動すれば解決するのでしょうね。 開発依頼者へお願いしても中々動いてくれません・・(T^T) なので、このスクリプトのみをEUC-JPに変えてunsetenv LC_ALLしたところ 正常に実行できました。 ということで、wrapperスクリプトをかまして確認してませんが、お二人の 仰ることに間違いはないですから、その旨開発依頼者へ報告しておきます。 色々有り難うございました。助かりました。m(_ _)m これで心置きなくお盆休みに入れます(^^) |
|
スクリプトをシフトJISへ戻してwrapperスクリプトをかませて テストしてみました。 -----wrapper.sh------------------ #!/bin/sh -fx exec env LANG=ja_JP.PCK /disk01/hoge/hoge01/sh/FNC0123.csh -----FNC0123.csh------------------ #!/usr/bin/csh unsetenv LC_ALL ・・・ -----ツールから実行した結果------------------ couldn't set locale correctly + exec env LANG=ja_JP.PCK /disk01/hoge/hoge01/sh/FNC0123.csh ・・・ ----------------------- のように最初に変なメッセージが表示されますが、それ以降は 文字化けもなく理想どおりの結果が得られました。 最初の変なメッセージは間違ったLC_ALLを設定している為でしょうか? 何はともあれ、これで子プロセスを再起動してもしなくても正常に 動作しそうです。 どうも有り難う御座いました。m(._.)m |
|
たわむれに Ajax で遊んでみました。RFC のタイトルから検索を行います。 http://X68000.q-e-d.net/~68user/rfc/ 以下のような URL も有効です。 http://X68000.q-e-d.net/~68user/rfc/?key=821 http://X68000.q-e-d.net/~68user/rfc/?key=http XMLHttpRequest をひとつしか生成しないタイプではなく、ばしばし XMLHttpRequest を 作る、富豪版です (google タイプ)。ソースはこちら。 http://X68000.q-e-d.net/~68user/cgi-bin/cvsweb.cgi/public_html/rfc/ >>4294 hagu > 最初の変なメッセージは間違ったLC_ALLを設定している為でしょうか? unsetenv LC_ALL には意味がないので、 env LC_ALL= LANG=ja_JP.PCK ... とすれば直ると思います。 |
|
findコマンドでファイルが今日(本日)作成されたものだけを 抽出したいのですが、以下でよいのでしょうか; find . -name '*.*' -mtime -1 -print 他に別の方法がありますか。 |
|
>>4251 みのさん ・ファイル名で絞り込まないのであれば -name オプションは不要です。 ・-mtime -1 では「本日作成」ではなく、「24時間以内に変更」されたものが対象となります。 (作成日をみるようなオプションは無いと思います。) ・-print オプションは無くても出力されます。 ・ファイルに限定したいのであれば -type f が必要です。 こんなもんでしょうか。 |
|
>>4251 みのさん 追加。 - 一般的な UNIX のタイムスタンプには、厳密な意味でのファイル作成時刻は 存在しない。ctime は、例えばパーミッションを変更すると更新される。 - 「24時間以内」ではなく「本日」にしたいなら、適当なファイルを 作って、touch で mtime を前日 23:59:59 にして、 find -newer [適当なファイル] とするのが一般的。しかし手抜きするなら以下のような方法も。 % find . -type f -ls | grep "`date '+%b %d'`" >>4252 zsh BSD や GNU の find には -ctime オプションがあります。-cnewer ってのも あるようですね (基準ファイルの mtime と検索対象の ctime を比較)。 今日の発見その 1 touch(1) などが使うシステムコール utimes(2) って、ctime を更新できない んですねぇ。atime・ctime・mtime いずれも変更可能だとずっと思っていました。 今日の発見その 2 FreeBSD 5.x 以降で対応された UFS2 では本当の生成時刻 (inode 作成時刻) が 保存されていて、struct stat の st_birthtime で参照可能なようです。へぇ。 http://www.usenix.org/events/bsdcon03/tech/full_papers/mckusick/mckusick_html/ http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=stat&dir=jpman-5.2.0%2Fman§=2 |
|
>>4250 68user RFC のタイトルだけでなく、全文検索もできるようにしました (namazu を使っているので Ajax には向かないですが)。 http://X68000.q-e-d.net/~68user/rfc/ 結構使えるかも、と思うのはわたしだけですかそうですか。 |
|
>>4254 68user JavaScript必須というのが、いきなり敷居が高いと申しますか、何と申しますか・・・ 今みたいに、帰省先でpoorな環境で使っていると、その時点で引いてしまっております。 >>4250 68user ここでポイントしている>>4294が、4294まで投稿が伸びたときに、どうなるか、気になるところです。 |
|
> 4523 ありがとうございます。 別なんですが、 カンマ区切りのCSV形式のデータを読み込み nawkのsub関数を使用して文字列の置換をやっています。 フィールド2番目のみを入れ替えようとして以下の様に しました。 置換は行われたのですが、カンマが半角スペースに置換え られて出力されてしますのです。 カンマのまま出力させるには、どうすればよいのですか。 nawk -F"," -v OUT=${OUT_FILE} -v OLD=${OLD_STR} -v NEW=${NEW_STR} ' BEGIN { output=sprintf("%s",OUT); } function func(OLD,NEW) { (処理) sub($2,NEW,$2) ; print >> output ; (処理) } func(OLD,NEW); }' $IN_FILE |
|
>>4253 68user フォローありがとうございます。 -ctime オプションは使ったことが無いですね。 (使う場面もない・・・) >>4254 68user Ajax を弄ってみたいと思っていたので、 サンプルとして参考にさせて頂きます。 >>4256 みのさん 変数OFSで出力用の区切り文字を指定できます。 |
|
>>4257 zsh >変数OFSで出力用の区切り文字を指定できます。 ありがとうございます。 上手くいきました。 |
|
>>4255 へにか > JavaScript必須というのが、いきなり敷居が高いと申しますか RFC の検索がやりたかったわけではなく、Ajax で遊んでみたかった だけなので、Javascript 必須なのはなにとぞご勘弁を。 >>4256 みのさん お礼だけではなく、結果報告をしていただけるとうれしいです。 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse >>4257 zsh > Ajax を弄ってみたいと思っていたので、 > サンプルとして参考にさせて頂きます。 学習目的ならば http://chasen.org/~taku/software/ajax/ime/ の方がシンプルでよいと思います。ただし上記 URL の if (oldkey != key) { oldkey = key; if (xmlhttp.readyState == 1 ... ){ return; } は、正しくは if (oldkey != key) { if (xmlhttp.readyState == 1 ... ){ return; } oldkey = key; です (とわたしは思っています)。 ところで、「RFC 検索」に RFC の日本語訳へのリンク機能を追加しました。 http://X68000.q-e-d.net/~68user/rfc/?key=http&target=title |
|
>>4259 68user お礼だけで、確認結果を報告せず申し訳ありません。 > とするのが一般的。しかし手抜きするなら以下のような方法も。 > % find . -type f -ls | grep "`date '+%b %d'`" で試してみました。 確かに、本日作成のファイルが表示されました。 date '+%b %d'でgrepをしているため、1年前の同じ日付のものが表示 されます。 |
|
>>4260 みのさん > date '+%b %d'でgrepをしているため、1年前の同じ日付のものが表示 > されます。 なるほど。 本日の分は Aug 16 02:16 昨年以前は Aug 16 2004 などと表示されるので、 % find . -type f -ls | grep "`date '+%b %d'` [0-9][0-9]:[0-9][0-9]" とかですかね。 とはいえ所詮は手抜きな方法なのでおすすめはしません。 |
|
>>4261 68user >とはいえ所詮は手抜きな方法なのでおすすめはしません。 > % find . -type f -ls | grep "`date '+%b %d'` [0-9][0-9]:[0-9][0-9]" >とかですかね。 手抜きとは言っても期待した結果は得られました。 |
|
今日から仕事復帰しました。m(_ _)m >>4250 68user >unsetenv LC_ALL には意味がないので、 > env LC_ALL= LANG=ja_JP.PCK ... > とすれば直ると思います。 確認させて下さい。 具体的には、下記のようにすれば良いという事でしょうか? -----wrapper.sh------------------ #!/bin/sh -fx exec env LC_ALL= LANG=ja_JP.PCK /disk01/hoge/hoge01/sh/FNC0123.csh -----FNC0123.csh------------------ #!/usr/bin/csh #コメントアウトunsetenv LC_ALL ・・・ ---------------------------------- 以上、宜しくお願い致します。 |
|
>>4263 まつ > 具体的には、下記のようにすれば良いという事でしょうか? その通りです。 |
|
こんにちわ。19日はお休みを頂いておりました。 >>4264 68user 御礼が遅くなりました。 有り難う御座いました。m(_ _)m |
|
リダイレクションの操作について教えて下さい。 環境は、Solaris8、シェルは、shです。 file1.txtファイルは存在。 file2.txtファイルは存在しません。 の状況で、lsの結果をリダイレクションを使ってファイルに出力 しています。 ls -l text1.txt text2.txt > kekka.txt 2>&1 標準出力と標準エラーを、kekka.txtファイルに出力。 ls -l text1.txt text2.txt 2>&1 > kekka.txt 標準出力のみ、kekka.txtに出力。 ls -l text1.txt text2.txt 2>&1 2> kekka.txt 標準エラーのみ、kekka.txtに出力。 ls -l text1.txt text2.txt 2>&1 >&kekka.txt 標準出力と標準エラーを、kekka.txtファイルに出力。 何故なのでしょうか。 ls -l file1.txt file2.txt 1>&2 2>&kekkat.xt sh kekka.txt: ambiguous redirect 何故なのでしょうか。 |
|
>>4266 つ No.4266の書込み内容が間違っていました。名前も中途半端です。 訂正も含め再書込みします。 リダイレクションの操作について教えて下さい。 環境は、Solaris8、シェルは、shです。 file1.txtファイルは存在。 file2.txtファイルは存在しません。 の状況で、lsの結果をリダイレクションを使ってファイルに出力 しています。 ls -l file1.txt file2.txt > kekka.txt 2>&1 標準出力と標準エラーを、kekka.txtファイルに出力。 ls -l file1.txt file2.txt 2>&1 > kekka.txt 標準出力のみ、kekka.txtに出力。 ls -l file1.txt file2.txt 2>&1 2> kekka.txt 標準エラーのみ、kekka.txtに出力。 ls -l file1.txt file2.txt 2>&1 >&kekka.txt 標準出力と標準エラーを、kekka.txtファイルに出力。 何故なのでしょうか。 ls -l file1.txt file2.txt 1>&2 2>&kekkat.xt sh kekka.txt: ambiguous redirect 何故なのでしょうか。 |
|
便利なページありがとうございます。 http://x68000.q-e-d.net/~68user/net/http-auth-2.html の > 「A1のMD5値 + nonce値 + ":" + nc値 + ":" cnonce値 + ":" + qop値 + A2のMD5値」の MD5 値 ですが、 正しくは、 「A1のMD5値 + ":" + nonce値 + ":" + nc値 + ":" cnonce値 + ":" + qop値 + ":" + A2のMD5値」の MD5 値 だと思います。 |
|
>>4267 つよし とりあえずこれを読んでください。 http://X68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8 以下、手元に bash しかないため、sh では試していません。 間違いがあれば補足願います>Solaris な方 > ls -l file1.txt file2.txt 2>&1 >&kekka.txt > 標準出力と標準エラーを、kekka.txtファイルに出力。 > 何故なのでしょうか。 そもそもこれは冗長です。 >&kekka.txt だけで標準出力と標準エラー出力が kekka.txt にリダイレクトされます。 sh において (csh も同じですが)、 >&ファイル名 は、標準出力と標準エラー出力をまとめてファイルにリダイレクトするもの だからです。 > ls -l file1.txt file2.txt 1>&2 2>&kekkat.xt > sh kekka.txt: ambiguous redirect > 何故なのでしょうか。 ファイルへのリダイレクトは「>&」ではなく「>」を使うべきだからです。 sh のリダイレクトには以下の 2パターンがあると考えるとよいでしょう。 1. >ファイル名 2. [数字]>&[数字] さらにタイプ量を減らすため、 3. >&ファイル名 (>ファイル名 2>&1 と同じ) という syntax sugar があります。よって、 [数字]>&ファイル名 はおかしいです。とはいえ 1>&ファイル名 は通ってしまいますが。 >>4268 とおりすがり > 正しくは、 > 「A1のMD5値 + ":" + nonce値 + ":" + nc値 + ":" cnonce値 + ":" + qop値 + ":" + A2のMD5値」の MD5 値 ごもっともであります。遅くとも明日までには修正します。 |
|
>>4268 とおりすがり 修正いたしました。ご指摘ありがとうございました。 http://X68000.q-e-d.net/~68user/net/http-auth-2.html http://X68000.q-e-d.net/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/http-auth-2.html |
|
>>4267 つよし >りあえずこれを読んでください。 >http://X68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8 参考になります。 特に「2>&1」の説明については、「2 の出力先を 1 にマージする」で覚えと説明している 本もありました。 >&kekka.txt については、冗長なんですね。 本来なら、エラーになるはずなの実際には動いているので、おかしいとは 思っていました。 使わない方がよさそうですね。 |
|
>>4271 つよし > 本来なら、エラーになるはずなの実際には動いているので 冗長ですが、エラーではありません。 2>&1 >&kekka.txt は 2>&1 >kekka.txt 2>&1 と同じですが、ひとつのディスクリプタについての複製を複数回行っても 別にエラーにはなりません。 この例では最初の 2>&1 で 2 の出力先が stdout になりますが、後の 2>&1 で 2 の出力先が kekka.txt になり、意味がないだけです。 |
|
>>4272 68user 解説、アドバイスありがとうございます。 |
|
初めて質問させて頂きます。 Solaris9のサーバからmailxコマンド(sendmailを設定済み)を使用してメールサーバ経由で クライアントにE-MAILを送信しようとしています。 問題が一つありまして、クライアントのOUTLOOKで見たとき件名が文字化け してしまいます。 色々調べたところ、sendmailでは文字化けしてしまうのはどうしようもないと 聞きました。 Solaris9でメールを送信できるソフトウェアで件名が文字化けしないようなもの を知っていたら教えて頂けませんか? (メールサーバ側クライアントのメールの設定は変更できません) |
|
>>4275 ひで 普通はプログラム側で MIME エンコードして、sendmail に渡します。 試していませんが、mailx に渡しても多分うまくいくでしょう。 詳しくは http://X68000.q-e-d.net/~68user/webcgi/mail-1.html http://X68000.q-e-d.net/~68user/webcgi/mail-2.html を読んでください。 |
|
UNIX 上のPDFファイルをftp転送してPC上で読み込みたいのですが、 転送後にファイルが壊れているとのことで読み込めません。 何かいい方法はありますでしょうか |
|
>>4277 ろく バイナリモードで転送してますか? |
|
>>4276 # 68user 回答有難うございます。 試してみます。 |
|
Solaris8i、shシェルで以下のような処理をしようとしています。 番号が同じもの同士の値を足し算してその和を求めています。 ファイルフォーマット 番号,値 001,10 001,20 001,30 002,5 003,15 003,20 004,100 結果 001,60 002,5 003,35 004,100 としたいのですが、どうすればよいですか。 |
|
>>4280 くま Solarisi・・・って部分は置いといて。 shというかnawkですが、以下のようにやればできます。 (awkでは動きません。) ------------------------ $ nawk -F, ' /^[0-9]+,[0-9]+$/ { var[$1] = $2; } END { for (i=0; i<=999; ++i) { j = sprintf("%03d",i); if (j in var) print j "," var[j]; } }' data.txt ------------------------ |
|
>>4281 zsh >Solarisi・・・って部分は置いといて。 間違えた・・・Solaris8iだ・・・ |
|
はじめまして。ネットワークプログラミングのページを参考にさせてもらっています。 で、以下の部分、 >>DNS クライアントを作ってみよう (3) >リソースデータは「&Sorry, no version string is available」と表示されるが、 >dig や nslookup は「Sorry, no version string is available」となります (& がない)。 >先頭の & を削るような規則があるようだが、それが何なのかはわからなかった。 これ、'&'=38で、リソースのlengthみたいです。 きちんとした資料では、まだ見つけられていないのですが、 djbdnsのソースコード(dns_txt.c)上では、ドメイン名と同じように、 [length][data][length][data]と見ているようです。 リソースをいくつかのブロック(例えばライン毎など)に分けているのかなーと。 んん。標準な資料を探し中です。 |
|
>>4280 くま Solaris8iは手元にないので試していないですが、shで。 --------------------------- #!/bin/sh # デリミタを[,]に IFS=, # キーのリスト list="" # 計算 while read key value; do eval "if test -z \$array$key;then array$key=0; fi" eval \array$key=`eval "expr \\$array\$key + \$value"` list=$list,$key done < data.txt # 重複したキーを削除する clone=`echo "$list" | sed 's/^,//'` for key in $clone; do list=`echo "$list" | sed "s/$key//g" | sed 's/,[,]*/,/g'` list=$list,$key done # 表示 list=`echo "$list" | sed 's/^,//'` list=`echo "$list" | sed 's/,$//'` for key in $list; do echo -n $key, eval echo \$array$key done --------------------------- $ sh test.sh 001,60 002,5 003,35 004,100 --------------------------- 効率悪そうだ..。 |
|
>>4280 くま 以下ので出来ると思います。 ---------------------------------- #!/bin/sh nawk -F"," ' BEGIN { } function syukei() { total=0+0; no=$1; while (NF>0) { if (no == $1) { total = total + $2; } else { printf("%03d:%d\n",no,total); no=$1; total=$2; } getline; } printf("%03d:%d\n",no,total); } { if (NF == 0) next ; syukei() ; }' file.txt exit 0 |
|
続々と投稿されているので投稿してみます。 >>4280 くま awkなら、 $ nawk -F, '{v[$1]+=$2;}END{for(k in v) print k","v[k]}' data.txt | sort とできると思います。 /+ data.txt -> データファイル +/ |
|
>>4286 nagadomi nagadomiさんのコード凄いですね。 1行で実現してしまうなんて。 自分も、1行で実現できないかと試みてはみたのですが、良い案が浮かび ませんでした。 向学として教えていただきたいのですですが、 番号の比較、判断していませんが、何故、上手く出来ているのですか。 >'{v[$1]+=$2;}END{for(k in v) print k","v[k]}' 宜しくお願いします。 |
|
>>4286 nagadomi うわー、awkってforでその表記できるんだっけー。 すっかり忘れてました。 最近awk触っていなかったとは言え、恥ずかしい・・・ >>4287 シャチ >for(k in v) は、配列vの値を一つ一つ変数kに代入してループするという意味です。 |
|
>>4288 zsh ×配列vの値を一つ一つ変数kに代入してループする ○配列vの添字を一つ一つ変数kに代入してループする |
|
>>4287 シャチ zshのおっしゃるとおりです。 Perlでいうforeach的な使い方です。 >>4288 zsh awkは、1年ほど前に1日(プログラム一個..)使ったことがあるだけだったので、 実はリファレンスをちょっと見ました。 そこでforeachあるじゃんと..。知らない分、確認するのでうまくいった感じですかね..。 zshさんのコードは、ソートを考えて、あのような書き方をしているのかと思っていました。 私は普段、こういうのにはPerlを使っています。 |
|
>>4288 zsh 番号の比較、判断していませんが、前後が同じかどうかの判断は どこでしているのですか。 >{v[$1]+=$2;} で判断しているのですか。 お願いします。 >>4290 nagadomi Perlを使うのが便利なのですか。 Perlは、人が作ったのをメンテナンスするため1日調べたのみです。 |
|
>>4288 zsh 配列vの添え字が、番号なんですね。 だから、番号の配列要素に割り当てられた値が使用できるから 番号の比較、チェックが不要なんですね。 添え字には、数値しか使用できなと思っていました。 文字列も使えるんですね。 |
|
>>4283 nagadomi なるほど、length ですか。RFC をあさってみましたが、まだ見つけられません。 発見したらぜひ教えてください。 関係あるかな? と思いつつ、まだちゃんと読んでいない資料: http://www.cs.utah.edu/~danderse/adns/arch.html http://www.zeroconf.org/Rendezvous/txtrecords.html |
|
Solaris8で、Bシェル(sh)で以下のことを行いたいのですが、 良い方法を教えてください。 2つのファイルの中身を比較し、その結果を表示したいのです。 --- file1.txt ----- hanako.sato jiro.yamamoto taro.yamada taro-1.yamada tsuyoshi.saito --- file1.txt ----- jiro.yamamoto taro-1.yamada taro-2.yamada gou.yamashita 結果 file1 Only, hanako.sato match,jiro.yamamoto file1 Only,taro.yamada match,taro-1.yamada file1 Only,tsuyoshi.saito file2 Only,taro-2.yamada file2 Only,gou.yamashita と出力したいのです。 お願いします。 |
|
>>4294 hagu 案1. file1.txt を while で 1行ずつ読み込み、読み込んだ行が file2.txt に含まれるかを grep で調べる。 案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、 行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。 案3. perl でハッシュに突っ込む。3行くらいで書けそうな気がします。 |
|
>> 4295 perl使用したことありません。 書くとしたらどうなりますか。 案1ですと、file1.txtで調べたあと、file2.txtのみで存在する物も調べるので 同様の処理が必要になります。重複する行が2回でることになります。 |
|
>>4296 hagu Perl クックブック VOLUME 1 のレシピ 4.8・4.9 あたりを立ち読みして、 なんとかなりそうなら手を出してみるとよいでしょう。 > 重複する行が2回でることになります。 file2.txt を while で 1行ずつ読み込み、読み込んだ行が file1.txt に 含まれていれば何も表示しない、でいいのでは。 > 案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、 > 行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。 GNU diff があるなら (unified diff を出力できる diff があるなら)、 % diff -u -U 10000 file1.txt file2.txt として (10000 はファイルの行数を超える数)、 ・行頭が - なら file1.txt のみ ・行頭が + なら file2.txt のみ ・行頭がスペースなら重複行 ですかね。 |
|
>>4294 hagu 1.file1.txtとfile2.txtを辞書順にソートする。 2.diffコマンドで、file1.txtとfile2.txtの差異を表示する。 diffコマンドの出力結果の見方は、ご存じですよね。 ">"は、右側に指定したファイル内に差異があることを示す。 "<"は、左側に指定たファイルにある差異があることを示す。 3.grepとかcutを使用して見やすいように編集。 4.file1.txtかfile2.txtをキーにして、grepで存在する文字列だけを抽出。 で、出来ると思います。 |
|
>>4294 hagu 動作未確認ですが、こういうのはダメですかね。 sort file1 | uniq > file1-2 sort file2 | uniq > file2-2 comm -23 file1-2 file2-2 | sed 's/^/file1 Only,/' comm -13 file1-2 file2-2 | sed 's/^/file2 Only,/' comm -12 file1-2 file2-2 | sed 's/^/common,/' 順序よく並んでしまいますが。 |
|
>> 4299 ありがとうございます。 確認してみます。 |
|
>>4299 has ありがとうございます。 期待していた結果が得られました。 commというコマンドがあるのですね。 知りませんでした。 勉強になりました。 |
|
突然すみません。私は、いま卒業研究で動画像を処理しようとしてるものです。bmpファイルからppmやpgmへの一括変換はできたのですが、それらが生(raw)なので、つまりP6なので処理に困ってます。P3にしたいのですが大量のPPM、PGMをまとめてASCIIに変換することは可能でしょうか?よろしければ教えていただけると助かります。 |
|
>>4302 tana 試してませんが、ppmtogif して giftoppm で戻すとか。 |
|
giftoppmって一度に多数のファイルを変換できますか? |
|
>>4304 tana 知りませんが、もしできないとしても for i in *.ppm; do ppmtogif < $i | giftoppm > out/$i; done とか、 ls *.gif | sed 's/\(.*\)/ppmtogif < \1 | gitoppm > out\/\1/' | sh とか。 拡張子は適当に変更するということで。 |
|
blog なるものを始めてみました。 http://68user.blog27.fc2.com/ 入力が非常に面倒なのですが (HTML 手打ちと変わらない)、世の人たちは 使いこなしているんですかねぇ…。 |
|
日記を書く習慣の無い僕にとっては、blogを使う利点が未だに理解できないです。 もし、68userさんの視点でその利点を見出せたら、是非とも教えていただきたく、 宜しくお願いいたします。 追伸 FreeBSDでの活動は、今でもされているのですか? |
|
>>4307 へにか 技術的なことは、最終的に web にまとめたいと思っています。しかしそれを 行うにはある程度の時間と労力がかかります。よって、とりあえず殴り書きを するネタ帳として blog を活用できないかと考えました。 また、 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4061 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=3774 のような、ひとつのコンテンツとしてまとめづらいメモを書く場所として 適切ではないだろうか、と思っています。 それと、コメントやトラックバックという仕組みがあるため、web よりは フィードバックが得られるのではないかと。 しかし、perl+DBI のネタを書いてみてわかったのですが、わたしは完璧主義者 なので、結局はエディタで下書き・推敲しないと気がすまないようです。あまり blog 向きではないのかもしれません。 あとこれは愚痴ですが、入力が非常に面倒です。まず、WRAP="OFF" 属性が付いて いない TEXTAREA 要素の相手をすることが苦痛です。 また、ソースを張る際に <PRE>〜</PRE> で囲んでみましたが、行間に変な間が 空いてしまい、結局スペースを に置換して張っていたりします。 「blog は更新が簡単」と世の人は言いますが、fc2 に限れば嘘です。 > FreeBSDでの活動は、今でもされているのですか? 最近はしていませんが、するべき立場にあります。すべてはモチベーションの 問題です。 |
|
>>4308 68user なるほど。コメントがつけられる掲示板のような使い方+トラックバックですね。 コメント:誰でも簡単に書きやすい。 トラックバック:細かい指摘事項が伝わりやすい。 ってところでしょうか。仕組みとしては、やりたいことに一番近そうに見えますが、 >「blog は更新が簡単」と世の人は言いますが、fc2 に限れば嘘です。 恐らく、今流行っているタイプのblogの使用目的に合致していない、と思います。 ・・・と言いつつ、実はblogを理解して無いので、間違った事を言っているかもしれませんが。 >すべてはモチベーションの問題です それはいえるかもしれませんね。元同僚は、とある部分のソースを書くという 立場にいるそうですが、結構(手続きが?)大変だ、といってましたし。 自分の時間がとれて、収入に余裕があって、FreeBSDに絶対に貢献したいという 意思が無ければ、なかなか腰が上がらないのだと、勝手ながら推測しております。 |
|
突然ですみません、UNIX初心者です。 UNIXにて以下の様な事がしたいのですが、よい方法があれば教えて下さい。 随時追加されるあるファイル(aaa.txt)の内容を行単位ででCプログラムで読込みたい。 条件) 1.aaa.txtは行単位に随時追加される。 2.Cプログラムに渡すのはある文字が含まれる行のみ。 以下の様なことを試したのですが、うまくいきませんでした。 tail -f aaa.txt | grep ABC | Cプログラム ※Cプログラムは今の所、標準入力(gets)から読み込むだけのプログラムです。 |
|
>>4309 へにか > なるほど。コメントがつけられる掲示板のような使い方+トラックバックですね。 そうですね。ただ、コメントやトラックバックより、思いついたことを すぐに書くための場所、という方がわたしにとっては重要かなと思っています。 > 恐らく、今流行っているタイプのblogの使用目的に合致していない、と思います。 いや、ただインタフェースがイマイチなだけだと思います。空白を に 変換してくれればそれで解決する話ですから。 >>4310 UNIX初心者 こちらを。 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=2800 |
|
>tail -f log | perl -ne '$|=1;print if m/foo/' >> log2 で試してみたのですが、perlがインストールされていない為、エラーとなってしまいました。 今回は急ぐので、プログラムで対応してしまいました。 また、利用させて下さい、ありがとうございました。 |
|
>>4312 UNIX初心者 解決したとのことなので返信不要ですが、perl がないなら % tail -f aaa.txt | awk '/ABC/{print;system("")}' | Cプログラム ですかね。FreeBSD 5.2.1-RELEASE ではうまくいきました。 |
|
Solaris8のBシェルで、CSV形式のデータのソートを行っています。 数字順にソートしたいのですが、ソート対象の列が半角英数のため 数字順になりません。うまい方法はないでしょうか。 英字が先頭にある場合は、英字を取り除いて数字順にしたいのです。 うまい方法はないでしょうか。 sortコマンドだけでは、だめでした。 --データ 山本 こうたろう,企画,100 山下 大介,企画,A101 山田 太郎,営業,80 山田 花子,営業,A92 山田 一郎,営業,A82 鈴木 一郎,販売,85 鈴木 一郎,海外,1001 松井 英樹,海外,2001 斉藤 次郎,製造,125 佐藤 三郎,組立,A124 武藤 五郎,検査,130 --結果 山田 太郎,営業,80 山田 一郎,営業,A82 鈴木 一郎,販売,85 山田 花子,営業,A92 山本 こうたろう,企画,100 山下 大介,企画,A101 佐藤 三郎,組立,A124 斉藤 次郎,製造,125 武藤 五郎,検査,130 鈴木 一郎,海外,1001 松井 英樹,海外,2001 sortコマンドの「-n」を付けてやってみたのですが、数値として判断するため 上手くできません。 また、付けないと、数値順に並んでくれません。 |
|
>>4314 hagu 訂正です。 名前の前に社員IDがあり、 半角英数字でソートし、社員IDでソートとなります。 データは、「社員ID、名前、仕事、コード」 コードの半角英数字で数字順に並び替えで、 コードが同じな場合は、社員IDで並び替えです。 英字が先頭にある場合は、英字を取り除いて数字順にしたいのです。 No.4314の結果にしたいのです。 |
|
>>4314 hagu 101 と A101 という社員 ID が存在する可能性があるか、存在するならソート順は どうするかという仕様が不明確ですが、それは置いておくとして。 > 山本 こうたろう,企画,100 > 山下 大介,企画,A101 > 山田 太郎,営業,80 > 山田 花子,営業,A92 わたしなら一度 sed などで 山本 こうたろう,企画,,100 山下 大介,企画,A,101 山田 太郎,営業,,80 山田 花子,営業,A,92 と別項目にし、sort して、再度 sed で元に戻します。 |
|
>>4316 68user ありがとうございます。 一度、コードの値を分解しには、気がつきませんでした。 いいかも知れません。 >101 と A101 という社員 ID が存在する可能性があるか、存在するならソート順は >どうするかという仕様が不明確ですが、それは置いておくとして。 コードでソートした後、同じコードないで、社員IDをソートします。 ただし、数字のコードは、数字のコード内で、 英字付きのコードは、英字付きコード内で、 社員IDを並びかえます。 |
|
お世話になります。 C言語でHTTPクライアントを作成しています。ここのサイトもありますが、自作で行いました。 AのHPを取得してうまく表示されますが、BのHPを取得すると、表示されません。 取得したページのヘッダ情報はどっちも異常はありませんでした。 デバックではどっちでも表示されます。でも、BのHPが取得しても表示されません。 何か助言をして頂けたら幸いです。よろしくお願い致します。 |
|
>>4318 匿名希望 - 現象が再現する最小限まで削ったソースを提示してください。 - A と B の URL を提示してください。 - そちらで実行した結果を提示してください (ヘッダ情報とかデバッグを含む全部) - OS・コンパイラなどの情報を提示してください。 なお、UNIX 以外であれば、わたしはコンパイル環境がないのでわかりません。 |
|
初めて投稿します。 自分はSSLを組み込もうとしていろいろ調べているんですが、 調べていると、WindowsでのSSLの設置方法がかかれてないんです。 やっっぱりリナックスで設置したほうがいいのでしょうか? |
|
>>4320 SSL初心者 まずは検索を。 http://www.google.co.jp/search?q=windows+apache2+ssl&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8 |
|
お世話になります。 「マッケーブの循環的複雑度」を出力するツールを探しており、 当ホームページから コマンドcccc(C言語・C++・Java のソース コードのステップ数を調べるツール。)を探し当てました。 ところが、身近にあるサーバで試してみると、 $ cccc hoge.java -bash: cccc: command not found と出力されます。 コマンドccccを実行するための条件等、ありますでしょうか。 ご教示、よろしくお願いします。 |
|
初めまして。 『UNIXの部屋』の localtime(3) のサンプルコードにある tm_timeの一連の変数参照が間違っています。 |
|
>> 4322 http://x68000.q-e-d.net/~68user/unix/pickup?Command+not+found 2 又は 6 では無かろうか. |
|
サーバーの件でメールをお送りしました |
|
すみません。SSLをWindowsで設定しているんですが、 Apacheのインストールで下記のエラーが出ます。 (OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、 たはポートのどれか 1 つ のみを使用できます。 : make_sock: could not bind to dress 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs これは、どういった意味のエラーなのかさっぱりわかりません。 自分で調べてもどの方面から調べるのかわからずじまいで投稿しました。 環境は以下のとうりです。 OS - Windows98 Apache - Apache_2.0.55-Openssl_0.9.8a-Win32をダウンロード OpenSSL - Win32OpenSSL-v0.9.8を使用 参考HP - www.rinzo2.jp/~rinzo/apache_ssl/apache_and_ssl_00.htm ご意見お待ちしております |
|
シェル内にて以下の記述を入れるとエラーが発生します。 ■エラー発生箇所 cat ./temp.txt | awk 'BEGIN{FS=","}{if(match($1,"^${_XXX_}")!=0){print $0}}' > ./test.csv ■出力エラー awk: There is a regular expression error. ?, *, or + not preceded by valid regular expression The source line number is 1. The error context is >>> BEGIN{FS=","}{if(match($1,"^${_XXX_}") <<< "^${_XXX_}"の部分がエラーとなっているようですがここでは変数は使用できないのでしょうか? |
|
>>4326 SSL初心者 「OS 10048」で検索した結果の 1番目に出てくるのがおそらく答えです。 http://www.google.co.jp/search?q=OS+10048&start=0&start=0&hl=ja&lr=lang_ja >>4327 awk初体験。 ウチの環境ではエラーにならないのでよくわかりませんが、 ${_XXX_} って変数のつもりで書いてるんですよね? どこで ${_XXX_} に値をセット しているのですか? もしシェルスクリプトでシェル変数や環境変数にセットしているのなら、 引数全体を '' で囲んでいるので置換されません。というわけで cat ./temp.txt | awk 'BEGIN{FS=","}{if(match($1,"^'${_XXX_}'")!=0){print $0}}' > ./test.csv などと ${_XXX_} を外に出します。 |
|
>>4323 ミケフォ > 『UNIXの部屋』の localtime(3) のサンプルコードにある > tm_timeの一連の変数参照が間違っています。 ありがとうございます。bugid 18 として登録しました。 http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=18 # 登録する暇があるなら、さっさと直せと。 |
|
すみません,昨日18時頃から本日11時まで サーバーの通信が切れていました. 昨日13時頃に回線工事があって無事完了したのですが, 終端装置の接続が雑だったらしく,17時頃に突然接続が落ちました. すぐ業者に連絡したのですが既に営業時間外で, 朝まで修理を呼べませんでした. 本日11時に業者が来て直りました. ご報告まで. |
|
お世話になります。 C言語でHTTPクライアントを作成してますが、HTTPSの場合のポート番号が サイトを探しても見つからないですが、ご存知でしょうか? よろしくお願い致します。 |
|
>>4330 Netboy 対処いただきありがとうございます。IP アドレスの件はもう少々お待ちください。 >>4331 キック 「https ポート番号」で検索したら一番最初に出てきます。 http://www.google.co.jp/search?q=https+%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7&hl=ja&lr=lang_ja |
|
>>4332 68user ありがとうございます。 初歩的ですみません(^ ^;)> |
|
シェルで、ftpを自動で実行しています。 ftpの接続、ログインの判定や、ファイルのput/getの判定 ができたか判断したいのですが、できるのでしょうか。 エラーが発生したら、「exit 1;」などで終了させて、その ステータスを判断するといったことはできないのでしょうか。 ----------------- ftp -v -n ${SERVER} <<END >/dev/null user ${FTP_USER_ID} ${FTP_PASSWORD} cd ${FTP_DIRECTORY} lcd ${LOCAL_DIRECTORY} get ${GET_FILE} bye END 環境: Solaris8i Bシェル |
|
No. 4327 で質問させていただきました。 変数はシェル内で実行していました。 そのため""で括った所上手くいきました。 ご回答ありがとうございます。 さらに別の質問させてください。 カンマ及びスラッシュを区切り文字としたいのですが… -FオプションやFS=の指定で複数の区切り文字を指定することはできるのでしょうか? |
|
>>4335 awk初体験。 区切り文字に正規表現を使用できるawkであれば可能です。 (gawkやnawkなら使用可能ですが、Solaris標準のawk等では使用できません。) $ nawk -F"[,/]" '{ .... }' file $ nawk 'BEGIN{ FS="[,/]" } { .... }' file |
|
2005/10/29(金) 00:00:00 ごろから IP アドレスの変更・それに伴う DNS 設定変更を 行いました。Refresh とか Retry とか Expire などを理解していないので、何も対策 せずいきなり切り替えました。そのせいで つながらなかった人もいると思いますが、 ご迷惑をおかけしました (わたしも数時間つながらなかった)。 ご協力ありがとうございました>Netboy さん >>4323 ミケフォ 遅くなりましたが、修正しました。 ご指摘ありがとうございました。 # http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=18 >>4334 hagu わたしなら Perl の Net::FTP モジュールなどできっちりエラーチェックしますが、 どうしても ftp コマンドを使わざるをえないなら、 - ftp コマンドに -d オプションなどをつけて実行結果のログをとる。最後に ログを解析してステータスコードに 4xx 系・5xx 系 がないことをチェックする。 - 接続した時点でリモートに同名のファイル名がないならば、get/put を行って、 最後に ls して、結果をログに保存する。ls の結果を解析し、ファイル一覧・ ファイルサイズ・ファイル個数などのチェックを行う。 くらいしかないような気がします。 |
|
>>4337 68user > 2005/10/29(金) 00:00:00 ごろから 2005/10/29(土) 00:00:00 の誤りでした。 |
|
A君とB君(ユーザーIDはそれぞれAとB)は同じグループG(グループIDはG)に属しているとします。 A君は、自分のホームディレクトリ(~A)にあるディレクトリDの中の全てのファイルを、B君など同じ グループに属する人にだけ閲覧可能にしたいと考えました。ただし、A君はディレクトリD以外の ファイル・ディレクトリは(それらのリストを取る(lsコマンド)ことも許可したくありません。 A君はどのようなパーミッションを設定すればよいでしょうか? |
|
>>4339 TKG ~A/ 710 ~A/D/ 750 ~A/X/ (D 以外) 700 でしょうか。 |
|
Solarisでシェルスクリプトを起動する場合。 $ csh script.cshと入力しなければなりませんが、 最初のcsh を省略して$ script.cshで起動する方法を教えて下さい。 宜しくお願いします。 |
|
> 68user様 http://x68000.q-e-d.net/~68user/unix/genre.html#genre22 にheadが二つ表示されています。 >>4341 誠 UNIXの部屋を読めば判ると思いますが・・・ 1.スクリプトの一行目にシェルのパスを指定する。 2.環境変数PATHを設定する。 3.スクリプトに実行権をつける。 といったところでしょうか。 http://x68000.q-e-d.net/~68user/unix/pickup?Command+not+found |
|
>> 誠さん 4342 で言われている PATH の設定は csh が置かれている場所にパスを通すって 意味であって、PATH に "."(カレントディレクトリ) を加えるって話では無い筈です。 従って、 単に script.csh ではなく ./script.csh って起動方法になると思います。 PATH に "." を加える事の問題とか、csh スクリプトを覚えるよりも sh 系の スクリプトを覚えた方が良いって話は検索すれば出てきますので読んでみましょう。 |
|
>>4343 hoge スクリプト専用のの格納ディレクトリがあるのかと思い PATHの設定が必要と書きました。 ・・・・ちょっと意地悪したくなったのも事実ですが。 |
|
>>4337 68user 返事が遅くなって申し訳ありません。 アドバイスありがとうございます。 ログに出力し、ログをチェックする方法でやってみます。 |
|
sedを使用して大文字から小文字に変換したいのですが、 なかなか上手くいきません。 例えば、「YAMADA」を「Yamada」と先頭の1文字目は大文字で、 2文字目以降を小文字に変換したいのですが、以下の様にsed を使ってやったのですが上手く行きません。 sedでは、無理なのでしょうか。 環境は、Solaris8、Bシェルです。 ---------------------- NM=Ya1AMADA echo $NM | sed 's/[A-Z].*/[a-z]/g' NM=YAMADA echo $NM | sed 's/\(.\)[A-Z]*/\1/g' |
|
>>4346 hagu 多分、sedだけでは無理だと思います。 sedを使わなくても、awkだけでも可能です。 echo $NM | nawk '{for(j=i=1;i<=length($0); i++) if(i==1) {NM[i]=substr($0,i,1)} else {NM[i]=tolower(substr($0,i,1))}} END{for(count in NM) printf("%c",NM[count]); printf("\n")}' |
|
>>4347 お 試してみましたが、出方が変です。 amadaY となります。 |
|
始めまして、ネットワークプログラミング周辺読ませて頂きました。 簡潔なソースで読みやすかったです。 お礼に掲示板カキコ、それにしてもみなさん勉強熱心ですね(笑 ---------------------------------------- echo $NM | \ sed -e h -e 's/^\(.\)\(.*\)/\1/g' \ -e 'y/[abcdefghijklmnopqrstuvwxyz]/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/' \ -e x \ -e 's/^.\(.\)/\1/g' \ -e 'y/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/[abcdefghijklmnopqrstuvwxyz]/' \ -e H \ -e g \ -e 's/\n//' ---------------------------------------- なんとなしsedの勉強してしまった、本買う気にはならないけどね。 http://web.archive.org/web/19961202111128/http://yase.yajima.kuis.kyoto-u.ac.jp/staffs/sengoku/sedlec/ |
|
>>4346 hagu もしperlならこんな感じなんでしょうか? echo $NM | perl -ple 'y/A-Z/a-z/;substr($_,0,1)=~y/a-z/A-Z/;' |
|
>>4347 お >>4348 hagu 連想配列の場合、表示の順序は、ハッシュ法に従うのでランダムとなります。 すみません。 echo $NM | nawk '{for(i=1;i<=length($0); i++) if(i==1) {NM[i]=substr($0,i,1)} else {NM[i]=tolower(substr($0,i,1))}} END{for(j=1; j<i; j++) printf("%c",NM[j]); printf("\n")}' |
|
>>4349 マーブル 凄い。 sedだけでですね。 でも、凄く、複雑すぎます。 >>4351 お 今度は、期待したいた結果が得られました。 awkを使っているのも複雑ですね。 |
|
>>4352 hagu これじゃだめ? $ echo $NM | nawk '{ a=toupper(substr($0,1,1)); b=tolower(substr($0,2)); printf "%s%s\n",a,b; }' |
|
>>4353 zsh そうですよね。 substr()で2文字目以降すべてを変換してしまえばいんですよね。 何、ループで1文字ずつ変換し、表示しているんだろう。 |
|
あまり知られていないscanfの用法。 既出でしたか残念。>>4041>>4042 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html 以下同意 ------------------------------------- sscanf(host_path,"%[^/]%s",host,path); ------------------------------------- p = strchr(host_path, '/'); if ( p != NULL ){ strcpy(path, p); *p = '\0'; strcpy(host, host_path); } else { strcpy(host, host_path); } ------------------------------------- |
|
fdopen()で作成されたストリームが閉じられたときにファイル記述子も 閉じられる。 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fdopen.3.html よって以下のページのL:125は不要です。 http://x68000.q-e-d.net/~68user/net/c-http-2.html |
|
>>4356 マーブル ありがとうございます。とりあえず POSIX を確認させてください (明日以降)。 http://www.opengroup.org/onlinepubs/009695399/functions/fdopen.html |
|
>>4357 68user 明日以降と言いつつ今確認してみましたが、POSIX にはそういう記述は ないように見えます。また、Solaris9 のマニュアルにも書いてないように 見えます。 http://www.freebsd.org/cgi/man.cgi?query=fdopen&sektion=3C&manpath=SunOS+5.9 しかし BSD ならば、4.4BSD-Lite2 にはそのような記述があります。 http://www.freebsd.org/cgi/man.cgi?query=fdopen&manpath=4.4BSD+Lite2&format=html Solaris や HP-UX が手元にある方にお願いなのですが、fdclose して fclose した ときにソケットディスクリプタがクローズされるかどうか truss コマンドなどで 確認していただけないでしょうか (わたしのまわりは FreeBSD と Linux しかないので)。 いずれにせよ何かしらの補足は追記したいと考えています。 |
|
>>4358 68user > fdclose して fclose したときに 「fdopen して fclose したときに」の誤りでした。 ちなみに「UNIX ネットワークプログラミング第2版」からは、この件についての 記述を読み取ることはできませんでした。 |
|
>>4359 68user 機種依存等深く考えずに書き込んでしまって申し訳ございません。 また知合いに話せる人がいない為に決めつけたような書き込みになってしまったこともお詫びします。 基本的にFILE構造体にfileディスクリプタが含まれているものと理解していたもので、 fclose時に連動してcloseされるかな?と単純に考えてしまいました。 trussで確認した結果が以下でcloseされているようでした(これおもしろいですね) SunOS eibw23 5.9 Generic_112233-03 sun4u sparc SUNW(Solaris8か9) ----------------------------------------------------------- read(0, 0xFF3414EC, 1024) (sleeping...) read(0, "\n", 1024) = 1 llseek(3, 0, SEEK_CUR) = 0 close(3) = 0 read(0, 0xFF3414EC, 1024) (sleeping...) read(0, "\n", 1024) = 1 _exit(0) |
|
>>4360 マーブル うゎ、アドレス込みで貼っちまった、ハズカシィ |
|
>>4360 マーブル opensolarisがsolarisとどれだけ違うかわかりませんが、 http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libc/port/stdio/fdopen.c#64 fdの値は単純に渡されているように見えます。 (↑のサイト使い安くて良く使ってます、BSDでこのような感じのページご存知ですか?) |
|
>>4360 マーブル 昨日は変なことを書いてしまいました。fclose したんだから close するのは 当然ですよね。まぁ fdopen したものはフラッシュだけ行って close しない 実装があっても不思議ではないですが、素直に考えれば close するはず。 よって、125行目の close は削除します。 >>4362 マーブル > (↑のサイト使い安くて良く使ってます、BSDでこのような感じのページご存知ですか?) 普通の cvsweb でよければ、以下のものが cvsgraph が組み込まれているのでよく使います。 http://cvsweb.allbsd.org/cvsweb.cgi/src/lib/libc/stdio/fdopen.c ソース閲覧なら GLOBAL を使ったFreeBSD Source Code Tour が便利ですが、ファイル名が ころころ変わるので URL を保存しておいても役に立たないのがが困りものです。 http://snapshots.jp.freebsd.org/tour/ http://snapshots.jp.freebsd.org/tour/current/userland/cgi-bin/global.cgi?pattern=fdopen&id=&type=definition http://snapshots.jp.freebsd.org/tour/current/userland/S/9687.html#53 OpenSolaris のソースを見られるところは知りませんでした。今後活用させて いただきます。 |
|
初めましてWindowsユーザですが、仕事上 LinuxやCVSを使うことがあります。 コマンドをなかなか覚えられなくて、いつも参考にさせて頂いています。 |
|
>>4353 zsh 凄いです。 変換されました。 |
|
よくパーミッションでrは読む権利を、wは書く権利を、 xは実行する権利を与えるといいますが、それぞれの権利が 与えられている時、いない時は具体的にどのようなコマンド が有効であるのか、いまいちはっきり理解できません。 どなたか詳しくをしえてください。 |
|
>>4366 anonymous > それぞれの権利が与えられている時、いない時は具体的にどのようなコマンドが > 有効であるのか 何か哲学的なニオイがするので(?)、そもそも私が答えられる内容でも無い気は しますがそれでもよければ教えてください。 ええと、ちょっと見た限りでは書き込み中の「有効」の意味がよくわかりません。 もしかしたら具体的に何か目的があるんでしょうか。 あと、パーミッションが与えられているのはプログラム?読み書きするファイル? |
|
>>4364 がちゃぴ ありがとうございます。ご意見・ご指摘がありましたら遠慮なくどうぞ。 なお、世の中いろんな人がいますので、文章の一部を削除させていただきました。 削除した部分に関する話題はご遠慮いただきたく思います。ご理解ください。 >>4366 anonymous 紛らわしいのでハンドルを「68user」から「anonymous」と変更しました。 今後は適切なハンドルを使用してください。 |
|
>>4363 68user 御回答ありがとうございました。 また情報交換ができてうれしく思います、重ねてお礼申し上げます。 >>4367 has 話に割り込んでしまってごめんなさい。 >>4366 anonymous コマンドが読み書きするファイルのアクセス権限を考慮して判断するのが良いと思います。 例えばmountコマンドでは一般userにデバイスへのアクセス権限がないので(当方FreeBSD)、 コマンドは実行できてもmountはできません。 また許可を与えたい場合、デバイスファイルのパーミッションを変更すれば使用できますが、 いろいろ問題がありそうなので、 http://x68000.q-e-d.net/~68user/unix/pickup?sudo の方法を取ったりするそうです。 ついでにちょっと変な話。 実行権限がないディレクトリに対して移動(cd)もディレクトリの内容の確認も(ls)もできません。 が、opendir(c言語)を用いいると実行権限がなくても内容の確認ができてしまいます。 なんだか不思議な感じがしませんか? |
|
>>4369 マーブル > 実行権限がないディレクトリに対して移動(cd)もディレクトリの内容の確認も(ls)もできません。 > が、opendir(c言語)を用いいると実行権限がなくても内容の確認ができてしまいます。 少々誤解があるようですが、実行権限がないディレクトリに対しては、移動 (cd) は できませんが、ディレクトリの内容の確認 (ls) はできます (読み込み権限があれば)。 しかし ls -l はこけます。 引数なしの ls が行っていることは opendir(2) なわけですが、opendir(2) は ディレクトリの下にアクセスしません。ディレクトリエントリを読むだけなので % cat ディレクトリ名 相当の処理しかしていません。よって、ディレクトリに対する読み込み権限があれば ファイル一覧を取得できます (ディレクトリも広義のファイル)。 一方 ls -l は opendir(2) して、取得したファイル名それぞれについて stat(2) する わけですが、stat(2) するには それぞれのファイルの i-node を知る必要があります。 しかし i-node を知るには、そのファイルが属する上位ディレクトリの実行権限が必要です。 結局のところ、ディレクトリに対する実行権限とは 「ファイル名から i-node への変換を許可するかどうか」 であり、言い換えると 「namei(9) を許可するかどうか」 だとわたしは思っていますが、違っていたら誰か教えてください。 |
|
>>4370 68user すいません-Fのエイリアス掛かってました。 \lsで動作します、掲示板汚してごめんなさい。 truss ls -F testdirの結果の一部 fchdir(0x5) ERR#13 'Permission denied' よりディレクトリ内に移動できないということらしいです(FreeBSD) (Linuxで試したらfstatでのエラーだったのでものによりけりな予感 |
|
~はunixではどのような存在なのですか? |
|
>>4368 68user >>4366 anonymous は解決したのですか? |
|
はじめまして。 学校の課題で、C言語でnslookupみたいな動作をするプログラムを作るように言われ こちらのサイトを参考に作成させていただいております。 それで一箇所気になったのですが、 http://x68000.q-e-d.net/~68user/net/resolver-3.htmlの > タイプが TXT なら、そのまま表示します。 > これは多分間違い。 > % ./resolver-1.pl www.jp.freebsd.org version.bind txt chaos > リソースデータは「&Sorry, no version string is available」と表示されるが、 > dig や nslookup は「Sorry, no version string is available」となります > (& がない)。 > 先頭の & を削るような規則があるようだが、それが何なのかはわからなかった。 の部分ですが、&の文字コードは0x26(10進数で言う38)。 そしてその後に続く 【Sorry, no version string is available.】 は38文字。 つまりドメイン名の3www8livedoor3com0と同じような意味かなと思います。 そのため先頭の1バイト目を出力しないようにすればdigやnslookupと同じような 表記になるのではと思います。 例) sega.jpを調べるとunknownが帰ってきますが、その中身は 【07 75 6e 6b 6e 6f 77 6e】です。 文字数が32文字以上ないと画面上には何も表示されないので、 それ以下の文字数のところでは結果的にうまく出力されているのかなと思います。 そのため【タイプが TXT なら、そのまま表示します。】ではなく、 【タイプが TXT なら、先頭1バイト以外をそのまま表示します。】かなと思います。 ぜんぜん的外れな事言っていたらすいません。 |
|
こちらのサイトを参考にresolver-1.plと似たような動作をする C言語のプログラムを作成したのですが、一箇所分からないところがあったので、 もしお分かりになるようでしたらアドバイスをいただけないでしょうか。 作成ソース(一応問題なく動くと思います) windows版(CPad 2.31使用) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1052.txt linux版(gcc 2.96使用) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1053.txt それで、分からないのは【DNS query 送信時にごみデータが後ろに大量に付く】事です。 ごみが付いてしまう理由は、 DNS query の質問レコードの照会名(可変長)の長さは 実際に名前解決ホスト名を入力されないと分からないので、 char QUERIES[400];と宣言し、そこに名前解決ホスト名を格納しているからです。 そして、その後ろに、タイプとクラスを連結しています。 そのためQUERIES[400]の余った部分がごみデータとなってしまいます。 実際の動作には問題が無いみたいで、 パケットをキャプチャしなければごみが付いているのは分からないのですが、 気持ち悪いので改善したいと思っております。 アドバイスをいただけるようでしたら、どうかよろしくお願いします。 |
|
たびたびすいません。 No 4375のソースですが、 掲示板から直接クリックするとアップロードしたソースが見えないようなので、 ブラウザを新規に立ち上げてアドレス欄にコピーしてアクセスしていただけますでしょうか。 |
|
テストサーバ:solaris8 本番サーバ :solaris8 ワークステーション間のファイル転送について質問です。 テストサーバで構築したディレクトリを本番サーバに移行しようとしています。 条件としてファイルのパーミッション、ユーザ.グループ、タイムスタンプは 変わらないようにします。 そのため "tar cvf /tmp/system.tar ." でアーカイブして"rcp"で本番サーバにアーカイブファイルを転送してファイルを 展開したのですがユーザ.グループが本番サーバのログインユーザのものになって しまいました。 tarは既存の状態をそのままアーカイブすると思っていたのですがrcpで転送すると 変わってしまうのでしょうか? よろしくお願いします。 |
|
No.4377の質問をした者です。 本番サーバでアーカイブしたファイルを展開時に"root”ユーザで実行したところ 既存の環境のままで展開できました。 solarisでは["o"オーナーシップ]というオプションが"root"ユーザ以外のユーザが アーカイブファイル展開時に付属するようでした。 おさわがせしましたm(__)m |
|
>>4374 DNS勉強中 ありがとうございます。 以前も length では、というご指摘をいただいたのですが、RFC などの 一次資料を見つけられずにいます。 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4283 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=4293 この件に関する一次資料をご存知でしょうか? >>4375 DNS勉強中 > 分からないのは【DNS query 送信時にごみデータが後ろに大量に付く】事です。 > sendto(s, (const char *)&DNS_Send, sizeof(DNS_Send), 0, (struct sockaddr *)&server, sizeof(server)) < 0) { sizeof(DNS_Send) バイトを送信しているのがまずいので、必要なバイト数分だけ 送信すればよいと思います。この例なら送信バイト数は (DNS_Send.QUERIES - &DNS_Send.id + count + 4) バイト ですかね? (自信なし) まぁこれだと汚いので、質問数や長さを保持する変数を 追加した方がよいと思います。 あとは struct DNS_Packet のパディングが心配です (実際は id や flag は short なのでほとんどの環境では問題ないと思いますが)。わたしなら struct DNS_Query { .... }; struct DNS_Question { short id short flag; short QDCOUNT; short ANCOUNT; short NSCOUNT; short ARCOUNT; struct DNS_Query *q; }; struct DNS_Packet { char data[1000]; int length; }; として (命名は適当)、問い合わせ内容を DNS_Question に構築し、送信時に DNS_Packet にコピーして send すると思います。といっても、わたしのソースの方 では全く実践できていないですけれども。 ところで、全体的にはかなり読みやすいと思うんですが、このソースのライセンスを 教えてください。要は、これを修正したものを、わたしのページに C のサンプル コードとして記載することは可能でしょうか? ということです。 >>4378 Yuusuke 一般ユーザで展開したときに他ユーザの所有者でファイルを作成できてしまうと、 適当な tar ファイルをでっちあげれば他のユーザのファイルを自由に作成できる ことになってしまうので、普通の UNIX ではできません。 root で展開するのもひとつの方法ですが、Solaris では /etc/system で rstchown=0 と設定することで一般ユーザが chown できるようになります (セキュリティを 犠牲にするので、わたしはしません)。そうしておけば、一般ユーザが tar xfp すると、他ユーザが所有するファイルを作成できるかもしれません (試してません)。 |
|
>>4379 68userさん ご返答をいただきありがとうございます。 length の件ですが、もうしわけありませんが一次資料は存じておりません。 今回のプログラムで私が一次資料として利用したのが、 こちらのサイトということもありまして(^^;。 それとごみデータの件ですが、おっしゃりたいことは分かりました (まだソース上では試しておりませんが)。 送信するデータ量で調整すると言う発想は出てきませんでした。 明日にでもその部分は組めそうな気がします。 どうもありがとうございます。 後、構造体の中に構造体を書くスタイルも勉強になりました。 このスタイルを取り入れた形で動かせるよう努力してみたいと思います。 それとライセンスの件ですが、このソースの中に書かれている関数 ( make_domain, parse_response, get_domain )や 出力結果を見ていただければ分かるかと思いますが、 resolver-1.pl を C に移植しようとしたものがこのソースです。 移植作業自体は私が行いました。 もっとも pack とかの動作をどうやって C で再現すればよいのか等 わからない事が多かったので、 resolver-1.pl の出力結果や etherealの結果から 自分なりに解釈して組んでいる部分はありますので、 完全移植は出来ておりません。 そのため、このサイトで有効利用していただけるのでしたらありがたいです。 私がこのサイトから学んだことを還元できればうれしいですし、 修正したソースを見て勉強させていただけたらと思います。 とりあえず自分で組んだソースなので、 現在このソースが抱えている内部的な問題とか分かる範囲で明日まとめてみます。 実際にソースを読んでいただいているようですが、 情報を提供しないよりは、提供した方が良いかなと思いますので。 |
|
>>4380 DNS勉強中 > length の件ですが、もうしわけありませんが一次資料は存じておりません。 了解しました。一次資料を発見されたら、ご教示いただけると幸いです。 > そのため、このサイトで有効利用していただけるのでしたらありがたいです。 ありがとうございます。C でのサンプルソースとしてぜひ使わせていただければ と思います。ただ、今は時間がとれないので、半年後とか 1年後、もしかしたら 数年後となるかもしれません。その点はご了承ください。 > resolver-1.pl を C に移植しようとしたものがこのソースです。 そうなんですか。わたしはこんなわかりやすいソースを書いた覚えはないんですが、 とても可読性が高いように感じます。 なぜでしょうね? コメントが充実しているから? わたしは「適切な変数名・関数名を 使用していれば、あまりコメントを書かなくても問題ない」という考え方だった のですが、ちょっと考えが変わりそうです。 |
|
人材募集です。ご興味を持たれた方はお気軽にどうぞ。 http://X68000.q-e-d.net/~68user/tmp/job.html |
|
>>4381 68userさん 今回作成したソースは resolver-1.pl を参考に書かせていただきましたが、 どちらかというと書かれているソースではなく、 書かれているコメントを参考に作成しました。 理由は単に perl が分からないからです(^^;。 ただ、コメントから行っている動作が分かれば、 それを C で実現するにはどうすればよいかを考えれば良いのかなと。 以上のことより、 resolver-1.pl と同じような事を実現していても ソース自体は似つかないものになっているかもしれません。 と言いますか perl が読めないので「似てるか否かわからない」 というのが実際のところです(^^;。 後、ソースを利用する/しない、時期などはすべてお任せします。 それとごみデータの件ですが、下記の記述でうまくいきました。 sizeof(DNS_Send) - sizeof(DNS_Send.QUERIES) + count + 4 アドバイスを頂き、どうもありがとうございました。 |
|
投稿した DNS のソースコードの問題点 その1 ( Linux版のみ )照会タイプと照会クラスを共に指定しないと、 照会クラスに PWD=/root/src が挿入され (null にならず)、エラーになってしまう。 その部分にだけ絞ったサンプルソース( Windows/Linux 兼用 ) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1057.c windowでの実行結果 argv[0] = C:\src\argv.exe(←これは私の実行ファイル名です) argv[1] = (null) argv[2] = (null) argv[3] = (null) argv[4] = (null) linuxでの実行結果 argv[0] = ./test24(←これは私の実行ファイル名です) argv[1] = (null) argv[2] = PWD=/root/src argv[3] = HOSTNAME=gifu-vm-35 argv[4] = LESSOPEN=|/usr/bin/lesspipe.sh %s 思いつく回避方法は、 1,照会タイプを入力必須にする。 2,照会クラスのみ引数ではなく、別途入力するようにする。 3,照会クラスの先頭3文字が PWD なら INTERNET に置き換えてしまう。 と言った所ですが、1,2は resolver-1.pl にくらべ多く入力する必要があり、 3は環境依存度が高いかも知れません。 このサイトで公開される際は、この部分は何かしか改善を加えた方が良いかもしれません。 |
|
>>4384 DNS勉強中 > 後、ソースを利用する/しない、時期などはすべてお任せします。 ありがとうございます。有効に活用させていただきたいと思います。再配布 ライセンスやクレジット表記について要望があれば、今のうちに承っておきます。 > printf("argv[0] = %s\n", argv[0]); > printf("argv[1] = %s\n", argv[1]); C の話になりますが、argv の要素数は argc を参照しなければいけません。領域を 超えた部分に何が入っているかは環境依存です。Windows で NULL が入っているのは たまたまです。OS のバージョンやコンパイラを変えたらどうなるかわかりません。 Linux の場合は、環境変数を保持している environ の環境にアクセスしていますが、 これもたまたまです。 # この領域は、普通は int main(int argc, char *argv[], char *envp[]) # などとアクセスします。 よって、 char query_type[256]; char query_class[256]; if ( argc >= 4 ){ strcpy(query_type, argv[3]); } else { strcpy(query_type, "A"); } if ( argc >= 5 ){ strcpy(query_class, argv[4]); } else { strcpy(query_class, "INTERNET"); } や char *query_type = "A"; char *query_class = "INTERNET"; if ( argc >= 4 ) query_type = argv[3]; if ( argc >= 5 ) query_class = argv[4]; などとするのがよいでしょう。 |
|
>>4385 68userさん ライセンスなどは不要です。 それと引数の御指導どうもありがとうございます。 よく理解でき、Linuxでの動作も確認いたしました。 おかげで問題点が1つ解消されました。 後、パディングが心配との事で、構造体を書いていただきましたので、 それを参考にソースを書き直してみました。 Windows版 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1058.txt ただ struct DNS_Query { .... }; の .... の意味するところが分からなかったので ここは私なりに解釈して記述しています。 またstruct DNS_Query *q;の必要性が分からなかったので、これは記述していません。 しかし、 > 問い合わせ内容を DNS_Question に構築し、 > 送信時にDNS_Packet にコピーして send すると思います。 の部分は実現したつもりです。 もっともパディングが心配という事が良く理解できていないので、 果たして組んだソースが意図を汲んでいるかどうかは自信がありません。 後このソースの問題点ですが、いま自分が気づいているところでは2点あります。 変数 search と 変数 DNS_question.flag の保守性です。 動作自体には問題はないと思います。 ただこれは自分で直せる気がするので週末にでも直したいと思います。 |
|
>>4379 68user ありがとうございます。 おかげさまでつい先ほど本番サーバへ移行が完了しました。 本番サーバではリモートコマンドはできないポリシーになっていたようなのでftp でtarファイルを転送し、rootで展開しました。 |
|
>>4386 DNS勉強中 > ここは私なりに解釈して記述しています。 わたしの意図どおりの実装になっています。 > またstruct DNS_Query *q;の必要性が分からなかったので、これは記述していません。 struct DNS_Question { short id short flag; short QDCOUNT; short ANCOUNT; short NSCOUNT; short ARCOUNT; struct DNS_Query *query; }; と書くと、DNS_Question というものは 「id・flag・{QD,AN,NS,AR}COUNT・DNS_Query から成り立つ」 という関係がソース上に明示されます。プログラムは「データ構造+アルゴリズム」 ですので、正確なデータ構造を最初に明示しておけば、ソースを理解しやすくなる ということです。 また、こうしておけば、 main(){ make_question(&DNS_question); } make_question(DNS_Question *question){ question->id = ...; question->flag = ...; make_query(question->query); } make_query(DNS_Query *query){ query を作成 } というふうに、変数の受け渡しがすっきりします。 ただ、フラットな構成の方がわかりやすい場合もありますので、ケースバイケースかと 思います。 > もっともパディングが心配という事が良く理解できていないので、 わたしの環境では int main (){ struct { char a[1]; int b; } hoge; printf("%d\n", sizeof(hoge)); } の結果は 8 になります。構造体のメンバ間にどれだけのパディングが入るかは 環境依存なので、パディングが入らないことを前提としたコーディングをするのは 怖いなぁ、ということです。 > 後このソースの問題点ですが、いま自分が気づいているところでは2点あります。 > 変数 search と 変数 DNS_question.flag の保守性です。 なるほど、学校の課題にも関わらず細かな部分の完成度を高めたいというのは 素晴らしいですね。余計なお世話かもしれませんが細かいところまで見てみました。 > #include <netdb.h> 必要なヘッダファイルを include していません。その結果、引数チェックが 行われず、戻り値は int として扱われているはず。 このことに気づかないということは、警告オプションを有効にしていないと推察 されます。gcc であれば -Wall オプションを付けると幸せな人生を送れます。 > char *make_domain(char *domain_name); プロトタイプ宣言で変数名は不要で、 char *make_domain(char *); でよいです。別に引数名を記述しても動作には影響ないですが、引数名を変更 したときに直し忘れてズレが出るので、わたしは書きません。/usr/include/*.h にも書いてないです。 > fprintf(stderr, "Error: Socket作成失敗\n"); なぜ失敗したのかがわからないため、システムコールのエラー時には errno を 出力しましょう。わたしは fprintf(stderr, "Error: Socket作成失敗。errno[%s]\n", strerror(errno)); とするのが好みですが、perror(3) などを使う人も多いです。 bind 失敗時も同様。エラーメッセージが Bind error であるのと Bind error [Address already in use] と表示されるのでは、対処時間に大きな差が出ると思います。 ちなみに gethostbyname(3) のエラー処理が抜けています。gethostbyname は ソケットまわりのシステムコール呼び出し時のエラー以外にも、データ内容の エラーが発生する可能性があるので herror(3) や hstrerror(3) を使います。 > return -1; main で戻せる値は 0〜255 です。あと、exit と return が混在しているのが 気になります。 > questions = two_bytes(int_buf[search], int_buf[search+1]); > search += 2; two_bytes・four_bytes のインタフェースがいまいちです。データ取得と インクリメントを別々に行うと、インクリメント忘れ・インクリメントミスが 発生する危険性があります。 たとえば questions = two_bytes(&int_buf, &search); とインタフェースを変え、 int two_bytes(int *int_buf, int *search){ int sum; sum = int_buf[*search] * 16 * 16 + int_buf[*(search+1)]; *search += 2; return sum; } とすればデータ解析とインクリメントを同時に行えます。ここまでくれば、 struct DNS_Response { char data[10000]; int int_data[10000]; int pos; }; という構造体を作った方がよいかもしれません。 上記と関連しますが、 additional = two_bytes(&int_buf[search], &search); search += 1; これは一見すると謎なコードです。2バイト取得しているのに 1バイトしか進めて いないので、わたしはしばらく悩みました。結局は get_domain() の先頭で 1バイト 進めているから問題ないのですが、直感に反するコーディングだと思います。 > int conv_class(char *class){ > switch (class) { > case 1: printf("1 (INTERNET)\n"); break; > case 2: printf("2 (CSNET)\n"); break; > case 3: printf("3 (CNAME)\n"); break; > case 4: printf("4 (HESIOD)\n"); break; > case 5: printf("5 (ANY)\n"); break; > } わたしなら、 typedef struct { char name[100]; int code; } codelist_t; としておいて、 int conv_class(char *class){ codelist_t class_list[] = { {"INTERNET", 1}, {"CSNET", 2}, {"CHAOS", 3}, {"HESIOD", 4}, {"ANY", 5}, }; for ( i=0 ; i<sizeof(class_list)/sizeof(class_list[0]) ; i++ ){ if ( strcmp(class, class_list[i].str) == 0 ){ return class_list[i].code; } } と直します。class_list は void class_print(int class) で共用してもよいでしょう (resolver-1.pl と同じやり方)。 > memset(&client, '\0', sizeof(client)); > host[j] = 0; /* 最後に0を代入する */ memset は 0 で埋めて、host[j] は '\0' で終端すべきです。文字終端の '\0' と 値としての 0 を区別しておくと、後から読んだ人に意図が伝わりますので。 あとは命名について。関数名は動詞、変数名は名詞という基本ルールがあるよう ですが、徹底されていないように思います。 いまいちだと思う関数名: int domain_count(char *); → get_domain_length などが適切では。 int end_domain(int, int *); → is_XXX とか check_XXX がよいのでは。 int resource_data(int *, int, int, char *); → 名詞になっている。しかし他の hogehoge_print より一段レベルが高いので、 混同しないような命名をしたいところ。 void conv_time(int); → 「変換」といいつつ実際に行っているのは「出力」。 いまいちだと思う変数名: int search; → 動詞に見える。pos あたりでいいのでは。 int questions; int answer; int authority; int additional; → s が付いていたり付いていなかったり。あと、この変数の本質は「個数」で あるはず。であれば question_count とか question_num などにしたい。 int flag = 0; → flag や tmp という変数名が許されるのは変数スコープが 5行以内の場合 (わたしの中では)。それ以上ならもう少し長い名前を。 > int resource_data(int *int_buf, int search, int max, char *print); int max → record_num あたりで。 char *print → record_name あたりで。 > int domain_count(char *argv) argv は渡す側の変数名であって、この引数の本質は「ホスト名」であるため、 int domain_count(char *hostname) int domain_count(char *host) などがよいと思います。 と、わたしならこう書くという部分はあるものの、それでも可読性が高い と感じました。たとえば codelist_t は保守性は高いのですが、ぱっと見 読みやすいのは case 文の羅列です。勉強用のソースであれば、下手に 構造化しすぎることなく、あえてベタ書きしたほうがいいのではないかと 考え始めています。 あと、hoge_print 関数も、わたしはこういう書き方をせずに char *a_record_print(int_buf, search); と文字列を返すほうですが、メモリ確保を行うのは呼び出し側か、関数の 中で static に持つか、など悩ましいです。すっぱり割り切って関数内で printf するのも、保守性はともかく可読性は悪くない、と思いました。 あと、 - two_bytes・four_bytes という関数は便利で読みやすい。 - int_buf にコピーするのは、型変換のバグを避ける手法としては 優れているのかも (ちょっと逃げっぽいけど)。 - perl 版の可読性を落としているのはやはり pack。num2bin などの 関数を作り、直接 pack を呼ぶのは避けた方がよいのかも。 - やはり C は構造体がすっきり書けるのがよいところ。perl の場合、 ハッシュだとタイプミス耐性がないし、Class::Struct だとインクリメント が面倒だし、package を作るのは大げさ。 などといろいろと思うところはありました。自分が書いたものを他人が リライトすると、いろいろと気づくことがあっておもしろいですね。 いろいろ偉そうに書きましたが、指摘したことは当ページでは全然実践できて いません (エラーチェックは甘いし、herror(3) は使っていないし、resolver-1.pl ではデータ取得とインクリメントを別々に行っているし)。その辺はご容赦ください。 |
|
>>4388 68userさん いろいろと細かい点までアドバイスをしていただきましてありがとうございます。 大変勉強になります。 全てに指摘点に対しご回答差し上げたいのですが、 まだ指摘された部分の修正作業を行っておりませんので、 一通り読ませていただき、気づいた点について記述させていただきます。 まず return と exit の混在ですが、 これは conv_type 関数や conv_class 関数の部分だけを 指した指摘でしょうか。 それとも exit を一つも使わない方が良いという事でしょうか。 return と exit の混在のデメリットが分からなかったので。 後、変数 search ですが、仰るとおりインターフェースがいまいちです。 何故なら現在位置を返す関数と返さない関数が混在しているからです。 ここの処理がうまく思いつかなかったので search += 2; で逃げていました(^^;。 そして変数 search の大きな問題が仰るとおり > additional = two_bytes(&int_buf[search], &search); > search += 1; です。 ここは作った当人で無いと分からないですよね(^^;。 その理由は、開発途中で方針を変更してしまったためです。 そのため現在位置は ・解析し終わった部分の、次の部分の先頭に現在位置を合わせている所 ・解析し終わった部分の末尾に現在位置を合わせている所 の2パターンが発生してしまいました。 その代償が search += 2; と search += 1; の混在です。 ここは人に解析してもらう際にはまずいので修正します。 あと host[j] = 0; ですが、ここでは www.livedoor.com というドメイン名を 3www8livedoor3com0(数字の部分は文字ではなく、文字コード)に変換しているのですが、host[j] = 0; は ドメインの最後に文字コードの 0 を連結する と言う意味で記述しました。 何となく思ったのですが、 3www8livedoor3com0 の最後の 0 は終端という意味かな。 そう考えると仰られている意味が分かりました。 その部分に関しては、記述ミスと言うより、私の理解が間違っていたのかなと思います。 それと、int_buf は完全に逃げです(^^;。 ここの部分のうまい処理が思いつきませんでした。 他の指摘された部分につきましても、順次修正して良いものを作りたいと思います。 お忙しい中、いろいろご指摘いただきありがとうございます。 |
|
>>4389 DNS勉強中 > まず return と exit の混在ですが、 main から抜ける際に return と exit が混在していることを指したつもりでした。 下請け関数から exit するのは、狙っているのなら別にいいんじゃないかと思います (課題のプログラムですし)。変な値がやってきたら終了してしまうようでは、本格的な 運用で使うことはできませんが、 - 本格的な運用では使えないことを認識している。 - どういう要求が出てきたときに問題が起こるかなんとなく想像できる。 たとえば web サーバのログから IP アドレスを拾って、複数の名前解決を 高速に行うプログラムを作りたいという要求があったとすると、この プログラムではひとつでも変なレスポンスがくると exit してしまうので 実運用には耐えられない。 - 本格的な運用で使用する場合は、どこをどういうふうに書き換えればよいか だいたい把握している。 なら問題ないと思います。 > return と exit の混在のデメリットが分からなかったので。 わたしの中では以下のようなルールにしています。 1. 基本的に main まで戻る。エラー発生時の情報出力を行うことを考えると、 各関数の役割分担が明確になるから。 2. 例外として、引数解析エラー表示の usage 関数内では exit してよい。 理由は、処理が始まっておらず後始末が不要であることと、usage は 数箇所〜数十箇所から呼ばれる可能性があり、呼び出し元での exit 忘れが怖いこと。 if ( argv[i][0] != '-' ){ usage(); exit(1); /* これを書き忘れると処理が続行してしまう */ } 1 の詳細は以下のとおり。 今回のように 1件だけのデータを処理する場合は、変な値がきたときに ほげフラグが 1〜5 の範囲外です などと出力すれば問題ないが、 一度に複数のデータを処理するバッチの場合は ほげフラグが 1〜5 の範囲外です。受注番号[%d] レコード番号[%d] 顧客番号 [%d] などとより多くの情報を出力しないと、どのデータがおかしいのか特定できない。 とはいえ、下請け関数である 文字列→コード変換関数に、 conv_type(query_type, order_no, rec_no, customer_no); などとエラー発生時に備えて各種情報を渡すのは変。エラー出力用のグローバル変数を 作って err_order_no = order_no; err_rec_no = rec_no; err_customer = customer_no; conv_type(query_type); とする、なんてのも馬鹿馬鹿しい (後者はたまに見かけてイラッときますが)。 となると、 int main(){ ret = file_main(); if ( ret == -1 ){ logging("エラー発生。処理中断・ロールバックし、全データを元に戻します"); /* 後始末を一箇所にまとめる */ } } int file_main(){ fp = fopen(filename[i], "rw"); while (1){ fgets(fp, buf, sizeof(buf)); ret = hoge_main(buf); if ( ret == -1 ){ logging("hoge_main でエラー発生。ファイル名[%d] 行番号[%d]", filename[i], line); return -1; } } } int hoge_main(char *buf){ type = conv_type(query_type); if ( type == -1 ){ logging("query_type に変換に失敗。受注番号[%d]", rec_no): return -1; } } int conv_type(char *type){ if ( 異常値 ){ logging("type が異常値 [%s]", type); return -1; } } として main まで戻るのが現実的。conv_type はファイル名だの受注番号だの 責任範囲外のことを知らなくてもよいが、最終的にはエラーリカバリに必要な 情報が揃う。 Java などのいまどきな言語であれば例外を使うべきだろうと思います。 > 3www8livedoor3com0(数字の部分は文字ではなく、文字コード)に変換して > いるのですが、host[j] = 0; は ドメインの最後に文字コードの 0 を連結 > すると言う意味で記述しました。 戻り値を strcpy(DNS_Send.QUERIES, make_domain(argv[2])); と文字列として扱うのであれば、末尾は文字終端 '\0' であるべきで、 host[j] = 0; より host[j] = '\0'; にすべきという意味で書きましたが、たしかに文字列終端でもあり、DNS 的な 0 終端でもあるわけで微妙なところですね。 バイナリ列とみなして長さを明示的に管理し、strcpy のかわりに memcpy を 使うか、あるいは動作的には問題ないのでコメントで補足しておくか、あるいは 修正は不要なのか…。 > それと、int_buf は完全に逃げです(^^;。 いいんじゃないでしょうか。「バグを出さない」ということを第一目的とするなら アリだと思います。わたしなどいまだに char と unsigned char あたりの暗黙の 型変換ではまったりしていますので、キャストがちりばめられているソースだったら 解読に苦労していたかもしれません。 ちなみに単なる「char」が signed であるか unsigned であるかは環境依存です。 とはいえ、わたしは一般的な UNIX しか知らないので、char が unsinged char である環境は見たことはないですが。 |
|
>>4389 DNS勉強中 あと、さらに細かいことをひとつ。インデントは正確につけましょう。フラグ表示 の部分をわかりやすくするために、ひとつ余計にインデントしていますが、 { フラグ表示 } と、ブロックで囲めばすみます。 インデントはプログラマがつけるものではなくエディタが勝手につけるものであり (emacs の M-x indent-region などで)、もしエディタが変なふうにインデントして しまったら、それは括弧の過不足や文字列の閉じ忘れが原因、などと気づくことが できます (python などは除く)。 # というわたしのポリシーはなかなか理解してもらえない。なぜ手でインデントを # 付ける人が多いのだろう (って、素の vi やメモ帳を使ったりするからだが)。 # めんどくさくないのかなぁ。 |
|
>>4388 68user >>4390 68user >>4391 68userさん 今日は上記3レスでアドバイスいただいた内容についてある程度修正したり、 理解に努めておりました。 ・ struct DNS_Query *query; の必要性について理解いたしました。 確かに仰られるとおり、ソースが理解しやすくなると思いました。 そのため、その部分は修正しました。 (ただ make_question, make_query との関係上、一部修正しております)。 また、make_question と make_query を作成することにより、 main 部の記述を減らし、ソースを読みやすくしました。 ただ、記述していただいたとおりに作れなかったので、メイン部に make_question(&DNS_question); count = make_query(&DNS_query, argc, argv[2], argv[3], argv[4]); と2つにわけて記述しております。 ・ パディングについても理解いたしました。 確かに私の以前のソースはパディングが入らない前提で組んでありました。 やっと意図されたことが分かりました(^^;。 ・ /usr/include/bfd.h をみて、 プロトタイプ宣言について仰られていることを確認・理解し、修正しました。 ・ perror を用いエラー処理を追加しました。 ・ 抜けていた gethostbyname のエラー処理を追加しました。 ただし、 herror や hstrerror を Windowsで使う方法が分からなかったので、 とりあえず perror を使っております。 ・ return と exit の混在を解消しました。 それにともない、 main に戻らずに終了していた所を、 main に戻って終了するように変更しました。 またそれらしいエラー情報を出力するように変更しました。 ・ two_bytes の記述変更について理解いたしました。 アドレス渡しで現在位置を変更して、 戻り値で2バイトの値を取得する方法は大変参考になりました。 確かに、教えていただいた記述の方が何かと便利ですので、 ほぼ同じソースを移植させていただきました。 それに伴い、謎の search += 1; を修正しました。 また four_bytes も同様にソースを変更しました。 この作業を実施したことにより、 search += 2; や search += 4; を大幅に減らすことが出来ました。 ・ conv_type, conv_class, class_print, type_print を codelist_t を使用する形に変更しました。 ただし、 void class_print(int class) を用いた共用の記述の仕方が 分からなかったので、 codelist_t {class, type}_list[] = { ... };をグローバル化して共用しています。 また、 qr_print, opcode_print, aa_print, tc_print, rd_print, ra_print, rcode_print も同様に codelist_t { ... }_list[]化しました(こちらはローカル)。 ・ 0 と \0 の混在を修正しました。 ・ 変数名や関数名の命名を修正しました。 ・ フラグ部分のインデントを変更しました。 ブロックで囲むと言う発想が出てこず、 かといって、インデントなりコメントで上下を囲むなどしないと、 のちのち分からないだろうなと思い、 インデントしてしまったのですが、 ブロックで囲むと言う方法が教えていただき、大変参考になりました。 とりあえず今日修正できたところは以上です。 上記以外の部分についてはまだ手をつけておりません。 他に、今まで教えていただいた事を他の部分にも流用できないか、 ソースを一通り読み直してみて調べてみようと思います。 また search を触ったことのより、ある程度検証をする必要があるのかなと思います。 月曜日は予定が入っているので、まとめるのは難しいかも知れませんが、 火曜日くらいにある程度まとめて一度アップしてみようと思います。 いろいろ参考になるアドバイスをいただきまして、ありがとうございます。 |
|
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 です。 |