68user's page 掲示板

Prev< No. 1366〜1382> Next  [最新発言に戻る] [過去ログ一覧]
No. 1366 # 68user 2000/11/14 (火) 02:41:14
手抜きして、表示時に TAB を変換することにしてみました。
    s|^(\t+)|'&nbsp;&nbsp;&nbsp;&nbsp;' x length($1)|e;


> 「ブラウザから ftp://(username):(password)@(server)/(directory) と
> 入力すると、何が表示されますか?」というので、やってみるとアクセス
> 権表示(rwxr--r--)しか表示されないのです。
rosegarden さんのおっしゃるとおり ftpd の問題なんでしょうが、
考えられるのは
    ・NLST だとファイル一覧がうまく取れないのかもしれない。
    ・inetd が LANG=ja で実行されているため、inetd から呼ばれる
        ftpd も LANG=ja になり、日付が日本語になってしまう (11月14日など)
てなところでしょうか。

で、他の ftp サーバを相手に試してみるとか、その ftp サーバに
ftp -d で anonymous login して、プロトコルを見てみる (うまく
いく ftp サーバとプロトコルの内容を比較する) などなど。

ちなみに ftp のファイル一覧の形式は、RFC で規定されていません。
一般的には ls -l の表示形式であることが多いですが、ls -l の
形式にすべしとはどこにも書いてありません。


> 例えば、windowの一部が画面の外側に出ている状態で、
> そこからwindowを現在ある位置から移動したとき、
> EXPOSEイベントがたくさん飛んで来るようで、
うーん、状況がよくわからんです。
    http://X68000.startshop.co.jp/~68user/xprogram/xlib-3.html
のように、ウィンドウ内に子孫ウィンドウを作ってますか?
子孫ウィンドウで Expose イベントに対応していないため、
上位のウィンドウにイベントが上昇伝播していて、その
結果複数のイベントが飛んできていませんか?

もしそうなら、子孫ウィンドウでも XSelectInput して、
イベントが飛んできたら、どこ宛 (親ウィンドウ or 子
ウィンドウ) のイベントかどうかを判定し、適切な
ウィンドウを再描画すればよいです。どのウィンドウ宛かは
event.window でわかります。

1つのウィンドウでも発生するなら、
    Expose が飛んできたとき、XCheckTypedEvent で
    さらに別の Expose イベントが飛んできていないか
    調べる。
