68user's page 掲示板

Prev< No. 4201〜4240> Next  [最新発言に戻る] [過去ログ一覧]
No. 4201 # 中川 2005/07/26 (火) 17:17:23
大変早いお返事本当にありがとうございます。
とても悩んでいたので助かりました。
一番上にPostgreSQL と書くべきでした。
PostgresでdblinkとForeign keyを使うのは無理でしたか。
dblink以外を使って他のデータベースのテーブルをForeign key制約
に指定する方法はないのでしょうか?
上司に無理です。と言い切るしかないかもしれません。

No. 4202 # 68user 2005/07/26 (火) 17:57:28
>>4201 中川
外部キーにこだわるなら、
    - 定期的に他データベースからデータを取得してローカルのテーブルに入れる
    - 他データベースからトリガでローカルのテーブルに反映する
くらいしかないのでは、とわたしは思います。

No. 4203 # 中川 2005/07/26 (火) 19:13:54
大変早いお返事本当にありがとうございます。
とても悩んでいたので助かりました。
一番上にPostgreSQL と書くべきでした。
PostgresでdblinkとForeign keyを使うのは無理でしたか。
dblink以外を使って他のデータベースのテーブルをForeign key制約
に指定する方法はないのでしょうか?
上司にForeign keyにdblinkは無理です。と言ったところ、

データベースA データベースB  

テーブルT_A テーブルT_B

    A B C A B C

    1 0 0
    2 0 0
    3 0 0
        
データベースAのテーブルT_Aの列E_1の選択した値だけ(1だけ や 2だけ)を
データベースBのテーブルT_Bの列 Aに、INSERTする。
そのときテーブルT_Bの列BにはデータベースBのテーブルT_Cの列BをINSERT
し、Cにはすきな値を入れる。

という処理をする事になりました。
dblinkとビューを使ってデータベースBのテーブルT_Bに変わるものを作れば
いいと思ったのですが、selectした値をそれぞれの列に入れ込む処理が見当
たらず停滞しています。

いい案がありましたらよろしくお願いします

No. 4204 # 68user 2005/07/27 (水) 00:53:28
>>4203 中川
- 最終的に何をしたいのか
- 現状のどこが問題なのか

を読み取ることができません。

No. 4205 # 中川 2005/07/27 (水) 10:43:24
わかりづらくて申し訳ありませんでした。
やりたい処理は

テーブル1の列Aには、テーブル2の列A
テーブル1の列Bには、テーブル3の列B
テーブル1の列Cには、その場で作った
値をINSERTさせる という処理がした
いのですが、解決策が見つかりません。
副問いで、SELECTした値をINSERTさせ
ようとしたのですが、SELECTは一つし
か使えないようなので複数SELECTして
それぞれの列にINSERTさせるというの
は無理なのでしょうか。

No. 4206 # 68user 2005/07/27 (水) 11:00:31
>>4205 中川
INSERT INTO T1 (A, B, C)
    SELECT T2.A, T3.B, 'HOGE'
        FROM T2, T3
      WHERE (T2 と T3 に関する条件)

ということですか?

手元に PostgreSQL はないので確認できませんが、Oracle では一応動きました。

No. 4207 # 中川 2005/07/27 (水) 21:54:05
何度もありがとうございました。大変助かりました。
SQL初心者なのでこれを機にテクニカルを身に付けようと思います。

度々すみませんが、また質問です
昨日の質問なのですが、データベースの異なるテーブル
にトリガーを使って外部キーをつけるという処理を
今日一日悩んだのですが、トリガーを使ったことがなく、
少しも理解できていません。
トリガーを使って異なるデータベースのテーブルに外部キ
ー制約を行う方法を教えていただけないでしょうか。

No. 4208 # 68user 2005/07/27 (水) 23:36:50
>>4207 中川
またそこから始めるんですか? 全然 4202 から状況が変わってないように見えますが、
4203-4206 のやりとりは何だったんでしょうか。

