68user's page 掲示板

Prev< No. 2250〜2524> Next  [最新発言に戻る] [過去ログ一覧]
No. 2250 # 68user 2001/11/05 (月) 10:26:23
>>2247 sio
> データを受け取った側で、ブラウザ処理をしようとするから
> 訳が分からなくなっていたようです。
まず、全体の構成を見直すべきでしょうね。
    - main.cgi に統合する。
    - test.cgi はユーザ名を引数で受け取り、ログイン可能なら
        戻り値 0 を、ログイン不可なら戻り値 1 を返す。
などと現在の仕様を比べ、一番良さそうなものを採用しましょう。

>>2249 初心者
> (**) stands for supplied, (--) stands for probed/default values
それは起動時に (成功・失敗にかかわらず) 必ず表示されるメッセージです。

また、OS などの環境が何も書いていないので、答えられる人は
いないでしょう。

# 僕は XFree86 やらビデオカードやらには詳しくないので、
# 書いてもらっても答えられないかもしれませんが。

No. 2251 # ミング [E-mail] 2001/11/07 (水) 18:42:55
こんにちは。いつもお世話になってます。

Perlについて質問があります。

各ファイルに ”ー1”と ”ー2”が含まれた行があって、それを区切りに2つのファイルに分けたいのですが、なかなかうまくいきません。

EXAMPLE:
*File0001の内容ーー

0001ー1

C100 Open
C101 NG

0001ー2

C102 Open
C103 Open

*File2の内容ーー

0002ー1

C200 Open
C201 NG
C202 Open

0002ー2

C203 Open
C204 NG

この0001と0002の2つのファイルを0001ー1と0001ー2、0002ー1と0002ー2の4つのファイルに分けたいのです。

下のスクリプトは全然間違ってるのですが、/-1/ と /-2/ があった行数を記憶して、後から 行の番号を比較してどうにか区切ろうと思ったのですが、やっぱり最初は$barcode22=0だし、全然駄目です。

普通、どのようにするのか教えて頂けませんか?

よろしくお願いします。

sub read_file_to_array { my($file)=$filename;
        
        open (FILE, "<$dir\\$database\\Defect\\$file") or die "Can't open $file\n";
          $line=0;
            while (<FILE>){
            
            if ($_ =~ /-1/) {$barcode11=$.};
            if ($_ =~ /-2/) {$barcode22=$.};
                                                          
            if ($line > $barcode22) {print "$_ ";}#試しにSTDOU#に出力してみるだけ
                                                            }
            $line++;
                                                    }

No. 2252 # ナナシサソ 2001/11/07 (水) 23:34:55
動くかわからんけどとりあえずできた

sub read_file_to_array { #←?
        my $file = shift;
        open (FILE, "<$dir\\$database\\Defect\\$file") or die "Can't open $file\n";
        open (OUT1, ">$dir\\$database\\Defect\\${file}_1") or die;
        open (OUT2, ">$dir\\$database\\Defect\\${file}_2") or die;
        my ($flag1, $flag2);
        while (<FILE>) {
                if ( /-1/ ) {
                        $flag1 = 1;
                }
                if ( /-2/ ) {
                        $flag2 = 1;
                        $flag1 = 0;
                }
                if ($flag2) {
                        print OUT2;
                        next;
                }
                if ($flag1) {
                        print OUT1;
                        next;
                }
        }
}