という方法があります。
    case Expose:
        while (1){
            if ( ! XCheckWindowEvent(display, window, ExposureMask, &event) ){
                break;
            }
てな感じ。ただし、根本的な解決方法かどうかはわかりません。

No. 1367 # ミング [E-mail] 2000/11/14 (火) 11:41:48
昨日間違って /var/adm のfileと subdirectoryをすべて削除してしました。、、、、、それが何なのか分からず、後でほかのUnixからコピーすればいいと思って昨日そのままShutDownしてしまったのですが、今朝起ち上げる時にcannot create car/adm/utmp or utmx. Failed to write of untmx entryというエラーが出て起ち上げられません。Ultra5+Solaris1.1.2なのですが、CDRomからそのDirectoryだけInstallする方法はありますか?

No. 1368 # rosegarden 2000/11/14 (火) 15:27:55
Solaris 2.5.1 以降のことしか分からないんですが、
> 昨日間違って /var/adm のfileと subdirectoryをすべて削除してしました。
そこにあるのはログファイルの類だけです。sulog とか loginlog とか
messages とかです。ログファイルが決定的な意味を持たないのなら問題ないです。
どっちにしても、CD-ROM にあったとしても元には戻りません。

utmp とか utmpx とかはログインとかの記録を保持するファイルです。当然
boot した時間や shutdown した時間も記録するので、それで文句を言うのでしょう。
私はこれを更新する際には実にアバウトに

# cat utmp > utmp
# cat utmpx > utmpx

とかで済ませています(環境は Solaris 2.5.1 ですが)。だから空のファイルが
あれば問題ないかと思います。空のファイルを作っておけば良いだけなので、
スイッチをいれた直後に L1+a で ROM モニタモードに移行してから、
boot -s して、/var をマウントして touch コマンドあたりで空のファイルを
作れば良いかと思います。あるいは、起動時に utmp がないと文句を言われて
止まった時に CTRL-C とか打ち込んでもブートの続きが始まるかも知れません。

CD-ROM にこだわるのなら、やはりスイッチいれた直後に L1+a で ROM モニタ
モードに移行してから、OK プロンプトに boot cdrom すれば CD-ROM から
たちあがあります。Solaris 1.1.2 は知らないのですが、2.5.1 以降だと
Openwin が使えて、cmdtool なんかも好きなだけ使えます。で、適当な
ところに手動で /var をマウントしてからコピーすれば良いかと思います。

参考までに Solaris 7 のインストール CD-ROM の /var は次のように
なっています。tar でコピーするとか、
手動で同じもの作っても問題ないんじゃないでしょうか?

# ls -alRF /tmp/root/var/adm

total 8
drwxrwxr-x  4 root   sys  2048 Jul 31 1999 ./
drwxr-xr-x 16 root   sys  2048 Jul 31 1999 ../
-rw-------  1 kmem   kmem   0 Jul 31 1999 aculog
drwxrwxr-x  2 tty    tty  2048 Jul 31 1999 log/
drwxrwxr-x  2 tty    tty  2048 Jul 31 1999 passwd/
-rw-rw-rw-  1 operator kmem   0 Jul 31 1999 spellhist
-rw-r--r--  1 root   kmem   0 Jul 31 1999 utmp
-rw-r--r--  1 root   kmem   0 Jul 31 1999 utmpx
-rw-rw-r--  1 tty    tty   0 Jul 31 1999 wtmp
-rw-rw-r--  1 tty    tty   0 Jul 31 1999 wtmpx

./log:
total 4
drwxrwxr-x 2 tty  tty 2048 Jul 31 1999 ./
drwxrwxr-x 4 root sys 2048 Jul 31 1999 ../

./passwd:
total 4
drwxrwxr-x 2 tty  tty 2048 Jul 31 1999 ./
drwxrwxr-x 4 root sys 2048 Jul 31 1999 ../

# 長くってすみません

No. 1369 # ミング [E-mail] 2000/11/14 (火) 16:35:21
rosegadenさん
回答どうもありがとうございます。
おっしゃる通り、空のファイルを作っただけで起ち上げに成功しました!
あーよかった。

L1というのはKeybordについているのですか?
その他色々わからないTerminologyがあるのですが、その辺は
またゆっくり調べてみます。

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

No. 1370 # CoreFighter 2000/11/14 (火) 23:09:58
はじめまして
実は今Linuxでデーモンプログラムの勉強をしてるのですけど、
よくわかりません。
デーモンプログラムってループして実行時に&でバックグラウンド
でいいんでしょうか?
HP探しててもサンプルソースが見つからないし‥
よろしかったら教えて下さい。お願いします。

No. 1371 # 68user 2000/11/14 (火) 23:33:01
> デーモンプログラムの勉強をしてるのですけど
まずはここを読んで下さい。結構面倒です。
    http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16
実行時に明示的に & でバックグラウンドにしなくても、
自力でデーモンとして常駐 (って UNIX ではあんまり
言わないか) するのが望ましい挙動です。

ところで Netscape6 が出ましたね。
    http://www.netscape.com/index.html

No. 1372 # CoreFighter 2000/11/15 (水) 08:12:19
68user さんありがとうございました。
自分はデーモンについての知識がまだたりませんね。
HPを見て勉強します。

No. 1373 # PerlによるPOP3クライアントで質問です。 [E-mail] 2000/11/15 (水) 09:38:10
お忙しいところすいません。初めまして、はぴおと申します。
ネットワークプログラミング大変分かりやすく、勉強させて
いただいております。
このサイトを参考にPerl(CGI)でPOP3クライアントをつくったのですが、
一つだけ分からないことがあります。
色々な本やサイトを見ても、FROMヘッダーにはメール送信者の名前と
メールアドレスが入ると思うのですが、自作POP3クライアントで
メールを受信した場合、FROMヘッダーにはメール送信者名しか入りません。
同じメールをOutlookで受信してみると、同じメールでもちゃんとFROM
ヘッダーに、メールアドレスが付加されてました。

以下自分の推測なのですが、色々と理由を自分なりに考えてみました。
・自作POP3クライアントが正しくメールを受信できていない。
・正しくメールを受信できているが、ほかにやらなければいけないこと
    がある

昨日一日、色々なサイトをまわったり、本を調べたり、MLで聞いて
みたりしましたが、分かりませんでした。
藁にもすがる思いでココに書き込んでます。
どうかご意見をお聞かせ下さい。
それでは宜しくお願いします。

以下参考になるか分かりませんが、私の環境です。
-OS: WIndows2000
-Perl : ActivePerl Build 620
-apache_1_3_12_win32

はぴお
lovex@bd.mbn.or.jp

No. 1374 # なおこ 2000/11/15 (水) 11:23:08
初めて投稿させていただきます。

UNIX歴2か月の初心者で 今初めてシェルプログラミングに挑戦してます。
作成したいものは、lastcommで前日のログ履歴を出し、管理者宛にメールを
送るというものなのですが早速つまずいてしまいました。

現在の日付(MON,DAY)を取得するまではできるのですが、”前日”をどうやって表現すればいいのかわからず困っています。
DAYを-1しようとしたのですがうまくいきません。
以下のように記述しています。
どなたかご存知の方、ご教授お願いします。

LANG=C; export LANG
BUF=
set `date`
echo $2 # "Nov"と表示されます
echo $3 # "15"と表示されます
expr $3 -1 > $BUF # expr: syntax errorになります

No. 1375 # いえろーばっくす [E-mail] 2000/11/15 (水) 13:02:14
68userさんいつも助けていただいて感謝です。
    case Expose:
                  while (1){
                          if ( ! XCheckWindowEvent(display, window, ExposureMask, &event) ){
                                  break;
                          }

これを使ってみたところちゃんと一回だけ描画してくれました。
こんな関数もあったんですね。
勉強不足で申し訳ありません。
根本的に解決できなくても動いてくれれば
とりあえずは解決したと思っておきます。
本当にありがとうございました。
またお世話になるかもしれないですが、
そのときはよろしくお願いします。

No. 1376 # book 2000/11/15 (水) 14:33:39
初めましてbookと申します。

UNIXのgccで作成したライブラリを、CCでコンパイルを行う時に
使用できるのか調査しています。

gcc -c share_test.cc
ar cr libtestshare.so share_test.o
ranlib libtestshare.so

CC test_gcc.cc -L. -ltestshare
現状は、ライブラリ内の関数を呼び出す箇所で、
コンパイルエラーになってしまいます。

そもそも、このような使い方が出来るのかどうか、
ご存知の方がいらっしゃいましたらご教授ください。
よろしくお願いします。

No. 1377 # 68user 2000/11/15 (水) 15:56:06
> ”前日”をどうやって表現すればいいのかわからず困っています。
> DAYを-1しようとしたのですがうまくいきません。
> expr $3 -1
expr $3 - 1 です。- と 1 の間にスペースが必要です。
しかし、これだと毎月1日に実行すると 0日となって
しまうので、根本的にまずいです。というわけで、-v
オプションを使いましょう。
    % date -v-1d
で1日前の日付が得られます。ただし、Solaris などの
date には -v オプションはないので、sh でやるなら
perl などを呼び出すのがいいでしょう。
# なので、最初から perl で書くのも手です。

> 現状は、ライブラリ内の関数を呼び出す箇所で、
> コンパイルエラーになってしまいます。
どういうエラーが出るのかちゃんと書きましょう。
FreeBSD と Solaris ではこの方法でうまく動きました。
あと、これは static link 用のライブラリですので、
拡張子は .so より .a が適切でしょう (違うかなぁ?)

> 自作POP3クライアントでメールを受信した場合、
> FROMヘッダーにはメール送信者名しか入りません
pop は、ただ単にヘッダとボディを送信するだけです。
From がどうだとか Subject がどうだとか、そういう
データ内部には立ち入りません (基本的には)。

Outlook で「メールのソースを表示」したものと、
自作 pop3 クライアントの出力の、From: 周辺を両方
見せて下さい。

No. 1378 # なおこ 2000/11/15 (水) 17:17:57
前日の日付取得の件

68userさん、ご教授ありがとうございました。
Solaris環境なのでシェルで作成するのはやめます。
perlも少し触ったことがあるのですがC言語の方が経験が長いので
Cで作成しようと思っています。
が、一般的 or perlの方が効率的なのでしょうか?

No. 1379 # はぴお [E-mail] 2000/11/15 (水) 17:34:12
68userさん、早速のレスありがとうございます。はぴおです。
ちょっと長くなってしまいますが、同じメールを自作POP3クライアントと
Outlookのそれぞれで受信したソースを載せておきます。
なんか"<"、">"の部分だけが読み込めてない感じです。
それではよろしくお願いします。

[自作POP3クライアント]
-------------------------------------------------------------
Received: from ns.ics.lan ([202.228.221.126])
by bd.mbn.or.jp (8.9.1/bd.mbn.or.jp-2.0) with ESMTP id RAA13962
for ; Wed, 15 Nov 2000 17:26:03 +0900 (JST)
Received: from kimura ([202.228.221.125])
by ns.ics.lan (8.9.3/3.7W) with ESMTP id RAA26374
for ; Wed, 15 Nov 2000 17:20:05 +0900
Message-ID: <000501c04ede$6249e4d0$5400a8c0@kimura>
From: "kimura"
To: "kimura"
Subject: test
Date: Wed, 15 Nov 2000 17:31:00 +0900
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
X-UIDL: cde5eb4f8ec74762f85d10deccb2a5a3

test

[Outlook Express]
-------------------------------------------------------------
Received: from ns.ics.lan ([202.228.221.126])
    by bd.mbn.or.jp (8.9.1/bd.mbn.or.jp-2.0) with ESMTP id RAA13962
    for <lovex@bd.mbn.or.jp>; Wed, 15 Nov 2000 17:26:03 +0900 (JST)
Received: from kimura ([202.228.221.125])
    by ns.ics.lan (8.9.3/3.7W) with ESMTP id RAA26374
    for <lovex@bd.mbn.or.jp>; Wed, 15 Nov 2000 17:20:05 +0900
Message-ID: <000501c04ede$6249e4d0$5400a8c0@kimura>
From: "kimura" <lovex@bd.mbn.or.jp>
To: "kimura" <lovex@bd.mbn.or.jp>
Subject: test
Date: Wed, 15 Nov 2000 17:31:00 +0900
MIME-Version: 1.0
Content-Type: text/plain;
    charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
X-UIDL: cde5eb4f8ec74762f85d10deccb2a5a3
Status: RO

test

No. 1380 # book 2000/11/15 (水) 18:21:55
68userさん、さきほどは説明不足ですみませんでした。

エラー内容と環境を書いておきます。
よろしくご教授お願いします。

gcc -c share_test.cc
ar cr libtestshare.so share_test.o
ranlib libtestshare.so

CC test_gcc.cc -L. -ltestshare

test_gcc.ccは読み込んだライブラリ内の関数を呼び出しているだけです。


######################
エラー内容
######################
未定義の 最初に参照している
シンボル ファイル
ShareTest::get(void) test_gcc.o
__builtin_delete ./libtestshare.a(share_test.o)
__rtti_user ./libtestshare.a(share_test.o)
ShareTest::~ShareTest(void) test_gcc.o
ShareTest::ShareTest(void) test_gcc.o
ld: 重大なエラー: シンボル参照エラー。
a.out に書き込まれる出力はありません

######################
使用環境
######################
Kernel Architecture is sun4u
OS Name is SunOS
OS Version is 5.6
OS Distribution is Japanese Solaris 2.6 HW:2 s297s_hw2smccDesktop_09b SPARC
Kernel Version is SunOS Release 5.6 Version Generic_105181-17
                                                  [UNIX(R) System V Release 4.0]

No. 1381 # 68user 2000/11/15 (水) 20:30:33
> gcc -c share_test.cc
> CC test_gcc.cc -L. -ltestshare
ああ、CC って typo かと思っていたら、C++ なのか…。
# C++ は完璧に忘れたなぁ。Hello world さえ作れないです。

おそらく gcc と CC でクラス/メソッドのシンボル名の
命名規則が違うのが理由だとは思うのですが、意図的に
gcc と Sun の CC を混在して使っているのですか?
gcc (g++) か CC に統一できない理由があるので、調査
しているということですよね?

もしそうなら、すいませんがわかりません。gcc の
オプションで指定できるのかもしれませんが…。

> なんか"<"、">"の部分だけが読み込めてない感じです。
もしかして CGI として動かして HTML を吐いていませんか?
んでもって < > & を (&lt; &gt; &amp; に変換せず) その
まま出力していたりしませんか? 根拠は以下の通り。

1. received の <〜> も出力されていない
          for ; Wed, 15 Nov 2000 17:26:03 +0900 (JST)
          for ; Wed, 15 Nov 2000 17:20:05 +0900
2. でも Message-ID は出力されている。
          Message-ID: <000501c04ede$6249e4d0$5400a8c0@kimura>
      タグは英文字から始まる。数字が先頭にくることはない。

> が、一般的 or perlの方が効率的なのでしょうか?
僕なら間違いなく perl でやりますが、まぁそれはお好きな方で。
ちなみに sh からだと
    set `perl -e 'print scalar(localtime(time()-60*60*24))."\n"'`
です。

No. 1382 # rosegarden 2000/11/15 (水) 23:14:33
> % date -v-1d
> で1日前の日付が得られます。ただし、Solaris などの
> date には -v オプションはないので、sh でやるなら
> perl などを呼び出すのがいいでしょう。

このオプションは知りませんでした勉強になりました。

> Solaris環境なのでシェルで作成するのはやめます。

あきらめるのは早いです。

#!/bin/sh

LANG=C
set `date`
year=$6
mon=$2
date=$3

if [ `expr $year % 4` = "0" ] ; then
        is_leap="YES"
fi
if [ `expr $year % 100` = "0" ] ; then
        is_leap="NO"
fi
if [ `expr $year % 400` = "0" ] ; then
        is_leap="YES"
fi

date=`expr $date - 1`

if [ "$date" = "0" ]
then
        case $mon in
                Jan)
                        mon="Dec"
                        date=31
                        ;;
                Feb)
                        mon="Jan"
                        date=31
                        ;;
                Mar)
                        mon='Feb'
                        if [ "$is_leap" = "YES" ]; then
                                date=29
                        else
                                date=28
                        fi
                        ;;
                Apr)
                        mon="Mar"
                        date=31
                        ;;
                        # 以下略
                        *)
                        ;;
        esac
fi

echo The yesterday is $mon $date.

なんていう面白味も芸もないスクリプトなら Solaris でも動くんじゃないかと
思いますよ。

もっとも、

> 作成したいものは、lastcommで前日のログ履歴を出し、管理者宛にメールを
> 送るというものなのですが早速つまずいてしまいました。

この用途なら、日付の計算は不要で前々日分までの lastcomm のログの
バックアップをとっておいて、前日分との差分を diff でとるという方法もあります。
(ただし、lastcomm のログなので、GB 単位になってもおかしくないのですが。)
FreeBSD なんかのセキュリティチェックは全部前日分までのバックアップと
本日分のログの差分抽出でやっていますね。

# また長くなりすみません。

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