まぁ、それはそれとして、トリガを使う案は

    - DB1 にテーブル T1、DB2 にテーブル T2 がある
    - DB1 の T1 のカラム A には、DB2 の T2 のカラム A に存在する値しか入れたくない
    - しかし PostgreSQL の外部キーでは、dblink を使えないようだ
    - ならば DB2 の T2 と同じ内容のテーブル T2 を DB1 にも作って、そこに外部キーを設定しては
    - となると DB2 の T2 と、DB1 の T2 の間でテーブル内容の同期をとる必要がある
    - では DB2 の T2 にトリガをセットして、T2 に対する INSERT・UPDATE・DELETE が
        発生したら、自動的に DB1 の T2 に同じデータを反映するようにするのがいいのでは

というものです。DB2 の T2 がごくまれにしか更新されないテーブルであれば、
トリガを使う必要はないかもしれません (30分に一回 INSERT INTO SELECT
で DB2 の T2 の内容を DB1 の T2 にコピーするとか)。

別の案としては、DB1 の T1 に INSERT・UPDATE がかかったときに、トリガで
DB2 の T2 のカラム A を見にいって、データが存在しなかったら RAISE して
エラーにする、というのもあります。
    http://www.postgresql.jp/document/pg803doc/html/plpgsql-errors-and-messages.html

いずれも何も試さずに言ってます。念のため。

No. 4209 # まつ 2005/07/29 (金) 18:18:09
皆様こんにちは。
ここはcshの質問をしても宜しいのでしょうか?
sedを使ってCSVファイルをTSVファイルに変換しようとしているのですが
変換元と変換先のファイル名にシェルの引数を認識してくれません。


if ($4 == CSV) then
        #TSVに変換
        sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw $LOG_DIR/$1.bad'
endif

アクセス権がありませんとか、オープンできませんというエラーになります。
下記のようにフルパスにすると正常に処理してくれます。
sed -e 's/","/ /g' /disk1/FNC021.bad | sed -n -e 's/"//gw /disk1/FNC021.bad'