No. 2253 # ナナシサソ 2001/11/07 (水) 23:37:28
うぎょぎょ。。if ($flag2) {〜の部分の順番が逆になっちゃってるし。ダサ・・
closeしてないし・・終了時に閉じられるから大丈夫かアハハ

No. 2254 # 68user 2001/11/08 (木) 07:20:44
>>2251 ミング
必ずデータの先頭が .*-1 か .*-2 であるなら
    while (<FILE>) {
        if ( /-[12]/ ){
            chomp;
            open (OUT, ">$dir\\$database\\Defect\\$_") or die;
            next;
        }
        print OUT;
    }
かなぁと思うんですが、違うかな?

業務用プログラムかだとちゃんとエラーチェックしないとまずい
でしょうが、データの内容がある程度保証されているなら、こんな
テキトーな感じでよろしいかと思います。

No. 2255 # ミング [E-mail] 2001/11/08 (木) 14:47:58
ナナシサソさん、68userさん

出来ました!!
ご指導どうもありがとうございました。

No. 2256 # ミング [E-mail] 2001/11/08 (木) 17:54:35
二日連続の質問になってしまいますが、よろしくお願いします。

No.2251のInput file名は"Ab00010", "Cd00020", のように文字と数字からなっているのですが、Outputは別のDirに"Ab00010" "Ab00011" "Cd00020" "Cd00021"というように、/-2/の部分は”元のファイル名+1”というファイル名にしたいのですが、、、、

800ページあるらくだの本も一応買ってきたのですが全然分からないので、ウェブサイトで調べてみたのですが、唯一これかな?と思ったのが:

$string="abcd771gfds";
$string=~/(\W+)\s+(\d+)/;

とすると、$1=abcd, $2=7771, $string=abcd771gfds になる、とあったんですが、

試してみると$1=" ", $2=" ", $string="4294967295"になってしまい、訳が分からなくなってきたのですが、これは全然違うアプローチなんでしょうか?

どうしたら ”Ab00011”が作れるんでしょうか?

No. 2257 # ナナシサソ 2001/11/09 (金) 00:10:23
$flag == 2 ? $string ++ : ;
でいいと思う・・ゲロゲロ

No. 2258 # オハツ [E-mail] 2001/11/09 (金) 12:52:13
UNIXの歴史について、知ってる範囲で教えてください。
できれば、メールの方がありがたいです。

No. 2259 # ミング [E-mail] 2001/11/09 (金) 14:36:01
>>2257 ナナシサソ
でもアルファベットと数字からなってるので、数字だと見てくれないみたいなんですけど、、、

No. 2260 # ナナシサソ 2001/11/09 (金) 23:11:03
>>2259 ミング
Perlは妙なことが出来たり・・
多分うまくいくと思うんだけどな・・

No. 2261 # ふくし [E-mail] 2001/11/10 (土) 18:48:47
ミングさんはじめまして。
まず abcd771gfds の件です。

#!/usr/bin/perl

$string = "abcd771gfds";
$string =~ /(\W+)\s+(\d+)/;

print "1:<$1> 2:<$2> string:<$string>\n";

を動かすと

1:<> 2:<> string:<abcd771gfds>

と出ました。

\W+ は、英数字(word)以外1文字以上なので、なくてあたりまえ。
\s+ は、空白文字(space)1文字以上なので、なくてあたりまえ。
\d+ は、数字(digit)1文字以上だが、前に \W も \s もないのでダメ。

もし、$1 に abcd、$2 に 771(7771 は間違い?)を入れようとするなら、

$string =~ /^([a-zA-Z])(\d+)/;

とかでしょうか。
^ は文字列の先頭を示します。
これをやらないとどこからサーチしはじめるかわからん。
[a-zA-Z] は英字。\d は数字。
(わー、目からウロコ。英字のカンタンな文字クラスってないんですね)

#!/usr/local/bin/perl

$string = "abcd771gfds";
$string =~ /^([a-zA-Z]+)(\d+)/;

print "1:<$1> 2:<$2> string:<$string>\n";

を動かすと

1:<abcd> 2:<771> string:<abcd771gfds>

となりました。

No. 2262 # ふくし [E-mail] 2001/11/10 (土) 19:01:48
ミングさん、つぎにファイル名生成の件です。
もっとカッコいいプログラムはいくらでもあるかと思うんですが、
ここではわかりやすく確実に動くのを取りました。

#!/usr/bin/perl

$fname = "Ab00010";

$fname =~ /([a-zA-Z]+)(\d+)/;
$fname_a = $1; # 英字部分
$fname_n = $2; # 数字部分

$fname_n++; # 数字部分に1加算
$fname_n = sprintf "%05d", $fname_n; # 先頭にゼロを詰めて5文字に
$fname = $fname_a.$fname_n;
print "fname: $fname\n";

$fname_n++; # 数字部分に1加算
$fname_n = sprintf "%05d", $fname_n; # 先頭にゼロを詰めて5文字に
$fname = $fname_a.$fname_n;
print "fname: $fname\n";

$fname_n++; # 数字部分に1加算
$fname_n = sprintf "%05d", $fname_n; # 先頭にゼロを詰めて5文字に
$fname = $fname_a.$fname_n;
print "fname: $fname\n";

実行してみます。

fname: Ab00011
fname: Ab00012
fname: Ab00013

ポイントは sprintf でしょうか。
これは文字列をいろんな形で整形しますが、汎用性が高すぎるので、

    sprintf "%0n", m;
        n はケタ数、m は数字

で、m を n ケタ、ゼロ詰めで表示するとだけ今はご説明します。

ただですね、これだと1ファイルが10個以上のサブファイルに分けると
Ab0002n に突入してしまって、
もし Ab00020 という元ファイルがあると名前が衝突しますが、
それはいいですか。

No. 2263 # 68user 2001/11/11 (日) 18:45:38
>>2258 オハツ
> UNIXの歴史について、知ってる範囲で教えてください。
「UNIXの1/4世紀」
        http://www.ascii.co.jp/books/detail/4-7561/4-7561-3659-1.html
を読みましょう。

No. 2264 # ミング [E-mail] 2001/11/12 (月) 13:51:26
ふくしさん、ナナシサソさん、

ご教授どうもありがとうがざいました。 やっと出来ました。
とても分かり易く助かりました。

今後もいろいろと宜しくお願いいたします!

No. 2265 # 武田一浩 2001/11/14 (水) 15:57:05
    はじめまして。教えていただきたいことがあります。
    こちらを参考に、perlのネットワークプログラムを作りたいと思っています。OSはPlamo Linux、perlは5.005です。

    やりたいのはローカルネットワーク上に、ブロードキャストでメッセージを送って、ポートを開いている全部のコンピュータがそのメッセージを受信するというものです。
    試験として

#!/usr/local/bin/perl

use IO::Socket;

$socket = IO::Socket::INET->new(
        PeerAddr => '192.168.0.255',
        PeerPort => 2425,
        Proto => 'udp',
        );

if ( ! $socket ){
        die "接続できませんでした。 $!\n";
}

        print $socket "test";
        $socket->flush();


$socket->close();

    と、いうのを動かしてみました。ブロードキャストである192.168.0.255ですから、2425でポートを開いている他のPC(VBのwinsockを使いました)にtestが表示されるかと思ったのですが、

> 接続できませんでした。 不正なファイルデスクリプタです

というエラーが返って来てしまいます。
このエラー、192.268.0.3の様にIPを指定すると、出現しません。

    いろいろとサーチエンジンなどもあたったのですが、どうしてもこの原因がつかめず、困っています。
    perlを使って、udpとブロードキャストアドレスでネットワーク通信されている方がいらしたら、ブロードキャストアドレスをどうやって指定しているか、教えていただけませんでしょうか?
    よろしくお願いいたします。

No. 2266 # 68user 2001/11/16 (金) 10:36:49
>>2265 武田一浩
broadcast するときは、socket option の設定
    $socket->setsockopt(SOL_SOCKET, SO_BROADCAST, 1) || die "$!";
が必要です。

IO::Socket じゃなくて普通の Socket モジュールを使うなら
    setsockopt($socket, SOL_SOCKET, SO_BROADCAST, 1) || die "$!";
ですね (これは IO::Socket で生成したソケットに対しても有効です)。


ただ、こちらで試した限りでは、
> 接続できませんでした。 不正なファイルデスクリプタです
というエラーは出ませんでした。if ( ! $socket ) でエラー
になっているということは、何か別の原因があるような気がします。

ちなみに
    printf $socket "1:%d:name:hostname:%d:ext\0group", time(), 0x1;
で参加通知です。

No. 2267 # 武田 一浩 2001/11/16 (金) 17:34:58
No. 2266 # 68user さん、リプライありがとうございます。
次の様に修正してみました。

#!/usr/local/bin/perl

use IO::Socket;

$socket = IO::Socket::INET->new(
                PeerAddr => '192.168.0.255',
                PeerPort => 2425,
                Proto => 'udp',
                );

$socket->setsockopt(SOL_SOCKET, SO_BROADCAST, 1) || die "$!";
if ( ! $socket ){
                die "接続できませんでした。 $!\n";
}

printf $socket "test";

$socket->close();

    結果は、

Can't call method "setsockopt" on an undefined value at ./udptest.pl line 11.

    でやはり駄目でした。
    192.168.0.255のアドレスを、特定のPCのIPに設定すると、そのPCにはtestの表示が出ますから、スクリプトそのものにはエラーがないのだと思いますが、なぜか私の環境ではブロードキャストアドレスが使用できない(?)のではないかと思います。

    とりあえず、Perlやスクリプトには異常がなさそうなので、Plamo Linux のMLにでも質問をあげてみることにします。

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

No. 2268 # もみの木 2001/11/16 (金) 17:50:58
・・
<%
    strPathName = "HTTP://××/××/××/○○○.xls
%>
<a href=<% =strPathName%> ><% = strData(cnt)(0)%></a>
・・
</html>
上記のようにリンクしたいパス名を設定しました。
やりたいことは、
既存のダイアログ『ファイルのダウンロード画面
次の場所からファイルをダウンロードするように選択しました』
を表示させてからExcelを表示したいのですがどうしたらいいですか?
現象として、
すぐにExcelが表示されてしまいます。

No. 2269 # kouji 2001/11/17 (土) 13:38:48
はじめまして、どうしても分からない事があるので質問させて下さい。

HTMLの中にSSIでCGIのファイルを読み込ませようとしたのですが
<!--#include file="test.cgi" -->
だとOKなのですが
<!--#include file="test.cgi?id=kouji" -->
のように引数を付けると
[an error occurred while processing this directive]
とエラーになってしまいます。

「?」の部分からエラーが表示されるのですが、これを回避する方法を教えて下さい。
webも調べてみたのですが、結局分かりませんでした。
http://tohoho.wakusei.ne.jp/wwwssi.htm
こちらの下の方に書いてあるexecの例で
>○ <!--#exec cgi="xx.cgi"-->
>× <!--#exec cgi="xx.cgi arg1 arg2"-->
>× <!--#exec cgi="xx.cgi?arg1+arg2"-->
>× <!--#exec cmd="xxx.pl"-->
>○ <!--#exec cmd="/bin/xxx arg1 arg2"-->
>○ <!--#exec cmd="./xxx.pl arg1 arg2"-->
これの○で書いてあることみたいに引数を渡そうとしても駄目でした・・・

よろしくおねがいします。

No. 2270 # ふくし [E-mail] 2001/11/18 (日) 14:43:58
なんでも聞いてすいません。
Windows 2000 以降についてくる「メモ帳」の「名前をつけて保存」では、
ISO-2022-jp および Shift_JIS(正確には Windows 932 および Windows 1152)のことを
「ANSI」と呼び習わしていますが、これはどういう経緯でしょうか?

ANSI といえばアメリカの工業規格で、ASCII や ISO-8859-1 を規定してるもんだと
思い込んで生きてきましたが、Delphi の入門本とか ML とかを見ても
「ANSI 文字列を Unicode に変換、、」とかいって、
Windows で使える Unicode 以外の文字、という意味で ANSI 文字列、
と書いてあるようなんですが、この言葉は正しい業界用語なんでしょうか?
それとも Windows ローカル語? この言葉のスコープはどこまでなんでしょうか?

「メモ帳」といえば UTF-16LE-BOM のことを「Unicode」、
UTF-16BE-BOM のことを「Unicode Big Endian」、UTF-8 のことを「UTF-8」と言ってますが、
これなんかも業界用語なのか Windows 語なのか単なるメモ帳の開発者の気の迷いなのか
わかりません。(あ、でも Word も共通なんだよな、、)

場違いでしたら情報のポインタや、討議するのにふさわしい掲示板等教えてください。
よろしくお願いいたします。

No. 2271 # 初心者みーです。 [E-mail] 2001/11/18 (日) 23:12:28
とても素人で、申し訳ないのですが、ご存知の方がいらしたら、教えて下さい。ハードは、IBM社のRS/6000を使用しています。kシェルを作成して下記の作業を行いたいと考えています。
複数のテ゛ィレクトリーに10〜30のファイルが存在しています。
各ファイル中に/usr/kokyakuと記述があれば、/usr/okyaku
と変更したいと考えています。sedコマンドを利用すればそれぞれのファイルの中身を変更させることは可能であることは、分かったのですが、対象の
ファイル数が多い為、該当のディレクトリーにcdし、
grep -l'/usr/kokyaku' * > filename
などで、対象ファイル名を保存したファイルを作成し、そのファイルを自動的に読み込んでファイル名をいちいち指定せずにsedコマンドを実行でき ないものでしょうか?awkコマンドでファイル名が保存されているファイルを読み込み、sedコマンドの出力ファイルを$1の名前にするなどは可能なのでしょうか? ちなみに、イメーシ゛的には、カレントディレクトリーの下のファイル(*)の内容を自動的に置換してほしいのですが…
sed 's/\/usr\/kokyaku/\/usr\/okyaku/g' * >*の出力  

つたない説明で、申し訳ありませんが、お知恵を頂けたらありがたいです。 

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

No. 2272 # ふくし [E-mail] 2001/11/18 (日) 23:50:37
みーさん:

Perl ですいません、一応テストもしました。
ミソは find コマンドの出力を ` ` で配列に入れて
for で処理している、、(フツーやんねえかな、、)

#! /usr/local/bin/perl -w
# kokyakuokyaku

$tmp = "TempFileDayooon"; # 中間ファイル。存在しないファイル名を選ぶこと

for $file (`find . -print`) {
        chomp;
        if (-f $file) {
                open FILE, $file;
                open TMP, ">$tmp";
                while (<FILE>) {
                        s|/srv/kokyaku/|/srv/okyaku/|g;
                        print TMP;
                }
                close TMP;
                close FILE;
                rename $tmp, $file;
        }
}

No. 2273 # ふくし [E-mail] 2001/11/19 (月) 02:33:50
(一応)ふつー File::Find 使うよね。知ってるー (^^;;;

No. 2274 # みー [E-mail] 2001/11/19 (月) 10:50:04
ふくしさんどーもありがとうございました。大変申し訳ないのですが、findコマンドの使い方をよく理解していないので、どなたかお教え頂けないでしょうか?私の理解としては、ディレクトリー内の条件にあったファイルを探す時に使うコマンドだと思っていたので、例えば、頭に’m*’がつくファイルを探したりする時に使用するものだと思っていました。1つあるいは複数のファイルから、指定パターンに合致した行を探しその対象のファイル名を表示させる為には、grepしか使用出来ないと思っていたのですが、findコマンドで、ファイル(シェル)中に/usr/kokyakuと記述されているファイル名をfindコマンドで探す場合は、どのように記述すればよいのでしょうか?
また、ふくしさんの記述して下さった各行の処理内容をもう少し詳細に教えて頂けないでしょうか?お手数をおかけいたしますが、よろしくお願いいたします。

No. 2275 # 68user 2001/11/19 (月) 13:11:21
>>2267 武田 一浩
$socket = IO::Socket::INET->new(
                            PeerAddr => '192.168.0.255',
                            PeerPort => 2425,
                            Proto => 'udp',
                    ) || die "$!";
とした方が、どこでエラーが出ているかを把握しやすいでしょう。

> とりあえず、Perlやスクリプトには異常がなさそうなので、

そうですね。perl か OS の問題ではないかと思います。

あと、ifconfig -a して、デバイスに
    fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
と、「BROADCAST」が付いていてブロードキャストに対応していることを
確認して下さい。もしかして ppp デバイスだったりすると付いてないかも。

>>2268 もみの木
> 現象として、すぐにExcelが表示されてしまいます。
要は、ASP は全く関係なくて
    <a href="HTTP://××/××/××/○○○.xls">hoge</a>
というリンクをクリックしたときの挙動ですよね? Windows は
よくわからないので、
    http://www.parkcity.ne.jp/~chaichan/bin/qanda.cgi?modefg=9
で質問した方がよろしいと思います。


あとの話題は後ほど。

No. 2276 # ふくし [E-mail] 2001/11/19 (月) 13:48:26
みーさん:

なんかすいません。
たぶんぼくのやり方すごく非標準的なので、
もっとカッコいい方法はいくらでもあると思うんですが、、

find はファイル名の検索、
grep はファイルの中の文字列の検索、
で、合ってます。
ぼくのスクリプトでは各ファイルの中での文字列検索/置換を
自分で書いています。(while のあたり)

#! /usr/local/bin/perl -w
# kokyakuokyaku

$tmp = "TempFileDayooon"; # 中間ファイル。存在しないファイル名を選ぶこと

for $file (`find . -print`) {
                  chomp $file; # すいません、ココ、間違ってました
                  if (-f $file) {
                                  open FILE, $file;
                                  open TMP, ">$tmp";
                                  while (<FILE>) {
                                                  s|/srv/kokyaku/|/srv/okyaku/|g;
                                                  print TMP;
                                  }
                                  close TMP;
                                  close FILE;
                                  rename $tmp, $file;
                  }
}

`UNIXコマンド`
    …バッククォート(`)でUNIXのコマンドを囲むと、
        出力結果をリストで返す

for $変数 (リスト) {
    ...なんだかんだ...
}
    …リストの要素を1個ずつ $変数 に入れながら、
        「なんだかんだ」の部分を繰り返す。
        上では find の結果を1行ずつ $file に入れて処理している。
        それはカレント ディレクトリ以降のファイル/ディレクトリである。

% find . -print
    …カレント ディレクトリ以降のファイル/ディレクトリを一覧表示する。

chomp $file;
    …$file(find の結果の1行)の末尾から改行を取り除いて、
        ファイル/ディレクトリ名として正しいものにしている

-f 文字列
    …「-f」はファイルテスト演算子のひとつ。
        右に来る文字列がふつうのファイルだったら真を返す。
        ここではディレクトリをはじいている。

open FILE, $file;
    …ファイル名 $file のファイルを入力で開いて、
        ファイルハンドル FILE で入力アクセスできるようにする

open TMP, ">$tmp";
    …ファイル名 $tmp のファイルを出力で開いて、
        ファイルハンドル TMP で出力アクセスできるようにする

while (<FILE>) {
    ...なんだかんだ...
}
    …ファイルハンドル FILE で読み込まれる
        ファイル $file(ここでは find の結果のうち、ファイルのみ)の
        1行1行を、$_ という特殊な変数に入れながら
        「なんだかんだ」の部分を繰り返す。
        $file を読み終わったらループを脱出する

s|/srv/kokyaku/|/srv/okyaku/|g;
    …デフォルトの作用対象である変数 $_ に対して、
        「/srv/kokyaku/」を「/srv/okyaku/」に置換する。
        s は substitute(置換)、g は global(全体的に)の略。
        g を略すと1行に1回しか置換しない

print TMP;
    …TMP ファイルハンドルに、デフォルトの作用対象 $_ を出力する
        ここで $_ は FILE の1行1行に
        「/srv/kokyaku/」=>「/srv/okyaku/」の置換を施したものである

close TMP;
close FILE;
    …ファイルを「閉じる」。
        (ファイルアクセスのために確保されていたメモリなどの資源を解放する)

rename $tmp, $file;
    …置換する前のファイル名が $file、
        置換したあとのファイル名が $tmp なので、
        $tmp を $file に改名する。
        これで置換したファイルで元ファイルは上書きされ、
        中間ファイル TempFileDayooon は消えてなくなる

こんな感じでしょうか。

No. 2277 # 68user 2001/11/19 (月) 14:17:20
>>2271 初心者みーです。
複数ファイルの中身を一括置換する、という目的に限れば、
    http://x68000.startshop.co.jp/~68user/unix/pickup?perl
の perl -pi.bak -e .. ところをどうぞ。

> findコマンドで、ファイル(シェル)中に/usr/kokyakuと
> 記述されているファイル名をfindコマンドで探す場合は、
> どのように記述すればよいのでしょうか?
いろいろありますが、以下のような感じです。

    % find . -exec grep -l /usr/kokyaku {} \;
          … 機能は実現できるけど、遅い。
    % grep -l *
          … ファイル数が多すぎるとダメ。ファイル数が数千程度ならこれでいいでしょう。
    % find . -print | xargs grep -l
          … ファイル数が多くても OK。
    % find . -print0 | xargs -0 grep -l
          … ファイル数が多くても OK。ファイル名に改行が含まれていても OK。

今回は grep -l でいいのではないでしょうか。

あと、
> sed 's/\/usr\/kokyaku/\/usr\/okyaku/g' * >*の出力
で実現できることはわかっているので、後はこれを複数のファイルに対して実
行すればよいのです。いろいろ方法はありますが、お勧めなのは「文字列をい
じくってコマンドラインを作り、sh に喰わせる」方法です。

grep -l * で、
    file1
    file2
    file3
という出力が得られるとします。次に
    grep -l * | sed "s|\(.*\)|sed 's./usr/kokyaku./usr/okyaku/.g' < \1 > out/\1 | "
とすると、
    sed 's./usr/kokyaku./usr/okyaku/.g' < ./file1 > out/./file1
    sed 's./usr/kokyaku./usr/okyaku/.g' < ./file2 > out/./file2
    sed 's./usr/kokyaku./usr/okyaku/.g' < ./file3 > out/./file3
という文字列が得られます。それをよく確認して、よさそうなら
    grep -l * | sed "s|\(.*\)|sed 's./usr/kokyaku./usr/okyaku/.g' < \1 > out/\1 | " | sh
と末尾に | sh を付ければ、そのまま実行されます。

正しいコマンドラインができるまでは「| sh」を付けずに試行錯誤すれば
よいので、いろいろなところで応用が効くと思います。

No. 2278 # 68user 2001/11/19 (月) 14:20:22
>>2270 ふくし
> 場違いでしたら情報のポインタや、討議するのにふさわしい
> 掲示板等教えてください。
場違いではないですが、わかりません。会社では Windows Me だし (笑)

ふさわしいところは… fj.kanji くらいしか思い付かないなぁ…。

後は
>>2269 kouji
ですが、これはちょっと調べてから回答したいと思います。

No. 2279 # みー(お礼) [E-mail] 2001/11/19 (月) 16:05:11
ふくしさん、68userさんどうもいろいろありがとうございました。とっても勉強になりましたし、助かりました。perl -pi.bakの方法で、一括変換変換させる方法をバックアップファイルも一緒に作成できるので、実施したいと思います。簡単なテストをしたところ、大丈夫そうでしたので…。他の方法も、今後時間のある時に試してみたいと思います。迅速なご回答と親切な説明、本当にありがとうございました。

No. 2280 # ぷたろ 2001/11/19 (月) 19:38:13
始めましてm(__)m
UNIXを学校で使っています。
家では使えないんでしょうか?
家にパソコンはあるのですが…(-.-;)

No. 2281 # ふくし [E-mail] 2001/11/19 (月) 20:21:53
ぷたろさん、はじめまして。
・家のパソコンに UNIX(FreeBSD とか Linux)を入れる。
    いろんな本に、すでに入ってる OS(Windows ですか?)と切り替える方法が
    書いてある<=管理が大変だけど
・家のパソコンをインターネットにつなぎ、
    会社のパソコンに Telnet(Windows だと Teraterm が有名)で
    ログインする。リモートコントロールの感覚ですね。
    グラフィックなソフトは使えないけど、、。
    この場合は学校の管理者の人に聞いてみてください。

No. 2282 # ぷたろ 2001/11/19 (月) 21:00:16
ふくしさん、ありがとですm(_ _)m
家のパソコンのOSはwindowsです。
外付けのハードを買って
そこにLinuxを・・・。
ってな具合にはいかないですか?
う〜ん、どうしよう(--;)

No. 2283 # ふくし [E-mail] 2001/11/19 (月) 23:49:50
>ぷたろさん
いちから Linux を入れて自分で管理する気があるんだったら、可能ですよ。
いまの Windows の HDD に余裕があるんだったら、
同じ HDD にパーティションを切って入れてもいいし、
新しい HDD を買う予定があるんだったら、ぷたろさんがおっしゃるように
外付けのでも新しい内蔵のでも入れて、そこに入れてもいいし。
要するに、今使ってる Windows のマシンに新しく Linux を入れて、
Linux と Windows と切り替えて使うことは可能です。
体験するだけだったら、ここの会社 http://www.mlb.co.jp/ のが
面白そうです。Live Linux というのは Windows マシンに CD-ROM を
突っ込むと Linux 体験が出来るそうです。あと MLD5 というのは
Windows のパーティションを壊さずに(フォーマットせずに)そのまま
Linux を入れられ、Linux は Windows からハードウェアの設定を
読みこんで自動インストールしてくれるそうです。
ぼくはどっちも使ったことないし、設定は人に任せているのでくわしいことは
わからないのですが、トライしてみたらどうでしょうか。

No. 2284 # ぷたろ 2001/11/20 (火) 02:28:31
ふくしさん、親切にありがとうございますm(_ _)m
同じHDDにいれるんだったら
HDDを分割するソフトがないと
ダメですよね?
HDDを新しく買って
Linuxを一からやってみようかな。。。
Linuxを自分で管理って大変なんですか?
「いちから Linux を入れて自分で管理する気があるんだったら」
ってあるから大変そう・・・。
う〜ん。新しい事をするのは難しいです(-.-;)

No. 2285 # ふくし [E-mail] 2001/11/20 (火) 13:49:19
>ぷたろさん
HDDにパーティションを切るソフトは、商用のLinuxにはたいてい
ついてきます。少なくともMLD5にはついてきます。
あと、FIPSというフリーのパーティションソフトもあります。
新しいHDDを買ってきてもいいですが、
どのディスクからブートするかを指定する何らかの手段が必要です。
この掲示板だけではフォローしきれないと思うので(^^;
適当な入門用Linuxを買ってみるといろいろ書いてあると思います。
それから大変かどうかですが、それは人によります。
最近の入門用のディストリビューションは
最初からなんでも使えるようになっているようですが、
もしネットワークにつなぎっぱなしにする環境なら、
不要なサービスを殺さないと外からどんどん入ってこられます。
最低でも root(管理者用ユーザー)のパスワードは設定してください。
では、がんばってくださいー。

No. 2286 # みー [E-mail] 2001/11/20 (火) 15:16:24
たびたび申し訳ありません。また、教えて下さい。perlのコマンドでカレンドディレクトリの中の複数ファイルを対象に、該当の文字(/usr/kokyaku)を特定の文字(usr/okyaku)に置換させようと考えています。下記のコマンドを実施したところ、特定文字を含まないファイルについても、バックアップファイル**.bakが作成されてしまいます。該当のファイルのみバックアップファイルを作成することは可能でしょうか?
perl -pi.bak -e 's/\/usr\/kokyaku/\/usr\/okyaku/g' *

カレントディレクトリーには、20ほどのファイル(ほとんどがシャル)が存在し、上記文字を含むファイルが6つほど存在するので、6つのみファイルの中身を置換し、バックアップファイルも6つのみ作成してほしいのですが、わがままなお願いでしょうか?お手数をおかけいたしますが、簡単な方法があれば教えて下さい。

No. 2287 # 68user 2001/11/20 (火) 15:56:00
>>2286 みー
> バックアップファイル**.bakが作成されてしまいます。
おそらくそういう仕様です。


で、どうすればいいと思いますか?

不要なファイルができて困るのなら、不要なファイルを作らないように
するか、不要なファイルを削除すればいいわけで。

まずは自分で考えてみて下さい。

No. 2288 # TAKE 2001/11/21 (水) 01:51:43
今晩は、初めまして。
突然ですが質問して宜しいでしょうか。
ホスト名と、IPアドレスの頁を読ませていただいたのですが、まだ良く分かっていないので、この場をお借りして質問させていただきます。
IPアドレスが微妙に違って、でもホスト名が同一の場合、それは同一のパソコンからアクセスしていると解釈していいのでしょうか?
すみません、物知らずで…教えてくださると嬉しいです。

No. 2289 # みー [E-mail] 2001/11/21 (水) 09:45:55
68userさん、回答ありがとうございました。仕様でそうなっているのでは、仕方がないので諦めて、カレトディレクトリーに該当ファイル数が少ない場合はファイルを指定し、該当ファイル数が多い場合は、不要なファイルを後で、rmで削除することにします。

No. 2290 # ふくし [E-mail] 2001/11/21 (水) 11:51:57
>みーさん
えーシェルスクリプトも Perl もつかえる環境なのに手動でやるんですか、
それはもったいない、、失敗もしそうだし、、

>TAKEさん
相手がプロバイダーの場合など、同じホスト名でも
ちがうパソコンのことがあるのでは、、。

No. 2291 # 68user 2001/11/21 (水) 22:45:27
回答が遅くなったので、もう見ておられないかもしれませんが…

>>2269 kouji
exec cgi、include file には引数を渡せない、という仕様の
ように思えます。ソースを読んでみたのですが、いまいち
わからなかったので自信はないのですが。

ただし、include virtual なら
    <!--#include virtual="./a.cgi?a=b&c=d" -->
というふうに書けば引数を渡せます。

どうしても include file、exec cgi で、ということなら
    <!--#set var="QUERY_STRING" value="hoge=1" -->
    <!--#include file="./a.cgi" -->
    <!--#exec cgi="./a.cgi" -->
などとやってみたのですが、QUERY_STRING の値は上書き
されてしまうようなので、これはダメ。よって、
    <!--#set var="MY_QUERY_STRING" value="hoge=1" -->
    <!--#include file="./a.cgi" -->
    <!--#exec cgi="./a.cgi" -->
などとして、CGI 側では QUERY_STRING でなく MY_QUERY_STRING を
使う、という方法しかないように思えます。

まぁそんなことをするくらいなら、素直に include virtual を
使った方がよいでしょうけれども。

No. 2292 # 68user 2001/11/21 (水) 22:58:37
>>2236 Ka23
> UNIX プログラミング FAQのサイトが
> http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html
> に移転しているようです。
遅くなりましたが修正いたしました。

# http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/link-book.html

が、今 www.adl.rd.nacsis.ac.jp には unreachable なので、
そのページはまだ見ていません。

No. 2293 # 68user 2001/11/21 (水) 23:19:24
>>2159 Nira
> そういえば、httpsの取得に良いサイトを発見しました。
> https://www2.ggn.net/cgi-bin/ssl です。
http://x68000.startshop.co.jp/~68user/net/ssl.html に反映しました。

# http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/ssl.html


他にも「前に情報提供したのにまだ反映されていない」という部分が
ありましたら、ご指摘いただけると幸いです。

No. 2294 # kouji 2001/11/23 (金) 09:08:52
>68userさん
ありがとうございました。
include virtualを使います。

No. 2295 # TAKE 2001/11/23 (金) 22:43:20
ふくしさん、ご回答有難うございました。
参考になりました。

No. 2296 # ふくし [E-mail] 2001/11/26 (月) 01:03:02
Perl の質問ですが、(101) とか ($x) とかいう式は、
・スカラーをカッコに入れたもの
と思われるのでしょうか、
・要素数が1個のリスト
と思われるのでしょうか。

($x) = (6,7,8);
と書くと、$x には 6 が入るので、($x) はリストのようです。
でも、そのあと、
$n = ($x);
と書くと、$n には ($x) の要素数 1 ではなく、$x の値 6 が入ります。

$n = ();
と書くと、$n にはゼロは入らないで undef が入るようです。
ということは、() は空リストではなく、
「無」をカッコで囲んだ式が入ってるということでしょうか。
というのは、空リストだとすると、
$n には空リストの要素数 0 が入るように思うからです。

No. 2297 # ひろ 2001/11/26 (月) 11:41:26
みなさん、はじめまして。
ちょっと、C言語の質問をさせてもらっていいっですか?
自分は、redhadのLinux2.1を使っているのですが、
タイム関数の
#include<time.h>
が、使うことが出来ませんが、Linuxにおいては
タイム関数は対応していないのでしょうか?
ある、実験において実験結果をグラフにしようとしている
のですが、タイム関数が使えないために、横軸がLOOP回数での
表示しか出来ずにグラフが成立しなくて困っています。
どうか、良きアドバイスをいただけないでしょうか?
お願い致します。

No. 2298 # 68user 2001/11/26 (月) 11:45:44
>>2296 ふくし
@a をスカラーコンテキストで評価すると、@a の要素数が得られますが、
(6,7,8) をスカラーコンテキストで評価すると最後の要素の 8 が
得られます、ってことで回答になってますでしょうか。

>>2297 ひろ
POSIX にもある関数ですので使えるはずです。どうやったらどういう
エラーが出たのかを詳しく書きましょう。

No. 2299 # ふくし [E-mail] 2001/11/26 (月) 13:26:51
68 ユーザーさん>
なるほど〜そのとおりのようですね。どうもありがとうございました。

No. 2300 # maru 2001/11/26 (月) 15:54:45
はじめまして。UNIX初心者で申し訳ない質問なんですが、、
今自分が使っているOSのバージョンを知るコマンドってあるのでしょうか?
DOSで言う「ver」にあたるものです。
手持ちの本に載ってなかったので、くだらない質問で申し訳ないんですが、
お願いします。

No. 2301 # ふくし [E-mail] 2001/11/26 (月) 17:06:43
maru さん、はじめまして。
uname -v ですな。(DOS の方を知らんかった、、;;;)

No. 2302 # maru 2001/11/26 (月) 17:18:30
ふくしさん、さっそくありがとうございます。
DOSでのコマンド、お役にたててなによりです。(笑)

No. 2303 # ken 2001/11/26 (月) 22:02:12
はじめまして、けんといいます。すごく初心者なのですが、質問
させてください。

ネットワークプログラムをやろうと思い、
UNIXネットワークプログラミング(リチャードスティーブンス)
の本を買ってきたのはいいですが、プログラムの実行の仕方が
わかりません。学校のソラリスにTELNETでつないで、最初の例題
timetcpcli.cという、時間を返してくれるプログラムを
書いて、gccで実行したのですが、例題に特殊な"unp.h"という
ヘッダーがあり、それを作者のHPからダウンロードしてきて、
timetcpcli.cと同じディレクトリーにコピーしました。

そしていざ、gccをやってみても、そのようなファイルもディレクトリ
も存在しませんと返ってきました。ファイルとヘッダーを同じ
ディレクトリーに置いといて実行できるのでしょうか?

大変初心者ですいません。自分がこのようなプログラムをやる
域に達していないのですが、どなたかご教授ください。

No. 2304 # 68user 2001/11/27 (火) 01:14:21
>>2303 ken
> ファイルとヘッダーを同じディレクトリーに置いといて
> 実行できるのでしょうか?
#include "unp.h" と書いてあるならいけるはずです。
もしかして #include <unp.h> と書いてませんか?

No. 2305 # ひろ 2001/11/27 (火) 10:18:32
68userさん>失礼しました。今後、気をつけます。
                        さて、プログラムの方なのですが、参考図書とにらめっこして      いたところ、恥ずかしい事にタイム関数の使い方を間違ってい      ました。今後、こんなことのないように気をつけます。
                        有難うございました。

No. 2306 # pon 2001/11/27 (火) 10:50:21
こんにちは、
Solaris2.6を使用しておりますが、
印刷のコマンドの「lp」と「lpr」の違いはなんでしょうか。
いろいろ調べたんですが、なかなか意味が理解できなくて。。
「lpr」の方はSunOS/BSD互換パッケージコマンドとありますが、それだけ
の違いでしょうか。
よろしくお願いします。

No. 2307 # まさお 2001/11/27 (火) 11:11:42
こんにちは。質問したいことがあります。
UNIX上で、あるアプリケーションの画面(検索結果を表示しているような一般的
な画面)をそのままハードコピー感覚で印刷したいのですが、
これにはどういった処理・手順が必要なのでしょうか。

単純にlpコマンドではうまく印刷できないですよね?
PostScriptに変換しないとやはりダメでしょうか。
ちなみにOSはSolaris2.6で出力プリンタはEPSON LP9200SXです。
(プリンタはLAN上にいます)
プリンタの方でも何か設定が必要でしたら教えてください。
よろしくお願いします。

No. 2308 # 68user 2001/11/27 (火) 11:14:33
>>2306 pon
> 「lpr」の方はSunOS/BSD互換パッケージコマンドとありますが、
> それだけの違いでしょうか。
それだけです。

BSD 系 UNIXには lpr の方しかなくて、SystemV 系は lp です。
Solaris の /usr/usb/ の下にあるのは全て BSD 互換コマンドです。

# ucb=University of California, Berkeley

No. 2309 # 68user 2001/11/27 (火) 11:23:40
>>2307 まさお
> プリンタはEPSON LP9200SXです。
これ、PostScript プリンタですよね。
    http://www.i-love-epson.co.jp/products/printer/laser/lp9200ps3/9200ps32.htm

ImageMagick 付属の convert で PostScript に変換して、
lp に流すのはどうでしょうか。
    % xwd > image.wd
    % convert image.wd image.ps
    % lp -d printername image.ps

あるいは、とにかくブラウザが見える画像形式に変換して、
ブラウザから印刷する、とか。

No. 2310 # まさお 2001/11/27 (火) 11:56:08
68user様、ありがとうございました。
やはりPostScript への変換が必要なのですね。
ところでこのPostScript変換ツールというのは、テキスト用、画像用とかいろいろとあるようですが、これらはみな1ツールとしてOSにインストールする必要があるということですよね。

以上ありがとうございました

No. 2311 # ken 2001/11/27 (火) 12:57:02
68userさん、さっそくのお返事ありがとうございます。
<unp.h>ではなく、"unp.h"としてもこのような、ファイル、
ディレクトリはありませんと返ってきます。

僕はウィンドウズユーザーなので、UNIXをやるときは学校と
つなげるしかありません。僕の環境はOSはWin2000,next ftp
とtera term proで学校のSun OS5.8につないでいます。

作者(リチャードスティーブン)のHPからunp.hと例題が
詰まったフォルダーをダウンロードしてきて、WIN上で解凍。
それをFTPで自分の学校のアカウントにおくりました。

自分のアカウントではcというディレクトリを作り、その中に、
例題のdaytimetcpcli.cというファイルと,"unp.h"という
ファイルをおいて、gcc daytimetcpcli.cとうつと、このファイル、
ディレクトリはありませんとでてきます。例題も、unp.hも
コピー&ペーストでありつけたので、打ち間違えはないのですが、
どこに問題があるのでしょうか?たいへんすいません、よろしく
お願いします。

ちなみにunp.hというファイルは下記のURLにいって、それをコピー
してきました。
http://www.sfc.wide.ad.jp/~nob/webdoc/unpv12e/lib/unp.h

No. 2312 # 68user 2001/11/27 (火) 14:04:40
>>2310 まさお
> テキスト用、画像用とかいろいろとあるようですが、これらはみな1ツールとして
> OSにインストールする必要があるということですよね。
「1ツール」の意味がよくわかりませんが、
    - テキスト用としては a2ps
    - dvi なら dvi2ps
    - 画像用としては convert で PostScript に変換
などと、別々のアプリケーションで配布されています。

ファイル形式ごとに、いちいちどの変換フィルタかますかを考えるのが面倒、
ということなら、file コマンドなどでファイル形式を判断し、適切なフィルタを
経由して lp にデータを渡すシェルスクリプトを書く、という手もあります。

>>2311 ken
> このような、ファイル、ディレクトリはありません
意訳せず、正確なエラーメッセージを書いて下さい。

例えば unp.h を置いて、以下の内容のような foo.c というファイル
    #include "unp.h"
    main(){
    }
を置き、コンパイルすると
    % gcc foo.c
    In file included from foo.c:1:
    unp.h:7: ../config.h: No such file or directory
    In file included from foo.c:1:
    unp.h:200: ../lib/addrinfo.h: No such file or directory
となります。config.h や addrinfo.h を用意していないということはありませんか?

でなくて、
    foo.c:1: unp.h: No such file or directory
と出るなら本当に unp.h がないのでしょう。unp.h が置いてあるディレクトリに行って、
    % cat unp.h
とするとちゃんと表示されますか?

No. 2313 # まさお 2001/11/27 (火) 16:29:25
>68userさん
いろいろとありがとうございました。よくわかってきました。

ところで、もっと漠然とした質問で申し訳ないんですけど、UNIX上で画像などを印刷する場合は、ファイルをPostScript形式に変換しなければどんなことしても絶対印刷は無理!ということなのでしょうか。
(要はImageMagickやxvのインストールは必須ということでしょうか。)
Postscriptがなかった時代は印刷できなかったんですかね。

では失礼します。

No. 2314 # 68user 2001/11/27 (火) 21:14:57
>>2313 まさお
要は、プリンタが解釈できる言語を流してやる必要があります。

PostScript プリンタは PostScript を解釈できます。LIPS な
プリンタには LIPS で、ESC/Page なプリンタには ESC/Page な
データを流してやらないといけません。

そのための変換ツールが、lipsf だとか、gs (GhostScript)
だとか、a2ps とか dvi2ps とかなわけです。

どうでもいいですが、PostScript プリンタってのは価格が高いので、
普通の企業では LIPS とか ESC/Page なプリンタを買うことが多いです。

Canon やら Epson がドライバを出しているので Windows からの利用は
OK なんですが、UNIX から非 PostScript プリンタを使うのは何かと
面倒だったりします。

No. 2315 # まさお 2001/11/28 (水) 11:19:44
>68userさん
ありがとうございました。
いろいろ複雑ですね。ますます考えることが多くなってきました。

要はUNIXからアプリケーションの画面(スナップショット)を印刷する処理を
考えているところなのです。
プリンタがEPSON LP8200LP2 でOSがSolaris2.6です。

画像なので、以前教えていただいたようにImage Magickなどの変換ツールを
あとからインストールしないとダメなようすね。
OSの方にあらかじめ組み込まれているコマンドとかがないのか探しているんですけど、
みつかりません。「jtops」というコマンドがOSにあるのですが、これはテキスト専用
でしょうか。
あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードもテキスト
専用なんですよね?

画像の印刷はやはりPostscript変換ということですよね。

たびたび失礼しました。

No. 2316 # 68user 2001/11/28 (水) 13:02:21
>>2315 まさお
> 「jtops」というコマンドがOSにあるのですが、これはテキスト専用
> でしょうか。
のようですね。

> あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードも
> テキスト専用なんですよね?
いいえ、イメージもいけます。


てゆーか、そんなに難しく考える必要はなくて、PostScript プリンタ
なんだから PostScript で送ってやればいいんですよ。

例えば
    ftp://gatekeeper.dec.com/contrib/share/lib/ghostscript/examples/tiger.ps
を落として
    % lp -d printername < foo.ps
で印刷できるはず。

あとは任意の画像を PostScript に変換するツールをインストールすれば
おしまいです。convert でも xv でも gimp でもできます。

No. 2317 # まさお 2001/11/28 (水) 15:40:30
>68user さん
ありがとうございました。
勉強になりました。

No. 2318 # ken 2001/11/28 (水) 16:05:37
ネットワークプログラムなのですが、エラーメッセージとしては、
68userさんがおっしゃったように、

In file included from daytimetcpcli.c:1:
unp.h:7: ../config.h: No such file or directory
In file included from daytimetcpcli.c:1:
unp.h:200: ../lib/addrinfo.h: No such file or directory

というメッセージが返ってきます。しかし、unp.hも、addrinfo.h,
config.hも同じディレクトリーにいれてgcc daytimetcpcli.cと
うっても、上記のようなエラーが返ってきます。ヘッダーファイル
が同じディレクトリーにあるのにこのようなメッセージが返ってくる
ということは、やはりどこかに、なんらかの間違いがあるということ
でしょうか?よろしくお願いいたします。

No. 2319 # 68user 2001/11/28 (水) 17:58:16
>>2318 ken
    /home/user/c/daytimetcpcli.c
    /home/user/c/unp.h
というファイル配置で、カレントディレクトリが /home/user/c/ のとき
    ../config.h

    /home/user/unp.h
を表します (.. は親ディレクトリを表すから)。同様に
    ../lib/addrinfo.h

    /home/user/lib/addrinfo.h
を表します。

そこにヘッダファイルがないので No such file or directory になって
いるわけです。本に、ヘッダファイルやソースファイルをどういう
ディレクトリ構成で置きなさい、という記述はありませんか?

No. 2320 # 68user 2001/11/29 (木) 00:03:18
>>2318 ken
unpv12e.tar.gz を持ってきて試してみたところ…README にやり方が
ちゃんと書いてありますがな。ドキュメントはちゃんと読みましょう。
    % ./configure
    % cd lib
    % make
    % cd ../intro
    % make daytimetcpcli
でうまくいきました。

Solaris8 (SunOS5.8) ではどうかはわかりませんが、FreeBSD では
lib の make 時に IPV6_DROP_MEMBERSHIP というマクロが未定義だ
というエラーが出ました。これは古いマクロで、今は IPV6_JOIN_GROUP に
変わっています。

んで、ここを書き換えるとコンパイルが通りました。

No. 2321 # lee [E-mail] 2001/11/29 (木) 23:13:35
.tgzとして拡張子があるファイル、どう展開しますか?

No. 2322 # pon 2001/11/30 (金) 10:39:35
ひとつ教えてください。
Windowのダンプのコマンドの一般的な使い方は、
xwd -out display.xwd
と入力し、そのあとにダンプしたいWindowをマウスで選択しますが、
このとき、ダンプをとりたいWindowをマウスで指定するのではなく、
プログラム上で指定したいのです。(たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴなWindowを印刷する、とか。)
そういった処理を行うこと可能なのでしょうか?

No. 2323 # kura 2001/11/30 (金) 10:55:29
はじめまして、
ネットワークプログラミング駆け出し者です。
このような、すばらしいHPを開かれている皆様に感謝致します。
とても、参考になります。
これからも、宜しくお願いします。

No. 2324 # なっち 2001/11/30 (金) 13:44:59
かなり勉強になりました。
telnetのところでGET index.html HTTP/1.0をやっても403エラーと
出てしまいます。どうしたら、うまくいくか教えてください。
お願いします。

No. 2325 # zone [E-mail] 2001/12/04 (火) 13:55:08
cookの作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?

No. 2326 # ひよっこ 2001/12/04 (火) 14:43:58
はじめまして。
最近unixを触りだしたひよっこです。
大変素晴らしいHPでとても助かります。
実は、unixのシステム管理業務の一環として時間別/日別のcpuの使用率及びメモリ使用率を調べるコマンドを探しています。
cpu使用率はsar -Aでデータを取る事が出来たのですが、メモリ使用率
が分かりません。
どうしてよいのか途方に暮れています。良きアドバイスを頂けないでしょうか?

No. 2327 # ふくし [E-mail] 2001/12/04 (火) 19:36:21
いつもお世話になっております。Perl で助けてください。
0x00 から 0xff までループ、というつもりで、

    for ("\x00".."\xff") {
        ...
    }

とやってますが、\x00 のとき1回だけやって終わるみたいです。
なじぇ?(?.?) どなたかお願いします。

No. 2328 # 68user 2001/12/04 (火) 21:24:48
>>2321 lee
> .tgzとして拡張子があるファイル、どう展開しますか?
「tgz 展開」で検索しましょう。

>>2322 pon
> たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴな
> Windowを印刷する、とか。
というのができるのかどうかはわかりませんが、xwd の -id や
-name オプションでウィンドウは指定できるでしょう。指定する
値は
    % xwininfo -root -all
で表示されるものです。

>>2324 なっち
> telnetのところでGET index.html HTTP/1.0をやっても403エラーと
> 出てしまいます。
ブラウザでアクセスしても 403 となるなら、telnet でやっても
当然 403 です。もしブラウザでうまくいくのなら、Host ヘッダを
付けてやってみて下さい。

>>2326 ひよっこ
OS は何ですか? 僕なら top を使いますが、sar -k とかでも
できませんか? (試したことはありませんが)

>>2327 ふくし
> \x00 のとき1回だけやって終わるみたいです。
終わってしまいますね。よくわかりませんが、
    for ("\\1" .. "\\9") {
    for ("!1" .. "!9") {
などでも同様なので、\ という *文字* はマジックインクリメントの
対象外なんじゃないでしょうか。

で、実は本当にやりたいのは
    for (0x00 .. 0xff) {
じゃあないですか? じゃなくて、もし \xXX という文字列が
欲しいのならば
    for (0x00 .. 0xff) {
        $hex = sprintf("%02x", $_);
    }
あたりで。

No. 2329 # ふくし [E-mail] 2001/12/05 (水) 00:28:02
いつもお世話になっております。
>実は本当にやりたいのは
ばっちりです、、;;;

No. 2330 # しんベエ 2001/12/05 (水) 16:53:48
はじめまして。
ここのプログラムは凄く参考になり助かっています。

サンプルプログラムの間違いなんですが、
http://jfx.startshop.co.jp/~68user/net/module-2.html
にある、モジュールを使ったマルチスレッド版echoプログラムの
31行目「if ( fork() ){」は、
正しくは「if ( $pid = fork() ){」ですよね?

No. 2331 # なっち 2001/12/05 (水) 18:14:10
お答えありがとうございました。
かなり役に立ってます。すごいです。
また、質問何ですが、UNIXで壁紙を自分のもっている画像にしたいので
すが、xvコマンド以外で何か良い方法ありませんか?

No. 2332 # わたなべ 2001/12/06 (木) 02:51:39
はじめまして。
このページではいつも色々と勉強させて貰っています。

さて、質問なのですが、今現在CVSにてあるプロジェクトを管理しており、
そのリポジトリをcvswebにて閲覧出来るようにしようとしているのですが、
ある特定のファイル達の中身を表示しようとしたときに、
cvs checkout: cannot exec co: No such file or directory
cvs checkout: could not check out xxx/yyy/Zzz.java
という様なメッセージが出てしまいます。
CVSも使い始めたばかりのため、何が原因なのかが分かりません。
もし良かったら何かヒントや、cvswebに関しての解説があるような
ページがありましたら教えていただけると嬉しいです。

よろしくお願いします。

No. 2333 # 68user 2001/12/06 (木) 04:11:41
>>2330 しんベエ
> 正しくは「if ( $pid = fork() ){」ですよね?
ご指摘ありがとうございます。その通りですね。修正しておきます。

>>2331 なっち
> お答えありがとうございました。
> かなり役に立ってます。すごいです。
じゃなくて、回答した結果、解決したかどうかをちゃんと書いて
ください。とりあえず
        http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を読んでください。

> UNIXで壁紙を自分のもっている画像にしたいのですが、
> xvコマンド以外で何か良い方法ありませんか?
ImageMagick が入っているなら
    % display -window root 画像ファイル
でできるかも。

>>2332 わたなべ
あなたも
    http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を読んでください。少なくともこの掲示板ではマルチポストは
ダメですし、2ch でも歓迎はされないでしょう。

あと、OS は何ですか? cvs のバージョンは? RCS のバージョンは?
cvsweb には zeller 版と knu 版がありますが、どっちを使って
いますか? また、そのバージョンは? 内容を表示って、x-cvsweb-markup
のことですか? それとも text/plain ですか?

仮にうちと同じ knu 版 cvsweb-1.105.1.65 だとすると、その
エラーが出そうなところは
    exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);
しかなさそうなので、オプションなどの値を表示させてみて、
同じことをコマンドラインからやってみてはどうですか。

# http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/cvsweb.cgi?rev=1.9&content-type=text/x-cvsweb-markup

No. 2334 # わたなべ 2001/12/06 (木) 13:05:37
渡辺です。
>>2322 pon
は非常に浅はかな行動だったと認識しました。
申し訳ありませんでした。
今後気を付けます。

質問の続きをさせて頂いてもよろしいでしょうか…?
使っている各ソフトウェアのバージョンですが、
OS : Solaris SunOS 5.8
CVS : 1.9
RCS : 5.7
cvswebは、68userさんが使われているのを、http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgiのリポジトリから拝借しました。(ひょっとして、これもまずい行動でしたか。)
そして、内容の表示というのは、x-cvsweb-markupも、text/plainもです。
表示出来るファイルに関しては、双方とも表示出来るのですが、エラーが起きるファイルに関しては、両方ともに起きます。

また、68userさんがおっしゃってる通り、
exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);
でエラーが起きているであろうと考え、それをコマンドラインで実行してみたのですが、コマンドラインからは実行できました。
(実行できました。といいますか、あるファイルをチェックアウトでき、標準出力に出力されるという結果を得ました。)
オプションの値を変更して…という事ですが、CVSに明るくないため、何をどうかえたら良いのかがわかりませんでした。

これで足りますでしょうか?
もし、>>2332での事をお許し頂けるなら、何がアドバイス等を頂けたら嬉しいです。
結果報告もきちんとしますので、よろしくおねがいします。

No. 2335 # わたなべ 2001/12/06 (木) 14:02:08
>>2334 わたなべ
での書き込みにある、>>2322は>>2332の間違いです。
重ねてお詫びします。申し訳ありません。

No. 2336 # 68user 2001/12/06 (木) 14:58:28
>>2334 わたなべ
> ひょっとして、これもまずい行動でしたか。
問題ありません。書いてある通り、covered by the BSD-Licence です。

checkout できるファイルとできないファイルがあるということですから、
まずはリポジトリのパーミッションはどうなっているか確認して下さい。

同じディレクトリでも co できるファイルと co できないファイルがあれば、
ファイルのパーミッションが怪しいですし、あるディレクトリの下のファイルが
全て co できないならディレクトリのパーミッションがおかしいでしょうし。

うちの Solaris2.6 では
    % chown -R cvs /cvsroot (グループは cvs グループで統一)
    % chmod -R g+w /cvsroot (cvs グループに書き込み権限を与える)
    % find /cvsroot -type d | xargs chmod g+s (BSD タイプのパーミッションに)
とかしてます。でも、cvsweb.cgi は nobody で動かしているから
これは関係ないかな…。

また、CGI の実行権限は何ですか? 例えば nobody なら su nobody して
から checkout してみて下さい。

実際にどういうコマンドが実行されているかは、
    if (! open($fh, "-|")) { # child
        open(STDERR, ">&STDOUT"); # Redirect stderr to stdout
        exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);
    }
の前に
    print "Content-type: text/plain\n\n";
    print qq(exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where););
    exit;
などと書けばわかるでしょう。

それでもダメなら
        exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);

        exec("/bin/truss", $CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);
として、どのファイルをオープンしようとしてエラーになっているかを
調べて下さい。ちなみに、こちらでやってみると
    open("/MASTER/cvs/CVSROOT/config", O_RDONLY) = 4
    open("/MASTER/cvs/CVSROOT/cvsignore", O_RDONLY) Err#2 ENOENT
    open("//.cvsignore", O_RDONLY) Err#2 ENOENT
    open("/MASTER/cvs/CVSROOT/cvswrappers", O_RDONLY) = 4
    open("/MASTER/cvs/CVSROOT/modules", O_RDONLY) = 4
    ..
    open("/MASTER/cvs/admin/public_html/cvsweb.cgi,v", O_RDONLY) = 5
となります。

No. 2337 # aki 2001/12/06 (木) 15:18:16
特定の一般ユーザをroot権限と同様な権限を与えたいのですが、
設定方法を教えてもらえないでしょうか。
/etc/groupのファイルのrootグループに追加するだけで
はいけないのでしょうか。

No. 2338 # わたなべ 2001/12/06 (木) 16:29:03
度々すいません。
>>2336 68user
>同じディレクトリでも co できるファイルと co できないファイルがあれば、
>ファイルのパーミッションが怪しいですし、あるディレクトリの下のファイルが
>全て co できないならディレクトリのパーミッションがおかしいでしょうし。
リポジトリのパーミションを確認しました。
$CVSROOTディレクトリは 755
その中のプロジェクト毎のディレクトリは 775 でした。
各プロジェクト毎のディレクトリ内にある、サブディレクトリは 775
そして、ファイルは全て 444 でした。
チェックアウト出来るファイル/出来ないファイル、全て同一のパーミションで、同一のディレクトリ内にあるファイルでもチェックアウト出来るものと出来ないものがありました。

>また、CGI の実行権限は何ですか?
>例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。
su nobody をやってみたのですが、パスワードを求められました。
僕はこのサーバの管理者ではないので nobody にはなれない様な気がしているのですが、可能なのでしょうか?

>実際にどういうコマンドが実行されているかは、
これは最初に書き込みをした時点でやってみました。
CGI からではなく、ターミナル上のコマンドからならチェックアウト出来ることも確認しております。

>exec("/bin/truss", $CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);
やってみたところ、以下の様な出力を得ました
= From ========================================
cvs checkout: cannot exec co: No such file or directory
cvs checkout: could not check out xxx/yyy/Zzz.java
waitid(P_PID, 17464, 0xFFBEF1C0, WEXITED|WTRAPPED|WNOWAIT) = 0
ioctl(0, TIOCGPGRP, 0xFFBEF17C) Err#22 EINVAL
getpgid(17464) = 350
ioctl(0, TIOCGPGRP, 0xFFBEF17C) Err#22 EINVAL
waitid(P_PID, 17464, 0xFFBEF1C0, WEXITED|WTRAPPED) = 0
waitid(P_ALL, 0, 0xFFBEF160, WEXITED|WTRAPPED|WNOHANG) = 0
fork() = 17467
waitid(P_PID, 17467, 0xFFBEF270, WEXITED|WTRAPPED|WNOWAIT) = 0
ioctl(0, TIOCGPGRP, 0xFFBEF22C) Err#22 EINVAL
getpgid(17467) = 350
ioctl(0, TIOCGPGRP, 0xFFBEF22C) Err#22 EINVAL
waitid(P_PID, 17467, 0xFFBEF270, WEXITED|WTRAPPED) = 0
waitid(P_ALL, 0, 0xFFBEF210, WEXITED|WTRAPPED|WNOHANG) = 0
llseek(0, 0, SEEK_CUR) Err#29 ESPIPE
_exit(0)
= End =========================================
上のメッセージの3行目以降は、チェックアウト出来たファイル/出来なかったファイル共に出力されていました。

現状報告だけで申し訳ありません。
このページで学んだ通り、ユーザ権限で CGI を動かすようにもしてみたのですが、それでも何も状況は変わりませんでした。

No. 2339 # わたなべ 2001/12/06 (木) 16:31:23
>>2338 わたなべ

>例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。

>例えば nobody なら su nobody してから checkout してみて下さい。
CGI は nobody で動いています。
と訂正させてください。
毎度毎度申し訳ありません。

No. 2340 # 68user 2001/12/06 (木) 17:09:12
>>2332 わたなべ
> cvs checkout: cannot exec co: No such file or directory
ん〜、これってもしかして、単に co(1) が見付からないって
言ってるのかな? co(1) にパスは通ってます?

# って、どういうときに co(1) が使われるのかいまいちわかってませんが。
## これが原因なら、かなり的外れなことを言ってたことになるなぁ。

No. 2341 # わたなべ 2001/12/06 (木) 17:47:06
>>2340 68user
>ん〜、これってもしかして、単に co(1) が見付からないって
>言ってるのかな? co(1) にパスは通ってます?

co(1) という書き方が何を指すのか、わからないのですが、
which co
で得られるパスを、 cvsweb.conf の $command_path にコロンでつなげて
記述すればいいんですよね?
一応それはやってあります。
CVS も RCS も、root が入れたものではなく、ユーザ権限でインストール
したもので、それらをユーザの ~foo/cgi-bin/cvsweb/ で使おうと
しているのですが、その辺りに問題があったりしますか?

No. 2342 # 68user 2001/12/06 (木) 18:35:12
>>2338 わたなべ
> which co で得られるパスを、 cvsweb.conf の $command_path にコロンで
> つなげて記述すればいいんですよね?
はい、そうです。

> リポジトリのパーミションを確認しました。
ではリポジトリのパーミッションは問題ないでしょう。

> 僕はこのサーバの管理者ではないので nobody にはなれない様な気が
> しているのですが、可能なのでしょうか?
一度 root にならないと nobody にはなれません。

truss の結果 (システムコールでこけているわけではないらしい) と、
> cvs checkout: cannot exec co: No such file or directory
> cvs checkout: could not check out xxx/yyy/Zzz.java
のメッセージから、単に PATH を検索して、co が見付からないので
    co -r1.1 /cvsroot/xxx/yyy/Zzz.java,v
がこけているのかと思ったのですが、違うのかなぁ。成功するファイルと
失敗するファイルがあるというのが謎ですが…。

でも、最近の cvs (少なくとも cvs-1.11) では rcs (co も含む) は
使っていないはずなので違うかなぁ (cvs は rcs を使わないけど、
cvsweb は rcs を使う)。

…と書いたところで今気づきましたけど、
> CVS : 1.9
古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11
にして下さい。ここが一番怪しいかな。

ちなみに、最新版の cvsweb はこちらです。
    http://www.idaemons.org/cgi-bin/cvsweb.cgi/cvsweb/

No. 2343 # わたなべ 2001/12/06 (木) 20:15:55
>>2342 68user
>…と書いたところで今気づきましたけど、
>> CVS : 1.9
>古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11
>にして下さい。ここが一番怪しいかな。
cvs-1.11をインストールしてみましたところ、無事にcvswebも問題なく
動き出す様になりました。
最初に無礼を働いてしまったにも関わらず、解決まで長々と
付き合って頂き、本当にありがとうございました。

これからもちょくちょく来て、勉強させて頂きます。
ありがとうございました。

あと、ちょっとメインの話とはずれるのですが、
>>2340 68user
にあった
>co(1)
というのはどのような時に書く方法なのでしょうか?

No. 2344 # 68user 2001/12/06 (木) 20:46:58
>>2343 わたなべ
> 無事にcvswebも問題なく動き出す様になりました。
それはよかったです。バージョンは? と聞いておきながら
古いのを見落としていたのは失敗でした。

>> co(1)
> というのはどのような時に書く方法なのでしょうか?
セクション番号を表します。セクション 1 はコマンドなので、
「co(1)」は「コマンド co」という意味です。
# http://X68000.startshop.co.jp/~68user/unix/pickup?man

No. 2345 # わたなべ 2001/12/07 (金) 00:07:54
ありがとうございます。
>>2344 68user
>セクション番号を表します。
あ、すでに書かれているところがありましたか…。ちゃんと見てから
質問しないとダメですね…。本当にすいません。
今回色々勉強させて頂きました。
本当に感謝感謝です。

なんだか、頼りっぱなしだったのでちょっと一人で勉強してきます。
また何かあったら質問しにくるかもしれませんが、その時はよろしく
おねがいします。

No. 2346 # ゆき 2001/12/07 (金) 20:10:52
はじめまして。ゆきと申します。当方の環境はSUN Sparc Solaris2.51
です。

会社でC++の環境が必要になり、UnixもC、C++もさほど詳しくない私が、
インターネットを頼りにgcc2.95.3のインストールをしました。
それで、渡されたC++のソースをコンパイルしたのですが、以下のような
エラーが出ます。渡した本人は、エラーが出るのはおかしいと言って
います。
% gcc -lstdc++ -o hello hellocpp.cpp
hellocpp.cpp:1: iostream: No such file or directory
hellocpp.cpp:2: string: No such file or directory

これは要するにインクルードファイルを見に行けない状態なんだと
思いますが、gccのインストールが上手くいっていないのでしょうか?
ちなみにC++のソースは以下です。
---------------------------------------------------------
#include <iostream>
#include <string>
using namespace std;

class CHello
{
private:
        string m_strOut;
public:
        CHello(){ m_strOut = "Hello World!"; };
        virtual ~CHello(){};

        void print(void);
};

void CHello::print(void)
{
        cout << m_strOut << endl;
}

int main()
{
        CHello chHello;
        chHello.print();
}
---------------------------------------------------------
何でも良いので、何かお気付きのことがありましたら、教えて下さい。
よろしくお願い致します。

No. 2347 # ふくし [E-mail] 2001/12/07 (金) 21:08:54
>2346 ゆきさんはじめまして
iostream じゃなくて iostream.h、
string じゃなくて string.h だと思います。
h は Header に通常つく拡張子です。

No. 2348 # ふくし [E-mail] 2001/12/07 (金) 22:42:14
とかいって、<iostream> だけの書き方もあるんですね。
手元の cpp ソースは、<iostream.h> でコンパイルできていたのを
<iostream> だけにしたら同様のエラーが出たので、
「.h を付けてみる」をトライする価値はあると思いますが。

No. 2349 # ゆき 2001/12/09 (日) 01:32:16
>2348 ふくしさんへ

お返事ありがとうございます。土曜は会社に行っていないため、教えて
頂いたことはまだ試していないのですが、日曜に休日出勤(サービス)
でもして試してみようかと思います。ところで、申し訳ありませんが、
もしご存知であれば、もう少し教えて頂けないでしょうか。

今回、私にソースを渡した人は、Linux環境で試したらしいのですが、
コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp
というふうにしろと言っています。調べてみるとオプション-lは、
ライブラリファイルへのリンクだと知りました。こちらのマシーンを
覗いてみますと、-lstdc++は、どうやら/usr/local/bin/libstdc++を
見に行くように指定しているようなのですが、これがファイルではなく、フォルダなのです。そういうことで、よろしいんでしょうか?

しかし、仮にlibstdc++フォルダを見に行くとしても、libstdc++直下
には、iostream(.h)もstring(.h)もありません。これらは、
usr/local/bin/libioというフォルダの中にありました。

ふくしさんは、iostream.hとすると上手くいったということですが、
libstdc++フォルダの中に、iostream.hもstring.hもあったと認識して
よろしいのでしょうか?もしそうなら、それらが入っていない私の
環境は、やはりインストール時の失敗ということでしょうか・・・

もしよろしければ、お教え頂けませんか?よろしくお願い致します。

No. 2350 # 68user 2001/12/10 (月) 11:00:48
>>2348 ふくし
> とかいって、<iostream> だけの書き方もあるんですね。
C++ はよく知りませんが、namespace 対応の C++ コンパイラならば
.h を省略できるはずです。

gcc は長らく namespace への対応がダメダメでしたが、少なくとも
gcc-2.95.3 では OK です。

で、iostream はヘッダファイルです。libstdc++ はライブラリです。
ヘッダファイルがないと言われているのにライブラリのことを気に
するのは間違っています。

>>2349 ゆき
> これらは、usr/local/bin/libioというフォルダの中にありました。
それはライブラリのソースでしょう。それが /usr/local/bin/ に
あるのはおかしいです。

> コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうに
> しろと言っています
-lstdc++ は不要です。C で -lc が不要なのと同じで、わざわざ指定
しなくても勝手に libstdc++ はリンクされます (指定してもいいですが)。

> -lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように
> 指定しているようなのですが
どうしてそのように判断しましたか? 普通 -lhoge とすると /usr/lib/libhoge*
というファイルがリンクされます。


手もとの環境を見てみると、ヘッダファイルとライブラリは以下の
場所に置いてありますので、参考にしてみて下さい。

    Solaris8 + gcc-2.95.2
        /opt/sfw/include/g++-3/iostream
        /opt/sfw/include/g++-3/iostream.h
        /opt/sfw/lib/libstdc++.a.2.10.0
        /opt/sfw/lib/libstdc++.so.2.10.0

    FreeBSD + gcc-2.95.2
        /usr/include/g++/iostream
        /usr/include/g++/iostream.h
        /usr/lib/libstdc++.a
        /usr/lib/libstdc++.so

    Linux + gcc-2.95.2
        /usr/include/g++-3/iostream
        /usr/include/g++-3/iostream.h
        /usr/lib/libstdc++-libc6.1-2.a.3
        /usr/lib/libstdc++-libc6.1-2.so.3

結局のところ、うまくインストールできていないのではないかと思います。

No. 2351 # yama 2001/12/10 (月) 12:45:31
はじめまして。yamaと申します。
Perlで困っています。
STDOUTの初期化の方法がわかりません。
print文にてhtmlを出力していますが、途中でエラーが発生
した場合、出力済みの情報を初期化し、エラーメセージを出力したい
と考えています。
*STDOUT="";
としましたが、エラー表示以前の分も出力されます。
このようなことは不可能なのでしょうか。
プロバイダ環境はUNIXでApacheのサーバです。
なお、UNIX、Apache、Perlのバージョン
等詳しくは聞いていません。

No. 2352 # 68user 2001/12/10 (月) 13:07:35
>>2351 yama
> このようなことは不可能なのでしょうか。
不可能です。stdout に出力したものは既に出力済かもしれませんし、
まだバッファに溜っているかもしれませんが、それをクリアする
方法はありません。出力済かどうかを判断する方法もありません。

# Java Servlet だとできるんですけどね。

というわけで、自前でバッファリングしましょう。

No. 2353 # yama 2001/12/10 (月) 15:29:39
>>2352 68userさんへ

お返事ありがとうございます。
「不可能」ですか。
ロジックを変更し、必要なチェックを先にするようにします。

今後ともよろしくご指導ください。

No. 2354 # ゆうすけ [E-mail] 2001/12/10 (月) 17:30:08
いつも、お世話になっています。ダウンロードについてなんですが、
.lzhのファイルをコンパイルすることは、UNIXではできるのでしょうか。
もしできるようであれば、ダウンロードの仕方を教えてください。
ちなみに、僕は「Solaris2.6」を使っています。お返事お願いします。

No. 2355 # ふくし [E-mail] 2001/12/10 (月) 18:09:03
>2354
ゆうすけさん、はじめまして。
「lzh のファイルを UNIX でコンパイルする」
と言われると複数に解釈できて、
1)UNIX 上にある複数のファイルを固めて lzh の圧縮書庫を作る
2)どっかから持ってきた lzh の圧縮書庫を展開して、
        その中の C とかのソースツリーをコンパイルする
のどっちでしょう。

で、どっちもできます。ただし条件があって、お使いの Solaris に
lha というプログラムがあるかどうかです。
コマンドラインで「lha」と打ち込んでみてください。
ある場合は使い方が表示され、ない場合は「ない」と起こられます。

で、ある場合はそれを使い、ない場合はインストールします。
で、使い方/インストールの仕方ですが、
とりあえず「lha」というコマンドの名前までわかったので、
あとは検索するなりしてがんばってみて、
どうしてもダメだったらまた聞いてください。
そのとき上の1)なのか2)なのかそれ以外なのかも教えてください。

>2350
68userさん、フォローありがとうございます。
ていうかいつもご苦労様です。
ちょっとでも負担を軽減しようとがんばってみたんですが
役に立たず、申し訳ありません ;;;

No. 2356 # ゆき 2001/12/10 (月) 18:42:36
>>2350 68userさんへ

お返事ありがとうございました。下記2349の中で、私は勘違いな発言を
していたようです。
>-lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように
>指定しているようなのですが
とありますが、違いますよね。libstdc++の中の、libstdc++.aという
ライブラリファイルを見に行ってるということですね。ということは、
----------------------------------------------------
hellocpp.cpp:1: iostream: No such file or directory
hellocpp.cpp:2: string: No such file or directory
----------------------------------------------------
と言うエラーで見に行っているインクルードファイルは、自動的にリンク
されなければならないということでしょうか。私の行ったインストールは
どうもおかしいような気がしてきました。

ちなみに、こちらの環境は以下のようになっていました。
/usr/local/bin/libstdc++/iostream
/usr/local/bin/libio/iostream.h
/usr/local/bin/libstdc++/libstdc++.a
libstdc++.so*は検索しても無いような状況でした。やはり再インストール
をしてみようと思いますが、上記フォルダ階層はそもそも間違いで、
正しいインストール先というのは、インストール時に指定できるように
なっているものなのでしょうか?何度も申し訳ありませんが、よければ
その辺りのことを詳しくお教え願えませんでしょうか?
よろしくお願い致します。

No. 2357 # 68user 2001/12/10 (月) 19:11:40
>>2356 ゆき
> libstdc++の中の、libstdc++.aというライブラリファイルを見に行ってる
> ということですね。
インクルードとリンクは全く別物です。インクルードファイルと
ライブラリには何の関係もありません。

> 自動的にリンクされなければならないということでしょうか。
インクルードファイルはリンクするものではなく、インクルードする
ものです。

-v を付けてコンパイルすると以下のようになります。

% g++ -v a.cpp
Using builtin specs.
gcc version 2.95.2 19991024 (release)
  /usr/libexec/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386__ -D__unix__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix) -Asystem(FreeBSD) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__ELF__ a.cpp /tmp/ccFhD943.ii
GNU CPP version 2.95.2 19991024 (release) (i386 FreeBSD/ELF)
#include "..." search starts here:
#include <...> search starts here: ← ここ★
  /usr/include/g++ ← ここ★
  /usr/include ← ここ★
  /usr/include ← ここ★
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
  /usr/libexec/cc1plus /tmp/ccFhD943.ii -quiet -dumpbase a.cc -version -o /tmp/cctFu943.s
GNU C++ version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C version 2.95.2 19991024 (release).
  /usr/libexec/elf/as -v -o /tmp/ccvXl943.o /tmp/cctFu943.s
GNU assembler version 2.10.0 (i386-unknown-freebsd4) using BFD version 2.10.0
  /usr/libexec/elf/ld -m elf_i386 -dynamic-linker /usr/libexec/ld-elf.so.1 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/libexec/elf -L/usr/libexec -L/usr/lib /tmp/ccvXl943.o -lstdc++ -lm /usr/lib/libgcc.a -lc /usr/lib/libgcc.a /usr/lib/crtend.o /usr/lib/crtn.o

★を付けた部分でインクルードファイルの取り込みが行われます。

この環境では、標準のインクルードファイルは /usr/include/g++、
/usr/include である、ということがわかります。そこにインクルード
ファイルが置いてあれば何もエラーは起こらないはずです。

で、★の部分が終わったら初めてライブラリが出てくるわけで
(ld がライブラリをリンクする)、★がうまくいかないのに
ライブラリが云々と悩むのはおかしいです。

> /usr/local/bin/libstdc++/iostream
> /usr/local/bin/libio/iostream.h
> /usr/local/bin/libstdc++/libstdc++.a
これはソースで、本来不要なファイルではないですか? /usr/local/bin/ に
ファイルを展開して、そこで make したんじゃないかと想像しますが。

> 上記フォルダ階層はそもそも間違いで、
おそらく間違いでしょう。

> 正しいインストール先というのは、インストール時に指定できる
> ようになっているものなのでしょうか?
ソースからコンパイルしたなら、make 時に指定することもできますが、
普通はデフォルトのディレクトリにインストールします。

とりあえず package を利用してはどうですか?
    ftp://SunSITE.sut.ac.jp/pub/sun-info/Solaris/sparc/2.5/gcc-2.95.3-sol25-sparc-local.gz

No. 2358 # 68user 2001/12/10 (月) 22:38:31
>>2337 aki
おっと、見逃していました。

> /etc/groupのファイルのrootグループに追加するだけで
> はいけないのでしょうか。
root グループにはなれますが、root にはなれません。
sudo など、setuid などで検索してみてください。

No. 2359 # kanji 2001/12/11 (火) 14:58:52
はじめましてkanjiと申します。コマンドのページを良く利用させて頂いています。感謝です。
UNIXの掲示板で、Linuxの質問をよろしいでしょうか。
本題の質問なのですが、初めてRedHat Linux7Jをインストールし、Webサーバの構築を考えています。
ですがPCMCIAのNWカードを認識してくれません。(3com 3c589Dを使用)
そこでPCMCIAのドライバをインストールしようとpcmciacs.3.1.30.tar.gz を入手し、
#zcat pcmciacs.3.1.30.tar.gz | tar xvf -
#cd pcmciacs.3.1.30.tar.gz
#make config
を行なうと、configエラーが出ます。ソースツリーが無いと言われます。
ソースツリーとはどのようなもので、どうやってインストールすれば良いのでしょうか。
よろしくお願い致します。

No. 2360 # ふくし [E-mail] 2001/12/11 (火) 15:26:42
>>2359 kanji
pcmciacs.3.1.30.tar.gz を展開した
pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。

% cd pcmciacs.3.1.30.tar.gz
ではなくて、
% cd pcmciacs.3.1.30
では?
〜.tar.gz は圧縮ファイルです。
cd は Change Directory です。

No. 2361 # 68user 2001/12/11 (火) 15:34:40
>>2360 ふくし
> pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。
Linux も pcmcia も全然知りませんけど、
    http://www.linux.or.jp/JF/JFdocs/PCMCIA-HOWTO-2.html
などを見るに、カーネルソースを展開して、そこに pcmciacs*.tar.gz を
展開して、make config && make all && make install してモジュールを
インストールすべきなのに、カーネルソースツリーが存在していないので
エラーになってるんじゃないでしょうか。

>>2359 kanji
> configエラーが出ます。
具体的にどういうエラーが出るかをちゃんと書けば、何が問題か
わかる人にはわかるでしょう。

# 僕は残念ながら わからない人です。

No. 2362 # kanji 2001/12/11 (火) 15:48:57
>>2360 ふくし
>>2361 68user
すみません、わかりました。
ありがとうございました。

カーネルソースの展開が抜けているのでしょう。
早速やってみます。

No. 2363 # inaba 2001/12/12 (水) 15:01:21
初めまして、inabaと申します。

>>2359 kanji
3com だったら、ディフォルトで認識してくれると思いますが…。
ただ、network と pcmcia の起動順が逆なので失敗しているのかも。
# cd /etc/init.d
# ./pcmcia restart
# ./network restart
と入力してみてください。
# ifconfig
で、eth0 が認識されていませんか?
見当違いだったらすみません。

No. 2364 # わたなべ [E-mail] 2001/12/12 (水) 19:16:45
はじめまして、渡邊と申します。
ネットワークプログラムに興味があり、POP3 クライアントを作ってみよう(2)の POP3 クライアントサンプルを動作させてみました。
お聞きしたいのは、このままでちゃんとメールが表示されるプロバイダーと表示されないプロバイダーがあり、ニフティでは途中で固まってしまいます。認証までは動いているようで、LISTので止まっているようです。
どうすれば、いいか教えていただけませんか?

No. 2365 # 68user 2001/12/12 (水) 22:11:13
>>2364 わたなべ
> LISTので止まっているようです。
http://x68000.startshop.co.jp/~68user/net/sample/pop3-client.pl ですね?

telnet で pop3 サーバと話してみるとどうなりますか?

LIST 送信の後の
    while (<SOCKET>){
        m/^\.\r\n$/ && last;

    while (<SOCKET>){
        print "[$_]";
        m/^\.\r\n$/ && last;
として実行すると何が表示されますか?

Windows マシンで動かしていますか? (環境はちゃんと書きましょう)
もしそうなら
    socket(SOCKET,PF_INET,SOCK_STREAM,0)|| die ...
の後に
    binmode(SOCKET);
という行を追加するとどうなりますか?

No. 2366 # kuw 2001/12/12 (水) 23:55:57
はじめまして。いつも勉強させてもらっています。

>>2364 わたなべ
> LISTので止まっているようです。
私も、pop3 クライアントを自作したときに、同じことを経験しました。
そのときは、pop3 サーバが NT で、
> +OK IMS POP3 Server 0.87 Ready
というものだったのですが、
LIST の返事に、"." のみの行がなかったのです。
> +OK 0 message (0 octets)
> 0 messages (0 octets)
こんな感じでした。

No. 2367 # kuw 2001/12/13 (木) 00:01:49
>>2366 kuw
>LIST の返事に、"." のみの行がなかったのです。
補足です。
その時は、LIST のかわりに STAT を使うようにして回避しました。

No. 2368 # わなたべ 2001/12/13 (木) 00:13:29
>>2365わたなべ
早速ありがとうございます。
試してみましたが、状況は変わりません。
環境は、Windows2000のクライアントで、サーバーはFreeBSDです。

telnet pop.nifty.com 110
USER ******
PASS ******
LIST
とやる分には、NIFTYでもちゃんとリストされます。

print "[$_]";を追加してみると

[+OK <**********>
][+OK
][+OK
と表示されます。
print $_;
にしてみると、
+OK <**********>
+OK
+OK
で止まってしまいます。
いづれも、Ctrl+Cで終了しないと終わりません。

ところがiij4uでは、
+OK IIJ ************
+OK ************
+OK ************
+OK 5 messages****
と言う感じで正常に動いています。

尚、binmode(SOCKET);を追加してみても状況に変化はありません。

iij4uとNIFTYの差は、+OKの後にiij4uの方は文字があるのですが、NIFTYは何も無いことぐらいです。
att.ne.jpでも動きませんでした。
もちろんtelnetで直接タイプすればリストも問題ありません。
よろしくお願いします。

No. 2369 # わなたべ 2001/12/13 (木) 00:22:04
>>2364わたなべ
kuwさんありがとうございます。
STATを使う件、本日世が明けたら試してみます。
ありがとうございます。

No. 2370 # 68user 2001/12/13 (木) 01:07:12
>>2366 kuw
> LIST の返事に、"." のみの行がなかったのです。
>> +OK 0 message (0 octets)
>> 0 messages (0 octets)
なるほど。もう少し詳しくお聞かせ下さい。

それは mail box にメールがたまっていなかったときのみ . が
ないのでしょうか? あるいはメールがたまっていても . がない
のでしょうか?

また、その POP3 サーバアプリケーションの名前は
何かわかりますか?

ちなみに . をもってレスポンスの終了と見なしている根拠は
http://ring.ip-kyoto.ad.jp/pub/doc/RFC/rfc1939.txt
> When all lines of the response have been sent, a
> final line is sent, consisting of a termination octet (decimal code
> 046, ".") and a CRLF pair.

> Examples:
> C: LIST
> S: +OK 2 messages (320 octets)
> S: 1 120
> S: 2 200
> S: .

です。

No. 2371 # kuw 2001/12/13 (木) 06:44:11
>>2370 68user
>それは mail box にメールがたまっていなかったときのみ . が
>ないのでしょうか? あるいはメールがたまっていても . がない
>のでしょうか?
メールがたまっていなかったときのみです。
メールがたまっているときは、
> +OK 1 messages (1146 octets)
> 1 1146
> .
となります。

>また、その POP3 サーバアプリケーションの名前は
>何かわかりますか?
EMWAC の IMS POP3 Server 0.87 です。
5, 6 年前に NT にインストールして以来、そのまま使っているので、
かなり古いものだと思います。
# この数年、NT を全くいじっていないので、最近の事情はわかりませんが・・・

>ちなみに . をもってレスポンスの終了と見なしている
もちろん、これは正しい仕様だと思いますし、
同じ仕様の MUA やメールチェッカーも多いと思います。

No. 2372 # わたなべ 2001/12/13 (木) 09:57:20
>>2364わたなべ
おはようございます。
昨日の続きですが、下記のようシンプルにしてテストしてみましたが、状況に変化はありませんでした。
よろしく御願いします。

---------------------------------------------
print SOCKET "USER $username\r\n";
print SOCKET "PASS $passwd\r\n";

print SOCKET "LIST\r\n";

while (<SOCKET>){
    m/^\.\r\n$/ && last;
        print $_;
}
print SOCKET "QUIT\r\n";
---------------------------------------------

上記の結果
■AT&Tに接続した場合
+OK <283**.10082***86@mail.att.ne.jp>
+OK
+OK
(ここで止まってしまうので Ctrl+C)
^C
%

■iij4uに接続した場合
+OK IIJ POP3 Server (**.iij4u.or.jp) starting. <128**.1008***94@**.iij4u.or.jp>
+OK Password required: ******@**.iij4u.or.jp
+OK ******@**.iij4u.or.jp has 2 messages (2182 octets)
+OK 2 messages (2182 octets)
%

-------------------------------------------------------------------------------
■telnetでAT&Tに接続した場合
telnet ***.att.ne.jp 110
+OK <283**.10082***86@mail.att.ne.jp>
USER ********
+OK
PASS ********
+OK
LIST
+OK
1 958
2 960
.
QUIT
+OK

■telnetでiij4uに接続した場合
telnet **.iij4u.or.jp 110
+OK IIJ POP3 Server (**.iij4u.or.jp) starting. <128**.1008***94@**.iij4u.or.jp>
USER ********
+OK Password required: ******@**.iij4u.or.jp
PASS ********
+OK ******@**.iij4u.or.jp has 2 messages (2182 octets)
LIST
+OK 2 messages (2182 octets)
1 1090
2 1092
.
QUIT
+OK IIJ POP3 Server (w/mdir) (m-**.iij4u.or.jp) signing off

No. 2373 # 68user 2001/12/13 (木) 13:02:37
>>2371 kuw
ありがとうございます。ということは、その POP3 サーバのバグと
判断してもよいようですね。

>>2372 わたなべ
では、残るは改行コードくらいですかね。

    select(SOCKET); $|=1; select(STDOUT);
    $|=1; # 標準出力のバッファリングも OFF
    print SOCKET "USER $username\r\n";
    print SOCKET "PASS $passwd\r\n";
    print SOCKET "LIST\r\n";
    while (sysread(SOCKET, $_, 1) ){ # read(2) を使って読む。
            printf("$_ [%02X] ", unpack('c',$_));
    }
    print SOCKET "QUIT\r\n";

を試して下さい。

No. 2374 # わたなべ 2001/12/13 (木) 15:01:43
>>2373わたなべ
試してみました。

+[2B] O [4F] K [20] ・・・・・・ [3E]
[0D] + [2B] 0 [4F] K [4B] [20]
[0D] + [2B] 0 [4F] K [4B] [20]
[OA]

で止まります。
NIFTYもAT&Tもこうした現象なのですが解決方法は無いものでしょうか?

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

No. 2375 # 68user 2001/12/13 (木) 15:27:01
>>2374 わたなべ
    接続時のリプライは +OK....\r
    USER に対するリプライは +OK \r
    PASS に対するリプライは +OK \n
という変なサーバであることがわかります。
# このサーバは RFC1939 に準拠していないと思います。このサーバ
# アプリの名前を教えていただけますか。

で、\r や \n だけでも行末と見なすように、
    m/^\.\r\n$/ && last;

    m/^\.(\r\n|\r|\n)$/ && last;
として下さい (*A)。

で、これだけの対処では多分挙動は変わらないでしょう。

> [OA] で止まります。
ということは、相手が LIST に対するリプライをしていない、
つまり「LIST を受け取ったと解釈していない」ということなので、
やはり SOCKET がテキストモードになっており、
    print SOCKET "LIST\r\n";

    print SOCKET "LIST\r\r\n";
となって送信されているのではないかと推測します。

*A の変更を行った上で、再度 binmode(SOCKET) を挿入してみて下さい。

# Windows には詳しくないのですが、これでよいんでしたっけ?>どなたか

No. 2376 # わたなべ 2001/12/13 (木) 16:54:32
>>2375わたなべ
試してみましたが、状況は変わりませんでした。
AT&TにPOP3のアプリケーションを確認したところ、qmailだそうです。
サーバーのOSは、教えてくれませんでした。
よろしく御願いします。

No. 2377 # ARGUN 2001/12/13 (木) 21:04:50
初めまして。初めてなのに、こんな事を書くのはあつかましいとも思うんですけど、どうにもならないのでフ゜ロク゛ラムを教えて欲しいんです。
実は、課題がでたんですけど分からないので。
内容ですが
Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、他のファイル(trans.c)に書き出す。     と言う物です。   それで、
#include <stdio.h>
#include <stdlib.h>

main(int argc, chr*argv[])
{
int i;
FILE *fin;
char ss[256];

if(fin=fopen("sourse","r") == NULL){
printf("オーフ゜ン出来ない.\n");
exit(1);
}
char(

までは出来ました。それから先が全くわかりませんので、宜しくお願いします!

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

No. 2378 # kuw 2001/12/14 (金) 00:06:24
>>2373 68user
>その POP3 サーバのバグ
その通りです。
しかも、今回の件には、まるで関係ない話みたいですね。失礼しました。

>>2377 ARGUN
>Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、他のファイル(trans.c)に書き出す。
ならば、
cat sourse.c | tr a-z A-Z > trans.c
で良いのでは?

No. 2379 # 68user 2001/12/14 (金) 11:44:19
>>2376 わたなべ
> 試してみましたが、状況は変わりませんでした。
ほほぅ、そうですか。それは困りましたね。

> qmailだそうです。
qmail 付属の qmail-pop3d かな? djb モノがそんな挙動を
するのはあまり考えにくいですが、telnet ではできている
のですから、怪しいのは改行コードです。

現在は sysread で読んでいるのですから、受け取ったデータは
即座に表示されるはずです。ということは、何も表示されない=
送ったリクエストが正しく解釈されていないということなので、
    print SOCKET "LIST\r\n";

    print SOCKET "LIST\n";
にしてみたり、いろいろ試してみて下さい。

どうにもならなかったら、試したスクリプトを見せて下さい。

>>2377 ARGUN
> Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、
> 他のファイル(trans.c)に書き出す。
まずは、sourse.c の内容を trans.c にコピーするところから
やってみては。

No. 2380 # /tk 2001/12/14 (金) 14:50:00
>>2364 わたなべ
> LISTので止まっているようです。
うちのサーバが qmail + vpopmail だったのでテストしてみたところ
同様の現象が再現しました。

うちの場合
      print SOCKET "LIST\r\n";
の直前の行に
      sleep 1;
を挿入したらうまく動きましたので
試してみてはいかかでしょう。

No. 2381 # わたなべ 2001/12/14 (金) 20:50:32
>>2380わたなべ
/tkさんのアドバイスどおりに
sleep 1;
を入れたら無事に動きました。
本当に有り難うございました。
大変お騒がせしましたが、これで落ち着いて眠れます。
今後ともよろしく御願いします。

No. 2382 # ARGUN 2001/12/16 (日) 22:07:44
68userさん。Kuwさん。有難うございます。
でも、長く入院してたせいで冗談抜きで全く分からないんです。
コピーってどうやるんですか?
甘えだとは思うのですが、迷惑でしょうがプログラム載せて貰いたいのですがおねがいします。聞けるような仲間がいないので。

No. 2383 # kuw 2001/12/17 (月) 04:35:58
>>2382 ARGUN
> プログラム載せて貰いたい
--- a2A.c ここから ---
main () {
        system("tr a-z A-Z < sourse.c > trans.c");
}
--- a2A.c ここまで ---
a2A.c をコンパイルしてできた実行ファイルを、
sourse.c と同じディレクトリにコピーして実行してみてください。
運が良ければ、お望みの trans.c が作成されます。

とりあえず、課題はこれで良いとして、本気でプログラムの勉強を
したいのならば、68user さんのアドバイスを参考にがんばってください。

あとは、
>>2230 68user
> - 課題だからといって、問題をそのまま掲示板に書き込んでも反感を買うだけ、
>  ということを書き込む前に推測できるようになる。
> - 仮に課題だとしても、そうは見えないようにうまくカムフラージュ
>  できるような文章力を身につける。努力しているという姿勢を
>  アピールする。
という金言も参考にされると良いでしょう。

No. 2384 # 68user 2001/12/17 (月) 07:40:47
>>2382 ARGUN
google で「C言語 ファイル コピー」などと検索すれば、
サンプルプログラムなんてたくさん見付かります。
「C言語 小文字」だってたくさん見付かります。

http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
で質問するのもよいでしょう。

ここで回答をもらえることを期待するよりもそっちの方が早いです。

>>2380 /tk
> sleep 1;
うーむ、改行コードは大外しでしたか。ということはその POP サーバは
リクエストを 1行だけ読んでいるのではなく、select か何かでバッファに
たまっているリクエストを全て解釈しようとしていた、ということですかね?

本来 USER 送って +OK を受け取って、PASS 送って +OK を受け取って、その後
LIST を送らねばならないところを、一気に USER、PASS、LIST を送って、その後
リプライを受け取るという手抜きをしていたからまずかった…と。

No. 2385 # hiro 2001/12/18 (火) 13:04:35
こんにちは。
環境は
OSはSolaris 2.6、printerはEPSON LP8200PS2(PSプリンタ)です。

質問は、
lpコマンドで印刷用紙のサイズを指定したいのです。
HELPなどを見てもそれらしきoptionがないのですが、用紙サイズを
A4とかB4とかに任意に設定するoptionはありませんか?

よろしくおねがいします

No. 2386 # cgi超初心者 2001/12/18 (火) 14:35:51
はじめまして。最近cgiの勉強をはじめたんですが、なかなかうまくいきま
せん。
さっそく質問ですがローカルでcgiの動かし方がわからないんです。一通り
関連サイトを回ってみたのですがどうしても駄目なんです。例えば
hello-worldを実行すると

#!C:/Perl/bin/perl print "Content-type:
text/html\n\n; print ""; print "Hello world.; print ";

こうなってしまうんです。プロバイダがcgiの使用を許可してないので
それが原因なのでしょうか?もしそうならなにか方法を教えてください。
よろしくお願いします。

No. 2387 # cgi超初心者 2001/12/18 (火) 14:41:30
ちなみに環境は
windows98,internetexplorer5,プロバイダはocnです。
よろしくお願いします

No. 2388 # CZ 2001/12/18 (火) 18:29:52
>>2386 cgi超初心者
>プロバイダがcgiの使用を許可してない
のは全く関係ありませんので安心してください。
ローカルでCGIの動作確認をする方法を初心者向けに説明したサイトを紹介しておきます。

http://members.tripod.com/~tyanko/s_mokuji.html

No. 2389 # 68user 2001/12/19 (水) 01:45:36
>>2385 hiro
lp -f で できませんでしたっけ。

No. 2390 # スナフキン 2001/12/19 (水) 02:52:22
つかぬ事をお伺いしますが、perlで <+ でファイルオープン時に、開こうとする
ファイルが存在しないとエラーとなりますが、以下の様な処理をしました。
が、どう見てもカッコ悪い(笑)のでこんなケースにはどんな処理をしているか
お聞きしたいのですが・・・

if(!-e $dat_file){# 存在しない時に作成
    if(!open(DAT, ">$dat_file"))
        { &error('オープンエラー', "データファイルの生成に失敗しました。[$dat_file]");}
    close(DAT);
}

#改めて開きなおし
if(!open(DAT, "+<$dat_file"))
    { &error('オープンエラー', "データファイルのオープンに失敗しました。(1)");}
while(<DAT>){
    chomp;
    push(@record, $_);
}

No. 2391 # 68user 2001/12/20 (木) 17:44:24
>>2390 スナフキン
open(DAT, "+<$dat_file") || open(DAT "+>$dat_file") || &error('..');
while(<DAT>){
    ..
}

ってのはどうでしょうね。

あと、perlopentut(1) に参考になることが書いてあるかも
(書いてないかも) しれません。

No. 2392 # スナフキン 2001/12/20 (木) 20:26:30
ウチのマシンの perl はバージョンが古く(5.004_04)なので
perlopentut の情報は見つけられませんでした。

しかしキーワードを検索するといろいろと情報を得る事が出来ました。
if(!open〜 は自分なりの書式なので良く使っていましたが、perlで
杓子定規に覚える事にはあまり意味が無いですね(笑)
いままで使った事の無い sysopen もいろいろ試してみます。

的確なキーワードありがとうございます。

参考になったURL
http://www.wingworld.co.jp/forum/cgi/messages/1931.html
う〜んバージョンを新しくしなければ・・・

No. 2393 # /tk 2001/12/20 (木) 22:11:22
>>2384 68user
> select か何かでバッファに たまっているリクエストを
> 全て解釈しようとしていた、ということですかね?
この辺の仕様(というか実態)は知りませんが
サーバにどのようなリクエストが実際に渡ったのかを
調べるのが、原因究明の早道となるような気がします。
# 実際どのようにすれば, それを調べられるかは分かっていません。

今回の件に関しては, なんとなく
> 一気に USER、PASS、LIST を送って、その後 リプライを受け取る
のが原因かな。 と特に根拠も無くアタリをつけてテストをしました。

別に sleep である必要は全然無いのですが
個別にリプライを受けて -ERR だったら再入力な
スクリプトを書くの面倒だったので…
(あと環境が Windows でしたので)


>>2390 スナフキン
> こんなケースにはどんな処理をしているか
実際にファイルが存在していないのですから
オープンエラーで困る事は無いのだし
むしろエラーになってくれなくては困るという
考え方をしています。

…↑ゴミレスですね。すみません。

No. 2394 # Ka23 2001/12/21 (金) 18:40:42
UNIX プログラミング FAQが以下に移転しています。
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html

http://www.adl.nii.ac.jp/~moro/
暫定っぽいですが(^^;

No. 2395 # Suresh [E-mail] 2001/12/27 (木) 18:08:12
Cクラス(HP UNIX版)ハードDiskをBクラス使用するとき何か
設定必要でしょうか ?
教えって下さい。

No. 2396 # hogehoge 2002/01/02 (水) 09:59:55
access.logは下記のようなもの。$1はエポックタイム
(1970/1/1 00:00:00からの経過秒数)で$3はアクセスした端末のIP。

1009379443.542 20 192.168.16.17 TCP_HIT/200 1694 GET http://www.al4a.com/images/911.gif - NONE/- image/gif
1009379443.604 24 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif
1009379444.170 11683 192.168.16.17 TCP_REFRESH_HIT/200 59687 GET http://www.al4a.com/links.html - DIRECT/www.al4a.com text/html
1009379446.523 2979 192.168.16.17 TCP_HIT/000 11027 GET http://www.al4a.com/images/al4av2.jpg - NONE/- -
1009379446.526 1472 192.168.16.17 TCP_MISS/000 0 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com -
1009379447.026 63 192.168.16.17 TCP_HIT/200 15976 GET http://www.al4a.com/banners/gf1.gif - NONE/- image/gif
1009379447.364 16 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif
1009379448.331 967 192.168.16.17 TCP_MISS/200 9626 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com image/gif
1009379449.997 1504 192.168.16.17 TCP_HIT/200 20456 GET http://www.pornleo.com/banner/pussy10-29.gif - NONE/- image/gif
1009379450.256 3056 192.168.16.17 TCP_HIT/200 15679 GET http://www.al4a.com/images/al4av2.jpg - NONE/- image/jpeg
1009379453.262 148 192.168.16.17 TCP_HIT/200 7049 GET http://www.al4a.com/banners/fc1.jpg - NONE/- image/jpeg
1009379453.301 38 192.168.16.17 TCP_HIT/200 9328 GET http://www.al4a.com/banners/am1.gif - NONE/- image/gif
1009379454.056 1963 192.168.16.17 TCP_HIT/200 21921 GET http://al4a.free6.com/free6.gif - NONE/- image/gif

これを集計して

date time user数
----------------------
2001/12/28 00:00 0
2001/12/28 00:30 0
2001/12/28 01:00 5
2001/12/28 01:30 6

のようにしたいのです。awkファイルは3つあり、それをshellに記述して
一括処理しようとしています。
#syukei.sh
#!/bin/sh
./syukei1.awk access.log|./syukei2.awk|./syukei3.awk > file

#syukei1.awk
#!/bin/gawk -f
{
hour=strftime("%H",$1);minute=strftime("%M",$1);second=strftime("%S",$1)
base=$1-(hour*3600+minute*60+second)
        for(i=1;i<=48;i++){
                if((base+1800*(i-1) <= $1) && ($1 < base+1800*i)){
                        print strftime("%Y/%m/%d %H:%M",base+1800*(i-1)),$3,1
                }
        }
}

#syukei2.awk
#!/bin/gawk -f

{
sum[$2,$3] += $4
}

END {
        for(item in sum){
                split(item, t, SUBSEP );
                printf("%s %s %s %d\n",$1,t[1],t[2],sum[item]);
        }
}

#suykei3.awk
#!/bin/gawk -f
{
        if(length($2) > 0){
                kazu[$2] ++;
        }
}

END{
        for(i in kazu){
                print $1,i,kazu[i]
        }
}

といった感じです。syukei1.awkで
2001/12/28 00:00 192.168.1.2 1
2001/12/28 00:00 192.168.1.1 1(とりあえずエポックタイムを現在時刻に変換し、秒の項はprintしない。あとはIPaddressを取る)
のように加工します。(最後の1は捏造したもの。後々この数をカウントするので)
syukei2.awkで↑の$4を集計。
2001/12/28 00:00 192.168.1.2 5
2001/12/28 00:00 192.168.1.1 6

2001/12/28 00:30 192.168.1.1 2
2001/12/28 00:30 192.168.1.2 4
のように加工します。(userごとに30分刻みで何回アクセスしたか)
最後にsyukei3.awkで↑の$3を集計。
2001/12/28 00:00 2
2001/12/28 00:30 3
のようにdate time user数という形で出力したいんです。
ただ、ここで今問題になっているのが、例えば2001/12/28 01:00〜2001/12/28 01:30の間に一度もアクセスがなかった場合、
その行が表示されません。アクセスがない場合は2001/12/28 01:00 0 0のように表示したいのですが、
どのようにすればいいでしょうか。また、3つファイルがあるんですが、これを一まとめにすることって可能なんでしょうか。
長くなりましたが、ご教授宜しくお願いします。

No. 2397 # ふくし 2002/01/02 (水) 16:16:42
あけましておめでとうございます。
今年もよろしくお願いします。
>>2396 hogehoge
さん:はじめまして
cronで30分に1回httpを叩くクライアントを作っておいて、
そいつ1回しかアクセスしなかったら0アクセス、
そいつも含めてn回アクセスがあったらn-1アクセスではだめですかねー。

No. 2398 # hogehoge 2002/01/02 (水) 17:12:32
あ…、明けましておめでとうございます。
ふくしさんはじめましてです。

今まではcronを使って30分ごとに集計をとる方法でした。
でも、処理に時間がやたらとかかってしまいまして。
それが1日48回もあるかと思ったら…。
それでプログラムの改善と一括処理に切り替えることにしたんですが。
どうにかならないもんですかね…。ふぅ。

No. 2399 # ふくし 2002/01/02 (水) 19:59:37
>>2398 hogehoge
さん:Perl ですいません。こんなんでできそうです。
要は、
ファイルの各レコードについて、
0:00〜0:30、0:30〜1:00、1:00〜1:30、、の各ゾーンに入っているか調べ、
そのゾーンに入っていたら
ゾーン、IP アドレスをキーに持つ2次元ハッシュの値を1にし、
全件調べた後に各ゾーンごとにいくつ IP がたまっているかを出力しています。
ろくにテストしていませんがバグっていたらすみません。


#! perl -w

use Time::Local; # timelocal 関数を使うために必要なモジュールの宣言

(undef,undef, undef, $mday, $mon, $year, undef, undef, undef) = localtime(time); # 今日が何日か
$step = 30 * 60; # 30分刻み

$next = timelocal(0, 0, 0, $mday, $mon, $year); # 今日の0時0分0秒の時刻(epoch からの秒数)
$start = $next - 60 * 60 * 24; # 昨日の0時0分0秒の時刻

%result = ();
while(<DATA>) {
                ($now, undef, $ip) = split;
                for ($from = $start; $from < $next; $from += $step) { # $from は計算開始の時刻
                                $to = $from + $step; # $to は計算終了の時刻
                                if ($from <= $now and $now < $to) {
                                                $result{$from}{$ip} = 1;
                                }
                }
}

for ($from = $start; $from < $next; $from += $step) {
                $num = keys %{$result{$from}};
                ($sec, $min, $hour, $mday, $mon, $year) = localtime($from);
                $year += 1900;
                $mon++;
                print "$year/$mon/$mday $hour:$min:$sec $num\n";
}

No. 2400 # ふくし 2002/01/02 (水) 20:32:15
すいません、<DATA> でなくて
<STDIN> にして標準入力を渡すか、
ファイルハンドルをオープンしてつかってください。
テスト用のコードを修正しわすれました。

No. 2401 # hogehoge 2002/01/03 (木) 00:57:16
ふくしさんありがとうございます。
Perlをそのまま使うことができないのがとても残念ですが、
まだawkも始めたばっかりで、アルゴリズムの解釈なんかが
多々間違っていると思われ、とても参考にさせて頂きたいと思います。
なんとか、awkに変換、反映させてみたいと思います。
とりあえず、このスクリプトがうまくいったら、次は
Perlをやってみたいと思っています。ありがとうございました。
また何かあったら教えて下さいね。

No. 2402 # 名無しさん 2002/01/03 (木) 19:39:40
>>2401 hogehoge
see http://pc.2ch.net/test/read.cgi/unix/1000303370/130-132n
and
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse

No. 2403 # ふくし [E-mail] 2002/01/09 (水) 21:35:24
いつもお世話になります。
CGI.pm でファイルのアップロードをするときの質問です。
html で

<html>
<body>
<pre>
アップロードするファイルを指定してください。
ファイル名は半角英数字で、空白を含まないでください。
</pre>
<form action="fileup.cgi" method="POST" ENCTYPE="multipart/form-data">
ファイル名:<input type="file" name="fname"><br>
<hr>
<input type="submit" value="OK">
</form>
</body>
</html>

というフォームを作って、

#! perl -w
# fileup.cgi

use CGI;

my($form) = new CGI;
print $form->header("text/html");

my($filename) = $form->param('fname');

$filename =~ m|([^\\]+)$|; # Windows のフルパスから基底ファイル名を取り出す
$newfile = "./gooddir/$1"; # gooddir の下に入れる。

open (OUTFILE,">$newfile") or die "Can't make serverside file because $!\n";
while ($bytesread = read($filename,$buffer,1024)) {
                print OUTFILE $buffer;
}
print <<EOD;
<pre>
アップロードが終了しました。ファイル「$filename」は
$newfile としてアップロードされました。
</pre>
EOD

という CGI を呼び出すとうまくいくのですが、
同じ CGI を、呼び出し側のフォームも CGI.pm で作って

#! perl -w

use CGI;
use strict;

my $title = 'ファイルをアップロードしてください';
my $q = new CGI;
print $q->header();
print $q->start_html();
print $q->start_form(-method=>'form', -action=>'./fileup2.cgi', -enqtype=>'multipart/form-data');

print $q->h2($title);

print '変換するファイルを指定し、[実行] をクリックしてください。<br>',
'(空白のあるファイル名、日本語のファイル名は避けてください)<br>',
$q->filefield(-name=>"fname"),
'<br>'x3;

print $q->submit(-name=>'submit',-value=>'実行');
print $q->endform;
print $q->end_html();

とやると、空ファイルが作成されるだけでうまくアップロードできません。
エラーログには何も出ません。
なにがおかしいのでしょうか?
何かおわかりでしたらご教示願います。

No. 2404 # 68user 2002/01/09 (水) 21:50:33
ん〜、

>>2403 ふくし
> -method=>'form'
post?
> -enqtype=>'multipart/form-data'
enctype?

とか?

No. 2405 # ふくし 2002/01/10 (木) 14:41:14
>>2404 68user
さん、本年もよろしくお願いします。
ん〜、ほんとにそれだけのことでした。;;;
恥の掻き初め(寒)ですね。

最初、-enctype を指定していなかったんです。
そうすると start_form がデフォルトで
application/x-www-form-urlencoded を取るので
失敗していたようです。
(その場合 start_multipart_form を使えばデフォルトが
    multipart/form-data になるようですね)

method も post がデフォルトなので書いていなかったのですが、
html と最大限あわせようと思って質問の直前に書いて、
それで失敗していたのでした。

ハッシュによる名前付け編集の渡しは、
存在しないキーを渡しても無視されるのはなんかわかりますけど、
存在するキーに定義されてない値を渡しても怒られないのは
ちょっと CGI.pm が不便だなあと思いました。
いずれにしても、これらのケースでエラーを出して欲しいです。
(出す方法あったりして、、)

とまれ、ありがとうございました&すいませんでした。
本年もよろしくです。

No. 2406 # 68user 2002/01/11 (金) 17:21:39
proxy サーバに接続後、
    strcpy(request,
                  "CONNECT www2.ggn.net:443 HTTP/1.1\r\n"
                  "Host: www2.ggn.net\r\n"
                  "\r\n");
    write(s, request, strlen(request));
とする。そしたら proxy サーバが
    HTTP/1.0 200 Connection established(CRLF)
    (CRLF)
などと返してくるので、
    read_size = read(s, buf, BUF_LEN);
    write(1, buf, read_size);
でレスポンスを読み取る (↑これは手抜き)。その後は
    SSL_load_error_strings();
して、普通におはなし。

>>2160 Nira
では
    ERR_load_crypto_strings();
    ERR_load_SSL_strings();
    OpenSSL_add_all_algorithms();
を追加する必要がある、ということでしたが、FreeBSD 4.4-RELEASE では
付けても付けなくてもうまくいきました。

お仕事では、Windows+Borland C++ Builder 5.0 でやらなきゃ
いけないのが欝です (C++ 知らんし、Windows でプログラムを
組んだことがないし)。HTTP 用モジュールは用意してあるみたい
だけれど、使い方がさっぱりわからんなぁ。


>>2405 ふくし
> 存在するキーに定義されてない値を渡しても怒られないのは
> ちょっと CGI.pm が不便だなあと思いました。
perl 5.005_03 付属の CGI.pm を見る限りでは、エラー検出する
方法はないようですね。

> 本年もよろしくです。
こちらこそよろしくお願いします。

No. 2407 # 68user 2002/01/11 (金) 17:38:54
>>2406 68user
う、一行目が欠けてしまって意味不明に。

一行目は
    「お仕事で proxy サーバ経由の SSL 通信を行う必要があったので、メモメモ。」
でした。

No. 2408 # ぶちお 2002/01/11 (金) 17:48:49
UNIXを勉強したい人ってはじめは何をすれば良いか教えてください!
ほんとにくだらない質問をしてすいませんが、おねがいします!!

No. 2409 # 68user 2002/01/11 (金) 23:04:07
>>2394 Ka23
> UNIX プログラミング FAQが以下に移転しています。
遅くなりましたが反映しました。ありがとうございました。

>>2408 ぶちお
> UNIXを勉強したい人ってはじめは何をすれば良いか教えてください!
本屋に行ってインストール記事の載っている雑誌か、
インストール本を買うか、あるいは Turbo Linux とかの
商品 (1万程度) を買うのがいいんじゃないですかね。

その後はネット環境を整えたり、プログラミングしたり
好きなことをすると。

No. 2410 # ぶちお 2002/01/14 (月) 21:38:40
68userさんありがとうございました!!助かりました!また質問するときがあると思いますがそのときはよろしくおねがいします!!

No. 2411 # ぶぶ 2002/01/15 (火) 19:03:05
こんにちは。
私はWindowsにActivePerlを入れてCGIやっています。
今回、PPMを使おうと思って、DOS窓でppmと入力したら、
下のようなメッセージが出てきました。

Failed to load PPM_DAT file
Can't use an undefined value as a SCALAR reference at
C:/Perl/site/lib/PPM.pm line 1586, <DATA> line 36.

なんかエラーが出てるようなのですが、PPM.pmというのはいじった
覚えがないし、他のファイルもいじった覚えはなし、上のエラーが
何を意味するのかよく分からないし、Googleなどで検索かけてもみ
たのですが、同じ様な事例は見つからず困っています。

どなたか分かる方いましたら、どうすればいいのか教えてください。
お願いします。

Win98,ActivePerl5.6.0(Binary build 623)

No. 2412 # ふくし [E-mail] 2002/01/15 (火) 22:27:55
>>2411 ぶぶ
さん、こんばんは。

めったに ActivePerl は使わないのですぐにはわからないんですが
手もとの環境では C:/Perl/site/lib/PPM.pm の
1586 行目近傍は以下のようになっていました。

1584:if (defined($location)) {
1585:  if ($location =~ /[^\/]$/) { $location .= "/"; }
1586:  $package = $location . $package . ".ppd";
1587:}

もしぶぶさんの環境でも同じであれば、
とりあえず 1586 行目の直前に

warn "location: $location package: $package\n";

とでも入れてみて、
$location と $package の値を見てみたらいかがでしょうか。

でも、うちの環境(同じ Windows98)で ppm と入れたら
その現象が再現できなかったので、
再インストールでもいいかなという気もしますが。

No. 2413 # ふくし 2002/01/15 (火) 22:47:49
>>2412 ふくし
自己レスれす。(寒

>とりあえず 1586 行目の直前に
>warn "location: $location package: $package\n";

これ、自分でもやってみましたけど、
C:\> ppm
と打っただけではココは通らないみたいでした。

ぶぶさん、
PPM.pm の 1586 行目はぼくと同じですか?
(バージョン、レベルは同じなんだけどなァ)

あと、ほんとに
C:\> ppm

と打っただけで怒られます?
それともなんか実のあること(パッケージのインストールとか)を
やろうとしてます?
後者の場合は入れたコマンドを教えてください。

No. 2414 # ぶちお 2002/01/16 (水) 00:22:40
たびたびすいません!!今学校でパソコン同士のデータのやり取りを、Cプログラムでなんとかやろうとしているのですがわからんのですー!先生はfopenとか使えばできるだろー!!というのですが本を見てもかいてないようなかんじで(_m_!)なにしろ未熟者でわからんのですー!よろしければおしえてもらえますか?

No. 2415 # 68user 2002/01/16 (水) 03:52:02
>>2414 ぶちお
> 今学校でパソコン同士のデータのやり取りを、Cプログラムで
> なんとかやろうとしているのですがわからんのですー!
さて困ったものですね。あまりにもひどい質問の仕方です。
    http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
は読んでいただけましたか?

パソコンって何ですか? UNIX ですか? Windows ですか?
それ以外ですか? 具体的な OS 名とそのバージョンは?

データのやり取りって具体的に何をしようとしていますか?
フロッピーからデータを読み込むことですか? LAN 経由で
ファイルを読むことですか? RS-232C 経由でデータを
やりとりすることですか?

今後、こういう調子の質問を続けるつもりでしたら、僕は
お相手を致しかねますのでよろしく。

No. 2416 # ぶぶ 2002/01/16 (水) 13:47:46
ふくしさん、お返事ありがとうございます。

PPM.pmの1586行目付近は、下のようになっていました。

1577:unless ($PPDfile && $$PPDfile) {
1578: foreach (keys %repositories) {
1579: my $location = $repositories{$_}{'LOCATION'};
1580: if ($location =~ /[^\/]$/) { $location .= "/"; }
1581: $$PPDfile = $location . $package . ".ppd";
1582: return %PPD if (%PPD = getPPDfile('package' => $$PPDfile,
1583: 'parsertype' => $parsertype, 'PPDfile' => \$$PPDfile));
1584: undef $$PPDfile;
1585: }
1586: return unless $$PPDfile;
1587:}

ちょっと違うみたいですよね。こちらの方が行が短いのでしょうか。

ちなみにDOS窓に入力したのは、

C:\>ppm

これだけです。
PPM のシェルでパッケージのinstallをしようと思っているのですが、
とりあえずPPMを起動するため、入力しているのはppmという文字だけ
です。そして、ppmとだけ入力すると、例のエラーが出るのです。
少ない情報ですが、何か分かりますでしょうか?
やはりActivePerlを入れ直してみた方が良いのでしょうか?

よろしくお願いします。

No. 2417 # 68user 2002/01/16 (水) 14:25:46
>>2416 ぶぶ
先ほど、Windows2000 に ActivePerl を入れる必要が
あったので試してみたのですが、ppm とだけ
打つと
    PPM interactive shell ...
と出てエラーは出ませんでした。

インストールしたのは最新の build 631 (perl-5.6.1) です。
再インストールは悪くない選択肢ではないかと思います。

No. 2418 # ふくし 2002/01/16 (水) 14:35:51
>>2416 ぶぶ
さん:

いま会社で ActivePerl の環境がないのでテストできませんが、
>return unless $$PPDfile;
ここで
>>Can't use an undefined value as a SCALAR reference
(スカラーの参照として、未定義値は使えません)
ですよね。

$$PPDFile というのは、
$PPDFile というスカラー変数に
スカラーへの参照(別のモノを指し示すもの)が入っていると考えて、
そのスカラーの値を返そうとしているわけですが、
そのとき $$PPDFile に undef が入っているのでくだんのエラーが
出ています。

たぶん $PPDFile という変数にもっと上の方でスカラーへの参照を
セットすることを期待して動いていたのですが、
その期待が裏切られているようです。

(その上でいろいろしているのも、$$PPDFiles つまり
    $PPDFiles が指し示すスカラーメモリに対してで、
    $PPDFiles にどのような論理で何が入っているかは
    下のコードからは不明です)

・・・という風にさかのぼって研究しても勉強になると思いますが、
(意外ともうちょっとでパキッとわかったりして)
いずれにせよこんなアンフレンドリーなメッセージが出て中断するのは
作者の意図と違う動作なので、再インストールでもいいと思います。

No. 2419 # ぶぶ 2002/01/16 (水) 15:10:06
ふくしさん、68userさん、お返事ありがとうございます。

build631をインストールしてみましたら、何の問題もなくPPMの
シェルが起動しました。

インストールしてから、PPM.pmを覗いてみると、1586付近は、
ふくしさんが書かれたものと同じになっていました。

前に入れていたものがおかしかったのでしょうか。入っている
pmファイルがおかしいとは夢にも思わなかったので再インスト
ールを試さずに質問してしまってごめんなさい。

これでやっとパッケージのinstallができます。ありがとうご
ざいました。

PS.
ふくしさん、エラーに関する説明ありがとうございます。
エラーの出る仕組みがよく分かりました。

No. 2420 # 初心者 2002/01/20 (日) 14:29:35
ボーランドC++コンパイラーでC言語のCGIを作ろうと思っているのですがどうしたら良いのでしょうか?
bcc32 -o CGI名 ソース名 でいけるのでしょうか?
よろしくお願いします

No. 2421 # 68user 2002/01/20 (日) 19:06:19
>>2420 初心者
> …でいけるのでしょうか?
試してみた結果どうなりましたか?

No. 2422 # 橋本 [E-mail] 2002/01/21 (月) 15:31:41
メール受信時に"newaliases"コマンドを実行したいのですが、上手くいきません。

方法としては、特定のアドレスにメールが届いた時点でシェルスクリプトを実行するようエイリアスファイルにて設定しており、シェルスクリプトにはsudoで"newaliases"を実行するよう書いています。
また、sudoersにて"newaliases"コマンドをroot権限で実行できるようにも
設定しています。

"newaliases"コマンドではなく、他のコピーコマンド(cp)などは動作するのですが、"newaliases"コマンドは動作しません。

同じような方法を取られている方がいらっしゃいましたら
設定方法を教えていただけませんでしょうか。
宜しくお願いいたします。

No. 2423 # 橋本 [E-mail] 2002/01/21 (月) 16:41:43
申し訳ありません。環境を全く書いていませんでした。
RedHat Linux7.1.J、Sendmail8.11.5
です。

宜しくお願いします。
本文↓
メール受信時に"newaliases"コマンドを実行したいのですが、上手くいきません。

方法としては、特定のアドレスにメールが届いた時点でシェルスクリプトを実行するようエイリアスファイルにて設定しており、シェルスクリプトにはsudoで"newaliases"を実行するよう書いています。
また、sudoersにて"newaliases"コマンドをroot権限で実行できるようにも
設定しています。

"newaliases"コマンドではなく、他のコピーコマンド(cp)などは動作するのですが、"newaliases"コマンドは動作しません。

No. 2424 # 68user 2002/01/21 (月) 16:58:44
>>2423 橋本
どのユーザが「newaliases を root 権限で実行できる」ような
設定になっていますか?

また、sudo のログには何と記録されていますか?

No. 2425 # 68user 2002/01/21 (月) 17:18:01
>>2424 68user
だけでは情報が不十分かな…。

sudoers に書いた内容と、「特定のメールアドレスにメールが
届いたらコマンドを実行する」というのをどうやって実現して
いるか (/etc/aliases とか /home/foo/.forward とか) も
書いてください。

No. 2426 # 橋本 [E-mail] 2002/01/21 (月) 19:10:37
>>2424 68user
newaliasesをroot権限で実行できるユーザは"deamon"に設定しています。
理由は、メール受信時に実行されるシェルスクリプトが一体どのユーザで
実行されるか分からなかったため、シェルスクリプト内にメールを送信
するコマンドも記述したところ、"deamon"という送信者名でメールを送信
したため、deamonでシェルスクリプトは実行されると思い設定しました。

ですが、実際はdeamonが実行しているようではないようです。
>>2423 にてcpコマンドなど他のコマンドは動作する。
と記述しましたが、私の勘違いで動作していませんでした。
申し訳ありません。

また全てのユーザに"newaliases"、"cp"コマンドをroot権限で
実行できるよう設定したところ、正常に動作しました。
ですが、全てのユーザに許可してしまうわけにはいかないので、
どうにかして特定のユーザにのみ許可して動作するようにしたいのですが
・・・。

以下設定ログ・設定内容です。
●メール受信時のログ↓
Jan 21 18:20:16 test sudo(pam_unix)[19079]: authentication failure; logname= uid=0 euid=0 tty= ruse
r= rhost= user=daemon
Jan 21 18:20:23 test sudo(pam_unix)[19079]: 2 more authentication failures; logname= uid=0 euid=0 t
ty= ruser= rhost= user=daemon
Jan 21 18:20:23 test sudo[19079]: daemon : 3 incorrect password attempts ; TTY=unknown ; PWD=/ ;
USER=root ; COMMAND=/usr/bin/newaliases

●sudoersに追加↓
deamon ALL= NOPASSWD: /usr/bin/newaliases
deamon ALL= NOPASSWD: /bin/cp

●メール受信時に動作するシェルスクリプト↓
#!/bin/sh
sudo cp /etc/mail/123.txt /etc/mail/456.txt
sudo newaliases
mail -s test mailuser@****.co.jp < /etc/mail/456.txt
exit

長文で申し訳ありませんが宜しくお願いします。

No. 2427 # 橋本 [E-mail] 2002/01/21 (月) 19:21:39
>>2425 68user
「特定のメールアドレスにメールが届いたらコマンドを実行する」は、
(/etc/mail/aliases)に mailuser :"|/etc/mail/mail-program"
と記述しています。

よろしくお願いします。

No. 2428 # 68user 2002/01/21 (月) 19:48:29
>>2427 橋本
> ●メール受信時に動作するシェルスクリプト
で /usr/bin/id > /tmp/id.result などとすれば、どの権限で
動いているのかがわかります。

一般的には、/etc/mail/aliases に
    mailuser :"|/etc/mail/mail-program"
とあるなら、/etc/mail/mail-program というファイルの権限で動きます。

例えば
    % ls -l /etc/mail/mail-program
    -rw-r--r-- 1 hoge wheel 46632 Sep 19 02:30 /etc/mail/mail-program
ならば hoge 権限で動く、ということです。

No. 2429 # 橋本 [E-mail] 2002/01/21 (月) 21:31:13
>>2428 ですが、
mail-programの権限は以下のようになっています。↓
-rwxr-xr-x 1 root root 165 1・21 19:55 mail-program

また /usr/bin/id > /tmp/id.resutl の結果は以下になりました。↓
uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp)

やはり"deamon"で実行されているようです。sudoresにも正しく設定して
いるつもりなのですが、シェルスクリプトは動作しません。
deamonに関してはsudoが使えないのでしょうか。

何かよい方法ありましたら教えてください。
宜しくお願いします。

No. 2430 # 68user 2002/01/21 (月) 21:34:18
>>2429 橋本
…ふむ。

deamon でなく daemon です。sudoers を修正してみて下さい。

No. 2431 # 橋本 [E-mail] 2002/01/21 (月) 21:52:17
>>2429 橋本

どうもありがとうございます。
deamonではなく"daemon" に修正したところ上手くいきました!

とてもお恥ずかしいですが、すごくうれしかったです。
ありがとうございました。

No. 2432 # ふくし [E-mail] 2002/01/23 (水) 17:20:59
こんにちは。ヒサブリに質問です。

下のような CGI で euc、sjis の文字列をブラウザに表示します。

#! perl -w
# ~/public_html/cgi-bin/moji.cgi

use CGI;
use Jcode;

my $q = CGI->new;
print $q->header();
print $q->start_html();
print $q->start_form(-action=>'./answer.cgi');

$str_euc = 'こんにちは';
$str_sjis = $str_euc;
Jcode::convert(\$str_sjis, 'euc', 'sjis');

print "euc: $str_euc <br>";
print "sjis: $str_sjis <br>";
print "unpacked euc: ".unpack("H10", $str_euc)."<br>";
print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>";
print "eq:".($str_euc eq $str_sjis)."<br>";

コード自体は EUC で書きました。
ブラウザの設定を EUC にすると、
当然のように、EUC 部分は正しく、sjis 部分は文字化けになります。
(本当は sjis 部分は半角カナになりました)

http://www/~fukushi/cgi-bin/moji.cgiの表示)
euc: こんにちは
sjis: 、ウ、・ヲヒ、チ、マ
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

これ、ブラウザの設定を sjis にすると、
euc も sjis も文字化けになります。
これはなぜでしょう?

http://www/~fukushi/cgi-bin/moji.cgiの表示)
euc: 、ウ、・ヲヒ、チ、マ
sjis: 痔宍痔・ヲ射痔蔀痔煮
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

で、下のように出力する文字列を URL から取得します。

#! perl -w
# ~/public_html/cgi-bin/moji.cgi

use CGI;
use Jcode;

my $q = CGI->new;
print $q->header();
print $q->start_html();
print $q->start_form(-action=>'./answer.cgi');

$str_euc = $q->url_param('greeting');
$str_sjis = $str_euc;
Jcode::convert(\$str_sjis, 'euc', 'sjis');

print "euc: $str_euc <br>";
print "sjis: $str_sjis <br>";
print "unpacked euc: ".unpack("H10", $str_euc)."<br>";
print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>";
print "eq:".($str_euc eq $str_sjis)."<br>";

こうすると、ブラウザの設定を euc にすると、
なんと、euc も sjis も正しく表示されます。

http://www/~fukushi/cgi-bin/moji.cgi?greeting=こんにちは の表示)
euc: こんにちは
sjis: こんにちは
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

ブラウザの表示を sjis にすると、euc 部のみ正しく表示されます。

http://www/~fukushi/cgi-bin/moji.cgi?greeting=こんにちは の表示)
http://www/~fukushi/cgi-bin/moji.cgiの表示)
euc: こんにちは
sjis: 、ウ、・ヲヒ、チ、マ
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

これはなぜでしょう?
サーバーの OS は FreeBSD 2.2.8-RELEASE、
言語は jperl5.005_03-990612 EUC Version(Latin モードで使用)、
クライアントの OS は Windows 2000 server、
ブラウザーは Netscape Navigator 4.75 です。

No. 2433 # ミング [E-mail] 2002/01/23 (水) 17:33:53
今日は。

Awkで

{AA [$1]++}
END {for (BB in AA) ...........}

とやると、AAの中に有る同じ名前のものが幾つあるか数えてくれると思うの
ですが、Perlではどうやったら同じことが出来ますか?

例えば
@array=(9, 9, 9, 3, 3, 3, 2, 2, 1)
とすると、

9は3個、3は3個、2は2個1は1個あるので、

9=3
3=3
2=2
1=1

としたいのですが、宜しくお願いいたします。

No. 2434 # ふくし [E-mail] 2002/01/23 (水) 18:47:10
>>2433 ミング
さん:

なんとなく似せて書くと

#! perl

@array = (9,9,9,3,3,3,2,2,1);

for (@array) {
        $array2{$_}++;
}

for (reverse sort keys %array2) {
        print "$_=$array2{$_}\n";
}

とか。
「ハッシュ」の機能を使っています。

@array の順番には関係なく、
常に大きな数字から出力していますがいいでしょうか。
(ハッシュを使うと、順不同になるので、、)

No. 2435 # 68user 2002/01/23 (水) 19:31:20
>>2432 ふくし
> Jcode::convert(\$str_sjis, 'euc', 'sjis');
逆ですよー。
    Jcode::convert(\$str_sjis, 'sjis', 'euc');

No. 2436 # Bourbon 2002/01/23 (水) 19:51:30
だれか、solaris8intel_platformをAT互換機で動作する、LANカードを
知っている方いらっしゃいますか?

No. 2437 # ふくし [E-mail] 2002/01/23 (水) 20:04:59
>>2435 68user
あ、ほんとだ、、すみませんいつもいつも、、(_ _)

で、

#! perl -w

use CGI;
use Jcode;

my $q = CGI->new;
print $q->header();
print $q->start_html();
print $q->start_form(-action=>'./answer.cgi');

$str_euc = 'こんにちは';
$str_sjis = $str_euc;
Jcode::convert(\$str_sjis, 'sjis', 'euc');

print "euc: $str_euc <br>";
print "sjis: $str_sjis <br>";
print "unpacked euc: ".unpack("H10", $str_euc)."<br>";
print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>";
print "eq:".($str_euc eq $str_sjis)."<br>";

だと
euc モードで、どっちの「こんにちは」も正しく表示されるのは
なぜでしょうか?

No. 2438 # 68user 2002/01/23 (水) 20:05:45
>>2436 Bourbon
どの程度「使える」資料なのかは知りませんが、
    ハードウェア互換リスト (HCL)
        http://soldc.sun.com/support/drivers/hcl_ja/
というのがあります。

No. 2439 # 68user 2002/01/23 (水) 20:11:54
>>2437 ふくし
> euc モードで、どっちの「こんにちは」も正しく表示されるのは
> なぜでしょうか?
    http://x68000.startshop.co.jp/~68user/tmp/moji.cgi
を見ても「こんにちは」が正しく表示されますか?

もしそうなら、Netscape4 が自動変換しているのでしょう。Netscape4 は、
文字単位か行単位か知りませんが、ファイルの一部についても自動認識/
自動変換を行っています。

FreeBSD+Netscape4、FreeBSD+Mozilla nightly build で上記 URL を
見ると、必ず片方は化けています。

No. 2440 # Bourbon 2002/01/23 (水) 20:19:26
68userさん
HCLは知っていましたが、見落としている部分がありました。
じっくり読んでみます。ありがとうございます。

No. 2441 # ぶぶ 2002/01/23 (水) 20:21:38
たびたびお世話になります。

おかげさまで、この前使えるようになったPPMで、ImageMagickモジュ
ールをinstallして、使おうと思ったら、何にも反応なしで困っていま
す。いろいろサイトを見て回りましたが、類似問題は見あたらず・・・。

環境は、Perl5.6.1(build631) Windows98です。

この環境に、PPMで、install Image-Magick してImageMagickを入れ
ました。

C:\>ppm
PPM>install Image-Magick
です。

その結果、c:\perl\site\libにはimageディレクトリができていて、
その中にはちゃんとMagick.pmというのもあるようです。

それで、下のを実行してみたのです。

use Image::Magick;

$i = Image::Magick->new;
$i->Read('test.jpg');
$i2 = $i->Clone();

$i->Scale(width=>100, height=>100);
$i->Write('test2.jpg');

すると、Perlそのものは正常に終了する(エラーは出ない)のですが、
test2.jpgはできてないのです。


ちなみに下のようなのも実行してみました。

use Image::Magick;

$img = Image::Magick->new;
$img->Read('test.jpg');
($w,$h) = $img->Get('width','height');

print "Content-type: text/html\n\n";
print "<html><head><title>TEST</title></head>\n";
print "<body bgcolor=\"\#ffffff\">\n";
print "$w / $h\n";
print "<br></body></html>\n";
exit 0;

こちらも、$wも$hも空でした。

test.jpgは存在しているし、どうしてうまく行かないのか、まった
く見当もつかないので、これだけの情報では不足かもしれませんが、
何か分かる方おられましたら、ご指導ください。どうかよろしくお
願いします。

No. 2442 # ふくし [E-mail] 2002/01/23 (水) 20:27:36
>>2439 68user
さん、どうも。

たしかに両方化けずに見えています。
FreeBSD 版では片方化けるんですね。

なるほど、Windows 版 NC はファイルの一部も自動変換、、
しかもブラウザーが渡す URL の文字列は必ず sjis。
これがわかんなくてホボ一日ハマりました。
パラメタはあらかじめ変換しておくのを原則にすればよかったのですが、
表示を見て正しく EUC で入ってくるものと思い込んでいたのです。

No. 2443 # ふくし [E-mail] 2002/01/23 (水) 22:44:03
>>2441 ぶぶ
さん:

1本目のプログラムですけど動きましたよ、、;;;
test.jpg がなくてもちゃんと動きますね。
その場合はおっしゃるような症状になります。
ということで、test.jpg があるディレクトリが
カレント ディレクトリな状態で実行してないとか、、。
test.jpg を C:\test.jpg とかフルパスで指定するとどうなります?

#これ便利だなー^^

No. 2444 # ぶぶ 2002/01/23 (水) 23:34:16
ふくしさん、お返事ありがとうございます。

C:\〜\test.jpg のように、フルパス指定したら動きました。
あと、DOS窓では./test.jpgでもうまくいきました。

でも、CGIとしてAN-HTTPD(ver1.37c/PerlISを利用)を通して
動作させると、CGI(test.cgi)と同じディレクトリにtest.jpg
がある時に、フルパスならうまくいくのに./test.jpgでは、やっ
ぱりうまくいきませんでした。

で、いろいろやっていると、PerlIS.dllを使うとうまくいかず、
Perl.exeを使うとうまくいくことが分かりました。
PerlISの問題だったようです。

でも、とりあえず動作させることができたので、解決です。
ありがとうございました。

#ちなみに同じような処理(画像の縮小拡大)はGDでもできますが、
#jpeg画像を縮小したときの画質はGDよりImageMagickの方が、
#なめらかできれいでした。

No. 2445 # 68user 2002/01/23 (水) 23:40:09
>>2444 ぶぶ
解決したようですが、ふつーは
    $i = Image::Magick->new or die "$!";
    $i->Read('test.jpg') or die "$!";
    $i2 = $i->Clone() or die "$!";
などと、エラーチェックをするものです。

と書こうと思ったら、Read は存在しないファイルを開いても
0 を返さないから、die じゃあダメなんですね。
    $ret = $i->Read('a.gifs');
とかして、$ret を調べて、
    Warning 330: Unable to open file (a.gifs) [No such file or directory]
とかを解析しないといけないらしいです。Image::Magick、ダメすぎ。

>>2443 ふくし
> しかもブラウザーが渡す URL の文字列は必ず sjis。
    http: //host/dir/hoge.cgi?ほげ
とかですか?

No. 2446 # ふくし 2002/01/24 (木) 01:22:45
>>2445 68user
            さん:

>> しかもブラウザーが渡す URL の文字列は必ず sjis。
> http: //host/dir/hoge.cgi?ほげ
> とかですか?

http://host/dir/hoge.cgi?hoge=ほげ
とかです。
CGI には sjis で渡るのに、表示は正常に行なわれます。

No. 2447 # yuji 2002/01/24 (木) 19:12:18
どうも、ご無沙汰しております。yujiです。^^
お世話になっております。

現在、windows2000+apache+activeperlの環境において、
CGI(perl)からapacheの再起動等を行いたいのですが、
apacheのパスにスペースが入っているためか、
コマンドを実行できず、困っております。^^;

具体的には、
パスが、
d:\Program Files\Apache Group\Apache\Apache.exe
のような形です。
実行部分は、
$cmd="d:\\Program Files\\Apache Group\\Apache\\Apache.exe -w -n \"Apache\" -k restart";
system($cmd);
のような形です。
パスのスペース部分をアンダースコアに変更して試してみたりも
したのですが、うまくいかないようでして。^^;

それぞれのフォルダ名にスペースを含めないようにすれば、
解決できるのかもしれませんが、スペースがあった場合に
対応できないものか、と思いまして。

みなさんなら、どうされますか?
もしよかったら、アドバイスを、
どうぞよろしくお願いいたします。

No. 2448 # 68user 2002/01/24 (木) 19:54:35
>>2447 yuji
Windows で perl スクリプトを作ったことがないのでアレですが、
    $cmd="\"d:\\Program Files\\Apache Group\\Apache\\Apache.exe\" -w -n \"Apache\" -k restart";
はどうですか?

>>2448 68user
> http://host/dir/hoge.cgi?hoge=ほげ
まぁ、規格で定まっていない部分ですから仕方ないですね。
IE だと (設定次第ですが) UTF-8 で送ることもありますし。

No. 2449 # 68user 2002/01/24 (木) 19:59:20
>>2448 68user
初めて ActivePerl といふものでプログラムを組んでみました。
やはり "" で囲めばよろしいようで。

DOS 窓から
    C:\> d:\\Program Files\\Apache Group\\Apache\\Apache.exe
とするとダメだけど、
    C:\> "d:\\Program Files\\Apache Group\\Apache\\Apache.exe"
なら OK、というのと同じですね。

No. 2450 # ふくし [E-mail] 2002/01/24 (木) 20:39:18
>>2448 68user
            さん:

>> http://host/dir/hoge.cgi?hoge=ほげ
>まぁ、規格で定まっていない部分ですから仕方ないですね。
>IE だと (設定次第ですが) UTF-8 で送ることもありますし。

えーそうなんだ、、それは困るな。
やっぱり世間の検索エンジンみたいに
hoge=%A4%BD%A4%B2 とかすべきですね。
日本語キーにするなって話もありますが。

No. 2451 # yuji 2002/01/24 (木) 23:10:53
68userさん、アドバイスありがとうございます。^^
おかげさまで、無事コマンドを実行することができました。

DOS窓でもスペースがある場合、実行できなかったため、^^;
スペースを、区切りではなく文字列の一部と認識させるために、
"で括る方法、とても勉強になりました。^^

No. 2452 # 68user 2002/01/28 (月) 05:54:06
>>2451 yuji
Windows 2000 とかだと、エクスプローラーでフォルダをドラッグし、
コマンドプロンプトにドロップすれば、
    "c:\WINNT\program files\"
などと "" 付きでフルパスが展開されます。エクスプローラーで
ファイルのフルパスを簡単に取得する方法はないのかなぁ。

>>2450 ふくし
> hoge=%A4%BD%A4%B2 とかすべきですね。
そうですね。ただ、詳しくは知らないんですが、遷移先にどんな文字
コードを使っているかを伝えられるような送信方法もあったはずです。
RFC になってたかなぁ。


今日の大発見:
    cd - で一つ前にいたディレクトリに戻れる! (sh, csh, tcsh で確認)
    これは知らんかったなぁ。

No. 2453 # 宮村 2002/01/28 (月) 18:40:51
file.1 file.2 ... file.9を一括で
file-1 file-2 ... file-9に変換したいのですがどうすればよいでしょう?
稚拙な質問で申し訳ありません
使ってるのは tera term です。

No. 2454 # 2002/01/28 (月) 21:59:57
>>2453 宮村
TeraTermにそんな機能はないだろ。

No. 2455 # CZ 2002/01/28 (月) 23:25:59
No. 2453 # 宮村
ここなど参考にしてみては。
http://www.nurs.or.jp/~asada/FAQ/UNIX/section2.6.html

No. 2456 # 68user 2002/01/29 (火) 07:06:40
>>2454
そういう物言いをしたいなら、2ch へどうぞ。

No. 2457 # 宮村 2002/01/29 (火) 14:56:23
できました。教えてくれた方、ならびにカキコ有無にかかわらず少しでも考えてくれた人とてもありがとうございました。これで単位がもらえます。

No. 2458 # とっしー 2002/01/29 (火) 19:21:26
はじめまして、とっしーです。
知っている人がいたら、何かいいお知恵をお願いします。

CGI上でソケット通信をして、他のサーバからデータを取り込み
ブラウザ上にてデータ表示をしているのですが。
ソケット通信をするサーバが2個あり1番目のサーバタイムアウト後
2番目のサーバに対してソケット通信をしたいのですが、
sub aaa{
    $SIG{ALARM} = sub{exit 1;};
    alarm($timeover);

    $socket = IO::Socket::INET->new();
            〜
}
上記のようなタイマでタイムアウトを検出しても、このサブルーチンの
起動元までリターンしません。(T_T)
起動元までリターンするような、プログラム方法等があればお教えください。

No. 2459 # 68user 2002/01/29 (火) 21:02:34
>>2458 とっしー
うーん、まずは exit してプロセスが終了してるんだから、
どこにも戻りようがない、というところから始めましょうか。

で、どう書くのが正しいのかなぁ。

No. 2460 # かいと [E-mail] 2002/01/29 (火) 21:25:35
はじめまして。かいとです。
こちらのサイトにある「HTTPクライアントを作ろう(C言語版)」を利用させていただきました。
ありがとうございます。そこで、1つ質問なのです・・・・
connect()でタイムアウト時間を指定したいのですが、できるのでしょうか?
ちなみにOSはSolaris2.7、コンパイラはWorkshopのccを使ってます。
どうぞよろしくお願いします。

No. 2461 # 68user 2002/01/29 (火) 21:42:36
>>2460 かいと
ノンブロッキングソケットを使うと、connect を呼ぶとすぐに
制御が帰ってきます。僕はノンブロッキングソケットを使った
ことがないので、これをキーに検索してみて下さい。

No. 2462 # snow 2002/01/29 (火) 23:14:02
初めまして。snowと申します。
今、8ビットJISで作成されたファイルをSJISのファイルに変換しようと思っているのですが、中々上手く行きません。どなたか教えて下さい。お願いします。
因みに今までは、Pro*Cのプログラム上で、単語毎にjis8touj関数を使用していました。

No. 2463 # 68user 2002/01/30 (水) 00:29:20
>>2462 snow
jis8touj って何かと思ったら
    http://ecip01.cc.kurume-it.ac.jp:8888/ab2/coll.141.9/JFPDEV/@Ab2PageView/2444?
これですか?

Solaris only の、しかもあまり利用者が多そうでない
ライブラリの話なのですから、何がどううまくいかないか
書かないと回答はもらえないでしょう。

No. 2464 # Bourbon 2002/01/30 (水) 09:38:42
基本的なことで、ほんとにすいません。どなたか、solaris8のGUIで
Windowsのような[Print]、[Alt]+[Print]のようなハードコピーを
するやり方をご存知の方は教えてください。よろしく

No. 2465 # CZ 2002/01/30 (水) 12:52:07
>>2464 # Bourbon
まったく知らない領域のことなのですが、恥を忍んで。

「Solaris ハードコピー」で検索をかけた限りでは
http://www.advac.co.jp/download/gpr_dl.htmlのような
プリントサーバソフトウェアにはそういった機能が
付いていることが多いようです。

こんなのも見つかりましたが、参考になるでしょうか。
http://www.aitech.ac.jp/ie/~milabo/unixmanual/man0.html#19

No. 2466 # ふくし [E-mail] 2002/01/30 (水) 14:06:07
>>2464 Bourbon
            さん:

solaris じゃなくって Linux でしたけど、
やはりハードコピーが必要になって gimp というペイントソフトの
機能を使ったらできました。
solaris で gimp は走ったかなー?

No. 2467 # ふくし [E-mail] 2002/01/30 (水) 14:09:50
Perl の質問です。
わけあって、プログラムの終端に goto で飛んでいます。
(CGI なので、exit だと、mod_perl に移植したときに
    mod_perl ごと死んでしまうと聞いたので)

で、

goto FIN if(事情);
...
FIN:

sub サブルーチン {
...
}

と書くと、サブルーチン定義のところで syntax error になるんですが、

goto FIN if(事情);
...

sub サブルーチン {
...
}

FIN:

だと大丈夫です。なぜでしょうか〜?

No. 2468 # 68user 2002/01/30 (水) 21:17:14
>>2464 Bourbon
xwd とかじゃあダメですか? あるいは Solaris と Windows
両方に VNC を入れて、Windows 側から Solaris の画面を
キャプチャ、とか。Solaris 標準の CDE でキャプチャする
方法は知りません。

>>2467 ふくし
perl の構文解析のバグなんでしょうね。

    FIN:
    ;
    sub サブルーチン {

なら OK のようです。

No. 2469 # へにか [URL] 2002/01/30 (水) 23:23:29
ちょっと脱線A^^;
>>2466 ふくし
会社のSolaris(多分8)では、gimpが立ち上がりました(親切な方がコンパイルしてくれたっぽい)。
とはいえ、
>>2467 ふくし
CDEは嫌いなので使ってないので、CDEの標準な方法は知りません・・・

No. 2470 # へにか [URL] 2002/01/30 (水) 23:25:44
>>2469 の、
>>2467 ふくし
は、
>>2468 68user
の間違いです。汚してしまって、すみません。

No. 2471 # ふくし 2002/01/31 (木) 02:07:24
>>2468 68user
                    さん:
お、バグですか!^^
最新バージョンで試してレポートしちゃる!^^

>>2469 へにか
                    さん:
gimp 走りますか! 最近 solaris が増えてきたので、
役に立つかも。Alt+ScreenShot 系のキャプチャーは
gimp に限ります。そぅとぅ〜便利です。
そのまま流れるように編集できるし。
最近なんか solaris の仕事多いんだけど気のせいかな?
ココの問い合わせも増えてますよね。

No. 2472 # 2002/02/02 (土) 21:40:44
>>2467 ふくし
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl1.html
ここの・・・


8. exit()は使用できない

exit()は使用できません。代わりに Apache::exit()関数が用意されています。 以下の判定でexit関数を他の関数にオーバライドできます。

use subs qw(exit);

*exit = $ENV{MOD_PERL} ? \&Apache::exit : sub { CORE::exit };

No. 2473 # ふくし 2002/02/04 (月) 05:47:44
>>2472
                さん:
ありがとうございます! それは使えそうですね。
use Apache するのかな。(あ、調べますしらべます ^^)

No. 2474 # fairytale 2002/02/04 (月) 11:52:21
いつもお世話になります。
solarisでマシンにSICIカードを取り付けテープデバイスに装着させる場合、マウントするにはどのようにすればよいでしょう?
簡単でよいので教えてください。

No. 2475 # 68user 2002/02/04 (月) 12:38:10
>>2474 fairytale
テープって mount できるんでしたっけ。

僕はいつも mount せずに
    % tar cf /dev/rmt/0 .
とかやってますが。

No. 2476 # tarbo 2002/02/04 (月) 19:00:04
tar cvf - . | ...と書いてある‘-‘の意味を教えて下さい。

No. 2477 # 68user 2002/02/04 (月) 19:08:09
>>2476 tarbo
標準入力 or 標準出力です。

大抵、man tar の -f オプションのところに書いてあります。

No. 2478 # まい 2002/02/06 (水) 19:43:27
始めまして。ツバサと申します。
さっそくですが、質問させて下さい。
こちらのネットワークプログラミングの基礎知識を元にFTP送信処理をC言語で作成しています。
あるマシンへの送信が上手く行かないのです。
PORTコマンドのレスを読み込む時にread関数でエラーになってしまいます。
レスが返って来ないという事があるのでしょうか?
ユーザーの認証などでは問題なくレスを取得できているようなのです。
それも、そのエラーが出るのはある特定のマシンへの時だけです。
何かお分かりになる事がありましたら、お願いします。
あいまいな質問で申し訳ありません。

No. 2479 # ツバサ 2002/02/06 (水) 19:46:28
すみません。
No.2478の書き込み時に遊び用のHNで送信してしまいました。
なので、内容で名乗っている名前と表題に出ている名前とが
違っています。
こんな理由なので、ご容赦下さい。

No. 2480 # ui 2002/02/07 (木) 11:51:20
質問があります。
solaris2.6で例えば自マシンの/dev以下に、他マシンの/etc以下を
mountする時の、書式を教えてもらえないでしょうか?すみません

No. 2481 # 68user 2002/02/07 (木) 12:12:02
>>2478 まい
> PORTコマンドのレスを読み込む時にread関数でエラーに
> なってしまいます。
「エラー」って具体的に何が起こるんですか?

>>2480 ui
> solaris2.6で例えば自マシンの/dev以下に、他マシンの/etc以下を
> mountする時の、書式を教えてもらえないでしょうか?すみません
NFS を使いたいわけですか? ならばこちらなど。
    http://www.google.com/search?hl=ja&q=mount+solaris2.6+nfs&lr=lang_ja

でも、/dev に /etc を mount するのは多分うまくいかないと
思いますよ。デバイスにアクセスできなくなるし。

No. 2482 # ui 2002/02/07 (木) 13:10:05
68userさん
ありがとうございます。
勉強します。

No. 2483 # まい 2002/02/08 (金) 13:39:50
68userさん、ありがとうございます。
read関数の戻り値が-1だったのですが、errnoを刈り取っていなかったので、
実ははっきりとしたエラー原因がわかっていないのです。
今、そのエラーが出るマシンでのテストができない状況にあるので、確認する
事もできずにいます。
何か情報がつかめましたら、また質問させていただきたいと思っていますので、
よろしくお願いします。

No. 2484 # 68user 2002/02/09 (土) 03:53:02
>>2483 まい
> read関数の戻り値が-1だったのですが、errnoを刈り取って
> いなかったので、実ははっきりとしたエラー原因がわかって
> いないのです。
そうですね。errno の値に加えて、再現性があるかどうかなども
はっきりしないので、もうちょっと調べてみて下さい。

No. 2485 # yuusuke 2002/02/11 (月) 09:06:06
いつも、お世話になっています。質問があるんですが・・・
「Solaris2.6」の環境で動画ファイル(.aviなど)をファイルに落とす
方法がありますか?
「spilt」をやってみても、膨大なファイルの量になってしまいます。
何か、良い方法があったら、教えてください。

No. 2486 # usr 2002/02/12 (火) 16:14:54
(質問)
テープ装置がない端末でテープ装置がある端末のテープ装置にマウントするにはどうしたらよいでしょうか?
どなたか教えてください、よろしくお願いします。
なお、端末同士の、mountは一応出来ます。

No. 2487 # ふくし [E-mail] 2002/02/12 (火) 16:39:06
いつもお世話になっています。質問です。
perlbug コマンドを使って Perl エンジンのバグを起票したのですが、

    Connected to ???.???.???.??? but sender was rejected.
    Remote host said: ???.???.???.??? Your site is blacklisted as a spam haven.

と言われて生成したメールが受け取られませんでした。

お前が使っているサーバーは spam の踏み台になるサイトとして
ブラックリストされているので、メールを受信しないということのようですが、
    http://www.ordb.org
で調べてもどこにも使っているサーバーを発見できませんでした。

また、サーバーの管理者にも連絡を取りましたが(Microsoft Exchange です)
そのようなクレームは見当がつかないと主張していました。

perl.com がどのような論理で上の拒否を行っているか知りたい、
できれば担当者にメールして聞きたいのですが、
どうすればいいかお分かりでしたらご教示ください。

No. 2488 # 名無し 2002/02/12 (火) 17:34:11
いくら現在は大丈夫だと主張していても、過去にそんなことが
あったのかもしれません。。

管理人に、不正中継をしないことをよーく確認してから、
削除要求を出すように言うしか方法はないと思うんだな。

どこかの不正中継リストに登録されちゃっているから拒否されるんだから、
perlbugやらのMLを探したら、どこを見ているかがわかるのかな・・

No. 2489 # 68user 2002/02/12 (火) 17:37:37
>>2485 yuusuke
> 動画ファイル(.aviなど)をファイルに落とす方法がありますか?
「動画ファイルをファイルに落とす」ってどういう意味ですか?

「動画ファイル」というからには既にファイルになっていると思うのですが、
split が出てくるところを見ると「フロッピーディスクに落とす方法」を
知りたいのですか?


>>2486 usr
mount する必要はなくて、
    http://www.wakhok.ac.jp/~maruyama/Super/section2.10.3.html
じゃあないでしょうか。


>>2487 ふくし
http://dbforums.com/archive/95/2001/08/1/116085
によると、perlbug@perl.org に手動で送ればよいのではないでしょうか。

http://archive.develooper.com/perl5-porters@perl.org/msg06972.html
によると、
    http://www.mail-abuse.org/
じゃないでしょうか。

# どちらもちゃんと英文を読んでいないので、違ったら失礼。

No. 2490 # CZ 2002/02/12 (火) 23:56:50
解答ではないですが。

>>2485 yuusukeさんの質問は、恐らくは動画から静止画を
抜き出したいということではないでしょうか。

No. 2491 # yuusuke 2002/02/13 (水) 11:26:55
>>2489すみません。その通りです。フロッピーに落とす方法を教えてください。
いろいろとご迷惑をお掛けしてすみません。(CZさんを含み)

No. 2492 # 68user 2002/02/13 (水) 22:53:32
>>2491 yuusuke
> フロッピーに落とす方法を教えてください。
ならば、split すればいいと思います。

「膨大なファイルの量」になってしまうのは、元ファイルが
大きければそれは仕方がないでしょう? 何に困っているのか
まだわからないです。

No. 2493 # Hiro [E-mail] 2002/02/14 (木) 06:02:05
はじめまして
Hiroといいます。

Solaris2.6上に、JAVAサーブレットの環境を構築したいと思っています。
j2sdk-1_3_1_02_solsparc.sh
を使ってインストールしました。
その結果
j2sdk1_3_1_02
というディレクトリが作成されインストールもできたようでした。
しかし、バージョンを確認するため
java -version
というコマンドを打ってみると
javaversion"1.1.3"
と返って来ます。
(javaversion"1.3.1"とかえってきてほしいのですが)
おかしいと思いよく確認したところ、2.6のインストールディスクにデフォルトでJAVA(の古いバージョン)が入っていたようで、
/usr/java1.1/
というディレクトリに古いバージョンがインストールされていました。
こういう場合、今からでも古いバーションをアンインストールする方法というのはあるのでしょうか?

No. 2494 # Hiro [E-mail] 2002/02/14 (木) 06:08:15
↓すみません、よろしくお願いします

No. 2495 # 68user 2002/02/14 (木) 10:55:59
>>2493 Hiro
/usr/local/ で j2sdk-1_3_1_02-solsparc.sh を実行すれば
/usr/local/j2sdk1_3_1_02/ ができますよね。で、
    /usr/local/j2sdk1_3_1_02/bin/
に PATH を通せばよいです (/usr/bin/ より前に)。

しかし、今後新しい JVM と置き換えることを考えると、
    - /usr/local/java -> /usr/local/j2sdk1_3_1_02 という symlink を張る。
    - PATH には /usr/local/java/bin を通しておく。
    - /usr/bin/java は /usr/java/bin/java への symlink で、/usr/java は
        /usr/java1.1 への symlink なので、誤って古いものが起動しないように
        /usr/java を削除。それでも心配なら /usr/java1.1 をリネームするか、
        ばっさり削除。
がいいんじゃないでしょうか。

No. 2496 # Hiro [E-mail] 2002/02/14 (木) 12:31:27
>>2495 68user
68userさん、ありがとうございます。

今、手元にSolarisがなく、夜にでも試してみたいと思います。
ところで、御回答いただいた内容からすると、ばっさり削除にひかれました(あまりスキルがないので、万が一誤動作したら自分で気づきづらいので・・)。
しかし、Solarisにおけるアンインストールの仕方というのは、わたしはよくわかっていません。アドバイスいただきましたように、/usr/java を削除し、/usr/java1.1をばっさり削除、というので、システムそのものへの影響というのはとくに考えなくともいいのでしょうか?
すみません、UNIXはよくわかっておらず、とんちんかんな質問をしているかもしれません。
わたしはWindowsの感覚でしかわかっていないので、少し気になってしまいました。

No. 2497 # yuusuke 2002/02/14 (木) 13:01:34
>>2492 68userさんへ

実は、動画ファイルをWindowsのパソコンで見れるようにフロッピーに
落とそうとしたのですが、splitをして出来たファイルがかなりの数に
なって、一つのフロッピーには収まりませんでした。こういう場合、ど
うすればいいのか。また、フロッピーに落としたファイルをWindows上
でどのように結合すればいいでしょうか。まだ、UNIXの経験が浅い為、
いろいろと面倒を懸けてすみません。

No. 2498 # : 2002/02/14 (木) 13:11:44
]

No. 2499 # ふくし [E-mail] 2002/02/15 (金) 01:22:46
>>2497 yuusuke
                さん:

はずしてたらすみません。
split というのはしらないんですけど、
lha かなんかで圧縮してから
tar の -M オプションでマルチボリュームに分割して
Windows 側で tar.exe(あるらしいです)で戻して
lha かなんかで戻すという作戦はいかがでしょう〜

No. 2500 # Hiro [E-mail] 2002/02/15 (金) 08:12:52
>>No. 2495

現状報告します。
まず、
/usr/java1.1
/usr/java
の二つは、ざっくり削除しました。
その後、
/usr/local/java -> /usr/local/j2sdk1_3_1_02 という symlink を張ると同時に
/usr/java -> /usr/local/j2sdk1_3_1_02 という symlink を張りました。
なのでパスは変更していません。
以上をしてからバージョンを確認したところ、きちんと1.3.1との表示がでました。
次にtomcatがちゃんと動くかどうか確認しようとしました。
そのためにhotjava(デフォルトで入っていたブラウザ)を立ち上げようとしたところ、これについては立ち上がらなくなっていました。
なので先ほどNetscapeをゲットしてインストールしようとしているところです。
以上、現段階のご報告まで。
もう少しすすんだらまたここでご報告します。

No. 2501 # tarbo 2002/02/15 (金) 10:38:15
tarでbackupを採る時にtapeを2本目につずけて採る事はできないのでしょうか?

No. 2502 # 68user 2002/02/15 (金) 15:31:40
>>2497 yuusuke
> splitをして出来たファイルがかなりの数に
> なって、一つのフロッピーには収まりませんでした。
ファイルサイズが問題なのではなく、ファイル数が多くなりすぎた
のが問題なのですか?

split -b 1400k などと、1ファイルごとのファイルサイズを指定
できますが、それは使いましたか? (1400k より小さくしないと
フォーマット済 1.44MB FD には入らないかも)

>>2500 Hiro
> /usr/java1.1
> /usr/java
> の二つは、ざっくり削除しました。
あら、消しちゃいましたか。念のため、/usr/java1.1.old などと
リネームしといた方がよいかと思ったのですが、まぁ問題ないですかね。
Solaris2.6 標準の重要なプログラムで java を利用するアプリはない
でしょうし。

うちの場合、1.3.1 のつもりで使っていた java コマンドが実は 1.2
だった (PATH の設定をミスっていた) という情けない失敗もあったりします。


ところで J2SE 1.4 リリースですね。
    http://java.sun.com/j2se/1.4/ja/index.html
Servlet 屋としては正規表現、XML、ロギング API あたりがよさげでしょうか。
まぁこれまでは Perl5Util や Log4j を使っていたのであまり変わりはない
ですけど、なんにせよ標準になるというのはよいことです。

No. 2503 # yashu 2002/02/15 (金) 23:02:05
テスト

No. 2504 # yashu [E-mail] 2002/02/15 (金) 23:04:11
↓ごめんなさい。間違えました。

話は変わりますが、いつも参考にさせていただいてます。
これからも参考にさせていただきます。

No. 2505 # Hiro [E-mail] 2002/02/16 (土) 09:05:39
No. 2502
あのう、ざっくり消した件ですが、hotjavaが立ち上がらなくなったのが影響といえば影響です。
どういう関連でこうなっているのか正確な原因は理解できていません。
明日の夜にまたSolarisをいじる予定です。

No. 2506 # 68user 2002/02/16 (土) 15:26:35
>>2505 Hiro
> どういう関連でこうなっているのか正確な原因は理解できていません。
HotJava は Java で書かれたブラウザで、実行するためには
JDK (というか JRE) が必要だからです。起動できなくなったのは、
    - JDK1.1 と J2SE 1.3 の仕様の違うから
    - 単に HotJava が (J2SE 1.3 の) java コマンドを見付けられないだけ
のどちらかでしょう。

JDK1.1 を入れ直したかったらこちらから。
    http://java.sun.com/products/jdk/1.1/
ただし、現在は 1.1 系列最新の 1.1.8 しか落とせないようです。

他のマシンか、インストール用 CD-ROM から java1.1 だけ
持ってくるのが早いかもしれません (CD-ROM から一部だけ
抜き出すことはできるのかな?)。

No. 2507 # Hiro [E-mail] 2002/02/17 (日) 12:12:28
>>No. 2506
HotJavaが立ち上がらない理由はそういうことなのですか。
JDK1.1を入れなおすと、わたしはまたパスの設定で混乱してしまうかも
しれないので、とりあえずはネットスケープを入れるよう努力してみます。
今晩Solarisをいじりますので、また明朝にでも報告します。

No. 2508 # 68user 2002/02/17 (日) 19:38:44
「ネットワークプログラミングの基礎知識」に「UDP を使ってみよう」を
追加しました。
    http://X68000.startshop.co.jp/~68user/net/

No. 2509 # Hiro [E-mail] 2002/02/18 (月) 10:23:43
ネットスケープですが・・
Some localized components (NetHelp, etc) can not be installed at this time.
Re-run this script if you'd like to try again.
というメッセージがでてインストールできませんでした。
ネットでいろいろ調べたところ、SunのEnglishサイトにバイナリ版
のネットスケープがあったので、ダウンロードしようとしたところ、
まず登録せよとでました。
で、登録して、ログインしようとしたら、できません(泣)
それでさきほどSunのカスタマーへ問い合わせのメールを送ったところ
です。ここまでで作業はとまっています。
また今晩いじる予定です。
しかし、なかなかすすまない。とほほ。

No. 2510 # 68user 2002/02/18 (月) 10:58:22
>>2509 Hiro
Netscape Navigator/Communicator 4.79 は
    http://sunsite.sut.ac.jp/pub/archives/WWW/netscape/communicator/english/4.79/unix/supported/
から落とせます。Solaris 2.6 用はありませんが、2.5.1 用が
そのまま使えるはず。

日本語化したければ、日本語リソースをこちらからどうぞ。
    http://www.imasy.or.jp/~mistral/netscape/download.html

上記ページには
> SunOS 5.5.1 用に はバージョンによっては直接 Netscape から
> 日本語化キットも出ていますので、これ をそのまま使うことも
> できます。
とありますが、見付けられませんでした。

No. 2511 # Hiro [E-mail] 2002/02/18 (月) 16:19:15
>>2510 68user
ありがとうございます。
日本語化の方は4.76が最新なんですね。
ということは英語の方も4.79じゃなくて4.76にしといたほうがいいのだろうか?
pkgではないので苦戦しそうですが(苦笑)今晩トライしてみます。

No. 2512 # Hiro [E-mail] 2002/02/19 (火) 10:25:20
結局、SunのEnglishサイトから紆余曲折の末ダウンロードすることが
できました。まだインストールはできていませんが・・
明後日の夜にまたいじる予定なのでその後また報告します。

No. 2513 # ふくし [E-mail] 2002/02/19 (火) 16:12:09
わけあって他人が書いた MacPerl のスクリプトを
明日までに Unix で動かして結果をレポートしなければならないんですが、
ある入力データセットだとなんとなくうまくいくのに、
別の入力データセットだと Out of memory! になります。
スクリプトの中を一生懸命見る時間がちょっとありません、、。

こんな状態でも、スクリプトをいじるだけですむ
Out of memory! の安直な回避法はひょっとしてあるでしょうか?
FreeBSD 2.2.8-release Perl 5.6.0 です。
確かに仕事のやり方がまずいんですけど、
ちょっとあせっているのでご教示くださいお願いします、、。

No. 2514 # 68user 2002/02/19 (火) 16:15:28
>>2513 ふくし
unlimit とか ulimit でメモリ制限を解除してみるとか。

それで無理なら、別バージョンの perl を使ってみて、
それでも無理なら地道にスクリプト修正します。僕の場合。

No. 2515 # 68user 2002/02/19 (火) 16:15:57
このサーバ、えらい時間がくるってるなぁ。

No. 2516 # ふくし [E-mail] 2002/02/19 (火) 18:57:42
>>2514 68user
            さん:いつもお世話になります。

unlimit で一発でした、、(^^)
誰にどう迷惑掛けてるか知らんけど、
今日は会社にぼくひとりなんでこれで乗り切ります。
大変助かりました!

No. 2517 # 名無し 2002/02/19 (火) 23:21:02
>>2515 68user
ntpdは動いてるの?

No. 2518 # 68user 2002/02/20 (水) 03:36:17
>>2517 名無し
動いていません。

で、さっき動かしましたが、うまく設定できませんでした。やれやれ。

No. 2519 # ふくし [E-mail] 2002/02/21 (木) 16:23:32
いつもすみません。また質問です。
FrameMaker という DTP ソフトの文書から
WebWorksPublisher というソフトウェアで自動生成した
HTML の一部が、Web ブラウザの中で改行してくれません。

|こんにちは、赤|
|ちゃん、私がマ|
|マよ     |
↑こうなってほしいのに

|こんにちは、赤|ちゃん、私がママよ
|       |
|       |
↑こうなってしまう、、

なにぶんにも機械が生成する HTML なので、
人間が肉眼で見ることは難しいのですが、以下のことがわかっています。
・NC で見たときは(スタイルシート有効無効に関わらず)正常に見える
・IE でもスタイルシートを有効にしたときのみ異常に見える

もし何かわかりましたらお教えください。

No. 2520 # ふくし [E-mail] 2002/02/21 (木) 16:54:50
>>2519 ふくし
また自作自演ですみません。
css のなかに
  .code {whitespace:pre}
と書いて、HTML の中に
  <span class="code">〜</span>
と1個でも書くと、
それ以外でも全部 pre 属性になるようです(IEでは)。
IE のバグ説です。

No. 2521 # ふくし [E-mail] 2002/02/21 (木) 18:26:03
>>2520 ふくし
もう少しspecificになりました。
次の条件が揃うと起きるようです。
・IE6 でブラウズする(NC、NE5以下ではオッケー)
・<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
    で始まる
・<table> の中で <span class="code">~</span> を使って文字を修飾している
・stylesheet(今回は content.css)の code クラス定義で
    white-space:pre;(ホワイトスペース文字で改行しない)が定義されている
この条件が揃うと、行がどんどんどんどん伸びていくという
不具合が発生します。

<span class="code">~</span> の変わりに
<code>~</code> だと大丈夫ですが、
それだと字がちょっとちっちゃくなります。

No. 2522 # Hiro [E-mail] 2002/02/22 (金) 08:28:21
うーん・・
けっきょくまだネスケをインストールできていません・・
データは入手できたのですが・・インストールの仕方がなんだかよくわからなくて・・
また今日の夜トライします。

No. 2523 # りんりん [E-mail] 2002/02/22 (金) 20:52:27
買い物カゴシステムでCGIを利用していますが、品目を選んで一度COOKIEにデータが送られた後、再度違う品目を選んでCGIにそのデータを送ると、前のデータが上書きされ、(?消え、)前に選んだ品目は無くなり新しいデータのみになってしまいます。複数のページから品目を選んだり、後から選んだ品目を追加できるようにしたいのですが良い方法はありませんか?また、反対に一度COOKIEに送られたデータはどういう仕組みで空になるのでしょうか?自分でも一応調べてみてはいるのですが、PEALにあまり詳しくないので、どなたかご存じの方がいらっしゃいましたら教えていただけませんか。よろしくお願いします。

No. 2524 # 68user 2002/02/23 (土) 01:57:00
>>2520 ふくし
僕は HTML とか SGML とかには全く詳しくないので、
ここで質問しても何も得られない可能性は高いですよ。
# 質問するなと言っているわけではありません。

>>2523 りんりん
マルチポストうざーい。
    http://www.parkcity.ne.jp/~chaichan/qanda/qa2516.htm

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