68user's page 掲示板

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UNIX:Soralis8
シェル:Bシェル

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

No. 4521 # dynamite 2006/02/16 (木) 02:31:45
>>4516 68user
返答ありがとうございます。

マニュアルは下記をざっと目を通してみたのですが、記載が見付けれませんでした。
http://www.infoscience.co.jp/technical/openssl/news/
http://home.att.ne.jp/theta/diatom/

前回の書き込みで受信関係がおかしいと推測してしまいましたが、
ためしにContent-Lengthの値分だけ受信しても同じ状態なので、
現在、違う部分も検証しています。

また理解が深まりましたら報告させて頂きますm(_ _)m

No. 4522 # むう 2006/02/16 (木) 17:30:44
はじめまして。素朴な疑問があるので、もし知っておられたらお答えください。
一般論として、ネットワーク上ではTCPとUDPはどっちが優先度が高いのでしょうか?
輻輳した場合に生き残る確率?に違いはありますか?
とにかくガンガンパケットを送りつけるプログラムで実験してみたところ、
気持ち程度UDPが優先されている気がしますが、確証が持てません。
LinuxのsocketオプションにSO_PRIORITYというのがあり、デフォルトは
TCPもUDPも0でした。
setsockoptで優先度を変えてみても誤差程度の差しか認識できません。
Webで「TCP UDP 優先度」などで探してもいい資料が見つからない状態です。
何かそのあたりの情報を知っていたら教えていただけないでしょうか。

No. 4523 # 68user 2006/02/17 (金) 00:52:11
>>4522 むう
- 一般的に、OS がどちらを優先するということは聞いたことがない。
- ただ、実装によっては得手不得手がある可能性はある。
- しかし一般的に TCP の方が高機能であり行うべき処理も多いため、
    スループットという点に関しては UDP の方が有利であろう。
- 当然ながら帯域制御ができるルータ・OS であれば、どちらかを優先する
    ことは可能であろうが、これは設定の問題。
- SO_PRIORITY は IP の TOS (Type of Service) に設定される。
- TOS の値を改変してしまうルータがあるようで、チェックサム計算からは
    除外されたりするかわいそうなフィールド。
- また、TOS は DiffServ など全く別の用途に使われたりもする。
        http://x68000.q-e-d.net/~68user/rfc/?key=2474&target=title
- OS が TOS を参照するかどうかは怪しいのでは? (ルータならともかく)
- TOS で QoS をやりたいならイントラ内で使うこと。ルータは TOS 対応の
    ものを揃えるべき。
- 少なくともインターネット経由では、ピアまで TOS がそのまま流れる
    保障は全くない。
- Arcstar のように、TOS を考慮するとうたっているサービスはある。
        http://www.ntt-vpn.com/ip-vpn/faq/faq_02.html

というのがわたしの認識です。

No. 4524 # かつや 2006/02/19 (日) 15:19:55
Wic-PC上で起動した際Teratermウィンドウがタスク上に隠れて
しまいタスクトレイ上にある該当画面を選択しなければ画面上
に表示されません。設定で画面がフォアに表示されるように
する為の設定方法をご教示下さい。

No. 4525 # 68user 2006/02/19 (日) 23:35:20
>>4524 かつや
http://search.vector.co.jp/search?query=%8D%C5%91O%96%CA などのツールを
インストールするのがよいのではないでしょうか。

No. 4526 # mkt 2006/02/20 (月) 04:05:17
>>4516 68user
いろいろありがとうございます。お手数をおかけしました。

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

自分 1 人暴走している感じで恐縮ですが、いろいろ試してしまいました。

全角記号を検索したときの挙動について。
- 半角に変換して検索されている*ものもある*。
    (「@」「〜」「:」などは半角に変換されている)
- ヒットしなかったときのキーワードの表示が文字化けしている。(*1)
    (「!」「;」「¥」など多数)
- 関係ない結果が表示される。(*2)
    (「”」「’」「|」など)

半角記号で全文検索したときの挙動について。
- 「ある」はずなのに「ヒットしませんでした。」と言われる。
    (「"」→ \&quot\; がないと言われる、「'」→ \&apos\; がないと言われる、など)
- ヒット数表示の次の、リストの先頭に空の項目が入って、
    unix-term-dic.html や pregmemo.html などの各検索対象ファイルから
    関係ない部分(検索キーワードによって範囲は異なるが google_ad 関連スクリプトの
    <!-- の後から 先頭項目のあたり?)まで拾ってきてしまっている。
    (「!」「=」「:」「@(=@)」「*」など多数)

あと、「+」を検索しようとすると「500 Internal Server Error」に
なりますね。何も入力しなかった場合とかもですが。

---
(*1)(*2)
記号ばかり試していましたが、普通に言葉を検索しても何か変です。
「あいうえお」→ 1 件ヒットしました。(これは実際存在したので問題ない)
「かきくけこ」→ ヒットしませんでした。(が、キーワード文字化け)
「鶴」→ ヒットしませんでした。(が、キーワード文字化け)
「亀」→ 3 件ヒットしました。(が、どれも関係ないものばかり)
という感じで。


…もっとスマートに分類できたらいいんですが、収拾つかなくなってしまいました。
ごちゃごちゃに突っつくだけ突っついて申し訳ありません。

No. 4527 # mkt 2006/02/20 (月) 04:16:22
>>4526 mkt
言わずもがなですが、
    pregmemo.html は prgmemo.html の typo
です。失礼しました。

No. 4528 # 68user 2006/02/21 (火) 02:26:55
>>4526 mkt
ずいぶんヌルい修正をしてしまい、お恥ずかしい限りです、

> - ヒットしなかったときのキーワードの表示が文字化けしている。(*1)
> (「!」「;」「¥」など多数)
正規表現で検索しているため、入力された文字列は quotemeta している
のですが、quotemeta すると EUC-JP の 0x80 以降も quote されてしまい、
その結果化けていました。これまでは quotemeta した後に
    s/\\([\x80-\xff])/$1/g;
で元に戻していたのですが、前回の修正時になぜか戻す必要はないと判断
して、上記の s/// を削除していました。

> - 関係ない結果が表示される。(*2)
> (「”」「’」「|」など)
全角->半角変換が甘くて、" ' | などはそもそも半角に置換していません。
調査していないので想像ですが、EUC-JP の 2バイト目 + 後続バイトに
マッチしてしまったのではないかと思います。

> <!-- の後から 先頭項目のあたり?)まで拾ってきてしまっている。
> (「!」「=」「:」「@(=@)」「*」など多数)
全文検索のテストが甘かったようです。

> あと、「+」を検索しようとすると「500 Internal Server Error」に
> なりますね。何も入力しなかった場合とかもですが。
空の場合は
    print "検索内容を指定してください。\n";
と表示するようにしていたのですが、前回の修正で Content-type ヘッダの
出力方法を変更したせいで、Content-type より前に
    検索内容を指定してください。
が出力され、エラーとなっているようです。

少しずつ直していきます。ご指摘ありがとうございました。

No. 4529 # hoge 2006/02/21 (火) 12:44:56
>>4524 かつや
Tera Term のショートカットのプロパティ中の
『実行時の大きさ』って項目はどうなっていますか?

No. 4530 # でたち 2006/02/27 (月) 02:12:36
Cシェルでシェル変数に代入された数値として
例えば0.12が入っている場合、その変数の数値を$で
参照する時に「0.12」としてではなく、
「.12」と出力させることはできますか?
ご教示頂けましたら幸いです。

No. 4531 # 68user 2006/02/27 (月) 12:00:12
>>4530 でたち
printf(1) で何とかならないかと思って試してみましたが、どうやら無理っぽいので
    echo ${var:s/0././}
でどうでしょうか。

No. 4532 # でたち 2006/02/27 (月) 18:15:08
>>4531 68user
echo ${var:s/0././}
を行ってみましたが Variable syntax表示で
受け付けて貰えませんでした。
ご返信頂きまして大変ありがとうございます。

No. 4540 # べた 2006/03/17 (金) 18:50:45
nawkの使い方について教えて欲しいことがあります。
環境は、Solaris8、shです。

nawk '{
  :
    FNO=sprintf("%d",substr(FNM,19));
  :
}' ${LIT}

上記のように、ファイル名からファイルの番号を
取得し、格納しています。
"%d"を指定して数値で取得しようとしているのですが
10以上がとれません。
9のまななのですが、どこがいけないのでしょうか。

No. 4541 # 68user 2006/03/18 (土) 23:41:25
最近掲示板 SPAM がひどいので、特定文字列を含む投稿を禁止するように
しました。

>>4540 べた
FNM の内容がわからないと何とも言えないです。

No. 4542 # 68user 2006/03/18 (土) 23:55:07
>>4088 tansy
>>4191 無題
>>4225 mmm
いまさらですが、当ページのプログラムのライセンスは、特に記述がない限り、
修正 BSD ライセンスっぽいものであることを明記しました。
    http://X68000.q-e-d.net/~68user/link.html

No. 4543 # 68user 2006/03/19 (日) 05:00:13
>>4526 mkt
一部のみですが対応しました。
    http://x68000.q-e-d.net/~68user/cgi-bin/cvsweb.cgi/public_html/unix/script/pickup#rev1.24

残件は、
    - 全文検索がダメダメなのを直す
    - EUC-JP のバイトの境界を正しく見る
        (「亀」は「正規表現」の「正」の 2バイト目と「規」の 1バイト目にマッチしている)
    - 「+」が検索できないのを直す
です。忘れないよう
    http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=23
に登録済ですが、もしさらなる不具合があれば掲示板にてお教えいただけると幸いです。

No. 4544 # 68user 2006/03/22 (水) 01:41:10
UNIX の部屋で、各 OS のマニュアルへのリンクを表示するようにしました (先頭部分)。
    http://X68000.q-e-d.net/~68user/unix/pickup?find

現時点では、Linux・NetBSD・FreeBSD・HP-UX11i・Solaris10 のセクション 1,1M,8
のみです。

No. 4550 # タバスコ=ダ=ガマ 2006/03/25 (土) 14:57:56
ネットワークプログラミングのページはとてもお勉強になります。
非常にありがたく利用させていただきました。感謝です。
ところで素朴な疑問なのですが、TCPでsocket生成→connectの間に
bindが不要なのはなぜなのでしょう?

No. 4551 # だだ 2006/03/29 (水) 02:01:19
Solarisで、Perlを組むのですが、参考になる本を
教えてください。
Perlの基本となることが知りたいのです。
変数の設定、判定、ループ、読み書きといったことです。
基本的なことが分かる本を教えてください。

最終的には、Perlでftpやメール送信(smtpでの)を
やりたいのです。
この点に関する本も教えて欲しいのですが。

No. 4552 # 68user 2006/03/29 (水) 10:57:54
>>4550 タバスコ=ダ=ガマ
bind(2) することはできますが、普通はしません。connect(2) に
空いているポート番号を選ばせます。
    http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.6

その理由は、ピアのポート番号選択は
    - 21 なら SMTP
    - 80 なら HTTP
などとサービスの選択も兼ねていますが、ローカルのポート番号は
何番でも構わないからです。

>>4551 だだ
> Perlの基本となることが知りたいのです。
> 変数の設定、判定、ループ、読み書きといったことです。
> 基本的なことが分かる本を教えてください。
初心者向けの本は相性が重要ですので、本屋で手にとって立ち読みするのが
よいでしょう。本屋に行くことができないなら、わたしは持っていませんが
「初めての Perl」を推薦します。

> 最終的には、Perlでftpやメール送信(smtpでの)をやりたいのです。
「Perl クックブック Volume1・2」で最終的な答えを把握した上で、
「プログラミング Perl」で基礎を固めるのがよいと思います。

No. 4554 # かず 2006/03/29 (水) 13:08:48
いつも楽しんでサイトを拝見させていただいております。

今UNIX上でクライアント、サーバのネットワークプログラミングをC言語で
挑戦しているところなんですが、FTPコマンド
(QUIT,USER,PASS,PWD,STAT,MKD,RMD,CDW,DEL,LIST,HELPcmd,HELP,PORT,NLST)
の組み込み方がイマイチよく分りません。

以下にserverftp.cとclientftp.cのコードを貼り付けておきます。
これらのコードは正常に動いております。

大変お忙しいとは思いますが、
ご教授の程、どうぞよろしくお願い致します。

serverftp.c

***********************

#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>

#define SERVER_FTP_PORT 9237

// list function prototypes
int receiveMsg(int s, char *buf, short bufsize, short *msgsize);
int sendMessage(int s, char *buf, short size);

main(
int  argc,
char *argv[]
)
{
int listenSocket;
int s;
int status;
                short msgSize;

printf("Starting server ftp\n");

status = svcInitServer(&listenSocket);
if(status != 0)
{
printf("Exiting server ftp due to error\n");
exit(-1);
}

for(;;)
{
printf("waiting to accept client connection\n");
s = accept(listenSocket, NULL, NULL);
if(s < 0)
{
perror("cannot accept connection: ");
exit(-1);
}

int msg;
short size;
char recvBuffer[1024];

printf("Server connected to client, issuing recvmsg\n");

status = receiveMsg (s, recvBuffer, 1024, &msgSize);
if (status < 0)
{
close(s);
return(status);
}

char replyMsg[1024];
strcpy(replyMsg, "200 command ok\n");
size = strlen (replyMsg) + 1;
status = sendMessage(s, replyMsg, size);

if(status < 0)
{
close(s);
return(s);
}



}

close(listenSocket);
printf("Exiting from server ftp main\n");
}


int svcInitServer(
int *s
)
{
int sock;
struct sockaddr_in svcAddr;
int qlen;

if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("cannot create socket ");
return(-1);
}

memset((char *) &svcAddr, 0, sizeof(svcAddr));

svcAddr.sin_family = AF_INET;
svcAddr.sin_addr.s_addr = htonl(INADDR_ANY);
svcAddr.sin_port = htons(SERVER_FTP_PORT);

if(bind(sock,(struct sockaddr *)&svcAddr, sizeof(svcAddr)) < 0)
{
perror("cannot bind ");
close(sock);
return(-1);
}

qlen = 1;
listen(sock, qlen);

*s = sock;

return(0);
}


int sendMessage(
int s,
char *msg,
short msgSize
)

{

int i;

for(i = 0; i < msgSize; i++)
{
printf("%c", msg[i]);
}
printf(" \n");




if((send(s, msg, msgSize, 0)) < 0)
{
perror("unable to send ");
return(-1);
}

return(0);
}


int receiveMsg(
int s,
char *buffer,
short bufferSize,
short *msgSize
)

{
int i;
*msgSize = recv(s, buffer, bufferSize, 0);
if(*msgSize < 0)
{
perror("unable to receive");
return(-1);
}

for(i = 0; i < *msgSize; i++)
{
printf("%c", buffer[i]);
}
printf("\n");

return(0);
}


clientftp.c

**********************

#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>

#define SERVER_FTP_PORT 9237

int sendMessage(int s, char *msg, short msgSize);
int receiveMsg(int s, char *buffer, short bufferSize, short *msgSize);


int main(
int argc,
char *argv[]
)

{
int status;
int s;
short msgSize;
char FTPcmd[1024];
char replyMsg[1024];

printf("Trying to connect to server FTP\n");

status = clntConnect("//IPアドレス", &s);
if(status < 0)
{
return(status);
}

printf("Connected to ftp server\n");
strcpy(FTPcmd, "quit");
status = sendMessage(s, FTPcmd, strlen(FTPcmd) + 1);
if(status < 0)
{
close(s);
return(s);
}

printf("Issuing receivemsg to get reply msg from server\n");
status = receiveMsg(s, replyMsg, 1024, &msgSize);
if(status < 0)
{
close(s);
return(s);
}

printf("%c", replyMsg);

close(s);
return(0);

}

int sendMessage(int s, char *msg, short msgSize)

{
int i;

for(i = 0; i < msgSize; i++)
{
printf("%c", msg[i]);
}

printf(" \n");



if((send(s, msg, msgSize, 0)) < 0)
{
perror("unable to send ");
return(-1);
}

return(0);
}

int receiveMsg(int s, char *buffer, short bufferSize, short *msgSize)

{
int i;
*msgSize = recv(s, buffer, bufferSize, 0);
if(*msgSize < 0)
{
perror("unable to receive ");
return(-1);
}

for(i = 0; i < *msgSize; i++)
{
printf("%c", buffer[i]);
}

printf("\n");
return(0);

}

int clntConnect(
char *serverName,
int *s
)

{
int sock;
struct sockaddr_in us;
struct sockaddr_in them;
struct hostent *he;

if((he = gethostbyname(serverName)) == NULL)
{
printf("%s is unknown server\n", serverName);
return(-1);
}


if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("cannot create socket ");
return(-1);
}


memset((char *) &us, 0, sizeof(us));

us.sin_family = AF_INET;
us.sin_addr.s_addr = htonl(INADDR_ANY);
us.sin_port = 0;

if(bind(sock,(struct sockaddr *)&us, sizeof(us)) < 0)
{
perror("cannot bind");
close(sock);
return(-1);
}


memset((char *)&them, 0, sizeof(them));
them.sin_family = AF_INET;
memcpy((char *) &them.sin_addr, he->h_addr, he->h_length);
them.sin_port = htons(SERVER_FTP_PORT);

if(connect(sock,(struct sockaddr *)&them, sizeof(them)) < 0)
{
perror("cannot connect ");
close(sock);
return(-1);
}

printf("Connected to server, socket number: %d\n", sock);
*s = sock;

return(0);
}

void clntExtractReplyCode(
char *buffer,
int *replyCode
)

{
sscanf(buffer, "%d", replyCode);

return;
}

No. 4555 # hoge 2006/03/29 (水) 19:29:01
>>4554 かず さんへ

> FTPコマンド
> (QUIT,USER,PASS,PWD,STAT,MKD,RMD,CDW,DEL,LIST,HELPcmd,HELP,PORT,NLST)
> の組み込み方がイマイチよく分りません。

あんまりな方法だと思いますよ。
vsftpd とか proftpd 辺りのソースを拾って読んでみてはどうでしょうか?

No. 4556 # まんたろう 2006/03/30 (木) 01:10:57
Solarisで、Perlで、smtpで、メール送信をしていいます。
ポート番号25を使って、smtpサーバに接続してメールの
送信をしているのですが、処理は、正常に終わるのですが、
メールが送信されません。届きません。
どこがいけないのでしょうか。

------------------------------
use Socket;
$server = 'SMTPサーバ' ;

$from = '送信元アドレス' ;
$to = '送信先アドレス' ;
$subject = 'テストメール' ;
$data = 'メール送信テスト' ;

$send_data = 'X-Mailer: SMTP tool' . "\n";
$send_data .= 'MIME-Version: 1.0' . "\n";
$send_data .= 'Content-Type: text/plain; charset=iso-2022-jp' . "\n";
$send_data .= 'From: '. $from . "\n";
$send_data .= 'To: '. $to . "\n";
$send_data .= 'Subject: ' . $subject . "\n";
$send_data .= "\n";
$send_data .= $data;

        $port = getservbyname('smtp','tcp');
        $struct = sockaddr_in($port,inet_aton($server));
        socket(SH, PF_INET, SOCK_STREAM, 0)
                                || die("ソケットの生成失敗 $!") ;

        connect(SH, $struct )
                                || die("接続失敗 $!") ;

        select(SH); $| = 1; select(STDOUT);

        $respons = <SH> ;

        unless($respons =~ /^220/) {
                close(SH); die("接続失敗 $!") ;
        }

        $command = "HELO $server\n";
        print SH $command ;

        $respons = <SH> ;
        &decode(\$respons) ;

        unless($respons =~ /^250/){
                close(SH); die("HELOコマンド失敗 $!") ;
        }

        $command = "MAIL FROM:$from\n";
        print SH $command ;

        $respons = <SH> ;
        &decode(\$respons) ;

        unless($respons =~ /^250/){
                print SH "RSET\n"; close(SH);
                die("MAILコマンド失敗 $!") ;
        }

        $command = "RCPT TO:$to\n";
        print SH $command ;

        $respons = <SH> ;
        &decode(\$respons) ;

        unless($respons =~ /^25[0|1]/){
                print SH "RSET\n"; close(SH);
                die("RCPTコマンド失敗 $!") ;
        }

        $command = "DATA\n";
        print SH $command ;

        $respons = <SH> ;
        &decode(\$respons) ;

        unless($respons =~ /^354/){
                print SH "RSET\n"; close(SH);
                die("DATAコマンド失敗 $!") ;
        }

        $command = "$send_data\n.\n";
        print SH $command ;

        $respons = <SH> ;
        &decode(\$respons) ;

        unless($respons =~ /^250/){
                print SH "RSET\n"; close(SH);
                die("本文、ヘッダ部送信失敗 $!") ;
        }

        $command = "QUIT\n";
        print SH $command ;

        close(SH); select(STDOUT);
        
        print "MAILは正常に送信されました。\n";

sub decode{
        
        my $inf = $_[0];
        $$inf =~ s/\x0D\x0A|\x0D|\x0A/\n/g;

}
-----------------------------

No. 4557 # megu 2006/03/30 (木) 11:46:30
UNIXを良く知らずみようみまねでshellを作成しています。
ある処理のエラーをハンドリングして結果に対してメール
を送信する様にしました。
/usr/bin/mail -s "hoge" megu@hoge.com < hoge.txt
ここで質問なのですが、該当コマンドをプロンプト上で
実行すると処理が実行されません。
(実行中のまま戻って来ない?)
強制終了すると、dead.letterが更新されます。
該当処理を記載したshellを実行しても、上記コマンド迄
は実行されているのですが、該当mailコマンドの部分で
処理がされない様で、コマンドを実行した様にshell自体も
終了しません。
cronや他ツールで自動実行させる様にすると実行されます。
根本的なOSの知識なのか、環境の問題なのかさえも分かりません。
とても基本的な質問になるかと思うのですが、教えて頂ければと
思います。

No. 4558 # カルネ 2006/03/30 (木) 19:43:41
はじめまして。質問させてください。
sin_port=0で空いているポート番号を自動取得できますが、
・ここで取得されたくない番号を指定
・決められた帯域内(5000〜6000など)で限定して取得
・予め取得される範囲を取得
のいずれかを行いたいのですが、方法はありますでしょうか?

No. 4559 # 68user 2006/03/30 (木) 22:25:05
>>4556 まんたろう
> ポート番号25を使って、smtpサーバに接続してメールの
> 送信をしているのですが、処理は、正常に終わるのですが、
> メールが送信されません。届きません。
うちの環境では正常に送信されました。telnet での送信や、メーラー
送信のパケット観察などを行って、成功/失敗時の違いを観察してください。

>>4557 megu
- 「sh -x スクリプト名」として、実際に実行されているコマンドを確認する。
    端末からの入力を待っているなら、リダイレクトまわりが怪しげな気が。