ファイル名を「`」でくくったり\でエスケープ?してみましたがダメでした。
sedを知らないので頓珍漢なことをしているのかもしれません。
有識者の皆様、助けて下さい。m(_ _)m

No. 4210 # まつ 2005/07/29 (金) 18:46:39
すみません!!!
過去ログを眺めていて、適当に
sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw '$LOG_DIR/$1.bad''
と’’をつけたら動いてしまいました。。

どうもお騒がせしました。m(_ _)m m(_ _)m

No. 4211 # 68user 2005/07/29 (金) 23:03:10
>>4210 まつ
今後は
    #!/bin/csh -fx
などと -x オプションを付けてデバッグすることをお勧めします。

No. 4212 # まつ 2005/07/30 (土) 12:51:12
こんにちわ。

スクリプト内1行目に-fxオプションをつければよいのでしょうか?
知りませんでした。。御恥ずかしい。
どのような結果になるのか月曜にでも確認してみます。

どうもありがとうございました! m(__)m

No. 4213 # 68user 2005/08/01 (月) 01:26:00
UNIX の部屋を更新しました。
    http://X68000.q-e-d.net/~68user/unix/

未稿の部分が多くて恐縮ですが、書けども書けども終わりが見えないので、
いったん公開することにします。

No. 4214 # seki [E-mail] 2005/08/02 (火) 13:19:58
はじめまして、sekiと申します。

ftpに関しまして、分からない事があり質問させて頂きます。
どなたかご存知の方おられましたら、ご教示をお願い致します。

【環境】
・Solaris8
・in.ftpdを使用

【問題】
・バッチ処理にて、バーチャルIPでftpを行い、他ホストに作成された
    ファイルを取得する。
    ネットワーク障害時や他ホストdown時、バーチャルIPが見えなくなる場合、
    ftpのconnect:接続の時間切れとなるが、その場合約4分も待たされる。
    
【知りたい事】
・上記のような障害時、1ノードで約4分も待たされるのは長いので、設定で
    短く出来るのであれば短くしたい。

【検証】
    (1) OSパラメータのtcp_time_wait_interval=240000(4分)になっていたので、
     ftpがconnect_timeoutになるのは、上位のTCPのタイマーに引っかかるのでは
         と思い、nddコマンドにて60000(1分)にしてinetdデーモンを、kill -HUPした。
         変更後、バーチャルIPが見えないHostに対しftpを行なったが、以前4分で
         ftp_connect:接続の時間切れとなる。

    (2) /etc/inet/inetd.confの、ftp記述部分を下記のように-tオプションにて
         タイムアウトを設定し、inetdデーモンを、kill -HUPした。
         こちらも変更後、バーチャルIPが見えないHostに対しftpを行なったが、
         以前4分でftp_connect:接続の時間切れとなった。

    ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d

※ 下記のURLを参考にさせて頂きましたが、FTPクライアントがFTP サーバに
        PORTコマンドを投げて応答なしで、データ用コネクションも張れない場合は
        どこの設定でクライアントはtimeoutを判断するのでしょうか?
        私の推測のようにTCPに依存するものなのでしょうか?

        http://x68000.q-e-d.net/~68user/net/ftp-1.html

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

No. 4215 # seki [E-mail] 2005/08/02 (火) 13:30:18
はじめまして、sekiと申します。

ftpに関しまして、分からない事があり質問させて頂きます。
どなたかご存知の方おられましたら、ご教示をお願い致します。

【環境】
・Solaris8
・in.ftpdを使用

【問題】
・バッチ処理にて、バーチャルIPでftpを行い、他ホストに作成された
    ファイルを取得する。
    ネットワーク障害時や他ホストdown時、バーチャルIPが見えなくなる場合、
    ftpのconnect:接続の時間切れとなるが、その場合約4分も待たされる。
    
【知りたい事】
・上記のような障害時、1ノードで約4分も待たされるのは長いので、設定で
    短く出来るのであれば短くしたい。

【検証】
    1 OSパラメータのtcp_time_wait_interval=240000(4分)になっていたので、
     ftpがconnect_timeoutになるのは、上位のTCPのタイマーに引っかかるのでは
         と思い、nddコマンドにて60000(1分)にしてinetdデーモンを、kill -HUPした。
         変更後、バーチャルIPが見えないHostに対しftpを行なったが、以前4分で
         ftp_connect:接続の時間切れとなる。

    2 /etc/inet/inetd.confの、ftp記述部分を下記のように-tオプションにて
         タイムアウトを設定し、inetdデーモンを、kill -HUPした。
         こちらも変更後、バーチャルIPが見えないHostに対しftpを行なったが、
         以前4分でftp_connect:接続の時間切れとなった。

    ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d

※ 下記のURLを参考にさせて頂きましたが、FTPクライアントがFTP サーバに
        PORTコマンドを投げて応答なしで、データ用コネクションも張れない場合は
        どこの設定でクライアントはtimeoutを判断するのでしょうか?
        私の推測のようにTCPに依存するものなのでしょうか?

        http://x68000.q-e-d.net/~68user/net/ftp-1.html

No. 4216 # 68user 2005/08/02 (火) 13:49:52
>>4215 seki
> tcp_time_wait_interval=240000(4分)になっていたので、
tcp_time_wait_intrval は TIME_WAIT な時間を設定するものなので、
関係ありません。
    http://docs.sun.com/app/docs/doc/816-0607/6m735r5ga?a=view

> ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d
タイムアウト設定をしたいのは ftp であり、ftpd ではないので
関係ありません。そもそもネットワーク障害や他ホストが down して
いるのであれば、ftpd まで行き着いていません。

今回設定したいのは、
    http://X68000.q-e-d.net/~68user/net/tcp-connect-1.html
における connect のタイムアウト時間と思われますが、OS の設定で
変更できるかどうかは知りません。ただし、普通は OS の設定は変更
しません。たとえば今後、
    - FTP 接続だけは 10秒でタイムアウトさせたい
    - それ以外のプログラムでは 4分待たせたい
というときにどうしようもなくなるからです。

対策としては、
    - ftp に -T [タイムアウト秒数] オプションを付ける (試していませんが)
    - ftp の前に ping してみる (タイムアウト秒数を指定)
    - 監視用プロセスをたて、一定時間反応がなければ ftp を kill する
てな感じでしょうか。

No. 4218 # seki [E-mail] 2005/08/02 (火) 16:31:10
>>4216 68user
> たとえば今後、
> - FTP 接続だけは 10秒でタイムアウトさせたい
> - それ以外のプログラムでは 4分待たせたい
> というときにどうしようもなくなるからです。

→ 誠に早急なご返答、及びご教示の程、ありがとうございます。
        上記の返答、ごもっともです。
        - ftp に -Tをつけるのは、一つの手だと思いますが、APLに手を
        入れる事なく設定変更で済ませれるのであれば済ませたいです。

        申し訳ございませんが、ftpのソースコードなどは開示されていないので
        しょうか??
        (4分でタイムアウトするという事は必ずどこかを見て判断しているはずですので
         ソースにじか書きしている可能性もある?かと思われるため確認したいです。)

No. 4219 # Netboy 2005/08/02 (火) 18:51:38
>>4218 seki
横からすみません.
ftpのポート21でconnectできるかチェックするPerlスクリプトを
書いてみました.試していただけますか?

use Socket;

$SIG{'ALRM'} = sub { close(SOCK); $sTimeout='(timeout)'; };

# ConnectTest(IPアドレス,ポート,タイムアウト秒数)

if (!&ConnectTest('192.168.x.x',21,5)){
    print "cannot make a ftp connection.\n";
    exit;
}

# 正常ならばftpコマンドを実行
system ('ftp hogehoge');

exit;

sub ConnectTest
{
    local($sIP,$nPort,$nTimeout)=@_;
    local($iaddr,$paddr,$flag,$protoTCP,$sTimeout);

    $iaddr = inet_aton($sIP) || die "no host: $sIP";
    $protoTCP = getprotobyname('tcp');

    $paddr = sockaddr_in($nPort, $iaddr);
    $flag=socket(SOCK, PF_INET, SOCK_STREAM, $protoTCP);

    if (!$flag){ goto J1_1; }

    $flag=0;$sTimeout='';

    eval {
        alarm($nTimeout);
        $flag=connect(SOCK, $paddr);
        alarm(0);
    };

    if (!$flag){ goto J1_1; }
    if ($sTimeout){ goto J1_1; }

    close (SOCK);
    return 1;
J1_1:
    close (SOCK);
    return 0;
}

No. 4220 # 68user 2005/08/02 (火) 21:19:51
>>4218 seki
> ftpのソースコードなどは開示されていないのでしょうか??
Solaris8 のソースは配られていたかどうかは忘れましたが、いずれにせよ
ソース中には 4分という記載はありません (見てませんが)。connect(2) の
タイムアウトを決めるのはカーネルの仕事です。

で、
    http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.5
によると、
    # ndd -set /dev/tcp tcp_ip_abort_cinterval 180000
で変更可能なようです。

> APLに手を入れる事なく設定変更で済ませれるのであれば済ませたいです
プログラムに手を入れるよりもカーネルの設定を変える方がよいというのは
間違った判断だと思います。

まぁ客や上司の意向とか、ソース触ったら契約がどうこうとか、世の中には
うっとうしいことがいろいろあるので別にいいですが。

>>4219 Netboy
ウチの環境では動きました。

No. 4221 # 68user 2005/08/03 (水) 23:28:20
usen-221x242x135x85.ap-US01.usen.ad.jp (221.242.135.85) の方、
    /~68user/net/sample/http-auth/secret.html
に 21分間で 25万回アクセスするのは、ぜひともやめていただきたい。

って言っても、どうせ見てないんだろうし、deny したところでおそらく動的に
IP アドレスを振ってるだろうし、こういう輩はどうしたらいいんですかねぇ。

No. 4222 # へにか [URL] 2005/08/06 (土) 03:07:46
>>4221 68user
いや、もう、それは管理部門に連絡するのが良いでしょう。
満足いく内容かどうかはともかく、大抵は何らかの返答はありますよ。

#釈迦に説法のような気がしてなりませんが。

No. 4223 # 68user 2005/08/06 (土) 04:18:05
>>4222 へにか
なるほど、そういうものですか。usen ならここらへんでしょうか。
    http://www.fttx.co.jp/jp/contact/abuse.html

ただ、マシンが落ちるなどの実害はなかったことと、usen の web によると
実名を書けだの、仲介しかしないだの、めんどくさそうなので今回は
放置します。

ちなみに「どうしたらいいのか」というのは技術的な解決方法はないですかねぇ、
という意味でした。たとえば一定時間に指定の閾値を超えた IP アドレスは deny
するような apache のモジュールがどこかにありそうですよね。

というわけで探したらありました。
    http://www.netnice.org/pukiwiki.php?%B4%FB%C2%B8%A4%CEApache%A5%C8%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%C0%A9%B8%E6%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB

まぁほんとにしつこくやってくるようなら usen ごと deny するので
別にいいんですけどね。

No. 4224 # へにか 2005/08/06 (土) 05:58:59
あぁ、技術的な話でしたか。
それに似た話は、某掲示板群で話題になってますね。
http://qb5.2ch.net/operate/kako/1113/11135/1113508190.html
http://qb5.2ch.net/test/read.cgi/operate/1113647422/
しつこいクローラー&過剰リロード対策についての議論です。ご参考までに。

因みに、他の業者に対しては本名を名乗ったことはありません(へにかのまま)。
usenも変な話で、被害をこうむったほうの名前は聞くけど、被害を出したほうの
名前は出さないっていうことですよね? その辺を突っついてみると、なんらか
の回答が出るかもしれません。・・・が、放置されるとの事ですので、補足意見
とさせてください。

No. 4225 # mmm 2005/08/08 (月) 22:27:24
"ネットワークプログラミングの基礎知識"等にある
サンプルプログラムのライセンスはどうなっているのでしょうか?

No. 4226 # 匿名 2005/08/09 (火) 01:42:54
>>4222 へにか
危ない
その輩は
server:os-ns01.usen.ad.jp
address:61.122.127.122
name:221x242x135x85.ap.221.ftth.ucom.ne.jp
address:221.242.135.85

私は
server:os-ns01.usen.ad.jp
address:61.122.127.122
name:*******
address:61.116.228.135
なんですけどサーバーが同じだと危ないのですかね?

No. 4227 # zsh 2005/08/09 (火) 08:05:37
>>4225 mmm
過去ログ読んでから質問した方がいいですよ。
ライセンスについては
>>4089 68user
にあります。

No. 4228 # りゅう 2005/08/09 (火) 16:14:15
すいません、質問させてください。

UNIX上で、ファイルをmac用にstuffit形式に圧縮できるツールを探しているのですが、
ありますでしょうか。

No. 4229 # しず 2005/08/09 (火) 16:48:11
素人ですが質問させてください。
solaris9 cにて開発しています。
クライアントサーバ間を常駐プロセス1:1(クライアント1、サーバ1プロセス)にて
TCP/IPソケット通信しようと考えています。
1接続毎にconnect/closeするのではなく、常にconnectionし続けようと考えています。
そこで、質問ですが、通信中にサーバ側がなんらかの理由により切断された場合、クライアント側は
connectからやり直す必要があるのでしょうか?
それともsendを行えば内部的にconnectを行って、sendしてくれるんでしょうか?
質問が下手ですみません。

No. 4230 # まつ 2005/08/09 (火) 20:29:19
環境はSunOS 5.8です。

------------------------
#!/bin/csh -fx
setenv LANG ja_JP.PCK
・・・
------------------------
というrootから起動されるshellスクリプトを実行すると
(あるバッチ処理管理ソフトを使って起動するとrootから起動されるのです)

setenv LANG ja_JP.PCK
Locale could not be set properly

というエラーになってしまうのですが、何故か分からず困っています。
助けて下さい。 m(_ _)m

telnetでuser01でログインしてsetenvを実行すると
LANG=ja_JP.PCK
となっていますが、上記スクリプトにsetenvを記述すると
LANGは表示されません。

スクリプトにsetenv LANG ja_JP.PCKを記述しないと
echo チェックリスト作成処理(/disk1/hoge/hoge01/sh/AAA001.csh) 開始
Unmatched `
というエラーになります。
telnetでuser01でログインして実行するとsetenv LANG ja_JP.PCKが
なくても正常終了します。

どうぞ宜しくお願い致します。

No. 4231 # へにか 2005/08/09 (火) 21:53:25
>>4226 匿名
> なんですけどサーバーが同じだと危ないのですかね?
う〜ん、僕には力不足で答えられないです。ところで危ないって、どういう局面を想定されていますか?

しかし、その輩、ftth.ucom.ne.jpって、FTTH! うらやましいなぁ。そんな贅沢な帯域があるんだったら、有効に使ってほしい今日この頃です。

No. 4232 # 68user 2005/08/09 (火) 23:45:17
>>4224 へにか
なるほど、そちらも参考にさせていただきます。

>>4226 匿名
> server:os-ns01.usen.ad.jp
というのは、あなたが使用している DNS サーバが os-ns01.usen.ad.jp
であることを示しているだけです。普通は、どの IP アドレス・FQDN に
ついて正引きや逆引きをしても、「server」の部分は変化しません。

>>4228 りゅう
シェアウェアっぽいですが、
    http://www.stuffit.com/unix/index.html
など。あと、
    http://www.asl.ee.meisei-u.ac.jp/kaken/stuffit.j.html
によると netatalk にも含まれているとか。

>>4229 しず
> connectからやり直す必要があるのでしょうか?
コネクションが切れた場合は、connect しなおす必要があります。