- dead.letter の中を見て、エラーを観察する (dead.letter の中にエラーが
    記述されるのかは覚えていませんが)
- mail コマンドが吐くエラーを観察する。標準出力・標準エラー出力を捨てて
    いるなら、捨てないようにする。

>>4558 カルネ
Linux なら ip_local_port_range、NetBSD なら net.inet.ip.anonportmax、
FreeBSD なら制限方法がない (たぶん) など、OS によって異なります。

No. 4560 # べた 2006/04/06 (木) 13:07:50
シェルで、dateコマンドで取得した時間から5分前の
の時間を取得したいのですが、できるでしょうか。

date +%H%M%S と実行します。
結果として、「130530」が取得できます。
そこから、取得した、「1305030」から5分前の「130030」を
求めたいのですが、できるのでしょうか。

環境は、
Solaris、shです。

No. 4561 # 68user 2006/04/06 (木) 14:09:14
>>4560 べた
上にある方が、現実的な解です。

- perl で localtime(time-5*60)
- GNU date をインストールして date --date '5 minutes ago'
- http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=1382 的なやり方
- http://home.catv.ne.jp/pp/ginoue/bn/descend.html の「2002/04/02 ひとこと」
    的なやり方

No. 4562 # hoge 2006/04/06 (木) 16:23:10
プロパーや一次請けが perl を嫌がったり、ましてや非純正な物
(GNU プロダクト)を入れるなんて駄目なんて悲惨な職場を経験したので...

Solaris 付属の date コマンドに %T って有りますか?
無かったとしても date +%H:%M:%S って書き方は利用可能ですか?
結果として、13:05:30 が取得できるなら、予め IFS_OLD=$IFS ; IFS=":" して
2 番目のフィールドが 5 未満か? とか 1 番目のフィールドが 0 以下か? って
辺りを条件に繰り下がり処理を手作りするのもありますね。

No. 4563 # hoge 2006/04/06 (木) 17:48:41
あ... 68user さんが例示してるやん。
リンクは読んでから書かないと駄目ね。

No. 4564 # べた 2006/04/06 (木) 18:37:37
>>4561 68user
>>4562 hoge
ありがとうございます。
日付またがりなどを考えるとPerlでやる方法がいいです。
Perlでやります。

もう1つ質問があります。
シェルを起動し、起動した時間から5分前に出力された時間以降の
syslogの内容を別ファイルに出力したいのですが、できるのでしょうか。

例えば、
今が、18:00:00とします。
シェルを起動し、18:00:00を取得します。
18:00:00を基にして、5分前の17:55:00を取得します。
「Apr 6 18:55:00」以降に出力されたsyslogをすべて
別ファイルに出力します。

ということ実現したいのです。

時間は、
$tm = time - 300;
my $now = strftime "%b %e %H:%M:%S", localtime($tm);
で取得します。

No. 4566 # べた 2006/04/08 (土) 12:36:36
あるファイルから指定日時以降に書かれたレコードを
抽出したいのですが、シェルスクリプトでできるので
しょうか。
どのしょうにシェルにすればよいか教えてください。

例えば、今が、2006/04/08 12:30:00とします。
ある指定日時というのは、現時点から5分前としますので、
2006/04/08 12:25:00となります。

ファイルでは、「Apr 8 12:30:33 ・・・・・」と出力
されているので、5分まえの時間を、「Apr 8 12:25:00」
で取得し、「Apr 8 12:25:00」以降に書かれたレコードを
ファイルに出力したいのです。

環境は、
Solaris8、sh、Perlで実現したいのです。

No. 4567 # まんたろう 2006/04/10 (月) 21:07:44
>>4566 べた

無理ではないかと思うのですが。
「Apr 8 12:30:33 ・・・・・」の比較、チェックが簡単
にできないと思います。

こういうのはどうですか。
5分前に動いた時のファイルのレコード数と今回動いた時の
ファイルにレコード数の差をtailコマンドでファイルに出力
というのは。?

No. 4568 # 68user 2006/04/11 (火) 10:22:32
>>4567 まんたろう
> 「Apr 8 12:30:33 ・・・・・」の比較、チェックが簡単にできないと思います。
echo "Apr 02 12:25:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}'
として行番号をとって、その行以降を tail で出力とか。

まぁ筋の悪いやり方だとは思いますので、他の方法がよいでしょう。

No. 4569 # べた 2006/04/11 (火) 12:50:22
>>4568 68user

>echo "Apr 02 12:25:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}'
>として行番号をとって、その行以降を tail で出力とか。
予めファイルの全体のレコード数も必要ということですか。
マイナスとなった場合、どうなるのですか。?

No. 4570 # べた 2006/04/11 (火) 14:56:25
>>4578 EBA

echo "Apr 10 09:30:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}'
と実行してみたのですが、行番号が2となります。

# cat logfile
<pre>
Apr 9 12:23:01 ・・・・・・・
Apr 9 15:17:43 ・・・・・・・
Apr 9 17:48:06 ・・・・・・・
Apr 9 18:05:30 ・・・・・・・
Apr 9 18:06:24 ・・・・・・・
Apr 10 09:23:08 ・・・・・・・
Apr 10 11:47:23 ・・・・・・・
Apr 10 13:35:49 ・・・・・・・
Apr 11 09:54:11 ・・・・・・・
Apr 11 12:17:38 ・・・・・・・
</pre>

行番号ではなく、すべてを表示したのですが、
sortが正しく行われていないみたいなのですが、
どうしてなのでしょうか。
<pre>
# echo "Apr 10 09:30:00 ===" | sort -M - logfile | cat -n
          1 Apr 9 12:23:01 ・・・・・・・
          2 Apr 10 09:30:00 ===
          3 Apr 9 15:17:43 ・・・・・・・
          4 Apr 9 17:48:06 ・・・・・・・
          5 Apr 9 18:05:30 ・・・・・・・
          6 Apr 9 18:06:24 ・・・・・・・
          7 Apr 10 09:23:08 ・・・・・・・
          8 Apr 10 11:47:23 ・・・・・・・
          9 Apr 10 13:35:49 ・・・・・・・
        10 Apr 11 09:54:11 ・・・・・・・
        11 Apr 11 12:17:38 ・・・・・・・
</pre>

行番号以降をtailで出力は、
# tail +行番号 logfile
でできました。

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

No. 4571 # 68user 2006/04/12 (水) 11:30:06
>>4570 べた
Linux ではうまくいきましたが、Solaris 環境がないので確認できません。
どなたかご確認いただけませんか?

あと、このやり方は新年 00:00:00〜00:05:00 の間はうまく動作しませんので、
おすすめしません。念のため。

No. 4572 # べた 2006/04/12 (水) 17:05:17
>>4571 68user
ありがとうございます。

>あと、このやり方は新年 00:00:00〜00:05:00 の間はうまく動作しませんので、
>おすすめしません。念のため。
確認して頂いたのですか。
良い方法だと思ってはいたのですが、ダメですか。
他に、良い方法があるのでしたら伺いたいのですが。

No. 4573 # ふくし 2006/04/12 (水) 21:16:07
おひさしぶりです。自分が困ったときだけ出てきてすみません。

Windows のマシンと UNIX のマシンが存在する LAN で、
お互いにメールを送りあうというテストをやっています。
ここでは簡単のため、Windows マシン1台と UNIX マシン1台とします。

W に pmail というフリーウェアの SMTP / POP サーバーを入れた人がいて、
W と U の両方に Mozilla Thunderbird を入れて、
Thunderbird のアカウント設定で、
W の IP アドレスを SMTP / POP アドレス欄に指定することで、
W と U の間でメールのやり取りをすることができました。

しかし、テストの要件のひとつに、
U 側では MUA として /bin/mail も使えるようにする、というものがありました。
sendmail の設定を変えようとしようと思ったのですが、
それは大変だからやめたほうがいいと上司に言われ、
言われるままに U に Postfix を入れました。
ちなみに U の OS は HP-UX 11i ver.2 です。

Postfix のインストールはなんとなく終わりました。
/etc/postfix/main.cf に
myhostaname = U.unix.net
と変更を加えました。

DNS を立てるのはなかなか面倒だと上司に言われたので、言われるままに
U の /etc/hosts および
W の C:\Winnt\system32\drivers\etc\hosts に
172.16.10.2 U.unix.net
172.16.10.3 W.windows.net
のように書きました。

で、U 側で
  # mail root
  nantoka
  kantoka
  .
のように書くと、
  # mail
で自分宛に出したメールが確認できましたが、
  # mail dareka@W.windows.net
  nandakakandaka
  .
のようにすると、
  Diagnostic-Code: X-Postfix; Host or domain name not found. Name Service
    error for name=W.windows.net type=A: Host not found
のように怒られます。

(ここで、dareka は W の pmail に設定したメールアカウントです。)

U から
  # nslookup
  > W.windows.net

とすると 172.16.10.3 が、

  > 172.16.10.3

とすると W.windows.net が正しく帰るのですが、
host W.windows.net とすると not found 3(NXDOMAIN) と言われます。
このへんが原因でしょうか。

この状況で、U から W に /bin/mail でメールを出すことができるでしょうか。

また、W の Thunderbird から出したメールを
U の /bin/mail で受けるためには、qpopper のようなプログラムを
U に入れないといけないのでしょうか。

他に、いまの私の状況でもっと簡単にテストするアイディアがわかれば
ご教示ください。

いろいろ聞いてすみません。よろしくお願いします。

No. 4574 # 68user 2006/04/13 (木) 01:31:52
>>4572 べた
> 他に、良い方法があるのでしたら伺いたいのですが。
まず、syslog の出力には年がないという根本的欠陥があります。なので、
ログファイルを後からチェックするだけでは、完璧な判定はできません。
たとえば
    Apr 9 12:23:00 ... (2005年出力)
    Apr 9 12:23:01 ... (2006年出力)
とか
    Apr 9 12:23:01 ... (2005年出力)
    Apr 9 12:23:00 ... (2006年出力)
というケースもありうるわけです。また、現在 1月1日 0時2分だとして、
1分前に出力されたログ
    Jan 1 00:01:00 ...
と、5分前の時刻
    Dec 31 12:57:00 ...
をソートすると Jan 1 の方が先になり、意図した結果になりません。

それを踏まえた上で、
    - 1年前のログが残っていることはないとみなす
    - 年初 5分は目をつぶる
が許容できるかどうかはあなたが判断してください。なお、Jan や Feb の
ソートについては、sed で 01 や 02 に置換すれば何とでもできるでしょう。

理想は年が記録されるログに乗り換えることですが (=syslog を捨てる)、
それが許されるシチュエーションはあまりないと思いますので、
>>4567 まんたろう
は現実的な落としどころと考えます。


>>4573 ふくし
> Diagnostic-Code: X-Postfix; Host or domain name not found. Name Service
> error for name=W.windows.net type=A: Host not found
Postfix はよく知りませんが、
    http://www.kobitosan.net/postfix/ML/arc.4/msg00048.html
でしょうか。あと、うまくいくかどうかわかりませんが、
    # mail 'dareka@[172.16.10.3]'
と IP アドレスを直接指定するとか。@[..] は IP アドレス指定の場合の
メールアドレス記述方法だったような気がしますが、使ったことはありません。

# http://x68000.q-e-d.net/~68user/rfc/?key=821&target=title

> # nslookup
nslookup は、/etc/hosts を参照しません。

と思ったら、HP-UX の nslookup は参照するんですね。へぇ。
    http://docs.hp.com/ja/B2355-90851/nslookup.1.html

> また、W の Thunderbird から出したメールを
> U の /bin/mail で受けるためには、qpopper のようなプログラムを
> U に入れないといけないのでしょうか。
mail コマンドには POP クライアントの機能はないと思いますので、
W で POP サーバを動かすという前提であれば、
    - W にメールが届くと U に転送し、mail コマンドは /var/spool/mail などを
        直接参照する。
    - U で fetchmail などの POP クライアントを動かし、/var/spool/mail などに
        書き出す。
    - W・U 両方で POP サーバを動かし、W 宛のメールは W の POP サーバから
        取得し、U 宛のメールは U の POP サーバから取得する。
などの方法があります (他にもあると思いますが)。

言うまでもありませんが、要件自体が不適切である可能性もあります。

No. 4575 # ふくし 2006/04/13 (木) 14:35:00
>>4574 さん、ありがとうございます。
  # mail 'dareka@[172.16.10.3]'
を指定すると、

  Diagnostic-Code; X-Postfix; host 172.16.10.3[172.16.10.3] said: 550 5.1.1
  <dareka@[172.16.10.3]>... Not local user, server is not relaid.
  Recipient error (in reply to RCPT TO command)

と言われます。

試みに dareka というコンピューターユーザーを W に作ってみましたが
現象は変わりませんでした ;;;

教えていただいたリンクをたどって
http://www.kobitosan.net/postfix/jhtml/faq.html#intranet
に到達していくつかのことをやってみました。

・/etc/postfix/main.cf で
    disable_dns_lookups = yes と書けば
    /etc/hosts を見に行って W.windows.net の名前解決をしてくれる?
    =>ダメでした(dareka@W.windows.net で host not found になる)