>>4230 まつ
よくわかりませんが、手元の Solaris8 でも同様の結果になりました。setenv が
呼ばれると、シェルは putenv(3) するだけではなく setlocale(3) あたりも呼ぶ
必要があるような気がしますが、Solaris8 の csh はそこの処理にバグがあるのでは
ないかと思います。

csh をやめて sh・tcsh・ksh などに切り替えるか、あるいは
    #!/bin/sh
    exec env LANG=ja_JP.PCK 実行したいスクリプト名
というような wrapper スクリプトをかませてはどうでしょうか。

No. 4233 # まつ 2005/08/10 (水) 00:29:48
>>4232 68user
他のサーバー(同じくSunOS5.8だったはずです)では同じように
rootから実行できているのです。何かが違うのでしょうね。。

両サーバーのrootの環境を比較するなりしてみます。
#サーバー管理者へ依頼する必要があるのですが・・・

社内の人より下記で逃げられるという指摘もありました
が、他サーバーで出来ているので腑に落ちません。
-----------------------------
unsetenv LC_ALL
setenv LANG ja_JP.PCK
setenv PATH .:$PATH

/usr/bin/env

set echocmd=/usr/bin/echo
$echocmd 'チェックリスト作成処理($0) 開始'
-----------------------------


それでも分からなければwrapperスクリプトをかませてみます。

他に何かありましたらご教示下さい。

No. 4234 # 68user 2005/08/10 (水) 04:49:13
>>4233 まつ
> が、他サーバーで出来ているので腑に落ちません。
想像ですが、OS インストール時に ja_JP.PCK を選択すると
うまく動くのかもしれません。

No. 4235 # zsh 2005/08/10 (水) 08:46:36
>>4233 まつ
問題のあるサーバだけLC_ALLが設定されていませんか?
localeコマンドの結果を比較してみてください。

どちらのサーバでも設定されているのであれば
導入されているロケールパッケージ(?)の差だと思います。

No. 4236 # まつ 2005/08/10 (水) 10:37:03
>>4235 zsh
お察しの通り、問題のあるサーバだけLC_ALLが設定されていました!

--動かないサーバー-----------
LANG=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=JA16SJIS
--問題ないサーバー-----------
LANG=ja_JP.PCK
LC_CTYPE="ja_JP.PCK"
LC_NUMERIC="ja_JP.PCK"
LC_TIME="ja_JP.PCK"
LC_COLLATE="ja_JP.PCK"
LC_MONETARY="ja_JP.PCK"
LC_MESSAGES="ja_JP.PCK"
LC_ALL=
-----------------------------

1、rootでLC_ALLが設定されているという事でしょうか?
2、問題ないサーバーと同じ環境にするには何処を直せば良いのでしょうか?
3、2がサーバー管理方針などで変更できない場合、C-Shellで
            unsetenv LC_ALL
            setenv LANG ja_JP.PCK
        とすれば良いのでしょうか?

宜しくお願い致します。

No. 4237 # しず 2005/08/10 (水) 11:05:30
>>4232 68user
>コネクションが切れた場合は、connect しなおす必要があります。
コレクションが切れているか否かの検知ですが、クライアントからsendを
行ったときのタイムアウトを検知したときが一般的でしょうか
(むしろこれしかない?)

宜しくお願いします。