・さらに /etc/postfix/main.cf で
    relayhost = W.windows.net と書く

    =>同じ状況です。
    (# mail dareka@W.windows.net で host not found、
        # mail 'dareka[@172.10.16.3]' で not a local user)

・/etc/postfix/main.cf で
    relayhost = W.windows.net と書く

    =>同じ状況です。
    (# mail dareka@W.windows.net で host not found、
        # mail 'dareka[@172.10.16.3]' で not a local user)
        これ、W.windows.net の smtp サーバーである pmail が
        POP before SMTP auth をやっているのが原因かも・・・。
        (フリー版の制約で切れない)

・relayhost の設定をやめ、
    transport_maps = dbm:/etc/postfix/transport と設定する。
    /etc/postfix/transport の中身を

    windows.net :[W.windows.net]
    .windows.net :[W.windows.net]

    にし、postmap /etc/postfix/transport をしてから、
    postfix reload する。
    (/etc/postfix/transport の前に hash、db、dbm などの何をつけるかは
        postmap が生成するデータベースによる。
        間違うと postfix reload で怒られる)

    =>同じ状況です。

・/etc/postfix/transport の中身を

    windows.net :[172.16.10.3]
    .windows.net :[172.16.10.3]

    とか

    windows.net smtp:[W.windows.net]
    .windows.net smtp:[W.windows.net]

    とか

    windows.net smtp:[172.16.10.3]
    .windows.net smtp:[172.16.10.3]

    とかにしてみる。

    =>同じ状況です。。。

ううーん、困った。
でも人に聞きながらやってると整理がついていいですね (^^)

No. 4577 # べた 2006/04/15 (土) 16:55:45
>>4547
ありがとうございます。
どうも、無理みたいですね。
1年。つまり、同じ年ということであるのならば、何とかできるの
でしょうが、年をまたいでしまうと無理ですね。

>Jan や Feb のソートについては、sed で 01 や 02 に置換すれば
>何とでもできるでしょう。
すみません。方法教えてください。


> >>4567 まんたろう
> は現実的な落としどころと考えます。
現実な落としどころとは。?

No. 4578 # EBA 2006/04/16 (日) 03:01:58
BCCでwindowsプログラムをコンパイルしようとすると
「外部シンボル '_main' が未解決」というのが出てしまいます。
「-WオプションをつけてコンパイルすればWindowsアプリができます」と本に
書いてあるのですが、どうすればいいのかわかりません

No. 4579 # べた 2006/04/18 (火) 23:58:32
以下の様なカンマ区切りのファイルがあります。
001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,,
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:456,001:002,100:200,A01:A02,0:1
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:,:,:,A01:A02,:

フィールドの11カラム以降からは、コロン区切りで複数設定されている場合がある
ので、複数行に分けたいのです。

以下の様に、
001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,,
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,001,100,A01,0
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,456,002,200,A02,1
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,,,A01,
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,,,,A02,
に編集し、ファイルに出力したいのですが、11カラム以降の処理が上手く行きません。
3通りほど、試してみたのですが、それぞれ駄目でした。
どこがいけないのかとどうすればよいのかを教えてください。

環境は、
Solaris8、Bシェル
です。

No.1 -----------------------------------------------------------------
#!/bin/sh
#

if [ $# -eq 0 ] ; then
        echo "$0 FileName"
        exit 1
fi

FILE=$1
OUT_FILE=kekka.log
rm ${OUT_FILE} > /dev/null 2>&1

nawk -v OUT=${OUT_FILE} '
function max_desc(lstadr,lst) {
      m=split(lstadr,lst,":") ;
      return m ;
}
{
      cnt=1 ;
      n=split($0,arglst,",") ;
      for(i=11;i<=n;i++) {
              m=max_desc(arglst[i],lst["${i}"]) ;
              if (m>cnt) { cnt=m ; }
      }

      no=1 ;
      for(i=1; i<=cnt; i++) {
            for(j=1; j<=n; j++) {
                  if (j==2) {
                        printf("%d,",no++) >> OUT ;
                  } else if (j==11 || j==12 || j==13 || j==14 || j==15 || j==16) {
                          printf("%s,",lst["${j}"][i]) >> OUT ;
                  } else {
                        printf("%s,",arglst[j]) >> OUT ;
                  }
            }
            printf("\n") >> OUT ;
      }
}' ${FILE}

exit 0

No.2 -----------------------------------------------------------------
#!/bin/sh
#

if [ $# -eq 0 ] ; then
        echo "$0 FileName"
        exit 1
fi

FILE=$1
OUT_FILE=kekka.log
rm ${OUT_FILE} > /dev/null 2>&1

nawk -v OUT=${OUT_FILE} '
function max_desc(lstadr,lst) {
        cnt=split(lstadr,lst,":") ;
        return cnt ;
}
{
        num=1 ;
        n=split($0,arglst,",") ;
        for(i=11;i<=n;i++) {
                ret=max_desc(arglst[i],lst[++x,y]) ;
                if (ret>num) { num=ret ; }
        }
        nf=x ;

        no=1 ;
        for(y=1; y<=num; y++) {
                for(j=1; j<=10; j++) {
                        if (j==2) {
                                printf("%d,",no++) >> OUT ;
                        } else {
                                printf("%s,",arglst[j]) >> OUT ;
                        }
                }
                for(x=1; x<=nf; x++) {
                        printf("%s,",lst[x,y]) >> OUT ;
                }
                printf("\n") >> OUT ;
        }
}' ${FILE}

exit 0

No.3 -----------------------------------------------------------------
#!/bin/sh
#

if [ $# -eq 0 ] ; then
        echo "$0 FileName"
        exit 1
fi

FILE=$1
OUT_FILE=kekka.log
rm ${OUT_FILE} > /dev/null 2>&1

nawk -v OUT=${OUT_FILE} '
function max_desc(lstadr,lst,x) {
        cnt=split(lstadr,arrlst,":") ;

        for(j=1;j<=cnt;j++) {
                lst[x,j]=arrlst[j] ;
        }
        return cnt ;
}
{
        num=1 ;
        n=split($0,arglst,",") ;
        for(i=11;i<=n;i++) {
                ret=max_desc(arglst[i],lst[++x,y],x) ;
                if (ret>num) { num=ret ; }
        }
        nf=x ;

        no=1 ;
        for(y=1; y<=num; y++) {
                for(j=1; j<=10; j++) {
                        if (j==2) {
                                printf("%d,",no++) >> OUT ;
                        } else {
                                printf("%s,",arglst[j]) >> OUT ;
                        }
                }
                for(x=1; x<=nf; x++) {
                        printf("%s,",lst[x,y]) >> OUT ;
                }
                printf("\n") >> OUT ;
        }
}' ${FILE}

exit 0

No. 4580 # zsh 2006/04/19 (水) 13:27:30
>>4579 べた
これが賢いやり方とも思えませんが、一応作ってみました。
------
$ cat a.awk
BEGIN {
        FS=",";
        chk_col=11;
} {
        if ($chk_col ~ /:/) {
                str_head=head_string();
                split_num=split($chk_col, str_foot, ":");
                for (i=1; i<=split_num; i++) {
                        for (j=chk_col+1; j<=NF; j++) {
                                split($j, col_buf, ":");
                                str_foot[i]=sprintf("%s,%s", str_foot[i], col_buf[i]);
                        }
                        print str_head "," str_foot[i];
                }
        } else {
                print;
        }
} function head_string() {
        str_buf=$1;
        for (k=2; k<chk_col; k++) {
                str_buf=sprintf("%s,%s", str_buf, $k);
        }
        return str_buf;
}
------
------
$ cat a
001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,,
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:456,001:002,100:200,A01:A02,0:1
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:,:,:,A01:A02,:
------
------
$ awk -f a.awk a
001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,,
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,001,100,A01,0
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,456,002,200,A02,1
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,,,A01,
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,,,,A02,
------

>>4571 68user
今更ですが、Solarisでは

$ echo "Apr 02 12:25:00 ===" | sort -M - logfile | \
    sort -n -k2,3 | cat -n | grep "===" | awk '{print $1}'

等としないとダメみたいです。

No. 4581 # べた 2006/04/19 (水) 16:30:24
>>4580 zsh
zshさん、ありがとうございます。
一応、動いたのですが、フィールド2の値を別の
文字置き換えたいのですが、どうすればよいのですか。

ファイル11以降に「:」で区切られたデータが存在した
場合、データの数分順番に番号を振りたいのです。
なければ、デフォルトで”1”としたいのです。

-----
$ cat a
001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,,
002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:456,001:002,100:200,A01:A02,0:1
003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:,:,:,A01:A02,:

-----
結果
001,1,a3,a4,a5,a6,a7,a8,a9,a10,,,,,,
002,1,a3,a4,a5,a6,a7,a8,a9,a10,111,123,001,100,A01,0
002,2,a3,a4,a5,a6,a7,a8,a9,a10,222,456,002,200,A02,1
003,1,a3,a4,a5,a6,a7,a8,a9,a10,111,123,,,A01,
003,2,a3,a4,a5,a6,a7,a8,a9,a10,222,,,,A02,

No. 4582 # zsh 2006/04/19 (水) 18:42:38
>>4581 べた
適当に直してみました。
------
BEGIN{
        FS=",";
        chk_col=11;
} {
        str_head_1=$1;
        if($chk_col ~ /:/) {
                str_head_2=head_string(chk_col);
                split_num=split($chk_col, str_foot, ":");
                for (i=1; i<=split_num; i++) {
                        for (j=chk_col+1; j<=NF; j++) {
                                split($j, col_buf, ":");
                                str_foot[i]=sprintf("%s,%s", str_foot[i], col_buf[i]);
                        }
                        print str_head_1 "," i "," str_head_2 "," str_foot[i];
                }
        } else {
                str_head_2=head_string(NF);
                print str_head_1 ",1," str_head_2;
        }
} function head_string(chk_point) {
        str_buf=$3;
        for (k=3; k<chk_point; k++) {
                str_buf=sprintf("%s,%s", str_buf, $k);
        }
        return str_buf;
}
------

No. 4583 # べた 2006/04/19 (水) 21:00:53
>>4582 zsh

zshさん、ありがとうございます。
>str_head_2=head_string(NF+1);
>for (k=4; k<chk_point; k++) {
の行を修正したら期待する結果が得られました。

ただ、ファイルのフォーマットに規則性がないことがわかり、
データによっては、正しく出力されないものがでてきました。
フィールド11に、「:」が存在しないデータがあるのです。

a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,SSS,A01,,:
a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,123:456:789:100:100,A01:A02:A03:3A:NTT0001,

「 if($chk_col ~ /:/) {」
の判定を増やし、フィールド番号を取得できればできますか。

No. 4584 # べた 2006/04/19 (水) 22:45:43
>>4582 zsh
>>4583 べた

一応、動きます。
以下のようになるのでしょうか。

BEGIN{
        FS=",";
        chk_col=11;
}
{
        str_head_1=$1;
        split_num=chk_comma_max(NF);
        if(split_num!=0) {
                str_head_2=head_string(chk_col);
                split($chk_col, str_foot, ":");
                for (i=1; i<=split_num; i++) {
                        for (j=chk_col+1; j<=NF; j++) {
                                split($j, col_buf, ":");
                                str_foot[i]=sprintf("%s,%s", str_foot[i], col_buf[i]);
                        }
                        print str_head_1 "," i "," str_head_2 "," str_foot[i];
                }
        } else {
                str_head_2=head_string(NF+1);
                print str_head_1 ",1," str_head_2;
        }
}
function chk_comma_max(chk_point) {
        comma_num=0;
        for (k=chk_col; k<=chk_point; k++) {
                if($k ~ /:/) {
                        comma_num=split($k, s, ":");
                        break;
                }
        }
        return comma_num;
}
function head_string(chk_point) {
        str_buf=$3;
        for (k=4; k<chk_point; k++) {
                str_buf=sprintf("%s,%s", str_buf, $k);
        }
        return str_buf;
}

No. 4585 # まんたろう 2006/04/20 (木) 00:36:53
>>4579 べた

No.1
    m=max_desc(arglst[i],lst["${i}"]) ;
    添え字を利用した配列でいいのかな。
    あまり利用したことはないのでなんとも入れないが、こういうところで
    使えないのではないでしょうか。
    添え字にマッチする文字が出てきたときに、何かするのではなかった
    かと思います。

No.2、No.3
    多次元配列の使い方がおかしいのではないかと思います。
    データをセットする側が多次元配列や、アドレス渡しの戻りができて
    いない。たぶん、縦軸(列)の添え字の値が正しくない。
    縦軸(列)の値ってちゃんととれてますか。

No. 4586 # まんたろう 2006/04/20 (木) 00:44:59
>>4579 べた

多次元配列の使い方が正しいか問題はありますが、書き込みがあった
シェルを使用して、多次元配列で動くのを作ってみました。
一応、動きますが。

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

if [ $# -eq 0 ]; then
        echo "$0 FileName"
        exit 1
fi

FILE=$1
OUT_FILE=kekka.log
rm ${OUT_FILE} > /dev/null 2>&1

nawk -v OUT=${OUT_FILE} '
function max_desc(lstadr,lst,x,y) {
        cnt=split(lstadr,arrlst,":");

        for(y=1;y<=cnt;y++) {
                lst[x,y]=arrlst[y];
        }
        return cnt;
}
{
        num=1;
        row=0;
        col=0;

        n=split($0,arglst,",");
        for(i=11;i<=n;i++) {
                ret=max_desc(arglst[i],lst,++row,col);
                if (ret>num) { num=ret; }
        }

        seqno=1;
        for(y=1; y<=num; y++) {
                for(j=1; j<=10; j++) {
                        if (j==2) {
                                printf("%d,",seqno++) >> OUT ;
                        } else {
                                printf("%s,",arglst[j]) >> OUT;
                        }
                }
                for(x=1; x<=row; x++) {
                        printf("%s",lst[x,y]) >> OUT;
                        if (x!=row) { printf("%s",",") >> OUT; }
                }
                printf("\n") >> OUT;
        }

        for(x=1; x<=row; x++) {
                for(y=1; y<=num; y++) {
                        delete lst[x,y];
                }
        }
}' ${FILE}

exit 0

-----------------------

No. 4587 # S-MSK☆ 2006/04/20 (木) 20:59:08
あるCシェルの本でファイル検査演算子「-f」の意味は
「ファイルは普通のファイル」とあるのですが、
普通の定義が分かりません。
また、逆に普通ではないファイルとはどういったもの
になるのでしょうか??
ご回答頂ければ、幸いです。
宜しくお願い致します。

No. 4588 # 68user 2006/04/21 (金) 11:02:50
>>4575 ふくし
もう解決されているとは思いますが一応。

Postfix に hosts を参照させるのが一番の早道かつ王道だと思いますが
わたしは Postfix を知らないので、識者のいるメーリングリストなどで
質問するのがよいかと思います。

>>4587 S-MSK☆
> 「ファイルは普通のファイル」とあるのですが、
> 普通の定義が分かりません。
csh 的には、stat(2) した結果の st_mode (構造体 stat のメンバ) に対して、
通常ファイル判定マクロ S_ISREG が真を返したら、「普通」です。

では S_ISREG がどういうケースで真を返すかというと、vfs の vtype の
値が VREG であるときです (vtype はファイル作成時に決定され、ファイル
システムに記録される)。

では vfs の vtype の値が VREG であるのはどういうときかというと、
ファイルシステム依存です。ただし一般的な UFS で言うと、vtype は
    1. シンボリックリンク
    2. ソケット
    3. FIFO (名前付きパイプ)
    4. デバイスファイル (キャラクタデバイス・ブロックデバイス)

    5. 通常ファイル
くらいです。よって、大抵の場合 1〜4 に当てはまらないなら通常ファイル
といえます。

実際は、Solaris Door とか、VxFS 圧縮ファイルとか、HP-UX のネットワーク特殊
ファイルなどわけのわからんのがありますので、プログラムとしては
    「1〜4 に当てはまらない場合は通常ファイル」
などという仮定はせず、素直に -f を使いましょう。

No. 4590 # 星野 2006/04/23 (日) 18:05:21
UNIX環境のAとBというプロセス間でsocket通信を行っています。(AF_UNIX指定)
一度、ソケットをcloseして、Bが再接続(connect)するとエラーになる場合があります。
errnoが何で返却されているのかわからないのですが。
たとえばEADDRINUSE の場合の対応策を教えて下さい。

No. 4591 # いち 2006/04/24 (月) 21:51:46
番号を昇順に並び替えて、抜けている番号を表示したく、以下の様なシェル
でやってみたのですが、上手く行きません。
どうすればいいでしょうか。
Solaris8 Bシェルです。

sort test.txt | nawk -v key="" '{if(FNR!=0 && $1!=key) print $1 ; key=$1}'
sort test.txt | nawk -v key="" -F"," '{if(FNR!=0 && $1-1!=key) printf("%0.4d\n",key+1); key=$1}'
sort test.txt | nawk -v key="" -F"," '{if(FNR!=0 && $1!=key) printf("%0.4d\n",key+1); key=$1}'

# cat test.txt
0006
0009
0004
0010
0003

結果
0001
0002
0005
0007
0008
と表示したい。

No. 4592 # いち 2006/04/25 (火) 16:52:15
>>4591 いち

nawk -v key=1 '{ for(;;){if($1!=key) {print key; key++;} else{key=$1+1; break;}} }' a.txt
でできました。

No. 4593 # S-MSK☆ 2006/05/01 (月) 14:44:56
>>No. 4588 68user
No.4587のS-MSK☆です。
ご回答有難う御座いました。

No. 4594 # shimizu [E-mail] 2006/05/04 (木) 11:04:32
FTP クライアントを作ってみよう (1) FTP プロトコルの概略

No. 4595 # shimizu [E-mail] 2006/05/04 (木) 11:05:02
>管理人様

FTP クライアントを作ってみよう (1) FTP プロトコルの概略

が大変勉強になりました。ありがとうございました。

No. 4596 # くるみんパパ 2006/05/10 (水) 11:59:59
vmstatをファイルへ出力する時に、1行毎に日時を編集したいのですがうまく出来ません。AIXですと下記のスクリプトでうまくいっているのですがsoralisではどのようにしたらよいでしょうか。

vmstat $1 $2 | awk '!/kthr|---|avm/ {printf("%s | ", $0);system("date")}' >> $LOGDIR$DATE

No. 4597 # zsh 2006/05/10 (水) 13:58:02
>>4596 くるみんパパ
system関数が使いたいのであればnawkか/usr/xpg4/bin/awkを使用してください。

No. 4598 # くるみんパパ 2006/05/10 (水) 14:52:42
>>4597zshさん
nawkで解決しました。助かりました。ありがとうございました。

No. 4599 # 勉強中 2006/05/11 (木) 21:58:28
はじめまして。TCP/IPについて素朴な質問があります。
TCP/IPでは、ACKに対するSYNのタイムアウトがあり、
通常のLINUXであれば180秒ほどだと思います。
一方、telnetで存在しないIPを指定すると上記タイムアウトまでかからず、
以下のメッセージが出て接続できません。

Trying 192.168.60.113...
telnet: Unable to connect to remote host: No route to host

この場合、なぜ上記タイムアウトまで待たないのでしょうか。
telnetコマンドにて
明示的にTCPリトライ回数を指定していると考えていいのでしょうか。
また、このメッセージの意味するところはどういうところなのでしょう?
誰かご存知の方がいたらご教授願います。

No. 4600 # 68user 2006/05/11 (木) 22:19:01
>>4599 勉強中
直接的な回答ではありませんが、
    http://X68000.q-e-d.net/~68user/net/tcp-connect-1.html
をご一読ください。なお、EHOSTUNREACH が No route to host です。

No. 4601 # 勉強中 2006/05/12 (金) 00:22:27
>68userさん
早速のコメントありがとうございます。
要するにアプリケーションの実装によるということですね。
(つまり、ICMP 終点到達不可メッセージを受信した際に、
    ただちにコネクション確立を中止するかしないかというポリシーによるということ)
ちなみにftpでもtelnetと同様でした。

No. 4602 # 68user 2006/05/12 (金) 11:39:16
>>4601 勉強中
> 要するにアプリケーションの実装によるということですね。
いいえ、OS の TCP スタックの実装による、だと思います。

アプリ側で対応する、つまり TCP で接続しつつ、ICMP のエラーを解析という
ことが可能かどうかはやったことがないのでわかりませんが、少なくとも ftp や
telnet という基本的なアプリがそういう小細工をしている可能性は低いと思います。

No. 4603 # 68user 2006/05/13 (土) 19:47:43
>>4602 68user
> アプリ側で対応する、つまり TCP で接続しつつ、ICMP のエラーを解析という
> ことが可能かどうかはやったことがないのでわかりませんが、少なくとも ftp や
> telnet という基本的なアプリがそういう小細工をしている可能性は低いと思います。
ICMP のエラーを解析する必要はなかったですね。connect(2) が -1 を返したとき
EHOSTUNREACH なら再接続、などとすればアプリ側で対応できます。

とはいえ、やはり ftp や telnet がそういうことをする必然性はないと思います。

No. 4604 # COM 2006/05/16 (火) 18:01:08
はじめまして。ネットワークプログラムについて質問させてください。
リミテッドブロードキャスト(255.255.255.255へ)を行いたいのですが、sockaddr_in
のアドレス部分に上記を入れても、何故かディレクテッドブロードキャスト(私の環境
では 192.168.1.255 )になってしまいます。正しくリミテッドブロードキャストする
方法はないでしょうか。setsockopt でブロードキャストのフラグを立てる、などは
行っています。環境は FreeBSD & gcc です。
以下、重要部分の抜粋です(エラー処理などは省いています)。

struct sockaddr_in addr;
int broadcast = 1;
char buf[] = "test";
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("255.255.255.255");
addr.sin_port = htons(2000);
sock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
setsockopt( sock, SOL_SOCKET, SO_BROADCAST, (char*)&broadcast, sizeof(broadcast) );
sendto( sock, buf, sizeof(buf), 0, (struct sockaddr*)&addr, sizeof(struct sockaddr) );

ごく普通のコードだと思うのですが、パケットをモニターすると、送り先アドレスが
ディレクテッドブロードキャストになってしまっています。アドバイスだけでもいいので
助言いただけるとうれしいです。

No. 4605 # yuukun 2006/05/25 (木) 15:21:00
はじめまして。sendmailコマンドについての質問です。
[FROM:]や[TO:]フィールドに、アドレスとはべつに別名を指定し実行したところ、
エラーが出力されました。
-------------<実行コマンド>----------------------
sendmail -t
MIME-Version: 1.0
From: hoge株式会社<hoge@hoge.co.jp>
To: huge株式会社御中<huge@huge.co.jp>
Subject: 2006年05月25日の[データ]
Content-Type: text/plain; charset=iso-2022-jp

2006年05月25日 14時53分現在の
データをお送りいたします。
.
------------------------------------------------
TOやFROMフィールドでアドレスとはべつに別名を付けることは可能なのでしょうか?
よろしくお願いします。
OS:Solaris 8

No. 4606 # kojp-jp 2006/05/29 (月) 13:17:45
以下のページの「#inlcude <stdlib.h>」、スペルミスしている様です。

    http://x68000.q-e-d.net/~68user/unix/pickup?getenv

正しくは「#include <stdlib.h>」かと…。

ご確認ください。

No. 4607 # analog 2006/05/29 (月) 13:46:40
初めまして、soralisのC言語について質問させてください
10年以上前にsolalis v4.1で開発してもらったのが
あるのですが、コンピュータ、プリンタが古くなり
最新のものに変えたいとメーカに相談した所
C言語でXVEIWが使われているので最初から作り直しと
なりますといわれました
1.ほんとうに最初からの作りなおしになるのか?
        ソフトはあまり変えず
        現在市販のPC、プリンタを使いたいだけなんですが
        OSは問わない
    
以上なんですが
業者のいいなりになるしかないのか
(修正費用がかなりかかるので)
教えてもらえないでしょうか

No. 4608 # 68user 2006/06/01 (木) 16:48:43
SPAM がウザすぎなので、
    BBQ http://bbq.uso800.net/
を組み込んでみました。BBQ に引っかかると Internal Server Error になります。
書けない場合は書けねぇぞ! と書き込んでください (その際も Internal Server
Error になりますが)。しばらくはログを観察するようにしますので、可能であれば
対処します。

さてうまくいきますかねぇ。

No. 4609 # 68user 2006/06/01 (木) 17:24:53
>>4604 COM
わかりませんが、Linux で動かしてパケットを見ると、255.255.255.255 宛に
飛んでいました。

>>4605 yuukun
> エラーが出力されました。
エラー内容を書きましょう。

>>4606 kojp-jp
getenv と putenv 両方間違っていたので修正いたしました。
ありがとうございました。

>>4607 analog
XView ならば、わたしも同様に言います。理由は以下のとおり。
    - 現在は、XView はほとんど使われていない
    - よってほとんどの開発者には XView の知識がない
    - 勉強しようにも、解説本が売られていない (と思われる)
    - 勉強しても、その知識を他で生かせる可能性が低い

> ほんとうに最初からの作りなおしになるのか?
基本的には OpenWindows 環境がある Solaris10 などでは動くはずですが、
とにかく XView も OpenWindows も時代遅れな環境ですので、修正が必要な
部分はそれなりにあると思われます。

よって XView の技術者がいる会社であれば、修正量・移行リスクを見積もる
ことができ、修正作業も行えるでしょう。

http://business.rakuten.co.jp/ などでそういう会社をがんばって探すか、
作り直しを受け入れるか、です。


ちなみに、わたしが今いる環境には技術者が数十名いますが、おそらく
XView がわかる人はいないと思われます。昔いた会社は UNIX を作って
いたくらいなので探せばいるでしょう。ただし、いたとしても 40〜50歳の
おじさんだと思われます。すでに管理職だったり、工数が見合わなかったりで、
受けたがらないでしょうね。

No. 4618 # COM 2006/06/02 (金) 11:24:28
>>4609 68user
ご返答ありがとうございます。Linux ではそれでうまくいくのですね。
どうしてもダメだったので、rawIP を使い、MAC アドレスを FF:FF:FF:FF:FF:FF に
セットすることで解決しました。ありがとうございました。

No. 4619 # 68user 2006/06/02 (金) 16:31:55
>>4608 68user
BBQ 導入後 24時間で、
    - 成功 20件 (SPAM を SPAM と判定できたケース)
    - 失敗 12件 (SPAM をそのまま通してしまったケース)
でした。それなりにがんばってくれたものの、毎日12件削除するのは面倒。
URLBL のチェックも追加しようかな。

No. 4652 # はじめ 2006/06/05 (月) 18:30:05
lsコマンドを使用してファイル数を取り出そうとしています。
ファイルが存在しない場合、「No such file or directory」
を表示しないよう、位置パラメータでファイル数を求めています。
ファイルが存在する場合は、問題ないのですが、ファイルが存在
しない場合、必ず”1”となってしまいます。
どうしてなのでしょうか。また、上手くするにはどうしたらよい
のでしょうか。

環境は、Solaris8、Bシェル です。

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

if [ $# -ne 1 ] ; then
        exit 1
fi

ymd=$1

set -- `ls *_$ymd*.csv 2>/dev/null`
echo $#

No. 4659 # zsh 2006/06/06 (火) 10:35:36
SPAMひどいですね・・・

>>4652 はじめ
位置パラメタの数は 1 となっているのは
スクリプトに引数を与えている為です。
引数を変数に格納後、shift させれば OK です。

No. 4660 # はじめ 2006/06/06 (火) 21:24:43
>>4659 zsh

>引数を変数に格納後、shift させれば OK です。
shift するということには気がつきませんでした。
ありがとうございます。

再設定すれば良いのかと思い
set ''
set --
でやってみたのですが。

No. 4662 # はじめ 2006/06/07 (水) 02:09:26
>位置パラメタの数は 1 となっているのは
>スクリプトに引数を与えている為です。
>引数を変数に格納後、shift させれば OK です。

質問では、引数を1つにしていましたが、
引数が複数あった場合は、引数の数分、shiftしないと
いけないのでしょうか。
一発で、shiftすること可能なのでしょうか。

No. 4664 # nan 2006/06/07 (水) 07:12:14
はじめまして。

[全文検索機能]
http://x68000.q-e-d.net/~68user/webcgi/search-1.html

↑のページの eval 法、大変参考になりました。
条件固定でループするときに、余計なものを除けるのがいいですね。
eval ってなんか最終手段っぽくて敬遠してましたが、これからは視野にいれて組んでみたいと思います。
どうもありがとうございました。

No. 4665 # zsh 2006/06/07 (水) 11:58:02
>>4662 はじめ
> 一発で、shiftすること可能なのでしょうか。

shift $#
としてください。

No. 4666 # はじめ 2006/06/07 (水) 12:40:07
>>4665 zsh

>shift $#
ありがとうございます。

No. 4667 # ビンゴ中西 2006/07/08 (土) 19:50:06
はじめまして。大変わかりやすいページで非常にためになっております。

さて、間違いがあったら掲示板で指摘してくださいとありましたので、
書かせていただきます。 すでにお気づきなら申し訳ありません。

http-client-2.c

のコードで113行目の以下の部分ですが、

113: fprintf(fp, "Host: %s:%d\r\n", host, port);

最後の引数は port ではなく server.sin_port ではないでしょうか?
82〜91行目でポート番号を指定していなかったときの処理がありますが、
ここで server.sin_port を用いられているため
最後まで port は 0 のままでした。

No. 4669 # わんこ 2006/07/14 (金) 17:58:08
こんにちわ。
Solaris7 のftp についてどなたかご存知でしたらご教授ください。

Solaris8 のような、あるユーザにはftpを出来なくするような機能「/etc/ftpd/ftpusers」があるのでしょうか。

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

No. 4671 # ようこ 2006/07/18 (火) 22:56:06
Pthreadにて、スレッドをあらかじめ生成しておいて、
何らかのトリガーで後から起動するって、
どのようにPGすれば良いのでしょうか?
よろしくお願い致します。

No. 4672 # hoge 2006/07/19 (水) 17:21:38
>4669
man が入ってない環境なんでしょうか?
docs.sun.com に行くとドキュメント群が公開されてますよ。

http://docs.sun.com/app/docs/doc/805-3173/6j31cpluf?q=ftpusers&a=view
を見る限り、solaris 7 付属の ftpd は /etc 直下の ftpusers を
参照するみたいですね。もし、無かったら作ってみましょう。

No. 4673 # hogehoge 2006/07/20 (木) 11:35:21
適用済みパッチを調べるものとして
・showrev -p
・patchadd -p
の2つがあると思うのですが
この2つの違い等を知っている方がいらっしゃいましたら
教えていただきたいです。(UNIX の部屋には無かったので。)

patchadd -p は root 権限のみ実行できたという違いだけでしょうか?
(新しいパッチでは root でなくとも実行できる。)

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

No. 4676 # わんこ 2006/07/24 (月) 18:01:25
>4672

ご返信が遅くなりまして申し訳ございませんでした。

ドキュメント参考に、ディレクトリ(ftpd)作成、ファイル作成して、
ftp禁止ユーザを制御できるようになりました。

しっかりドキュメントを参照しなければいけませんでした。
これからは、まずドキュメント参照を心掛けたいと思います。

hogeさん、大切なお時間ありがとうございました。

No. 4677 # まさしくん 2006/08/01 (火) 14:10:48
こんにちは。
vmstatを起動すると、「vmstat: 0551-129 knlist が失敗しました。」という
エラーで情報が取得出来ません。何が考えられますでしょうか。
ちなみにOSの再起動を試みましたが、解決されませんでした。

No. 4678 # バンガード 2006/08/02 (水) 09:04:28
>>4677 まさしくん
はじめまして。
御質問のキーワードを検索すると、以下のページがヒットしました。
参考になりませんでしょうか?
http://unix.derkeiler.com/Mailing-Lists/AIX-L/2003-12/0105.html

No. 4679 # バンガード [E-mail] 2006/08/02 (水) 09:19:42
>>4677 まさしくん
私が使用しているAIXの場合の話ですが、このエラーは「ある種のカーネル・メモリの問題」で発生する様です。
/usr/lib/boot/unix_mp ファイルのサイズがゼロとなっているはずですので、その場合には他のサーバー(同じOSの同じバージョンが良いですね)から同じファイルをコピーすることで復旧出来る様です。

残念ながら、何故このファイルのサイズがゼロになるかまでは分かりませんが、上記の通りファイルをコピーし直すか、/unix のリンクが失われている場合はリンクを張り直すと言うことで解消する様です。

No. 4680 # yu-ya! 2006/08/02 (水) 09:41:06
はじめまして。
とても初歩的な質問で恐縮ですが、
RedHat Enterprise 4で、/var/log/messages 内に格納される情報が
    日付 時間 ホスト名 プログラム名 メッセージ
の順番で格納されているのはわかるのですが、
それぞれの最大文字数についてどなたかご教授願えませんか?

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

No. 4681 # goro 2006/08/04 (金) 15:58:07
はじめまして。
Solarisのsyslog.confの設定で
特定のログレベルのみを任意の出力ファイルに出力させたいのですが、
いろいろ調べたのですが、途方に暮れています。
Linuxのsyslog.confの設定では、
mail.=debug /ログ出力先
(↑mailのdebugのみ出力。debug以上のレベルも出力しない)
という設定方法があるのですが、Solarisで同じような書き方しても
設定ファイルを読み込む時に、
「'=debug'なプライオリティはありません」と怒られてしまいます。
方法がありましたら、どなたかご教授願います。

No. 4683 # まさしくん 2006/08/07 (月) 17:01:38
>バンガードさん
レスが遅くなり申し訳ございません。

/unixのリンクが無かったので、リンクをはり直したら正常に動くようになりました。

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

No. 4684 # さとしくん 2006/08/15 (火) 17:06:09
psコマンドを使って、システムのcpuなどを5秒毎にログに書き込みたいのですが、どうやればいいのか検討がつきません。どなたかcシェルを利用してできる方法を教えてください。よろしくお願いします。

No. 4686 # さとしくん@計算ができませ〜ん 2006/08/15 (火) 17:21:46
STARTTIMEM=`date +%M`
こんにちわ!
STARTTIMEM=`date +%M`
STARTTIMES=`date +%S`
STARTTIME=`expr $STARTTIMEM \* 60 + $STARTTIMES`
echo $STARTTIME

以下のようなメッセージが出てしまう。
expr: 文字列に対して演算を行おうとしました。

No. 4687 # DM 2006/08/17 (木) 02:40:25
最近Cygwinをはじめた初心者です。
X-Windowなるものの存在を知り、Cでウインドウを出したり直線書いたりしてプログラムを勉強していたのですが、コンパイルして実行しようとすると

.... _cygtls::handle_exceptions:Error while dumping state (prbably corrupted stack)
Segmentation falu (core dumped)

というエラーがでます。

以前までは普通にコンパイル〜実行とできていたのですが・・・

ちなみに
startxwin.sh
の後に実行してみるとプログラムは動きました。

startxwin.sh などうたなくても実行する方法はありますか?またそのような設定はどうすればいいのでしょうか?

No. 4688 # バンガード 2006/08/17 (木) 13:24:39
>> 4684
この掲示板の[使い方]を見ると以下の様に記述されています。
---------------------------------------
UNIX・ネットワーク一般の質問は受け付けていません
当ページのコンテンツに対するご意見・ご指摘のみ受け付けています。
---------------------------------------
今回の様な質問は受け付けていないはずですよ。

ひとまず、私の使用している環境(AIX 5.1)で検証した結果を提示します。
以下の通り、全く問題なく実行出来ています。
-------------------
[vanguard]> cat test.sh
#!/usr/bin/sh
STARTTIMEM=`date +%M`
STARTTIMES=`date +%S`
STARTTIME=`expr $STARTTIMEM \* 60 + $STARTTIMES`
echo $STARTTIME
[vanguard]> date
Thu Aug 17 13:07:36 JST 2006
[vanguard]> test.sh
459
[vanguard]>
-------------------

管理者様
4678,4679も含めて問題がある様でしたら、削除いただいて結構です。
質問だけでなく、回答もこの掲示板の目的に沿っていないと思いますので、私の発言は確認なしに削除いただいて結構です。

No. 4689 # バンガード 2006/08/17 (木) 13:27:54
>>4684 さとしくん
No.4688 は No.4686 に対する回答でした。
コメントの仕方を誤っていました。

4684で質問されている5秒毎にpsコマンドを実行し、ログに書き出すのは以下のシェルでいかがでしょうか?
--------------------
#!/usr/bin/sh
ps > /tmp/ps.log
while [ 1 ]
do
                ps >> /tmp/ps.log
                sleep 5
done

No. 4690 # よしだ 2006/08/18 (金) 00:07:16
シェル素人のよしだです。
シェルから、.sqlに値の渡し方を教えてください。
シェルにてテーブル名を入力させて、.sqlにそのテーブル名を渡したいのですが
どのようにしたら良いでしょうか?

○test.sh
#!/bin/sh
echo "テーブル名を入力してください:"
read table_name
sqlplus -S ユーザ名/パスワード@サービス名 @test.sql >tmp.txt

○test.sql
set pagesize 100
select 品目 from テーブル名;
exit;

No. 4691 # あゆ 2006/08/18 (金) 16:01:48
UNIXの全くの初心者です。失礼を承知で質問します。
スクリプトをmoreで表示すると、文字化けするものがあるのですが、どのようにすれば、見ることができるでしょうか。

ターミナルソフトの設定ではEUC表示設定にはなっています。
システムが作成したスクリプトというものは、ユーザからは見ることができないのでしょうか。
申し訳ありません。お手数ですが、文字化けしない表示方法を教えてください。
宜しくお願いします。

No. 4692 # バンガード [E-mail] 2006/08/22 (火) 09:42:43
>>4691 あゆ
どの様な状況になっているのか具体的な状況が見えません。
特定のスクリプトが全て文字化けするのでしょうか?
それとも、そのスクリプトの一部が文字化けするのでしょうか?
「file スクリプト名」とするとどうなりますか?
ターミナルソフトの設定を「S-JIS」や「JIS」にするとどうなりますか?

No. 4693 # あみ 2006/08/22 (火) 19:04:19
はじめまして。あみと申します。
Solarisに関する仕様を調査していて、この掲示板に出くわしました。

No.3716で以下のような記述がありますが、Solaris9以降の仕様をご存知の方いらっしゃいませんか。

>Solaris8 では sh・ksh・csh いずれも 255 文字の制限があるようで、極めて
>不愉快ですね。

Solaris9では入力コンソールでは制限がないように思われるのですが、
入力後にバッファに読み込ませて表示させると途中からしか表示されないという現象がおこっています。

具体的には
1)/export/home/hoge/aaaaa・・・bbbbbbbb←のような300〜400くらいのパスを入力する
2)この入力から
        java.io.Reader reader = new java.io.InputStreamReader(java.lang.System.in);
        java.io.BufferedReader buf = new java.io.BufferedReader(reader);
        String input = buf.readLine();
    のように標準出力へ表示する。
3)全てが表示されずに途中の
    aaaaaaa・・・bbbbb
    のような表示のみが値として出力されてしまう。
    ⇒結果エラーになる

どなたか、ご存知の方がいらっしゃいましたら教えてください。よろしくお願いします。

No. 4694 # 68user 2006/08/23 (水) 09:41:34
>>4667 ビンゴ中西
ご指摘ありがとうございます。とりあえずバグとして登録しました。
    http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=27

時間が取れたときに修正いたします。ありがとうございます。

No. 4695 # さとし 2006/08/23 (水) 15:48:57
バンガードさんいろいろ説明ありがとうございました。できました!!!

No. 4696 # yuki 2006/08/24 (木) 11:55:01
初めまして。皆様よろしくお願い致します。
現在、solaris8のサーバー管理をやっているのですが、
cpu負荷実績を調べてる上で、
cputstというプロセスが異常に占有しています。cputstってどういうものでしょうか。。?ご教授ください。

No. 4697 # あゆ 2006/08/24 (木) 15:36:07
>>4692 バンガード
バンガードさん
ご回答頂き、ありがとうございます。

スクリプトは、社内の人が作成したものは見れますが、元々入っているスクリプトは文字化けしてしまいました。


lsコマンドでファイルを見てみると、このように表示されました。
-r-xr-xr-x 1 root bin 39632 9月 8日 2003年

「file スクリプト名」の結果は、以下のようになりました。
ELF 32-ビット MSB 実行可能 SPARC バージョン 1[動的にリンクされています][取り
除かれています]

ターミナルソフトは「S-JIS」や「JIS」に設定し直しても文字化けしてしまいました。

お手数おかけして、申し訳ありません。
宜しくお願い致します。

No. 4699 # まさしくん 2006/08/26 (土) 11:03:23
>No. 4697 あゆさん
それはバイナリのモジュールなので、文字化けして当然です。
ちなみにそういったものをmoreやcatで見ると、文字化けした中で制御コードとして
認識される文字が出力され、下手をするとOSが飛ぶ危険がありますので、
fileコマンドで確認してからの方が良いと思いますよ。

No. 4700 # バンガード 2006/08/28 (月) 09:27:38
>>4697 あゆ
4699 で「まさしくん」が回答されている通りです。
今回の対象ファイルは、バイナリのファイルですので cat や more では見られません。
私もたまに経験しますが、この様なファイルを cat や more で見ると最低でも画面が文字化けしたりしますし、最悪の場合「まさしくん」が言っている通り OS がダウンする可能性もあります。(私はまだそこまで行った経験はありませんが・・・)

No. 4702 # baba 2006/09/12 (火) 17:27:56
>>3716 68user
ksh でも set -o emacs で長いコマンドを受け付けたと思います。
>>4693 あみ
ldterm の制限なのでコーディングでどうにかなる問題ではありません。
tcsh/bash のように行を読み込む JNI の関数を作成して、
Java 側から呼び出すしかないと思います。

No. 4703 # Perl Queen 2006/09/21 (木) 00:29:06
こんばんは。初めて投稿します。

socketで、HTTP の取得を行うプログラムを作成しています。
取得はできたのですが、どうしても取得したデータに、
ゴミデータがまざります。

e05,5d,5, など、ランダムな数値です。
HTMLのタグ括りの中にも、外にも存在しますが、
タグ内には無いようでした。

他の諸センパイ方の情報も参考にさせていただいておりますが、
どうも、有力な手がかりがありませんでした。
何卒、ご教示いただけますでしょうか。
以下、プログラムの抜粋です。
--
$ip = inet_aton($host) || die "NG.\n";
$sockaddr = pack_sockaddr_in($port, $ip);
$proto = getprotobyname('tcp');
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die "NG.\n";
connect(SOCKET, $sockaddr) || die "NG.\n";
autoflush SOCKET (1);
if ($http eq '1.1') {
    print SOCKET "GET $url HTTP/1.1\n";
    print SOCKET "Host: $host\n";
    print SOCKET "Connection: close\n";
} else {
    print SOCKET "GET $url HTTP/1.0\n";
}
print SOCKET "Accept: text/html; */*\n";
print SOCKET "\n";
my($op_all) = '';
while (chomp($buf=<SOCKET>)) {
    $op_all .= $buf;
}
close(SOCKET);

No. 4704 # 68user 2006/09/21 (木) 02:34:38
>>4703 Perl Queen
> e05,5d,5, など、ランダムな数値です。
chunked エンコーディングというものです。簡単に言うと、その後に続く
バイト数を 16進表記したものです。もし邪魔なら、HTTP/1.1 ではなく
HTTP/1.0 のリクエストを投げればよいです。

No. 4705 # Perl Queen 2006/09/21 (木) 07:19:22
>>4704 68user

68user 様

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

HTTP/1.0 でリクエストすると、あるサイトの例ですが、
「サイトがありませんこのURLにはサイトがありません。または現在準備中です。準備中の場合は後に再度お試しください。」
などと出てしまい、サイトにたどり着くことができませんでした。

都合上、http://www.yahoo.co.jp/ のように、デフォルトURL
の指定にしているせいかもしれませんが、アクセス先のURLを
事前に知ることもできません。
あるいは、HTTP/1.0 で、URL指定の際に、何か回避ができたりしますでしょうか。

先に記載抜けていましたが、ポート番号は
$port = getservbyname('http', 'tcp');
であらかじめデフォルトを取るようにして、URL内にポートの指定があれば、
それを優先するようにしています。

No. 4706 # 68user 2006/09/22 (金) 11:13:20
>>4705 Perl Queen
HTTP/1.0 で、Host ヘッダを送信してみてください。
    http://x68000.q-e-d.net/~68user/net/http-4.html#1

No. 4707 # ゆう 2006/09/23 (土) 13:23:31
solaris10をインストールしたのですがインターネットに接続できません。
Mozilla1.7に何か設定が必要なのでしょうか?

初めまして、ゆうです。
先日初めてsolaris10をインストールしました。

デフォルトルーター:192.168.1.1
solarisPC:192.168.1.12
WindowsPC:192.168.1.11

上記のようにネットワークの設定を行っており、
WindowsPCからはインターネット接続が可能です。
また、WindowsPCとsolarisPCは互いにpingが通っています。

No. 4708 # 68user 2006/09/24 (日) 01:42:14
>>4707 ゆう
ひととおりチェックしてみてください。
    http://xxx.upken.jp/report/sol10nw.html

No. 4709 # zsh 2006/09/24 (日) 10:23:04
>>4707 ゆう
経験上 /etc/nsswitch.conf と /etc/resolv.conf の
設定を忘れている人が多い気がします。

No. 4710 # たけお 2006/09/25 (月) 17:44:26
こんにちわ。OSの再起動をスケジューリングしたいのですが、可能でしょうか?またそれはどのような事をすればいよいのでしょうか。ちなみにsolaris8を使ってます。よろしくお願いします。

No. 4711 # たけお ↓↓ 2006/09/25 (月) 17:50:05
自分が考えてることは、shutdownコマンドシェルを書いて、cronで実行、スケジュールする方法なんですが、他にありますか?例えば、再起動のスクリプトがあるとか・・・・

No. 4712 # たけお 2006/09/26 (火) 11:42:33
うまくいきました。どうも失礼します。

No. 4713 # 2006/09/27 (水) 10:55:45
システム間で電文を送受信する機能の設計を
担当することになり悩んでおります。

「相手システムに電文を送信して、その結果を受信する」または、
「相手から送信されてきた電文を受け取って、その結果を返す」
っといった設計に関してまったくの素人です。

なぜ素人に担当させるのかっといった事で突っ込まれると、
みもふたもないので、その点に関して触れないで下さい m(_ _)m

とりあえず、私のレベル(下記)にあった
分かりやすい参考書、またはインターネットのサイトを見て
基礎勉強(下記)からはじめたいのですが、参考資料/サイト
の紹介をお願いします。

<開発環境(案)>
OS:Solaris 
言語:Java(自分からAシステムへ)とPerl(自分からBシステムへ)
プロトコル:https

<私のレベル>
https,SSL、SOAPといった通信用語の意味は知っている(つもり)
Javaは実装の経験は無いが解析は出来る。

<知りたいと思っている事>
※「思っている」の意味は、今まで見た事・聞いた事からインスピレーション的に、
「多分、この辺を押さえておかなければいけないんだろうな...」っと思っている事です。

・送受信処理のJavaの実装例
・送受信が1秒間に100回あってもレスポンス悪化しない方法
    (100回という数値は適当です。普通どれくらいを目標にするのですか?)
・通信エラー等の例外処理の実装方法
    (通信エラー発生時の電文はロストするのですか?それってどうリカバリー
        するのですか? その当たりに関する事)
・「なりすまし,盗聴,改ざん」っといった事に対する防御方法とその実装方法に関する事

No. 4714 # 68user 2006/09/27 (水) 16:41:33
>>4713
> ・送受信処理のJavaの実装例
送受信の基礎は echo クライアント・サーバや http クライアント・サーバの
実装サンプルを探せばよいでしょう。

データ受け渡しは、http のパラメータで渡す・CSV・XMLRPC・SOAP など実現
方法はいろいろあるでしょうが、それは開発スピードや保守性に関わる部分
なので、はっきり言って何でもいいです。

> ・送受信が1秒間に100回あってもレスポンス悪化しない方法
> (100回という数値は適当です。普通どれくらいを目標にするのですか?)
要件次第です。相手側は何箇所あるのか、MAX で 1秒あたり何回送信する
可能性があるかを考え、安全係数 (1.5 とか) をかけて、それをさばける
構成を考えます。

高速化方法は、https の上に載せるのであれば一般的な web のパフォーマンス
チューニングがメインとなるでしょう。
    - web サーバチューニング
    - SSL アクセラレータ導入
    - DB チューニング・コネクションプール
    - web サーバ複数台化

> ・通信エラー等の例外処理の実装方法
> (通信エラー発生時の電文はロストするのですか?それってどうリカバリー
> するのですか? その当たりに関する事)
ロストする可能性があると考えて設計した方がよいでしょう。

プロトコル的には
    1. A -> B データ送信
    2. B -> A 完了通知
これだけだと思いますが、アプリの手順まで含めると
    1. A -> B データ送信
    2. B にて受信済フラグセット
    3. B -> A 受信完了通知
    4. A が受信完了通知を受け、送信済フラグをセット
となると思います。で、
    - A は送信済フラグが立っていない場合は再送する
    - B が既に受信済フラグを受けていたら、無視 or 破棄する
などの対処をすると。もし即時の再送がまずいなら、
    0. A にて送信日時をセット
    1. A -> B データ送信
    2. B にて受信済フラグセット
    3. B -> A 受信完了通知
    4. A が受信完了通知を受け、送信済フラグをセット
として、「前回送信から n分経過していたら再送する」などの仕組みも必要と
なるでしょうが、その辺は要件次第です。

もちろん、ブラウザのように
    「タイムアウトしたらエラー通知するだけ。再送は操作者まかせ」
というのも選択肢としてはアリです。

> ・「なりすまし,盗聴,改ざん」っといった事に対する防御方法とその実装方法に関する事
その辺は SSL でカバーするのがよいでしょう。相手側のなりすましも
防御する必要があるならクライアント証明書を使うとか、アプリレイヤで
認証するとか、固定 IP アドレスなら IP アドレスで制限をかけるとか。

もしネットゲームのように不特定多数が接続し、しかも送信プログラムを
改ざんされる恐れがある場合は大変面倒です。

No. 4715 # こう 2006/10/10 (火) 22:19:10
BシェルからPerlを呼び出し実行しています。
Bシェルの変数の値をPerlに引き継がせることはできるのでしょうか。

以下でいうと、nに、”100”を設定しています。
そのnの値である、”100”を渡したいのですが。

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

n=100
a=`perl -MPOSIX -e 'print strftime("%Y%m%d", localtime(time-(24*60*60*$n)))."\n"'`
echo $a

No. 4716 # zsh 2006/10/14 (土) 13:01:28
>>4715 こう
変数が展開されないのはシングルクォーテーションの中にあるせいなので
$n だけ出してあげましょう。

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

n=100
a=`perl -MPOSIX -e 'print strftime("%Y%m%d", localtime(time-(24*60*60*'$n')))."\n"'`
echo $a

No. 4717 # りょん 2006/10/17 (火) 21:37:53
はじめまして。

現在少々考えこんでしまっていることがあるのですが
DB2でフェデレーション設定を行いたいと思っています。

ただ、フェデレーションという事自体をあまり
明確に理解しておりません。

どなたか、わかり易い説明などしていただけますでしょうか。
ラッパーやらニックネーム作成など色々調べれば出てくるのですが
いまいちピンとこないのです。

どなかたご教授願えればありがたいです。

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

No. 4718 # こう 2006/11/06 (月) 18:58:46
Bシェルのプロンプトについて教えて下さい。
Bシェルのプロンプトに日付、時間を表示し、何かコマンドを実行するごとに
プロンプトに表示する表示内容を変えたいのですが、可能なのでしょうか。

PS1="[`date{] "
とすれば、表示することはできますが、処理を実行するごとに変わりません。
変えたいのですが、方法とかあるのでしょうか。

No. 4719 # たつ 2006/11/08 (水) 00:17:43
BINDについて教えて下さい。

soralis7でBIND8.1.6の環境でDNSを構築しています。
named.confにzoneで以下の設定を追加してみましたが記述の間違いみたいなエラーが出ました。

zone "ドメイン名" in {
  type forward;
  forward only;
  forwarders { aa.bb.cc.dd; };
};

soralis9でBIND9.3の環境では正常に動作したのでBIND8.1.6ではzoneのforwardは
出来ないのではないかと思っています。
soralis7の環境でBINDをハ゛ーシ゛ョンアッフ゜したら動作するのではないかと思っていますが、
soralis7の環境で正常に動作するBINDは、どのハ゛ーシ゛ョンでしょうか?
また、パッチの適応で動作するなどの情報がありましたら教えて下さい。

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

No. 4720 # いれぶん 2006/11/08 (水) 01:09:41
>>4718 こう

shシェルのプロンプトでは無理です。
機能がなかったと思います。
表示は出来ても、プロンプトが生成される度に実行されません。

bashを使われてはいかかがですか。
bashのプロンプトで、時間、日付を表示できるエスケープが
あったはずです。

No. 4721 # miti 2006/11/10 (金) 12:58:21
テープにtarで吸い上げたファイルを削除する方法を教えてください。

テープ内にはtarで吸い上げたファイルがいくつかあり
そのファイルの一つを任意で削除したい場合です。
お願いします。

No. 4722 # 中級でも結構無知な人 2006/11/15 (水) 11:13:53
tarコマンドでわからないことがあり質問させていただきく以下に記します。

使用マシン:Solaris系 (UNIX)

DDS4のテープに15Gほどのデータを吸い上げました。
tar cvf /dev/rmt/0c /XXX/XXX

ただし、他のサーバで25Gほどあいているディスクに
tar xvf /dev/rmt/0 で展開しようとしたところ、
読み取りエラーが発生しました。

ネットなどでブロックサイズがXXXという説明を見ましたが
実際どのように対応するのかが記載している部分を見つけることが
できず、教えてください。

No. 4723 # has 2006/11/21 (火) 00:15:22
Solaris8で質問です。
rloginで特定IP帯からは特定ユーザでログインできないよう、
制限したいと考えています。
既存ツールを使って実現する方法はあるでしょうか。
何か情報ご存知の方がおられましたら、ご教授お願いします。

No. 4724 # zip 2006/11/27 (月) 18:20:46
Solaris8でzip圧縮した際にパスワードをかけたいと思っています。
現在の環境にはinfo-zip2.2がインストールされています。
過去ログにSolaris 標準の zipは暗号化ライブラリなしで
コンパイルされていて、ソースを改造してコンパイルすればよい
とあるのですが、
これはzip2.2のソースでしょうか?Solaris8のソースでしょうか?
またzip2.2の場合、現時点の最新版zip2.3.2にバージョンアップすれば
暗号化できますでしょうか?
よろしければご教授おねがいします。

No. 4728 # gari 2006/12/12 (火) 23:55:46
NetBSD/macppcにて、一通りの初期設定はすみました。
次は、インターネット接続を試みようとしています。
http://nobug.tukusi.ne.jp/netbsd-guide/trans/netbsd.html
の10章あたりを参考に設定しているところなのですが、イマイチよく分かりません。
モデムのデバイスが何なのかが分からないのです。
本体のUSB端子からKeyspan USA-28Xを接続してそこからシリアルポ−トにて
モデムにつながっています。
USA-28Xは認識できているようなのですが、肝心のモデムのデバイスが分からず、
上記URLの10.1.3.7にあるようなモデムの試験ができないでいます。
モデムはINSメイトV-30DSUです。
どなたか、御助言、御教授いただけませんでしょうか。

環境は、
Power Mac G4 450MHz AGP Graphics
NetBSD/macppcのバ−ジョン3.0
カ−ネルはデフォルト(GENERIC)

dmesgとls /devの結果は
http://ww2.tiki.ne.jp/~gari/dmesg.txt
http://ww2.tiki.ne.jp/~gari/device.txt
にあります。

No. 4729 # goro 2006/12/20 (水) 19:48:28
log4j経由でsyslogに同じメッセージを出力する時に…


ちょっとこの掲示板で以下の質問をして良いのかどうかわからないのですが、質問します。
log4jのSyslogApenderを使用してのUnix上マシンでのsyslogに出力する時に、前回と同じ内容のメッセージを出力した場合(前回出力してから30秒経過して出力)、なぜか下記の出力になります。
Nov 9 11:56:39 usrA ccc: repeate test
Nov 9 11:56:39 usrA last message repeated 1 times

『last message repeated 1 times』とは、syslogdのログの抑止をするための仕様です。
このメッセージが出るのは問題ないのですが、2回目の出力時刻が30秒たったにもかかわらず、前回と同じ時間を示しています。時刻を出力しているのは
syslogデーモンであり、syslogdが呼ばれた時刻を本来出力しています。

log4j経由ではなく、直接syslogdにログ要求を出した場合は、以下の出力なります。
Nov 9 11:56:39 usrA ccc: repeate test
Nov 9 11:57:09 usrA last message repeated 1 times

いろいろ調べたのですが、原因の糸口すらわかりません。どんなに時間が経過しても前回と同じメッセージの場合、『last message repeated n times』が必ず出力されるので困っています。
なぜこのような現象になるのかわかる方がいましたら、ご教授願います。また回避方法がありましたら教えてください。

環境:
log4j1.2.12
JDK5.0
Solaris8

No. 4731 # wssjf120 [E-mail] 2006/12/22 (金) 12:10:20
こんにちは  と言う言葉は暗号化したら何で  しいねてふ  になるのですか?

教えてください。

No. 4732 # びすこ 2006/12/22 (金) 18:29:34
Proxy経由でSSL_connectをcallした際にエラーが起こりました。
調べたところコネクション成立までに時間が掛かる場合があると
書かれていましたので、sleepしてみたり、複数回callしましたが
効果はありませんでした。
こちらのNo.289xあたりを参考にしましたが、これも効果がありませんでした。

WindowsXP VC++8 Winsock2 OpenSSL0.9.8aを使用しています。

SSL_connectまでは以下のような流れです。
socket();
connect();
proxyにCONNECT送信、200番を受信
SSL_library_init();
SSL_load_error_strings();
SSL_CTX_new();
SSL_CTX_load_verify_locations();
SSL_new();
SSL_set_fd();
SSL_connect();← "-1"が返ってきます
SSL_get_error();← "5"が返ってきます

元々はこちらのソースを参考にしてRedHat上で動いていたものを移植しています。
変更点はsocket関数の戻り値がint型からSOCKET型になったぐらいです。
proxyを使わない場合はSSL_connectが成功し、その後のSSL_writeとSSL_readも成功しています。

この現象が起こったマシンのcygwinにさらに移植をしたところ
こちらはproxy経由でもSSL_connectに成功しました。

No. 4734 # ひよこ 2006/12/24 (日) 16:42:22
質問があります。

とあるアプリケーションがとあるサーバーと通信しているとします。
そのアプリケーションが接続しているサーバーの、IPとPort番号を調べるにはどうすればよいのでしょうか。

No. 4735 # tkoba 2006/12/26 (火) 13:10:58
>>4734 ひよこ

netstat コマンドでどうでしょう。

http://x68000.q-e-d.net/~68user/unix/pickup?keyword=netstat&target=command

No. 4736 # tkoba 2006/12/26 (火) 13:13:06
>>4731 wssjf120

「シーザー暗号」で調べてみてください。

No. 4737 # moto 2006/12/27 (水) 14:24:44
こんにちわ 
いくらかでもヒントが欲しくて投稿しました。

グーグルマップの ajax についてなのですが、
グーグルマップの htmlソース内に
<div class="sloc" jsdisplay="$m.svaddr">
のようなコードがあります。

このタグ内に jsdisplay という属性名がありますが
これはmaps2.68.jsファイル内で以下のコードと関連しているようなのですが

        var Tc="jsselect",
            te="jsinstance",
            aj="jsdisplay",
            cj="jsvalues",
            bj="transclude",
            $i="jscontent",
            mk="$index",
            nk="$this"
        ;

javascriptで jsdisplay のような任意の属性名を定義する方法というか
それに関して何らかの情報があれば教えていただけませんでしょうか。

No. 4738 # 68user 2006/12/27 (水) 15:56:19
>>4737 moto
勝手に作った属性を書いておいて、getAttribute で読み出すことができます。
値のセットは setAttribute で。XHTML とかだと勝手に属性を作るのはまずい
のかもしれませんが、詳しくないのでわかりません。

--------
<html><body>
<div id="mydiv" hoge="abc"></div>
<script language="JavaScript">
var mydiv = document.getElementById('mydiv');
alert(mydiv.getAttribute('hoge'));
</script>
</body></html>
---------

No. 4739 # 68user 2006/12/27 (水) 16:09:01
>>4732 びすこ
> SSL_get_error();← "5"が返ってきます
よくわかりませんが、5 ってのは include/openssl/ssl.h の
    #define SSL_ERROR_SYSCALL 5 /* look at error stack/return value/errno */
ですよね。

http://www.openssl.org/docs/ssl/SSL_get_error.html
    Some I/O error occurred. The OpenSSL error queue may contain more information
    on the error. If the error queue is empty (i.e. ERR_get_error() returns 0), ret
    can be used to find out more about the error: If ret == 0, an EOF was observed
    that violates the protocol. If ret == -1, the underlying BIO reported an I/O
    error (for socket I/O on Unix systems, consult errno for details).

の通りにやってみるとどうなりますか?

No. 4740 # moto 2006/12/27 (水) 19:11:48
68user 様
ヒントありがとうございました。
  
グーグルマップを制御しているmaps2.68.jsファイル内にもgetAttribute,setAttributeの関数が出て
いますのでこれらが鍵なんですね。
一筋の光明が見えてきた気がします。

でも、maps2.68.jsファイルは170キロバイトもあるのに一行しかありません。
ですからコメントなぞ一つもなくすごい代物です。
解読するのに改行とインデントを入れる作業をしているのですが、
これがまた気の抜けない大変な作業です。
グーグルさんも簡単には教えてくれないんですね (^_^.)

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

No. 4741 # 68user 2006/12/27 (水) 21:48:50
>>4740 moto
どこかに解説サイトがあったような…と思ったら、Google Suggest でした。
    http://slashdot.jp/developers/article.pl?sid=04/12/18/1033242

Maps の解説は見たことはありませんが、ある程度なら探せばあるかもしれませんね。

No. 4742 # 68user 2006/12/29 (金) 05:34:20
http://X68000.q-e-d.net/~68user/unix/ の検索は OR 検索だったのですが、
AND 検索に変更しました。そのために結構な量の改修を行ったのですが、例に
よって怪しげです。もし不具合があればお教えいただけると幸いです。

No. 4743 # びすこ 2007/01/09 (火) 17:18:24
>> SSL_get_error();← "5"が返ってきます
>よくわかりませんが、5 ってのは include/openssl/ssl.h の
> #define SSL_ERROR_SYSCALL 5 /* look at error stack/return value/errno */
>ですよね。
おそらく#define SSL_ERROR_SYSCALL 5の5だと思います。


>http://www.openssl.org/docs/ssl/SSL_get_error.html
> Some I/O error occurred. The OpenSSL error queue may contain more information
> on the error. If the error queue is empty (i.e. ERR_get_error() returns 0), ret
> can be used to find out more about the error: If ret == 0, an EOF was observed
> that violates the protocol. If ret == -1, the underlying BIO reported an I/O
> error (for socket I/O on Unix systems, consult errno for details).
>の通りにやってみるとどうなりますか?

再度デバッグをしたところssl_connect()の戻り値は-1ではなく0でした。
10回ぐらい連続で動かしてると-1が戻ることもあります。

戻り値が0ですとプロトコルに違反したEOFが見つかったとありますので、
SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method());
と、プロトコル設定をしているのが悪いのかと思い
TLSv1_client_method()などに変えてみましたが効果はありませんでした。
EOFに関してはEnd Of Fileしか思い浮かばずお手上げです。

戻り値が-1のときのBIO云々に関してもぐぐって見つけたソースを追加してみましたが
こちらも効果はありませんでした。

Winsock2を使ってproxy経由のときだけssl_connect()でエラーになるほうが難しいと
思うのですが・・・
こればかりやっていられないので、cygwinの方を使うことにします。

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

No. 4744 # peace 2007/01/12 (金) 17:12:51
初めて書き込みさせていただきます。
http://x68000.q-e-d.net/~68user/net/rsa-1.html
に書かれているrsa1.cをVisal Studio 2005で実行させたいのですが、可能でしょうか?

No. 4745 # 68user 2007/01/12 (金) 17:29:47
>>4744 peace
そのままでは動かないので、
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=981427&SiteID=7
などを参考にしてください。

No. 4746 # hornets 2007/01/14 (日) 23:42:07
初めまして、hornetsと申します。
このサイトには、OpenSSLを用いたRSA暗号のプログラムが掲載されていますが、
OpenSSLを用いてElGamal暗号もできるのでしょうか?
教えていただけたら幸いです。

No. 4747 # 68user 2007/01/15 (月) 15:31:12
>>4746 hornets
> OpenSSLを用いてElGamal暗号もできるのでしょうか?
現時点の OpenSSL には ElGamal は実装はされていません。

OpenSSL の ML を探すと、実装が欲しいなら
    http://mixmaster.sourceforge.net/
を見れば、とありました。

# http://marc.theaimsgroup.com/?l=openssl-users&m=92476310717523&w=2

No. 4748 # Kenichi Maehashi [E-mail] 2007/01/15 (月) 23:00:02
初めまして。Kenichi Maehashi と申します。
いつもネットワーク関連の情報を拝読させていただいております。

さて、
>> http://x68000.q-e-d.net/~68user/net/module-pop3.html
を参考にさせていただきながら、POP3 クライアントを書いたのですが、
実行すると、カレントディレクトリに msg-xxxxx-x.txt というような
テキストファイルが出力されてしまいます。(x は数字です)

これは Net::POP3 モジュールの仕様なのでしょうか。
または、出力をしないような設定方法はありますでしょうか。

ご教示いただければ幸いです。
よろしくお願いいたします。

No. 4749 # 68user 2007/01/16 (火) 11:18:14
>>4748 Kenichi Maehashi
Perl5.8.5 の Net::POP3 で試してみましたが、そのようなファイルは
生成されませんでした。

Net/POP3.pm や、それが利用している Net/Cmd.pm、Net/Config.pm を見ても、
msg-xxxx-x.txt というファイルが生成されるようには見えませんでしたので、
今一度確認していただけますか。接続時に
    $pop = Net::POP3->new($hostname, Debug => 1);
と Debug を ON にすると何かわかるかもしれません。

No. 4750 # Kenichi Maehashi [E-mail] 2007/01/18 (木) 00:56:08
>>4748 68user さま
有り難うございます。
コードを削って確認してみたところ、併用していた MIME::Parser モジュールが
出力するファイルであることが分かりました。確認不足で申し訳ありません。
MIME::Parser の出力するメッセージファイルは出力しないよう設定できないのでしょうか。。。

重ね重ね申し訳ございませんが、何卒宜しくお願い致します。

No. 4751 # 68user 2007/01/19 (金) 10:31:02
>>4750 Kenichi Maehashi
よくわかりませんが、output_to_core でしょうか。
    http://search.cpan.org/~eryq/MIME-tools-5.411a/lib/MIME/Parser.pm
    output_to_core YESNO
        Instance method. Normally, instances of this class output all
        their decoded body data to disk files (via MIME::Body::File).
        However, you can change this behaviour by invoking this method
        before parsing:

        If YESNO is false (the default), then all body data goes to
        disk files.

        If YESNO is true, then all body data goes to in-core data
        structures This is a little risky (what if someone emails
        you an MPEG or a tar file, hmmm?) but people seem to want
        this bit of noose-shaped rope, so I'm providing it. Note
        that setting this attribute true does not mean that parser-
        internal temporary files are avoided! Use tmp_to_core() for that.

        With no argument, returns the current setting as a boolean.

No. 4752 # Kenichi Maehashi [E-mail] 2007/01/19 (金) 22:18:37
>>4748 68user さま
お世話になっております。
ご指摘の通り、$parser->output_to_core(1); で解決できました。
このページはチェックしていたのですが、見落としておりました。。。申し訳ありません。
本当に有り難うございました。

No. 4753 # サーバにUPしたプログラムと通信したい [E-mail] 2007/01/20 (土) 15:36:09
はじめましてwここのHPをみてソケット通信を勉強しています。
よろしくお願いします。

perlを使ってサーバプログラムとクライアントプログラムを作り
ソケット通信をしています。
ActivePerlを使用し、ローカルマシンでは通信できているので
実際にサーバプログラムをサーバにUPしてテストしたいと思い
プロバイダからもらった領域にFTPでUPしました。

で、質問なのですが
サーバプログラムが仮に http://www.aaa.com/user/test.pl という
アドレスにある場合
クライアントプログラムの
IO::Socket::INET->new( PeerAddr ... );
のPeerAddrはどう変えればいいのでしょうか?
※モジュールを使ってみようを参考にしています。

またほかにも何かしなければいけないのでしょうか?
よろしくお願いいたします。

No. 4754 # 68user 2007/01/20 (土) 18:00:20
>>4753 サーバにUPしたプログラムと通信したい
$socket = IO::Socket::INET->new(
    PeerAddr => 'www.aaa.com',
    PeerPort => '80',
    Proto => 'tcp');
  );
でよいです。

http://perldoc.perl.org/IO/Socket/INET.html に書き方のサンプルが
あるので、ざっと眺めてみてください。

No. 4755 # かみゅ [E-mail] 2007/01/20 (土) 19:01:34
ありがとうございます。

PeerAddr => 'www.aaa.com'
を指定した場合
user/test.pl
この部分はどうなるのでしょうか?
特に指定しなくても通信できるのでしょうか?

No. 4756 # 68user 2007/01/21 (日) 19:50:40
>>4755 かみゅ
IO::Socket はソケットのモジュールです。その上に HTTP を流すのであれば
    HTTP クライアントを作ってみよう(1)〜(4)
を読んで、送信すべき HTTP リクエストはどんなものなのかを調べてください。

No. 4757 # matsumoto 2007/01/24 (水) 12:04:11
初めまして、書き込みさせていただきます。
現在RSAについて学んでおり、非常に有用な情報としてこちらのHPを拝見させていただきました。
さて、http://x68000.q-e-d.net/~68user/net/rsa-1.htmlに記載されているrsa-1.cをコンパイル
してみたところ、openssl関連のヘッダファイルが読み込まれない旨のエラーが返され、
実行できません。実行環境としてVineLinux3.1にてgccコンパイラを用いており、opensslの
バージョンは最新版と思われる0.9.8をインストールしております。
対策方法をご教授いただければ幸いです。よろしくお願いします。

No. 4758 # 68user 2007/01/24 (水) 12:21:12
>>4757 matsumoto
まずは rsa.h や engine.h のありかを探してください。
例えば /usr/local/include/openssl/rsa.h が存在するなら
    % gcc -I /usr/local/include rsa-1.c
とします。

No. 4759 # ST 2007/01/28 (日) 15:46:17
はじめまして。STと申します。
CGI初心者です。
質問させていただきます。
「静的な画像表示」のところで、該当するソースをコピーして
サーバーにアップした後http://〜cgiと入力しGIFファイルを表示させようとすると
「GIF89aX」と表示されます。
パーミッションはOKで画像ファイルは存在します。
解決方法を教えていただけますと幸いです。
よろしくお願いします。

No. 4760 # 68user 2007/01/28 (日) 16:45:43
>>4759 ST
http://chaichan.web.infoseek.co.jp/qanda/qa7041.htm
に一本化ということで。

No. 4761 # 68user 2007/02/13 (火) 22:13:46
http://x68000.q-e-d.net/~68user/webcgi/sample/perl/graph-maker.cgi
にて日本語を出す方法のメモ。

% cvs di -u
cvs diff: Diffing .
Index: graph-maker.cgi
===================================================================
RCS file: /home/68user/cvsroot/public_html/webcgi/sample/perl/graph-maker.cgi,v
retrieving revision 1.9
diff -u -r1.9 graph-maker.cgi
--- graph-maker.cgi 26 Feb 2006 08:31:21 -0000 1.9
+++ graph-maker.cgi 13 Feb 2007 13:12:16 -0000
@@ -886,6 +886,8 @@
                }
          }

+ GD::Text->font_path( "/usr/local/share/fonts/TrueType/" );
+ $graph->set_title_font("sazanami-gothic", 14 );
          my $image = $graph->plot($ref_data) or die "Cannot create image";

          binmode STDOUT;

No. 4762 # べた 2007/02/15 (木) 16:05:07
findコマンドの使い方について教えて下さい。

findコマンドで検索を行う場合、指定したディレクトリ内だけ
検索を行い、下位のディレクトリは対象外にしたいのですが
できるのでしょうか。

例えば、/tmp配下を検索するとして、
/tmp
/tmp/backup
/tmp/save
とあった場合、
/tmp内だけを検索し、/tmp/backupや、/tmp/saveなどの下位ディレクトリ内
は見ないようにしたいのです。

find /tmp -name "*.csv" ! -size 0 -print

ドキュメントに、「-prune」がありましたが、指定すると、表示すべきものが
でてきません。上手くいきませんでした。

find /tmp -name -prune "*.csv" ! -size 0 -print
find /tmp -name "*.csv" -prune ! -size 0 -print

また、ファイル名は、ワイルドカード指定なので、表示後のgrepなども
使えません。

環境は、
Solaris8
Bシェル

No. 4763 # 68user 2007/02/16 (金) 00:33:04
>>4762 べた
試してませんが、
    % find /tmp -name "*.csv" -o -name backup -prune -o -name save -o ! -size 0 -print
ですかね。

とはいえ、
    - maxdepth オプションを使える find をインストールする
    - grep '^/[^/]*/[^/]*$' としてパスに '/' が 2個以上含まれないことを
        チェックする
    - ls -l /tmp/*.csv | awk '$5~/^0$/{print $9}'
などの方法がよいような気もします。

No. 4764 # べた 2007/02/16 (金) 13:06:41
>> 4763

ありがとうございます。

>% find /tmp -name "*.csv" -o -name backup -prune -o -name save -o ! -size 0 -print
ですが、配下のディレクトリを全て網羅するのは。。。
また、試してみましたが、直下のファイルがでませんでした。

> - maxdepth オプションを使える find をインストールする
> - grep '^/[^/]*/[^/]*$' としてパスに '/' が 2個以上含まれないことをチェックする
実際には、パスに、’/’が2個以上含まれるているので無理かと。

> - ls -l /tmp/*.csv | awk '$5~/^0$/{print $9}'
これが、一番よい方法になるのですかね。

No. 4765 # 68user 2007/02/16 (金) 15:23:55
>>4764 べた
> 直下のファイルがでませんでした。
FreeBSD では表示されました。Solaris の find は出ないのでしょうか。

> 実際には、パスに、’/’が2個以上含まれるているので無理かと。
「3個以上」の誤りでした。

ベストなのは「/tmp/ 直下に置くといういまいちな仕様を直す」だと
思いますが、それができれば苦労してないんでしょうね。

No. 4766 # べた 2007/02/16 (金) 17:48:15
>>4765 68user

ありがとうございます。
> find /tmp -name "*.csv" -o -name backup -prune -o -name save -o ! -size 0 -print
ですが、
期待したものがでませんでした。
「*.csv」が表示されず、それ以外の全てがでました。

lsコマンドで上手く行きそうなので、この方法で試します。

No. 4768 # 2007/02/18 (日) 00:56:54
>>4764 べた

>>% find /tmp -name "*.csv" -o -name backup -prune -o -name save -o ! -size 0 -print
>ですが、配下のディレクトリを全て網羅するのは。。。
すべて書くのは不可能ですよ。
それに、10も20もないでしょ。
ディレクトリだけを求めてすべてを変数に入れて設定すれば出来ませんか。

OP="-o -name backup -o -name -save"
find /tmp -name "*.csv" $OP -o ! -size 0 -print

でも、その下にあったら無理かな。

>>4766 べた

>> find /tmp -name "*.csv" -o -name backup -prune -o -name save -o ! -size 0 -print
>ですが、
>期待したものがでませんでした。
>「*.csv」が表示されず、それ以外の全てがでました。
使い方、間違ってませんか。?

No. 4769 # beck 2007/02/18 (日) 17:56:20
初めまして!beckと申します。
このサイトでOpenSSLを用いたRSA暗号を実装例を紹介していますが、
鍵生成などの工程では、どれほどの時間を要するのでしょうか?
もちろん、PCのスペックに左右されることは承知していますが・・・

No. 4770 # べた 2007/02/19 (月) 11:54:58
>>4765 68user
>>4768

>% find /tmp -name "*.csv" -o -name backup -prune -o -name save -o ! -size 0 -print
ですが、
やはり上手くでません。
期待している’*.csv’を表示しません。

> FreeBSD では表示されました。Solaris の find は出ないのでしょうか。
UNIXのOSによって異なる動きをするというこですか。
Solairs以外の環境がないのでなんともいえませんが。

No. 4771 # zxcv 2007/03/07 (水) 16:19:16
文字コードとエンコーディング (1)
http://x68000.q-e-d.net/~68user/webcgi/char-code-1.html

上記のページ、とても良くできていると思います。 ありがとうございます。

しかしながら、「エンコーディングとは」の項の先頭付近にある「他の文字と同時に扱う場合のことは考えられていません」の『文字』は『文字集合』とするべきでは無いでしょうか?

# 入門学習のために読む人にとって、重要な部分だ思います。

No. 4772 # 68user 2007/03/08 (木) 03:58:39
>>4771 zxcv
ご指摘ありがとうございます。修正してみましたがいかがでしょうか。
    http://x68000.q-e-d.net/~68user/webcgi/char-code-1.html

cvsweb が動かなくなっているので、修正点の diff を貼っておきます。

RCS file: /home/68user/cvsroot/public_html/webcgi/org/char-code-1.html,v
retrieving revision 1.6
diff -r1.6 char-code-1.html
68c68
< <LI>ASCII … 半角英数字・半角記号 (a,A,0,!,@,#)
---
> <LI>ASCII … 半角英数字・半角記号 (a,A,0,!,@,# など)
70c70
< <LI>JIS X 0208 … ひらがな・かたかな・漢字・全角記号
---
> <LI>JIS X 0208 … ひらがな・カタカナ・漢字・全角記号
73c73
< があります。
---
> などがあります。
80c80
< エンコーディングとは、複数の文字集合を一緒に扱うための枠組のことです。
---
> エンコーディングとは、複数の文字集合を同時に扱うための枠組のことです。
82c82
< 他の文字と同時に扱う場合のことは考えられていません。
---
> 他の文字集合と同時に扱う場合のことは考えられていません。
84c84
< ASCII と JIS X 0208 を同時に扱う場合を考えてみましょう。
---
> たとえば、ASCII と JIS X 0208 を同時に扱う場合を考えてみましょう。
90c90
< 「A」なのか「あ」なのかを判断できません。そのためには
---
> 「A」なのか「あ」なのかを判断できません。これを判断できるようにするためには、
94c94
< つまり「ここから先は ASCII」「ここから先は JIS X 0208」というようなものを入れる。
---
> たとえば「ここから先は ASCII」「ここから先は JIS X 0208」という意味の、区切り用のコードを入れる。
96c96
< という2通りの対策があります。さらに、
---
> という2通りの対策が考えられます。さらに、
101c101
< という細かい規格を決めたもの、それがエンコーディングです。
---
> という細かな規格を決める必要があります。
103,104c103,105
< エンコーディングには、主に3種類あります。
< JIS と Shift_JIS と EUC-JP です。
---
> このような、複数の文字集合を同時に扱うための規則のことを「エンコーディング」と呼びます。
> <P>
> エンコーディングには、主に3種類あります。ISO-2022-JP と Shift_JIS と EUC-JP です。

No. 4773 # べた 2007/03/17 (土) 17:20:13
readコマンドを使ってファイルから読み込みを行っています。
読み込んだ件数を出力しようとしているのですが、どうしても
0件となってしまいます。
どこがいけないのでしょうか。どう直せばよいのでしょうか。

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

FILE="/tmp/sample.csv"

i=0
while read LINE
do

        編集処理

        表示処理

        i=`expr ${i} + 1`

done < ${FILE}

echo "${i} 行読み込みました。"

No. 4774 # べた 2007/03/18 (日) 11:26:27
>>4773 べた

whileとかforのループ内で使用した変数は、
ループ終了後(ループを抜けた後)参照する
ことはできないのでようか。

できるとした場合、どうすればいいのですか。

No. 4775 # 2007/03/19 (月) 23:45:28
>>4774 べた
私もあまり詳しくないのでしりません。
kshでできたような。

http://search.luky.org/linux-users.9/msg06099.html

で、似たことが質問されていますので確認してみては。

No. 4776 # zsh 2007/03/20 (火) 10:37:41
>>4774 べた
最近シェルスクリプト触ってないんですが、
多分これでOKかと。

------
i=0
exec 3<&0 0<$FILE
while read LINE; do
        :
done
exec 0<&3 3<&-
echo $i
------

No. 4778 # べた 2007/03/20 (火) 17:35:18
>> 4776

ありがとうございます。
上手く行きました。

また、以下でも出来ました。

-------------
i=0
exec < ${FILE}
while read LINE
do

        echo ${LINE}
        i=`expr ${i} + 1`

done

echo ${i}
-------------

No. 4779 # める 2007/03/31 (土) 16:14:20
はじめまして。
質問があります。

よくあるポートモニターなどはどのように作っているのでしょうか。
また、自分のパソコンが通信しているデータを見ることができますか?

No. 4780 # べた 2007/04/10 (火) 16:24:19
Perlなのですが、sync(fsync?)を使って
書き込みを実現しようとしています。
書き込み後、正しく書けたか、ファイルの比較や
サイズの取得をやろうとしています。

今一、Perlのモジュールとかライブラリとかが
わかりません。
参考になるものありませんか。
また、どのようにすればよいですか。

No. 4781 # べた 2007/05/17 (木) 16:52:39
findコマンドの「-perm」指定での検索について

findコマンドで、ファイルの権限の検索をする場合、
ユーザ、グループ、その他の所有者に権限を設定して
実施しますが、ユーザ、グループ、その他所有者を
表す「u」、「g」「o」の前に、「-」があるかないかで
状態が変わります。
「u」、「g」「o」の前の「-」にはどのような意味が
あるのでしょうか。

# find . -type f -perm o+w
# find . -type f -perm -o+w

# find . -type f -perm -g+w,o+w
# find . -type f -perm -g+w,-o+w

No. 4782 # 68user 2007/05/17 (木) 22:34:02
>>4781 べた
http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html
がわかりやすいかと思います。
    -perm -mode
        mode で指定されている許可属性ビットのすべてがファイルでも立っていたら真。
    -perm +mode
        mode で指定されている許可属性ビットがファイルでどれか一つでも立っていたら真。

No. 4783 # のみ 2007/05/19 (土) 03:02:10
おしえてください

No. 4784 # のみ 2007/05/19 (土) 03:30:10
VMwareServer(無償版)を使ってlinux4を2台(A、B)を仮想環境を使ってインストール
しました。(ethernetはnetwork connectionはHost-only)
linuxのファイアウォールを無効にし、bindをカスタムでインストールし
特に設定を変更しないで、/var/named/etc/chroot/etcフォルダにnamed.conf
を作成しました。
AサーバのVゾーンの問い合わせについては、zoneファイルから名前解決はできますが、
Xゾーンについてはforwardを使ってBサーバに転送するように設定しましたが
Xゾーンの名前解決ができません。(Xゾーンについては、Aサーバからの問い合わせ
に関しては、Xzoneファイルで解決するように設定してあります)

AサーバからXゾーンPCに対してdigコマンドを実行すると、
AUTHORITY SECTION : 518400 IN NS F.ROOT−SERVER.NET
・・・・
が記録されます。

何か原因等は考えられるでしょうか。

ちなみにforwardの設定は以下のようにしてあります。
ご教授のほう、よろしくお願いします。

zone "X" {
                type forward;
                forward only;
                forwarders {
                                0.0.0.0; #Bサーバのアドレス 
                  };

No. 4785 # のみ 2007/05/21 (月) 01:06:52
解決しました。
recusionがnoになっていたようです。

No. 4786 # べた 2007/05/21 (月) 12:22:23
>4782
ありがとうございます。
読んでみます。

No. 4787 # べた 2007/05/21 (月) 12:22:47
>>4782 68user
ありがとうございます。
読んでみます。

No. 4788 # べた 2007/05/21 (月) 13:00:51
シェルで、FTPを自動実行しています。

FTPの接続が失敗した場合、ログイン・パスワードが間違っていた場合、
getするファイルが存在しなかった場合など、異常を判断したいのですが、
例えば、
0:正常終了
1:実行エラー
みたいな感じで、、、。
リターンコードを取得することができるのでしょうか。

UNIXのFTPですとファイル転送に失敗してもリターンコードが、”0”が
返ってくると聞いたのですが、最後に、byeを実行しているので、"0”で
返ってきます。

以下のような内容でやっています。
ftp -v -n [IPアドレス] <<END > /dev/null 2>&1
user [ユーザ名] [パスワード]
cd [リモートディレクトリ]
lcd [ローカルディレクトリ]
get [getするファイル名]
bye
END

エラーだけをファイルに出力してみたのですが、接続エラーしかでず、
ログインの失敗やファイルが存在しないエラーは出力されませんでした。
ftp -v -n [IPアドレス] <<END 2>ftp_error.log > /dev/null >&1

すべてのFTP結果ログをファイルに出力し、該当の処理のエラーメッセージ
があるかないかをgrepでみるしかないのでしょうか。

Not connected.
530 Login incorrect.
Login failed.
530 Please login with USER and PASS.
550 getするファイル名: No such file or directory.

No. 4789 # 68user 2007/05/21 (月) 23:01:43
>>4788 べた
ftp コマンドを使う限りは
> すべてのFTP結果ログをファイルに出力し、該当の処理のエラーメッセージ
> があるかないかをgrepでみるしかないのでしょうか。
が無難です。また、どのようなエラーがどこで発生したかをプログラム上で
突き止めようとせず、行頭の 4xx か 5xx にマッチするものがあれば全て
エラーとすることをお勧めします。

これ以上を求めるならば、Perl + Net::FTP モジュールなどで FTP クライアントを
作成するのがよいとわたしは思います。

No. 4790 # べた 2007/05/22 (火) 18:48:35
>> 4789
ありがとうございます。
必要な、エラーすべてをgrepしようと考えていました。
行頭の 4xx か 5xx にマッチするものがあれば全てエラー
とするでやつてみます。

ちなみに、接続エラー(open)ですが、これは、4xxとか5xx
にならないのですが、メッセージの内容で見た方がよいの
でしょうか。

No. 4791 # 68user 2007/05/23 (水) 02:27:15
>>4790 べた
> ちなみに、接続エラー(open)ですが、これは、4xxとか5xx にならないの
> ですが、メッセージの内容で見た方がよいのでしょうか。
数年ほど前に同じようなことをやっていましたが、そのときはどうやったの
だったか…。
    ・ftp コマンドの終了ステータスが >0 ならエラー
    ・2xx がひとつもなかったら認証以前で失敗とみなしてエラー
のいずれかだったような気がします。

No. 4792 # べた 2007/05/23 (水) 13:51:17
>>4791 68user

>・ftp コマンドの終了ステータスが >0 ならエラー
>・2xx がひとつもなかったら認証以前で失敗とみなしてエラー
ありがとうございます。

なるほど、2xxがなかったらですか。
確かに、接続エラーということは、レスポンスコードが出てなかった
ので、レスポンスコードがなければで良いかも知れません。
UNIXのOSによるかも知れませんが。
環境は、Solaris8 です。

No. 4793 # 保守見習い 2007/05/24 (木) 22:44:47
AIX5.3の環境にて下記のようなファイルシステムをマウントしています。
/app
/app/log
auto mount=trueの設定です。

OS再起動後、/appがマウントされていなかったので、/etc/filesystemsを
確認したところ、/app/logの定義が/appの定義よりも前に記述されいたため、
/app/logが先にマウントされてしまい、/appのマウントに失敗したようです。
一旦、/app/logをアンマウントし、/app, /app/logの順番でマウントしました。

次回の再起動時に正常にマウントできるように、/etc/filesystemsを直接、
編集して正しい順序に設定しようと考えていますが上記ファイルシステムが
マウントされたままの状態で作業を行なっても大丈夫か教えて頂けますでしょうか?

No. 4794 # 68user 2007/05/24 (木) 23:17:24
>>4793 保守見習い
AIX は知りませんが、マニュアルを読む限りでは他 UNIX 系システムの
/etc/fstab と同様に、
    ・ブート時の mount 順序を決める
    ・ブート時の mount の設定を記述する
    ・mount コマンド実行時に各種オプションが省略された場合の
        デフォルト値を記述しておく
という役割のようなので問題ないでしょう。

http://publib16.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/files/aixfiles/filesystems.htm

No. 4795 # 保守見習い 2007/05/25 (金) 23:25:00
>>4794 68user
ご意見ありがとうございます。
ファイルシステムをマウントしたまま、/etc/filesystemsを編集し、
問題なく無事作業が完了しました。

No. 4796 # ふくし 2007/05/26 (土) 15:42:08
おひさしぶりです。
わからないことができると質問しに現れてすみません。
よろしくお願いします。

C:\>perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 50 registered patches, see perl -V for more detail)

Copyright 1987-2006, Larry Wall

Binary build 820 [274739] provided by ActiveState http://www.ActiveState.com
Built Jan 23 2007 15:57:46

で、以下のようなプログラムを書きました。
-------------------------------------------------- Foo.pm
#! perl -w

use strict "subs";
package Foo;
use base Exporter;
our @EXPORT = qw($bob);
our $bob = "#123456789";

1;

-------------------------------------------------- bar.pl
#! perl -w

use strict;
use Foo;

print "bob: $bob \n";

すると、以下のようなエラーになります。

C:\>bar.pl
Unknown error
Compilation failed in require at C:\bar.pl line 6.
BEGIN failed--compilation aborted at C:\bar.pl line 6.

Foo.pm の use strict 'subs'; を無効にするとなぜか正常に動作します。

C:\>bar.pl
bob: #123456789

何が悪いかお分かりでしょうか。

別に use strict 'subs' をやめればいいじゃん・・・
というハナシなんですが、
実際の元のプログラムはもっと大きくて(当たり前 ;;;)、
  use strict;
でずっとやってきていたので・・・。

何かわかりましたらよろしくお願いいたします。

No. 4797 # ふくし 2007/05/27 (日) 23:42:13
追記です。
どうも use base Exporter; が use strict 'subs' に引っかかるらしく

-------------------------------------------------- Foo.pm
#! perl -w

package Foo;

use base Exporter;

use strict "subs";

our @EXPORT = qw($bob);
our $bob = "#123456789";

1;

だと動作します。あと use base をあきらめて
-------------------------------------------------- Foo.pm
use strict "subs";
package Foo;

use Exporter;
our @ISA = qw(Exporter);

our @EXPORT = ('$bob');
our $bob = "#123456789";

1;

でも動作します。
ううーん。

No. 4798 # 通りすがりのプログラマ 2007/06/10 (日) 20:42:48
kqueue の説明の所
timeval は tv_sec, tv_usec で分解能 10^-6 == micro second
timespec は tv_sec, tv_nsec で分解能 10^-9 == nano second
実際の分解能は処理系依存

No. 4799 # べた 2007/06/13 (水) 17:16:21
awk/nawkを使って編集をしています。
ファイルから読み込み、読み込んだ内容を判断して
printf関数を使って表示しています。
例えば
    { \
        printf("XXX:%s\nxxx:%s\nxxx:%s\n・・・・\n", \
        $1,$2,$s・・・・); \
    } \
のように、値の前にコメント付けて表示しています。

この表示内容を追加したところ、
「Word too long」
のメッセージが出力され動かなくなりました。
メッセージの通り、printf関数で表示する内容が長すぎるためだと
思うのですが、原因は、その通りでしょうか。
実際、何バイト(何文字)までなのでしょうか。
また、対処するにはどうしたらよいのでしょうか。

環境は、
    Solaris8、csh

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

No. 4800 # べた 2007/06/13 (水) 17:30:24
>>4799 べた
補足です。

メッセージの通り1行が長いのがいけないのではと
フィールドごとに表示しようとしたのですが、
例えば
    { \
        printf("xxx:%s\n",$1); \
        printf("xxx:%s\n",$2); \
        printf("xxx:%s\n",$3); \
            :
            :
    } \

やはり、
「Word too long」
のメッセージが出力され動かなくなりました。

No. 4801 # おーさん 2007/06/13 (水) 17:53:52
はじめまして。
最近openSSLを使用することになったので勉強しています。
非常にいい内容で助かっています。

それでですねrsaを使用する際のサンプルを一度コンパイルしてみたのですが…
RSA_generate_keyをはじめとする、約25個の関数が未定義と起こられてしまいました…
これはハードウェア的な問題なのでしょうか?

ちなみにlinuxにtelnetで接続しながら作っています。
よろしくお願いいたします。

No. 4802 # zsh 2007/06/13 (水) 19:20:15
>>4800 べた
awk スクリプトを別ファイル(以下の例では hoge.awk)にして
    $ awk -f hoge.awk fuga.txt
のようにしてもダメですか?

No. 4803 # zsh 2007/06/13 (水) 19:21:36
>>4800 べた
書き忘れましたが、別ファイルにする場合は
行末の "\" は削除してください。

No. 4804 # pixy 2007/06/15 (金) 18:57:49
はじめまして。
サーバ関係の情報を探していて、ここにたどりつきました。
下記のようなPOPサーバの改造は可能でしょうか。
ネット上を探してみたのですが、情報が少なく、
参考になるサイト等ご存知でしたら、ご教授ください。
よろしくお願い致します。

【現状】
POPクライアントの拡張コマンド内で、
ユーザID等をべた書きして、サーバにリクエストしている。
【改造】
現在クライアントにて上記のべた書きしている箇所をプロパティファイル
とする。POPサーバを改造し、このファイルを読み込むようにする。

No. 4805 # べた 2007/06/16 (土) 12:30:15
>> 4803

ありがとうございます。
上手くいきました。

No. 4806 # zsh 2007/06/16 (土) 21:33:25
>>4805 べた
それで OK だったということは
awk ではなく csh の制限に引っかかっていたようですね。
恐らく awk のスクリプト部分を \ で複数行つなげていたので
一行に記述できる制限(1024文字)を超えたのでしょう。

No. 4807 # Perl使い 2007/07/07 (土) 03:21:16
はじめまして。
Perl CGIで基本認証をクリアーするやり方は分かっているのですが、
IEに事前に基本認証をクリアーさせるための設定方法が分かりません。
perlから、IEに対して、ヘッダーとして下記を書き込んでも、だめなんですね。
print "Authorization : Basic Base64文字列\n";
かならず、認証画面が表示されます。
IEに何を書き込めば良いのでしょうか。ご教示をお願いします。

No. 4808 # 68user 2007/07/15 (日) 01:16:20
>>4798 通りすがりのプログラマ
ありがとうございます。バグ ID 28 として記載いたしました。
近日中に直します。
http://spreadsheets.google.com/pub?key=pAr6UVKFG0jthbVP572cKEA&output=html

No. 4809 # mac 2007/07/19 (木) 22:04:10
はじめまして、'斎藤 誠'と申します。
初めての投稿で質問する不躾をお許しください。

とある理由からpop3クライアントを試しています。
pop3-client.pl
pop3-client-Net::POP3.pl
双方を試してみまして、後者の方を使用したいと思っています。

当方の環境はFedora7です。小生自身は初心者です。
いわゆる自宅サーバで試しているのですが、
当方が別のIPで設置しているtest-pop3.server(以下、前者)と
目的のpop3.server(以下、後者)とで応答が異なっていることで困っています。
双方ともtelnet接続では正常な応答をしています。
ちなみに前者はFedora core 6でdovecotです。
pop3-client.plにて接続すると、前者がエラーで後者が正常応答です。
これに関してはNo.2380の
sleep 1;
を挿入したらうまく動きました。

pop3-client-Net::POP3.plにて接続するとpop3-client.plの場合とは
逆に前者が正常に応答して後者はエラーとなります。

今日一日費やしてみましたが、解決できません。どなたかにご教授願いただきたく
投稿しました。なお、初心者ですので何卒お手柔らかにお願いいたします。

No. 4810 # 68user 2007/07/20 (金) 01:36:33
>>4796 ふくし
> use base Exporter;
うちでは
    use base qw/Exporter/;
とすることで動きましたがどうでしょうか。

>>4804 pixy
> 現在クライアントにて上記のべた書きしている箇所をプロパティファイル
> とする。POPサーバを改造し、このファイルを読み込むようにする。
前提条件がよくわかりませんが、ソースがあるとして改造が可能か
と問われれば「可能です」が答えです。

>>4807 Perl使い
> print "Authorization : Basic Base64文字列\n";
Authorization ヘッダはクライアントがサーバに送信するものなので、
根本的に誤解があるようです。
      http://x68000.q-e-d.net/~68user/net/http-auth-1.html
        以下のような CGI プログラムを使うことで、疑似的にログアウト
        することもできます
で実現できませんか?

あと、別解として
    http://username:password@example.com/foo/
に飛ばす方法もありますが、IE の場合は設定変更が必要です。
    http://support.microsoft.com/default.aspx?scid=kb;JA;834489

>>4809 mac
pop3-client.pl は実用に耐えるものではないので、pop3-client-Net::POP3.pl を
使ってください。で、pop3-client-Net::POP3.pl の
    $pop = Net::POP3->new($hostname);

    $pop = Net::POP3->new($hostname, Debug=>1);
としてデバッグ情報を表示してみてください。

あと、Net::POP3 の方でエラーになるサーバの POP3 サーバソフトウェア名と
バージョンは何でしょうか? (qpopper など)

それと「エラーになる」というのは具体的に何がどうなるのでしょうか。

代替案としては
    Mail::POP3Client
    http://search.cpan.org/~sdowd/Mail-POP3Client/POP3Client.pm
を使う手もあります。

No. 4811 # mac 2007/07/20 (金) 11:02:07
早々のお返事、有難う御座います。
エラーは「認証失敗: 」だったのですが、
ご教授の通りデバッガつけて起動させて見ましたところ

Net::POP3>>> Net::POP3(2.28)
Net::POP3>>> Net::Cmd(2.26)
Net::POP3>>> Exporter(5.58)
Net::POP3>>> IO::Socket::INET(1.29)
Net::POP3>>> IO::Socket(1.29)
Net::POP3>>> IO::Handle(1.25)
Net::POP3=GLOB(0x9e97f44)<<< +OK Qpopper (version 4.0.4) at ******.jp startin g.
Net::POP3=GLOB(0x9e97f44)>>> USER ******
Net::POP3=GLOB(0x9e97f44)<<< +OK Password required for ******.
Net::POP3=GLOB(0x9e97f44)>>> PASS ....
Net::POP3=GLOB(0x9e97f44)<<< +OK ****** has 0 visible messages (0 hidden) in 0 octets.
Net::POP3=GLOB(0x9e97f44)>>> STAT
Net::POP3=GLOB(0x9e97f44)<<< +OK 0 0
認証失敗: at ./pop3-client-Net::POP3.pl line 41.

ということで認証は通っていたようです。mailが空だったということでしょうか。
お騒がせいたしました。line 41というのは多少いじったところもあって
originalとは異なりますが、
$auth_check = $pop->login($username,$password);
など、実質的な変更はしていないつもりでした。
ちなみにtelnet接続でのcapaの応答は
+OK Capability list follows
TOP
USER
LOGIN-DELAY 0
EXPIRE 0
UIDL
RESP-CODES
AUTH-RESP-CODE
X-MANGLE
X-MACRO
X-LOCALTIME Fri, 20 Jul 2007 09:04:45 +0900
IMPLEMENTATION Qpopper-version-4.0.4
となっていました。
これからFTPなどもやってみるつもりですのでまたお世話になるかもしれません。
そのときはまたお願いいたします。

No. 4812 # mac 2007/07/20 (金) 12:19:30
Net::POP3 の検索でみましたら
login ( [ USER [, PASS ]] )
USER、PASSコマンドの両方を送信します。...
メールボックスのなかのメッセージ数を返します。
しかしサーバーにメッセージが何もなければ文字列"0E0"を返します。
これはブール値コンテキストでは trueになりますが、
数値コンテキストでは0です。
指定したユーザがサーバーで認証できなければ、undefが返されます。
-----------------------------------
とあったのですがバグということでしょうか。
Mailが無いことを確認できる方法は有りますでしょうか。
その場合はundefのエラーを回避するというスクリプトを
書けばよいようにも思っています。

No. 4813 # 68user 2007/07/20 (金) 13:03:08
>>4811 mac
pop3-client-Net::POP3.pl の
    if ( $auth_check == undef ){
は誤った書き方で、正しくは
    if ( ! defined $auth_check ){
です (以前は undef かどうかのチェック方法を誤解していたため)。

これだとどうなりますか。

No. 4814 # mac 2007/07/20 (金) 18:33:55
>>4813 68user
> if ( ! defined $auth_check ){
バッチリです。それにしてもすばやいレス、本当に有難う御座います。

No. 4815 # mac 2007/07/20 (金) 20:20:37
たいへん心苦しいのですが別のことをお聞きしてよろしいでしょうか。
HTTPクライアントのスクリプトで、Basic認証が通ったかどうか
戻り値などで判断する方法は有りますでしょうか。
いま確認中のスクリプトは以下の通りです。

#!/usr/local/bin/perl

use strict;
use HTTP::Request::Common;
use LWP::UserAgent;

my $req = POST( 'http://*****.jp/login.html');
$req->authorization_basic('ID', 'Pass');
my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);

No. 4816 # 68user 2007/07/21 (土) 02:54:23
>>4815 mac
HTTP::Response の code メソッドを使えばよいと思います。

-----
#!/usr/local/bin/perl
use strict;
use HTTP::Request::Common;
use LWP::UserAgent;

my $req = POST( 'http://X68000.q-e-d.net/~68user/net/sample/http-auth/secret.html');
$req->authorization_basic('hoge', 'wrong-password');
my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);
print $res->code."\n";

my $req2 = POST( 'http://X68000.q-e-d.net/~68user/net/sample/http-auth/secret.html');
$req2->authorization_basic('hoge', 'fuga');
my $ua2 = LWP::UserAgent->new;
my $res2 = $ua2->request($req2);
print $res2->code."\n";

No. 4817 # mac 2007/07/21 (土) 23:19:18
>>4816 68user
重ね重ね、有難うございました。

No. 4818 # ふくし 2007/07/24 (火) 21:20:42
>>4810 68user
さん、

そうなんですよ。use は引用符をつけてはいけないが use base だとダメ、
no strict 'refs'; だとあらゆる裸のワードを勝手にクォートするらしいです。
お騒がせしました。

No. 4819 # 68user 2007/07/25 (水) 01:30:27
>>4818 ふくし
わかっておられるかもしれませんが、use base は built-in な文法ではなく
ただ base.pm を use しているだけなので、base 内の sub import の引数として
渡されるから、ということですね。strict も実体は strict.pm なので同様に
strict refs ではなく 'refs' としなければならないと。

個人的には、ここまで汚い造りにするかねぇ、という感じです。いちおう
つじつまをあわせてるのはすごいですが。

No. 4820 # べた 2007/08/01 (水) 09:33:24
awkを使ってファイルからある部分のデータを取り出そうとしています。

ファイルの内容 ----------------------------------
----------------------------------------
Tue Jul 31 09:00:00 Jst 2007
xxxxxx
xxxxxx
xxxxxx
xxxxxx
Tue Jul 31 09:00:00 Jst 2007
----------------------------------------
Tue Jul 31 09:10:00 Jst 2007
xxxxxx
xxxxxx
xxxxxx
xxxxxx
Tue Jul 31 09:10:00 Jst 2007
----------------------------------------
Wed Aug 1 09:00:00 JST 2007
xxxxxx
xxxxxx
xxxxxx
Wed Aug 1 09:00:00 JST 2007

該当の曜日、月、日から始まる行以降から
最終行まですべてを取り出そうとしているのですが、
awkで上手くいきません。
以下の様なエラーがでて上手くいきません。
どうすればよいのでしょうか。

    awk: syntax error near line 1
    awk: bailing out near line 1



シェルの内容 -----------------------------------------
#!/bin/sh

LOG_FILE="/tmp/kekka.log"

#DATE=`date "+%a %b %e"`
DATE=`date +%C | cut -c 1-10`

awk -v DAY=$DATE'/^DATE/,/\\r/ {print $0}' ${LOG_FILE}

exit 0

No. 4821 # なし 2007/08/03 (金) 23:13:29
UNIXの環境変数のLANGに使用する言語の指定に
「japanese」があるのですが、これは、日本語
が使えるのですか。それとも日本語のSJISが
使えるのでしょう。
また、UNIXのOSがどのコードなのかどこを見れば
わかるのでしょうか。
また、EBCDICコードがあるのですが、これを使うには
どうしたらよいのでしょうか。

No. 4822 # 68user 2007/08/07 (火) 15:41:08
>>4820 べた
> awk -v DAY=$DATE'/^DATE/,/\\r/ {print $0}' ${LOG_FILE}
まずは
    % sh -x スクリプト名
などとして、意図どおりの引数を渡せているか確認しましょう。この場合は
    awk -v DAY=20/^DATE/,/\\r/ {print $0} a.dat
と表示されますので、意図通りではないはずです。

具体的には以下の問題があります。
    - 20 はおそらく希望する値ではない
    - 20 の後に空白がない。
    - DATE の中にある変数でパターンマッチするのではなく、"DATE" という文字列を
        探すようになっている。
    - DAY と DATE の誤記。

>>4821 なし
> UNIXの環境変数のLANGに使用する言語の指定に
> 「japanese」があるのですが、これは、日本語
> が使えるのですか。それとも日本語のSJISが
> 使えるのでしょう。
一般的には japanese は ja_JP.eucJP・ja_JP.PCK (Shift_JIS)・ja_JP.utf-8
などのエイリアスであることが多いように思います。実際にどのエイリアスで
あるかは OS やバージョンによるでしょう。

> また、UNIXのOSがどのコードなのかどこを見ればわかるのでしょうか。
OS により異なると思います。env コマンドで何か出てくるかもしれません。

> また、EBCDICコードがあるのですが、これを使うにはどうしたらよいのでしょうか。
例えば dd コマンドで ASCII に変換できます。商用のアプリケーションも
いくつか出ているようです。

No. 4823 # 68user 2007/08/07 (火) 15:43:08
UNIX の部屋に
    ファイル制限まとめ
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%D5%A5%A1%A5%A4%A5%EB%C0%A9%B8%C2%A4%DE%A4%C8%A4%E1
を追加しました。

No. 4824 # べた 2007/08/09 (木) 15:50:10
>>68user
ありがとうございます。

>% sh -x スクリプト名
で確認してみました。
DAYとDATEは誤記ですが、DAYに直しましたが結果は同じでした。

awk -v DAY=$DATE'/^DAY/,/\\r/ {print $0}' ${LOG_FILE}
パターンマッチングのところが、引数で渡した値ではなく、
”DAY”という文字列でした。(文字列と言い切れるのかどうか。?)

No. 4825 # 68user 2007/08/10 (金) 11:48:35
>>4824 べた
まずはコマンドラインから awk を叩いて、正しい結果を取得できるように
なるところから始めましょう。シェルスクリプトはその後。

あと
>>4822 68user
> 具体的には以下の問題があります。
を直さないと動きません。念のため。

No. 4826 # べた 2007/08/10 (金) 15:37:58
>>4825 68user

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

No. 4827 # べた 2007/08/10 (金) 16:38:59
>>4825 68user

やはり、「^」を指定しているので、行の先頭が、DAYという
文字列から始まっているのを探していました。
試しにファイルの方を修正し、日付を「DAY Aug 2」としたところ
表示されました。
マッチングのところに、変数を展開できないのでしょうか。

nawk -v DAY="Fri Aug 10" '/^DAY/,/\\r\\n/ {print $0}' /tmp/kekka_log.log

No. 4828 # なし 2007/08/13 (月) 21:52:22
>>4822 68user

返事遅れてすみません。
ありがとうございます。

No. 4829 # 68user 2007/08/15 (水) 10:31:38
>>4827 べた
変数展開は $n ~ VAR と書きます。

で、/\\r\\n/ ですが、これうまく動きますか? awk はよくわかりませんが、
マッチしてないと思います。

なので、DAY から ------ までを見るようにして、
    awk -v DAY="Fri Aug 10" '$0 ~ DAY,/^--*$/ {print}'

    awk -v DAY="Fri Aug 10" 'BEGIN{skip=1} $0 ~ DAY {skip=1;print $0} /^--*$/ {skip=0} skip==1 {print} '
あたりがいいんじゃないですかね。

なお、行頭の日付だけ見るなら、DAY="^Fri Aug 10" です。

No. 4830 # 通りすがり 2007/08/15 (水) 10:44:32
「リダイレクト」についての説明の中の

『「リダイレクトは右に書いたものから順に評価されるから」は間違いである。』

のくだりが分かりやすくてつい書き込んでしまいました。
他のサイトは上記のような説明で終わっている所があったのですが、
なんとなく「ん?」と違和感が残ってました。
で、このサイトの内容ですっきりです。ありがとうございました。
ドメインも素敵です(笑)

No. 4831 # 68user 2007/08/15 (水) 11:36:41
>>4830 通りすがり
ありがとうございます。ついでなので書いておくと、先頭に書いてもいいです。
    >/dev/null 2>&1 ls foo.txt

No. 4832 # べた 2007/08/15 (水) 15:00:06
>>4829 68user
ありがとうございます。

変数の展開ができました。
「'$0 ~ DAY」
の使い方は知りませんでした。

>で、/\\r\\n/ ですが、これうまく動きますか? awk はよくわかりませんが、
>マッチしてないと思います。
ファイルの最後まで見るというつもりでした。
EOFがこの表記でいいのかさなかですが。?
多分、ファイルの最後まで走査し、終了しているのではないかと。

>awk -v DAY="Fri Aug 10" 'BEGIN{skip=1} $0 ~ DAY {skip=1;print $0} /^--*$/ {skip=0} skip==1 {print} '
日付が二行でます。

Fri Aug 10 ・・・
Fri Aug 10 ・・・
****
****
****
Fri Aug 10 ・・・
Fri Aug 10 ・・・

見たいになります。

No. 4833 # 68user 2007/08/15 (水) 17:15:01
>>4832 べた
> ファイルの最後まで見るというつもりでした。
その挙動でよいのであれば、問題ないと思います (実質機能していないと
思うので、書き方としてはまずいですが)。

> 日付が二行でます。
print $0 を削除するなどしてください。

No. 4834 # べた 2007/08/31 (金) 16:07:37
>>4833 68user
お礼遅れてすみません。
ありがとうございました。

No. 4836 # べた 2007/09/27 (木) 10:05:21
前にも同じ質問をしたのですが、
findの検索で、指定ディレクトリ(カレントディレクトリ)内の
ファイルだけを検索し、-mtimeを指定して、30日前のファイルを
削除しようとしています。

配下のディレクトリを検索しないよう、-prune を指定して、まずは、
以下のようにしたのですが、”*.csv”以外が表示されていまいます。

find /home/DATA/backup -name '*.csv' -o -name everyday -prune -o -name monthly -prune -o -name tmp -prune -o -name work -prune -o -print
と実行すると、
カレントディレクトリと、「*.csv」以外のファイルが表示されます。

find /home/DATA/backup -name '*.csv' -o -name everyday -prune -o -name monthly -prune -o -name tmp -prune -o -name work -prune -o -mtime +30
と実行すると、
表示されるのですが、どこのディレクトリを検査した結果かわからない状態でして、

確認と実際は、rm を指定してファイルを削除するで、「-exec ls -l {} \;」
をして表示してみたのですが、
find /home/DATA/backup -name '*.csv' -o -name everyday -prune -o -name monthly -prune -o -name tmp -prune -o -name work -prune -o -mtime +30 -exec ls -l {} \;
と実行すると、
何も表示されません。

find /home/DATA/backup -name '*.csv' -o -name everyday -prune -o -name monthly -prune -o -name tmp -prune -o -name work -prune -o -mtime +30 -print
と実行すると、
何も表示されません。

正しく、結果が表示されるように、
最終的には、30日前とか、90日前のファイルが削除できるように
したいのですが、どのようにすればよいか、
教えてください。

No. 4837 # 68user 2007/09/29 (土) 14:20:52
>>4836 べた
> find /home/DATA/backup -name '*.csv' -o -name everyday -prune -o -name monthly -prune -o -name tmp -prune -o -name work -prune -o -print
> と実行すると、
> カレントディレクトリと、「*.csv」以外のファイルが表示されます。
この結果がすでにマズいんですよね?

前回のわたしの回答
>>4763 68user
は的外れだったような気がします。最終的には以下のようになるのではないかと思います。
    % find /home/DATA/backup -name '*.csv' -mtime +30 -exec ls -l {} \; -o -name everyday -prune -o -name monthly -prune -o -name tmp -prune -o -name work -prune

構造としては
    ・[ファイル名が *.csv] AND [mtime が +30] AND [-exec ls -l]
        OR
    ・[ファイル名が everyday] AND [-prune]
        OR
    ・[ファイル名が monthly] AND [-prune]
        OR
        (略)
となります。

ただし -exec や -prune は常に真で、コマンドを実行する・ディレクトリを下降しない
という副作用を発生させるのが主目的ですので、より平易に書くと
    ・[ファイル名が *.csv] AND [mtime が +30] なら [-exec ls -l] を実行
        OR
    ・[ファイル名が everyday] なら [-prune] で下降抑止
        OR
    ・[ファイル名が monthly] なら [-prune] で下降抑止
        OR
        (略)
となります。なお、ここでの OR は、左辺が真なら右辺は評価しない、
という意味です。また、OR の各要素の順序を入れ替えても、このケース
では問題ありません (*.csv と everyday が両方真になることはないので)。

典型的な -prune の使い方をまとめると以下のようになると考えます。
      - 特定のディレクトリ以外について何か (-print) を行う
              ⇒ find . -name hoge -prune -o -print
      - 特定のパターンのファイルに何か (-ls) を行うが、特定ディレクトリ以下は除外する
              ⇒ find . -name \*.csv -ls -o -name hoge -prune
      - 特定のパターンのファイルに何か (-print) を行うが、特定ディレクトリだけは
          除外する。ただし特定のパターンにも特定のディレクトリにも一致しない場合は、
          別の何かを行う (-ls)。
              ⇒ find . -name \*.csv -print -o -name hoge -prune -o -ls

No. 4838 # べた 2007/10/01 (月) 19:50:45
>>4837 68user
ありがとうございます。
返事遅れてすみません。

一度、内容を読んで、確認してみます。
それで、再度、質問します。

No. 4839 # べた 2007/10/04 (木) 09:37:55
>>4837 68user
ありがとうございます。
期待した結果が得られました。

No. 4840 # まるこ 2007/10/11 (木) 10:40:25
はじめまして。
以下のページを見て質問させていただきます。
http://x68000.q-e-d.net/~68user/net/http-1.html

telnet(WindowsXPに標準でついていたものです)で、
% telnet www.cs.gunma-u.ac.jp 80
とコマンドを打っても、コマンドが無効です、と出てしまいます。
ここで詰まってしまって、先へ進めないでいます。
helpを見てみて、openかなと思ったのですが、それでも接続できない状況です。
googleで検索してもみたのですが、要領を得ませんでした・・・
何か解決法はないでしょうか?
プロバイダからは、特別なproxyを使わないと駄目ですとは言われていません。

よろしくお願いします。

No. 4841 # 68user 2007/10/13 (土) 03:22:19
>>4840 まるこ
telnet の起動の仕方を勘違いしているように見えます。

スタート > すべてのプログラム > アクセサリ で
    コマンド プロンプト
を起動します。するとウィンドウが開き
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:\Documents and Settings\user>
などと表示されるはずです。

ここで
    telnet www.cs.gunma-u.ac.jp 80
とタイプしてください。
    http://x68000.q-e-d.net/~68user/net/win-telnet.html
にあるとおりエコーバックはされませんが、
    GET / HTTP/1.0(Enter)
    (Enter)
とすると取得した HTML が表示されるはずです。「(Enter)」は
XP であれば普通に Enter キー押下でいけると思います。

No. 4842 # yuki 2007/10/16 (火) 20:25:23
はじめまして。
以下のページを参考にさせていただきまして、質問させていただきます。
http://x68000.q-e-d.net/~68user/webcgi/char-code-2.html

以下のように機種依存文字のチェックをさせてみたところ
「丁目」という文字がC3FA CCDCとなり、FACCが90区のチェックに
引っかかってしまいました。

$fradrs = $_POST['adrs'];
$check = mb_convert_encoding($fradrs,'EUC-JP');
if (ereg("\x8E[\xA0-\xDF]|[\xAD\xF9\xFA\xFB\xFC][\xA1-\xFE]", $check)) {

こういった場合はどのように対処したらよいでしょうか。
よろしくお願いします。

No. 4843 # 68user 2007/10/16 (火) 20:41:06
>>4842 yuki
そのページでも紹介していますが、文字単位でマッチさせるために
    http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
という工夫をしています。

PHP であれば mb 系の関数を使えば文字単位で切り出せると思いますが、
いわゆる機種依存文字に対応しているかどうかわからないのでまずは
試してみてください。対応していなければ、上記のようなやり方で
1文字ずつ取り出す必要があるかもしれません。

No. 4844 # yuki 2007/10/19 (金) 14:15:48
>>4843 68user様
ご助言ありがとうございます。
ご案内いただいたページを参考にして以下のように記述したところ
想定通りに動くことを確認できました。

$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';

$fradrs = $_POST['adrs'];
$check = mb_convert_encoding($fradrs,'EUC-JP');
if (ereg("^($ascii|$twoBytes|$threeBytes)*(\x8E[\xA0-\xDF]|[\xAD\xF9\xFA\xFB\xFC][\xA1-\xFE])", $check)) {
    echo "マッチしました。\n";

mb系は私の未熟さゆえかうまく動作しませんでした…。
68user様、ありがとうございました。

No. 4845 # 2323 2007/10/19 (金) 15:22:54
http://x68000.q-e-d.net/~68user/unix/pickup?freebsd-update
freebsd-updateでぐぐると上位に引っかかり、拝見しました。
「あくまで 5.1-STABLEを追っかけている」という記述がありますが、
おっかけている(いた)のは'5.1 security fix branch'(RELENG_5_1)で、
5.1-STABLEというブランチは存在しないです。
また'5-STABLE'も5.1-RELEASEをブランチした直後以外は
5.1相当ではなかったわけなので、やはり5.1-STABLEという記述は
修正されたほうが良いかと思います。

No. 4846 # yuki 2007/10/19 (金) 16:11:44
>>4844 yuki
何度も申し訳ありません。
4844の記述ではうまく動かないですね…。
機種依存文字が文頭にある場合のみ動作して
2文字目以降にある場合にはマッチしてくれないです。
正規表現についてもう少し勉強してきます。

No. 4847 # 68user 2007/10/31 (水) 00:33:11
>>4846 yuki
ダメですかねぇ? あっているような気がしますが。
$_POST['adrs']・$check のデータを明示いただければ何かしら回答できるかもしれません。

>>4845 2323
よく理解していないので確認させていただきたいのですが、
    「あくまで 5.1-STABLE を追っかけているに過ぎない」

    「あくまで '5.1 security fix branch' (RELENG_5_1) を追っかけているに過ぎない」
とすれば正確な表現と言えるでしょうか。

No. 4848 # yino [E-mail] 2007/11/09 (金) 03:18:57
はじめまして。
突然ですが、ご教授ください。

私は今、大学4年生で卒業研究をしているのですが、ネットワークプログラムを作る必要が出てきてしまいました。
ですが、私はプログラミングは全くの初心者で、どの言語を使えば良いのか、何から始めればいいのかもよく分かりません。
どなたかアドバイスや、参考となりそうなプログラムやサイトを教えて頂けませんか?

OSはKNOPPIXで、アドホックモード(OLSR)での動画の転送をしたいです。
転送さえできればいいとのことなので、プログラム自体は簡単なものでいいようです。

場違いな質問かもしれませんがよろしくお願いいたします。

No. 4849 # バンガード 2007/11/09 (金) 09:14:02
>>4848 yino
残念ながら聞いた事もないOSですので、お力になれません。
ただ、この様な場合、ひたすら検索サイトでキーワードを入れて検索してみてはいかがですか?
就職しても、この辺りは変わりません。
まずは、片っ端から検索して自分の目的としている情報が載っているサイトを探してみましょう。

No. 4850 # 68user 2007/11/09 (金) 09:38:11
>>4849 バンガード
OLSR はプロトコルのようです。

>>4848 yino
わたしなら
    1. まわりに言語の有識者がいるか
    2. その言語向けのネットワークプログラミング関連の書籍が出版されているか
    3. ネットワークプログラミング向きか
    4. プログラミング初心者が扱いやすい言語か
という観点で考えます。

1 は、まわりを見渡してください (Java が多いのではないかと想像しますが)。
これが最重要だと思います。

2 は、Java が一番、次点が Perl でしょうか。PHP・Ruby はこの点は弱い。

3 は、本質的にはどの言語でも同じでしょうが、PHP などは無駄にハマりやすそうな
気がします。

4 は、まぁ Java ではないかと。


個人的には、Java がイチオシ、次点が Perl です (自分が書くなら Perl か Ruby)。

No. 4851 # yino [E-mail] 2007/11/09 (金) 14:51:27
>>4850 バンガードさん、 >>4849 68userさん
ありがとうございました。
とりあえずは周りの人から話を聞いてみたいと思います。
あとはJavaの本を読んでいきたいと思います。

また壁にあたったときはここに来ると思いますので、よろしくお願いします。

No. 4852 # aki 2007/11/12 (月) 15:55:35
はじめまして。
いきなりですが教えてほしいことがあります。

大学の課題でサーバの存在するマシンのカレントディレクトリにおけるファ
イル一覧を表示する。
<LIST>と打ち込むとファイルの一覧を表示する
<GET ファイル名>打ち込むと、ファイルの内容を表示する
<PUT ファイル名>でファイルをアップロードする。
<QUIT>と打ち込むとサービス終了。と言うプログラムを作っていたのですが
うまく実行できません。どこが間違っているか教えていただけませんか。

#include <netdb.h>
#include <stdio.h>
#include <fcntl.h>

#define BUFMAX 45
#define PORT_NO 10092
#define Err(x) {fprintf(stderr,"server- ");perror(x); exit(0);}

static char rmsg[10], smsg[BUFMAX];
static int sofd, nsofd;
static struct sockaddr_in sv_addr, cl_addr;
static struct hostent *shost;
static char shostname[100];

int msgpro(void);

int main(int argc, char **argv)
{
    int cadlen;
    DIR *dirHandle;
    struct dirent *dirEntry;

    dirHandle=opendir(".");
          if(dirHandle){
              while(0!=(dirEntry=readdir(dirHandle))){
     puts(dirEntry->d_name);
              }
              closedir(dirHandle);
          }

    sofd = socket(AF_INET, SOCK_STREAM, 0);
    if(sofd < 0)
        Err("socket");
    if(gethostname(shostname, sizeof(shostname)) < 0)
        Err("gethostname");

    shost = gethostbyname(shostname);
    if(shost == NULL)
        Err("gethostbyname");

    bzero((char *)&sv_addr, sizeof(sv_addr));
    sv_addr.sin_family = AF_INET;
    sv_addr.sin_port = htons(PORT_NO);
    memcpy((char *)&sv_addr.sin_addr, (char *)shost -> h_addr, shost -> h_length);

    if (bind(sofd,(struct sockaddr *)&sv_addr, sizeof(sv_addr)) < 0)
          Err("bind");

          if(listen(sofd, 1) == -1)
          Err("listen");

          while(1){
              cadlen = sizeof(cl_addr);
              if((nsofd = accept(sofd, (struct sockaddr *)&cl_addr, &cadlen)) <0)
     Err("accept");
            

              if(fork() == 0)
     if(msgpro()==-1){
     close(nsofd);
     printf("END SERVER\n");
     if(shutdown(nsofd, 2) < 0)
     Err("shutdown");
                      close(nsofd);
     exit(1);
     }
                  close(nsofd);
          }
  }

int msgpro(void)
{
    int cc, cadlen,nbyte;
    FILE *fp;

    DIR *dp;

    struct dirent *p;
    char *tmp[100];
    int i,f;
    i=0;
    close(sofd);

    if(recv(nsofd, rmsg, 10, 0) < 0){ perror("recv");}

    printf("%s\n",rmsg);
    
    if(strcmp(rmsg,"QUIT:")==0){
        return -1;}
    

    if(strcmp(rmsg,"LIST:")==0){
            printf("LSIT:\n");
            dp=opendir("./");
            while((p=readdir(dp))!=NULL){
     tmp[i]=p->d_name;
     strcat(tmp[i],"\n");
     i++;
            }
            closedir(dp);
            tmp[i]=".";

            for(f=2;f<=i;f++){
    nbyte = strlen(tmp[f]);
                if(send(nsofd, tmp[f], nbyte, 0) < 0)
     perror("send");
    }
    }else{
        int i;
        char filename[10];
            if(strncmp(rmsg,"GET:",4)==0){
                printf("%s\n",rmsg);
    for(i=4;i<=strlen(rmsg);i++){
     filename[i-4]=rmsg[i];
    }
    fp = fopen(filename,"r");
    while(fgets(smsg, BUFMAX, fp) != NULL){
     nbyte = strlen(smsg);
     if(send(nsofd, smsg, nbyte, 0) < 0)
     perror("send");
    }
    fclose(fp);
            }else{
     if(strcmp(rmsg,"QUIT:")==0){
     printf("shutdown\n");
     return -1;
     }else{
     printf("Command not Fountd.\n");
     strcpy(smsg,"Command not Found.\n.");
     nbyte = strlen(smsg);
     if(send(nsofd, smsg, nbyte, 0) < 0)
     perror("send");
     }
            }
    }

    if(shutdown(nsofd, 2) < 0)
        Err("shutdown");
        close(nsofd);
        exit(0);
}

No. 4853 # 68user 2007/11/12 (月) 16:07:19
>>4852 aki
> うまく実行できません。
何をどうしたらどうなるのか明示してください。

No. 4854 # aki 2007/11/12 (月) 16:13:39
>>68userさん
すみません。
実行した後にLIST、GET ファイル名、PUT ファイル名、QUITなど打ち込んでもなにも
おきないんです。

No. 4855 # 68user 2007/11/12 (月) 16:59:12
>>4854 aki
提示いただいたプログラムはサーバ側のプログラムであって、
    1. サーバを実行する
    2. 別途 telnet コマンドなどを用いてクライアント側からサーバにアクセス
          (telnet localhost 10092 など)
    3. そこで LIST などをタイプする
というものですが、それは理解した上での質問でしょうか?

もし理解していないのであれば、まずはまわりの人に聞くとか、資料を
もっと読むなどして概念を理解してからでないと効率が悪いと思います。

プログラム自体については、telnet 上から
      LIST:(Ctrl-D)
などと変な送信の仕方をする必要がありましたが、一応動くようです。

No. 4856 # aki 2007/11/12 (月) 17:08:01
>>4855 68userさん
ありがとうございます。
よく理解できてなかったみたいなのでもう少し友達に聞いてみます

No. 4857 # aya 2007/12/06 (木) 01:00:19
今度大学の課題でマルチスレッドサーバを作成することになったので、
http://x68000.q-e-d.net/~68user/net/echo-4.html
を参考にマルチスレッドサーバについて勉強している者です。
そこで、素朴に疑問があるのですが、
このページに書いてある内容は、本当にマルチスレッドなのでしょうか?
マルチスレッドというと処理が平行して行われるという認識なのですが、
この実装では多数のソケットからデータが到着したソケットを順次選択して
処理をする、というように見られるのですが・・・。
これはマルチスレッドサーバと呼んでもよろしいのでしょうか?

No. 4858 # masa 2007/12/09 (日) 08:57:28
HTTP1.1でKeepAliveでHTTPSサーバに接続した場合に、サーバからの
レスポンスの長さが短い(500バイト以下程度)場合、クライアントが
タイムアウトとなりサーバからのレスポンスが読めません。
サーバ・クライアント共にFEDORAを使用しており、クライアントは
TCP/IPのソケット、OpemSslを使って作成しています。
対処方法は何かありますでしょうか?

No. 4859 # 68user 2007/12/12 (水) 18:59:29
>>4857 aya
どうなんでしょうか。以前に同様の指摘があった場合は
>>3223 int
>>3224 68user
>>3226 Netboy
>>3227 68user
というところで止まっています。その後、わたしの知識は増えていないため、
まだ疑問のままです。

>>4858 masa
ソースを提示願います。


なお、本日より数日〜数週間の間、返事がしにくい状況になりそうなので、
ご了承ください。

No. 4860 # masa 2007/12/13 (木) 00:31:00
>>4859 68user さん

解決しました。
読み込もうとしているバッファサイズが大きすぎたようです。

No. 4861 # toshi7 2008/01/11 (金) 22:42:16
remshについて知っている方はご教授願います。
環境:HP-UX 11

今シェルを作成しているのですが、あるAPサーバのシェルの中でremshをして他のDBサーバでミドルのコマンド(HiRDBのスケジューラ)
の結果とそのリターン値の標準出力をファイルに吐き出すと言う処理をしています。
$USER_Aでシェルを実行(HOST=DBサーバ)
# remsh $HOST -l $USER_B -n ". .profile 2>&- ; \$DIR/bin/HiRDBのコマンド ; echo \$? " > $FILE

この場合開発環境ではうまく標準出力の結果をファイルに吐き出せるのですが、
顧客本番環境ではうまくいきません。
結果を見る限り、.profileが読み込めてない、またはミドルのコマンドが読み込めていない、と言った感じです。
ちなみに、DBサーバ側の$USER_Bの.rhostsには[APサーバ $USER_A]が記載されています。

この際remshの後のコマンドが実行されていない原因として疑わしき点を教えていただきたいです。
たとえば.profileに問題ありなど…。
お願いいたします。

No. 4862 # 68user 2008/01/12 (土) 11:29:45
>>4861 toshi7
思いつくのは

- remsh 後のカレントディレクトリが異なる
- ログイン後の環境変数が異なる
- 出力先のパーミッションが異なる
- HiRDB のコマンドの場所が異なる
- HiRDB のコマンドがエラーとなっている
        → HiRDB を実行するのではなく、適当な自作プログラムを実行し、
              起動されているかどうかログ等に記録する
- 標準エラー出力を閉じているので、HiRDB の標準エラー出力への
    出力が出力されていない (もしくは write(2) でエラーになるため
    途中でこけている)

くらいでしょうか。

No. 4863 # toshi7 2008/01/17 (木) 22:57:54
>>4862 68user
68userさん
ありがとうございます。
調査を進めているところですが、HiRDBのコマンドでエラーになっている可能性が大です。
また、今週or来週中にもremshのテストができる予定ですので、
# remsh $HOST -l $USER_B -n ". .profile 2>&- ; \$DIR/bin/HiRDBのコマンド ; echo \$? " > $FILE 2>&1
で標準エラーを出力してみます。
ちなみにサーバ側の"last | more"の結果を見る限りremsh自体は届いているようでした。

また、テストの結果不明点がありましたら、質問させていただいてもよろしいでしょうか?
宜しくお願いします。

No. 4864 # 68user 2008/01/20 (日) 20:23:55
少しずつですが
    UNIXの部屋
        http://x68000.q-e-d.net/~68user/unix/
の各コンテンツを手始めに、Web 全体のデザインを変更していきます。
もし不具合があれば教えていただければ幸いです。

No. 4867 # Ponta [E-mail] 2008/01/27 (日) 13:07:52
68userさま。いつも、初心者に有り難いサンプルをたくさんご提供いただき
ありがとうございます。
HttpClientHttpURLConnectionを走らせたところ、ブラウザで見ると日本語の部分
が、文字化けしています。yahooのページを始め、いくつか試したのですが同じ
状態です。化けないようにするにはどうしたら良いのでしょうか?
お忙しい中恐縮ですが、どなたかご教示下さい。

No. 4868 # 68user 2008/01/30 (水) 13:41:40
>>4867 Ponta
http://x68000.q-e-d.net/~68user/net/java-http-url-connection-1.html
ですよね?

「ブラウザで見ると」の意味がわかりません。実行例にあるとおり、
コマンドラインからの実行を前提としています。

No. 4869 # しも [E-mail] 2008/02/06 (水) 10:33:11
初めて質問させていただきます。
12月から本格的にUNIXの勉強を始めて、現在はHP-UXの業務に就いております。
参考資料を購入したり、netで調べるもどうしても見つからない。。

質問内容:
ファイルサイズをbyteで表示させるコマンドが知りたいです。

データ移行作業をしているので、移行前マシンと移行後のマシンでの
容量チェックをしなくてはいけなくて。。。
大変初歩的質問で申し訳ないのですが、ご教授下さい。

※HP-UX 11iを使用しております。

No. 4870 # 68user 2008/02/06 (水) 11:42:01
>>4869 しも
よくわかりませんが ls(1) の結果は使えないんでしたっけ?
あとは cksum・wc・find とか。それ以外なら awk・perl あたりでしょうか。

cksum
    http://docs.hp.com/ja/B2355-60129/cksum.1.html
wc
    http://docs.hp.com/ja/B2355-60129/wc.1.html
find . -ls
    http://docs.hp.com/ja/B2355-60129/find.1.html

No. 4871 # しも [E-mail] 2008/02/06 (水) 17:47:36
>>4870 68user
ありがとうございます。
ファイル個々のサイズはcksumやwcで確かに確認できました。
ディレクトリのサイズはbyte表示させる事は不可能なのでしょうか?

duを使用しましたが、KBだったのとブロック単位でした。

No. 4872 # 68user 2008/02/06 (水) 20:57:05
>>4871 しも
HP-UX に限らず、du ではブロックカウント機能しかないと思います。
    http://sonic64.com/2004-05-26.html
のように自前でカウントするしかないでしょう。

No. 4873 # 大臣 2008/02/07 (木) 15:45:40
cygwinでbash not find :bash.exeというエラーがでんだけどどうすれば
いいか教えろ!!!!!どーせ暇だろ!ニート諸君、俺様の変わりに調べろ!
パスの設定はしてある。
俺も暇じゃないから5分やるですぐ調べて返信しろ。貴様らは蛆虫だ。
./bashrc等も完璧
しかーーーーし動かん。楽勝だて。

No. 4874 # ふくし 2008/02/08 (金) 17:11:14
お世話になります。
質問のときだけ現れてスミマセン。
Perl で、

filename -> title
aaa.html -> aaaについて
bbb.html -> bbbについて
ccc.html -> cccについて

みたいなタブ区切りのテキストを読んで処理するとき、カンタンには

while (<>) {
    ($filename, $title) = <>;
}

のようにすると思いますが、1行目に見出しが入っていて、
これを捨てたいと思います。

今は、

$trash = <>;
while (<>) {
    ($filename, $title) = <>;
}

のようにしていますが、
$trash が1回しか使われていませんが書き間違いではありませんか、
という警告が出ます。
警告だから無視すればいいようなものですが、
もっとスマートな書き方はあるでしょうか。

No. 4875 # 68user 2008/02/08 (金) 17:20:10
>>4874 ふくし
- <>;
- my $trash = <>;
- (undef)=<>;
のいずれかでどうでしょうか。Perl5.8.8 では問題ありませんでした。

No. 4876 # ふくし 2008/02/08 (金) 17:51:25
>>4875 68user
さん、ありがとうございます。
いずれも 5.10.0 でもうまくいきました。

(undef) = <>;

というのは自分で思いついていたんですが、
リストコンテクストで評価されて、
全部の行が代入されたのち2行目以降は捨てられる
(1行目も undef だから捨てられる)
ような気がしていました。
ありがとうございます。

No. 4877 # 68user 2008/02/08 (金) 18:48:31
>>4876 ふくし
ああそうですね。書くなら
    (undef)=scalar(<IN>);
でしょうか。しかし仕事でこのコード見たらイラッとしますねぇ。

No. 4878 # has 2008/02/09 (土) 00:08:12
>>4873 大臣
ご期待に沿えず残念ですが、たぶん多忙で善良なプロの皆さんとかからの
回答になると思います。
どのくらい完璧か晒したら進言あるかもですよ。

No. 4879 # ふくし 2008/02/13 (水) 10:56:17
そういえば(どういえばだ)以前(数年前)Perl で

goto FIN;
sub foo {}
FIN:

だとエラーになるけど

goto FIN;
FIN:
sub foo {}

または

goto FIN;
sub foo {}
FIN:
;

だとダメ、という件があったんだけど、急に思い立って perlbug してみました。
2時間後に返事が来て(すげえな)perlsyn に書いてあるけど
それはバグではない、ラベルの後には1個以上の文がなければならないと
いうことです。FAQらしいですね。

No. 4883 # しも [E-mail] 2008/02/14 (木) 15:55:49
>>4872 68user
返信が遅くなりました。
68userさんの仰るように、自分でツールを作成する必要がある事を理解しました。
awkを使って作成しようと思います。
初めて作るので、時間がかかりそうですが結果はまた報告にきます。
ありがとうございました。

No. 4884 # ふくし 2008/02/15 (金) 01:20:39
>>4883 しも
さん、

どっちみち初心者だったら awk より Perl をおすすめします。
汎用性があるし可読性も高くできると思います。
ちょっと書いてみるとこんな感じでしょうか。

★さしでがましければすみません。ここで読むのやめてください ^^





#! /bin/perl -w
# dsize -- カレントディレクトリ以下のファイルサイズを集計

use File::Find;

$total = 0;
find(\&fileProc, '.');
print "Total\t$size\n";

sub fileProc {
    return unless -f $_;
    $size = -s $_;
    print "$File::Find::name\t$size\n";
    $total += $size;
}

No. 4885 # maya 2008/03/04 (火) 16:06:17
初歩的なことなんですが教えてください。
tar.gz な書庫にファイルを追加したい場合、
いちいちgunzipしないといけないんでしょうか?

なにかスマートな方法はあるんでしょうか?

No. 4886 # つのりん [E-mail] 2008/03/23 (日) 20:10:01
はじめまして、つのりん と呼んでください。

早速ですがx68k専用マウスが故障しました。

症状はとしては、カーソルは全く異常なく動作しますが、クリックが左右ともできなくなりました。原因はボタン下のマイクロスイッチの故障ではないかと思われます。

なにか対策法はありませんか?

よろしくお願いします。

No. 4887 # mm 2008/03/24 (月) 06:42:58
はじめまして。
http://x68000.q-e-d.net/~68user/unix/pickup?find
findの説明のところで、
-atime 4 4日前にアクセスされたファイル
-ctime 4 ちょうど4日前にファイルステータスが変更されたファイル
-mtime 4 ちょうど3日前に修正されたファイル
と、mtimeだけ3日前となっていますが、これは間違いでしょうか?

No. 4888 # べた 2008/03/25 (火) 12:40:27
findで、検索する文字が複数出てくる場合の
記述について教えてください。

あるディレクトリに、以下の様な「YYYYmmdd」形式の
ディレクトリが存在した場合ですが、名前がすべて、
「0〜9」の数字であるディレクトリのみを表示したい
のですが、どのように書けばよいのでしょうか。

find . -name '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' -type d
で表示されるのですが、
[0-9]を8回書く以外に、違った書き方はないでしょうか。

find . -name '[0-9]*[0-9]' -type d
find . -name '[0-9]......[0-9]' -type d
find . -name '[0-9]*......[0-9]' -type d
find . -name '[0-9]......*[0-9]' -type d
とかしてみたのですが。



/tmp配下に、
20080301
20080302
20080303
20080303.bk
a0080304
2008030a
200a0306
200080307

No. 4889 # 68user 2008/03/25 (火) 17:25:53
>>4885 maya
> tar.gz な書庫にファイルを追加したい場合、いちいちgunzipしないといけないんでしょうか?
r で追加できますが、gzip してある場合はできないようですので、gunzip が必要と
思われます (BSD tar と GNU tar で確認)。

>>4886 つのりん
ヤフオクによく出品されているように見えますので、チェックしてみてはどうでしょうか
今は「キーボード & マウス [未使用]」が出てますね。

>>4887 mm
> と、mtimeだけ3日前となっていますが、これは間違いでしょうか?
ありがとうございます。誤りでしたので修正いたしました。

>>4888 べた
Perl の正規表現 (PCRE) であれば [0-9]{8} もしくは \d{8} ですが、POSIX における
基本正規表現や拡張正規表現では上記のような表現はできませんので、find にこだわる
のであれば 8回書くしかないです。

あるいは、
    ・File::Find を使った perl のワンライナーでがんばる
    ・シェル変数を使う
            csh・tcsh の場合:
                % set x='[0-9]'
                % find . -name "$x$x$x$x$x$x$x$x"
            sh・bash の場合:
                % x='[0-9]'
                % find . -name "$x$x$x$x$x$x$x$x"
など。

No. 4890 # べた 2008/03/25 (火) 18:30:49
>>4889 68user

ありがとうございます。

No. 4891 # べた 2008/03/26 (水) 15:09:22
perlの使い方なのですが、

日付と時間を表示する簡単なものを作りました。
実行したら動いたのですが、ところが、下記のような
メッセージが出ました。

------------------------------------------------------------
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
                LC_ALL = (unset),
                LANG = "ja_JP.PCK"
        are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
------------------------------------------------------------

このメッセージを表示させないようにするには、どうしたらよいか
教えてください。

環境は、Solari8

以下、perlのシェルスクリプト
------------------------------------------------------------
#!/usr/local/bin/perl
#

($day, $mon, $year) = (localtime(time))[3..5];
printf("Today : %04d/%02d/%02d\n",$year+1900,$mon +1,$day);

($sec, $min, $hour) = (localtime(time))[0..2];
printf("Time : %02d:%02d:%02d\n",$hour,$min,$sec);
------------------------------------------------------------

No. 4892 # maya 2008/03/26 (水) 18:52:55
>>4889 68user

なるほど。ここらへんはzipやrarなどと比べると不便ですね。
ありがとうございました。

No. 4893 # 68user 2008/03/26 (水) 18:54:47
>>4891 べた
「perl: warning: Setting locale failed」で検索すれば出てきますが、
環境変数 PERL_BADLANG を設定することで回避可能です。詳細は検索願います。

No. 4894 # つのりん [E-mail] 2008/03/26 (水) 19:31:35
>4889
ありがとうございます。ヤフーのオークション
で見てみます。

No. 4895 # べた 2008/03/27 (木) 11:29:44
>>4893 68user

ありがとうございます。

perlのスクリプトを実行時のみ有効にしたいのです。
perlのスクリプト内で記述する場合はどのように
定義すればよいのですか。

No. 4896 # 68user 2008/03/27 (木) 11:44:00
>>4895 べた
perl コンパイルの際の Configure 時に設定する方法があります。

それが無理なら
    #!/bin/sh
    PERL_BADLANG=0 /foo/bar/baz.pl
と wrapper を作るか、env コマンドで
    #!/usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl
とする手もあります。

No. 4897 # べた 2008/03/27 (木) 12:55:00
>>4896 68user
ありがとうございます。

#!/usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl
#

とperlのスクリプト内に記述して、実行したのですが、
処理がとまったというか、何も応答が返ってきません。

No. 4898 # 68user 2008/03/27 (木) 23:05:24
>>4897 べた
なるほど FreeBSD 5.2.1-RELEASE では動きますが、Linux では確かに
無限ループしてますねぇ。

> #!/usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl
これは FreeBSD 5.2.1-RELEASE では
    /usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl ./hoge
と解釈されますが、Linux や Solaris では
    /usr/bin/env "PERL_BADLANG=0 /usr/local/bin/perl" ./hoge
となるため
    PERL_BADLANG="0 /usr/local/bin/perl"
という環境変数が設定されつつ
    /usr/bin/env ./a
が実行されるものの、./hoge のシェバング行にはまた同じ内容が
書かれているため、永遠に
    execve("./a");
が実行されるということですね。

参考:
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%D0%A5%F3%A5%B0
    の Tips.2

というわけで env コマンドを使うやり方は移植性がありませんでしたが、
    #!/bin/sh
    PERL_BADLANG=0 /foo/bar/baz.pl
なら動くと思います。Linux では動きました。

No. 4899 # べた 2008/03/28 (金) 12:53:23
>> 4898

> #!/bin/sh
> PERL_BADLANG=0 /foo/bar/baz.pl
>なら動くと思います。Linux では動きました。
で動きました。

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

No. 4900 # 68user 2008/04/02 (水) 19:10:27
さきほどお問い合わせページよりご指摘いただきました、ジャンル一覧リンク切れの件、
修正しました。ご指摘ありがとうございます>連絡いただいた方

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