No. 4238 # まつ 2005/08/10 (水) 11:28:44
>>4235 zsh
試しに下記を実行してみましたが、元に戻ってしまいました。。
echo内の日本語が文字化け?して「`」になっている為でしょうが
何故未だ日本語が表示できないのでしょうか?
問題ないサーバーではダブルコーテーションで囲まれてるのに
下記結果では囲まれてないのがダメなのでしょうか?
----------------------------------------------------
#!/usr/bin/csh -fx

locale
unsetenv LC_ALL
setenv LANG ja_JP.PCK
setenv LC_CTYPE ja_JP.PCK
setenv LC_NUMERIC ja_JP.PCK
setenv LC_TIME ja_JP.PCK
setenv LC_COLLATE ja_JP.PCK
setenv LC_MONETARY ja_JP.PCK
setenv LC_MESSAGES ja_JP.PCK
locale
echo "ロードエラーチェックリスト作成処理($0) 開始"
----------------------------------------------------
locale
LANG=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=JA16SJIS
unsetenv LC_ALL
setenv LANG ja_JP.PCK
setenv LC_CTYPE ja_JP.PCK
setenv LC_NUMERIC ja_JP.PCK
setenv LC_TIME ja_JP.PCK
setenv LC_COLLATE ja_JP.PCK
setenv LC_MONETARY ja_JP.PCK
setenv LC_MESSAGES ja_JP.PCK
locale
LANG=ja_JP.PCK
LC_CTYPE=ja_JP.PCK
LC_NUMERIC=ja_JP.PCK
LC_TIME=ja_JP.PCK
LC_COLLATE=ja_JP.PCK
LC_MONETARY=ja_JP.PCK
LC_MESSAGES=ja_JP.PCK
LC_ALL=
echo [hG[`FbNXg(/disk18/acua/acua01/sh/FNC07998.csh) Jn
不整合 - `
----------------------------------------------------

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

No. 4239 # 68user 2005/08/10 (水) 11:53:31
>>4238 まつ
実験してみましたが、うまくいかないサーバには ja_JP.PCK の
ロケールがインストールされていないようです。
>>4232 68user
で「csh のバグでは」と言いましたがこれは誤りで、csh だけが
真面目にエラーチェックしているような感じです。

動かないマシン (Solaris8) の /usr/lib/locale/ja_JP.PCK/:
    LC_MESSAGES/

動くマシン (Solaris2.6) の /usr/lib/locale/ja_JP.PCK/:
    LC_CTYPE/
    LC_MESSAGES/
    LC_TIME/
    ja_JP.PCK.so.1
    locale_description
    methods_ja_JP.PCK.so.1

そして ja_JP.PCK ロケールが含まれているマシンであっても、
    #!/bin/csh
    setenv LANG ja_JP.PCK
    echo "ロードエラーチェックリスト作成処理($0) 開始"
このスクリプトは動作しませんでした。おそらく、ja_JP.PCK にした
時点では、既にスクリプトの字句解析は終了しているからだろうと思います。

対策案は 3つ。

案1.
    - ja_JP.PCK ロケールをインストールする。インストール方法は知りませんが、
        以前他のマシンから /usr/lib/locale/ja_JP.PCK/ をぶっこ抜いてきたことが
        あったっけ。
    - さらに wrapper スクリプトを作る

案2.
    Shift_JIS の「チ」の 2バイト目が ` であることが直接の原因なわけで、
          echo 'ロードエラーチェックリスト作成処理('$0') 開始'
    などと '' で囲んで ` を解釈させないようにする。

案3.
    一番いいのは、スクリプトを EUC-JP に変えて、ロケールを混在
    させないこと。

あと、
> LC_ALL=JA16SJIS
というロケールは存在しないので、おそらく無効なロケール扱いされて
いるでしょう。JA16SJIS って Oracle 的なロケール表記ですから。

LANG と LC_* の関係は以下の URL をどうぞ。
    http://www.jp.freebsd.org/QandA/HTML/2199.html
    http://www.jp.freebsd.org/QandA/HTML/2200.html

No. 4240 # 68user 2005/08/10 (水) 12:32:18
>>4237 しず
send はローカルの mbuf にデータをコピーしたら正常終了と
みなすので、エラーになりません。

recv でエラーになるか、次回の send で EPIPE が発生するかの
いずれかです。

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