こちらの perl-5.6 では動いているので、おそらく 7行目の $port = getservbyname('http','tcp'); で値が取得できていないんでしょう。 $port = getservbyname('http','tcp') || 80; でどうですか。 |
>$port = getservbyname('http','tcp') || 80; >でどうですか。 うまくいきました。ありがとうございました。 ところでこのスクリプトを会社の2台のUNIXで走らせたら 1台は動作してもう一台はUse of uninitialized valueの エラーで止まってしまいました。それではとWINDOWSでやって みたら同じエラーで止まってしまいました。原因がわからないので 質問をさせて頂きました。WSによって動いたりそうでなかったり する原因は何なのかな?っと言う新たな疑問がありますが 宜しければお知らせください。 |
man getservbyname すればわかりますが、この関数は /etc/services (NIS を使っているなら ypcat services の 結果) を読むだけの関数なので、/etc/services がオープン できないとか、ファイルはあるけど中身に http 80/tcp というエントリがない、などというときポート番号の取得に 失敗します。 サンプルとはいえ、本来は getservbyname に失敗したら 80 に 決め打ちするか、あるいは die すべきですね。次回更新時に 直しておきます。 |
お返事ありがとうございました。 perl http-client.plとするとうまく動作するのですが ブラウザから起動するとInternal Server Errorとなります。 起動例(http://www.???.ne.jp/cgi-bin/http-client.pl) もともとそういうスクリプトなのかもしれませんがスクリプト内 もしくは引数でわたされたアドレスのhtmlやjpg,gif等を ブラウザに表示するのはどうしたらよいのでしょうか。 よろしくお願いします。 |
#!/usr/bin/perl print "Hello world"; は CGI 経由では動きません。しかし #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello world"; は動きます。そういうことです。 |
くだらないことですが・・・ HPを置いているサーバにbashのファイルがありますが、 これはunixシェルが使えるということなのでしょうか。 そして、Apacheを使うときにはDNSの設定を行う必要がありますか? もしよろしければお答えください。 よろしくお願いします。 |
> HPを置いているサーバにbashのファイルがありますが、 どこにどういうファイルがありますか? /bin/bash や /usr/local/bin/bash ですか? また、どうやってその ファイルを見付けましたか? > Apacheを使うときにはDNSの設定を行う必要がありますか? ローカルでテスト用に使うのですか? なら必要ありません。 # ってこともないんだけど。自ホストさえ引ければ問題なし。 apache を使って web を一般に公開するにしても、普通に telnet や nslookup が使えているなら、DNS の設定は不要 です (それは DNS が設定済ということだから)。 |
ftpソフトでファイルを取得すると、 一覧のところに .bash_logout .bash_profile .bashrs というファイルが置かれています。 ちなみに、binディレクトリ内には何もありません。 (これはcgiが使えないということ?) bashファイルに関しては所有者が私になっているので、 (rootではないということ) ・・・・どういうことなんでしょう。 なんか、よくわからない質問で申し訳ありません。 |
@68user様 どうも、gongoです。 X関連(というよりもC言語かもしれませんが)で質問があります。 label = XtVaCreateManagedWidget(name,・・・) と書けば、labelというウィジェットを生成できますが 複数個のウィジェットを生成したい場合 for文などでこの文章を繰り返して生成することは可能でしょうか。 例えばlabel00,label01,label02,・・・、そしてname00,name01,name02,・・・ などのように変化させていくつもりで unsigned char labelname[]="label00" unsigned char widgetname[]="name00" といったように最初のlabel00とname00をchar型の配列に入れて for文で回るたびに数値のところだけを書き直すといったことを やろうとしたのですが、どうもうまくいきませんでした。 for(i=0; i<NUM; i++){ labelname = XtVaCreateWidget(widgetname,・・・); labelとnameの数字をカウントアップする; } といった感じでウィジェットを生成できれば簡単なのに・・・と思ったのですが やはり個々に宣言しないとまずいのでしょうか。 labelnameのところは本来Widget型じゃないといけないからうまくいかない のでしょうか。widgetnameのところは本来String型ですがこちらもよくわかりません。 また、同様にイベント処理でイベントハンドラを用いる時も for文で回すことは可能でしょうか。 つまりは以前見て頂いたプログラムのようにlabelをいくつも用意し、 それぞれの窓にButtonPressをイベントハンドラとして登録するという一連の文を 書くと結構大変ですし、後々窓の個数を変える時のことを考えると for文で回せたらよいなぁと考えた次第です。 何卒宜しくお願い致します。 |
@gongo さん > label = XtVaCreateManagedWidget(name,・・・) むむ? 前のソースではそこらへんをやっておられたと思いましたが…。 Widget label[10]; char name[256]; for( i=0; i<sizeof(label)/sizeof(label[0]) ; i++ ){ snprintf(name, sizeof(name), "name%02d", i); label[i] = XtVaCreateWidget(name, ...); } ではダメですか? > 最初のlabel00とname00をchar型の配列に入れて for文で > 回るたびに数値のところだけを書き直すといったこと はできません。C 言語では、変数名や関数名などのシンボルを 動的に生成することはできないからです。 # …という表現は正しいかな? > unsigned char labelname[]="label00" > labelname = XtVaCreateWidget(widgetname,・・・); また、「labelname の*内容*」と「メモリ領域」には何の関係も ないので、XtVaCreateWidget の戻り値を格納する領域がどこにも ない、ということになります。 @みちこさん > これはunixシェルが使えるということなのでしょうか。 一言で言えば、 「~/.bash* がある、ということだけでは何とも言えない」 です。相手側に telnet サーバが上がっているか、IP アドレスにより telnet の接続元を限定していないか、パスワードエントリが適切に 設定されているか、ログインシェルが適切に設定されているか、 などを全てクリアすればログインできるでしょう。 逆に言うと、プロバイダが客にリモートログインさせないように するには、たくさんの方法があるということ。その情報がない 以上、ログインできるとも できないとも判断できません。 > ちなみに、binディレクトリ内には何もありません。 > (これはcgiが使えないということ?) bin と CGI には関係はありません。 あと、質問の仕方がいまいちですね。例えば、「binディレクトリ」 というのは、/bin なのか、ホームディレクトリの bin なのか 判断ができません。何を書けばよいかがわからない、というのは 理解できますが、その場合は調べた情報を全て書いて下さい。 |
最近うちに届いたメール。 From: * <*@mti.biglobe.ne.jp> Date: Sat, 2 Sep 2000 00:24:57 +0900 (内容なし) From: * <*@da.mbn.or.jp> Date: Wed, 6 Sep 2000 21:24:05 +0900 (内容なし) From: * <*@calltoweb.com> Date: Fri, 8 Sep 2000 12:43:55 +0900 (内容なし) From: *@themis.dricas.com Date: Sat, 9 Sep 2000 12:49:08 +0900 (JST) (内容なし) From: * <*@d7.dion.ne.jp> Date: Sun, 10 Sep 2000 09:11:30 +0900 Subject: あの ホームページみました。何とかしてください。 From: * <*@f7.dion.ne.jp> Date: Sun, 10 Sep 2000 10:29:26 +0900 届きました? From: *@nifty.ne.jp Date: Tue, 12 Sep 2000 00:05:51 +0900 (JST) このホームページはどうなっているんですか? From: *@aol.com Date: Tue, 12 Sep 2000 09:44:30 EDT Subject: エラー表示ありとでました。 和議申請について 和議申請とは この人たちにはコミュニケーション能力というものがないのだろうか。 好意的に解釈すると、「SEGA BBS 過去ログが見れません」 と言いたいのかとも思うのだが、本当にそうなのか。 うちにイタズラメールを送ろうという活動でもやっているのでは ないか。あるいは、どこかの web をクリックするとここにメールが 送られてくるような仕組みになっているのではないか、とも思えてくる。 謎である。真実を知っている人がいたら教えてください。 |
@68user様 素早いお返事ありがとうございます。 >むむ? 前のソースではそこらへんをやっておられたと思いましたが…。 たしか前のではすべてのlabelに対してXtVaCreateManagedWidget()やXtAddEventHandler()などをやっていたと思います。(^^; >Widget label[10]; >char name[256]; >for( i=0; i<sizeof(label)/sizeof(label[0]) ; i++ ){ > snprintf(name, sizeof(name), "name%02d", i); > label[i] = XtVaCreateWidget(name, ...); >} snprintfというのが使ったことがないので明日調べて 試させていただきます。 ありがとうございました。 |
質問の仕方がうまくなくて、ごめんなさい。 これからもっと磨いていきますので、 よろしくお願いいたします。 初心者にはココに質問するのはちょっと高度なことなのでしょうか。 とかちょっと思ってしまった。 なにか超初心者向けのページがあったらご紹介ください。 ご迷惑おかけしました。 というわけで今日も本を読むばかりです。 コンピュータって難しい・・・ 聞く人もいないのがホントにつらいところです。 |
> 質問の仕方がうまくなくて、ごめんなさい。 というところにさらに説教くさいことを書くのもアレですが、 回答をもらったときに「理解できたかどうか」「解決したか どうか」をちゃんと書くことも重要です。 「ありがとう」と、お礼のみを書かれてもこっちは何も得る ものがないわけですが、 「〜が理解できた/できなかった」 「〜と〜の関係がわからない」 「言われた通りにやってみたら〜というトラブルが出たが、 〜とすることで解決できた」 という返答が得られると、回答者が「こういう解説の仕方で 相手に理解させることができた」「この部分で嘘を言ってしまった」 「わかりにくい表現をしてしまった」などということに気づく ことができます。 で、みちこさんは apache の件も bash の件も、解決したのか、 理解できたのか、を書いておられません。これでは回答した 僕には何のメリットもありません。 要は「お礼よりも結果報告」です。 これは初心者向けのコミュニティでも上級者向けのコミュニティでも 同じですので、今後は注意されることをお勧めします。 > なにか超初心者向けのページがあったらご紹介ください。 逆に、fj やメーリングリストなど、ここよりもずっとレベルの 高いところに行くのもいいでしょう。しばらく読み続ければ、 「よい質問の仕方とはどういうものなのか」がわかってくると 思います。 > @68user様 ところで、「様」はご勘弁を>gongo さん |
@68userさん > snprintfというのが使ったことがないので明日調べて > 試させていただきます。 と思っていたら、マシンが起動しなくなってしまいました。 試す以前に修理手続きやら何やらやらなければ・・・。 D◯S/Vパラダイスというお店で去年の6月に購入したマシンなのですが、 昨日突然フリーズして以後起動しなくなりました。(泣) HDDのランプとかはつくのですが一瞬HDDのカラカラって音が鳴って それ以後進まなくなってしまいました。 それとsnprintfというのはsprintfのことでよろしいのでしょうか。 今日、本を見た感じではsnprintfというのがなかったもので。 どっちにしろsprintfも使ったことがなかったので 他のマシンで試してみます。 |
@68userさん sprintf()を使ってやってみたらうまくいきました。 といっても、最初はうまくいかなくて labelを生成するところで segmentation fault で 止まってしまったので、2番目の引数である sizeof(name) というのを 削除したら通るようになりました。 |
>apache を使って web を一般に公開するにしても、普通に >telnet や nslookup が使えているなら、DNS の設定は不要 >です (それは DNS が設定済ということだから)。 やはりDNSの設定はいらなかったようです。 Perlがうまくインストールされていなかったため、 動作しなかったようでした。 しかしながら、単にパソコンの調子が悪いだけだったかも、 という疑問も捨て切れません。 というのも、Apacheを立ち上げると、突然フリーズしたりするので。 詳しい理由はちょっと見当がつきません。 >相手側に telnet サーバが上がっているか、IP アドレスにより >telnet の接続元を限定していないか、パスワードエントリが適切に >設定されているか、ログインシェルが適切に設定されているか、 >などを全てクリアすればログインできるでしょう。 IPアドレスによってtelnetの接続もとの限定をしているかどうかは、 向こうに聞かないとわからないのでしょうか。 特にそのような項目はメール確認の時にはふくまれていなかったのですが。 またログインシェルが適切に設定されている、とはどういう状態をいうのですか。 >例えば、「binディレクトリ」 >というのは、/bin なのか、ホームディレクトリの bin なのか >判断ができません。 おっしゃるとおりです。 私が言ったのはホームディレクトリのbinのことです。 少しはましになったでしょうか。 MLも探してみることにしました。 もう少しうまく質問できるようになったら またこちらにこさせてください。 お世話になります・・・ |
@gongo さん > それとsnprintfというのはsprintfのことでよろしいのでしょうか。 失礼ながら、man の見方はご存知でしょうか? man snprintf です。 日本語訳はこちら。 http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=printf&dir=jpman-3.1.0%2Fman§=3 なお、(FreeBSD なら) section 3 の日本語訳は現在の jman には 含まれていないので、web 上でしか見られません。 @みちこさん > IPアドレスによってtelnetの接続もとの限定をしているかどうかは、 > 向こうに聞かないとわからないのでしょうか。 基本的にはそうですが、まぁ実際に telnet で接続して みればわかる場合もあります。 Connection refused とか Connection closed by foreign host とか、 言われたら、無理ということです。 # Connection refused だからといって、IP アドレスによる # 制限をかけている、とは断言できませんが。 あと、こういうことはプロバイダに確認すべきことです。 ちゃんとお金を払っているのでしょうから「telnet 接続は 可能か」と堂々と問い合わせましょう。 > またログインシェルが適切に設定されている /etc/passwd (あるいは /etc/master.passwd, /etc/shadow など) の話です。 username:*:1001:1001:HOGEHOGE:/home/username:/bin/csh username:*:1001:1001:HOGEHOGE:/home/username:/nonexistent 前者はログインできますが、後者は /nonexistent というシェルは 存在しないので、結果的にシェルが起動せずログインできません。 |
@68userさん >> それとsnprintfというのはsprintfのことでよろしいのでしょうか。 >失礼ながら、man の見方はご存知でしょうか? man snprintf です。 manの見方は知っていましたがほとんど使ったことがなく、C言語辞典の ようなものにも載っていなかったものでてっきり近くに載っていた sprintfだと思っていました。 >snprintf(name, sizeof(name), "name%02d", i); お教えいただいた日本語マニュアルHPの方を見ました。 で、読んだ結果snprintfの前にprintfもなんだか わからなくなってきてしまったので、"name%02d"の部分について 確認させてください。まず、「%d」と書けば整数を表示させると 思いますが、その前の「2」というのは整数二桁の精度ということですか? あと、その前の「0」はiが一桁の時、01、02、・・・のように「0」を いれてくれるということでしょうか。 そしてsizeof(name)についてですが、これがあるsnprintfと、 ないsprintfの違い(両方ある必要性?)がいまいちよくわかりません。 snprintfではsizeof(name)の容量を超えるものを 一番目の引数のnameに入れることを許さない ということなのでしょうか??う〜ん・・・。 |
はじめまして。 Perlで質問があります。 パケットを送るときにその容量を どうやって指定するのですか? 例えば1000バイトをUDPで送りたい場合 どうすればいいんでしょうか? そのパケットの作成方法がわかりません。 よろしくお願いします。 |
@gongo さん > manの見方は知っていましたがほとんど使ったことがなく わからなければ、とにかく man です。まずマニュアルを読まないと、 理解できる/できないというレベルにさえたどり着けませんから。 > printfもなんだか わからなくなってきてしまったので、 ま、これは宿題ということで。いろんな値を %d, %2d, %02d で 表示させてみればわかるでしょう。 # printf(3) は、よく使うわりにわかりにくいマニュアルの # 代表だと思うので、あまり気にしなくてよいと思います。 > これがあるsnprintfと、ないsprintfの違い snprintf だと、適切な値を第二引数に与えれば、いかに 生成される文字列が長くても、その領域を越えて書き込む ことはありません。要は、バッファオーバーラン対策です。 strncat/strncpy/strlcat/strlcpy も同じです。 @ケイさん > パケットを送るときにその容量をどうやって指定するのですか? > 例えば1000バイトをUDPで送りたい場合どうすればいい > んでしょうか? C の send/sendto と違い、perl の send では長さを与える 必要はありません。perl 君がよきにはからってくれます。 > そのパケットの作成方法がわかりません。 まさか IP データグラムを自前で作る、とかいう話じゃないですよね? |
@68userさん > ま、これは宿題ということで。いろんな値を %d, %2d, %02d で で、やってみたところ %d は左寄せで0,1,2,・・・というようになり、 %2d は二桁分書く場所を確保しつつ、値が一桁なら十の位を 空白で埋め(見ため右寄せ)、%02d は二桁分書く場所を確保しつつ、 値が一桁なら十の位を0で埋めていました。 > snprintf だと、適切な値を第二引数に与えれば、いかに > 生成される文字列が長くても、その領域を越えて書き込む > ことはありません。要は、バッファオーバーラン対策です。 なるほど、わかりました。 プログラムは snprintf でうまくいきました。 |
68user-sanこんばんは、 HTTPクライアントのサンプルコードを少し変更してある特定のサイトの CGIに任意のデータを渡しリードしたHTMLを表示するCGIファイルを作り ました。リードしたHTMLをブラウザに出力する前にリンク先等を変更 して出力したいのですが良い方法がありましたらお知らせください。 例)リードしてきたHTMLのファイル等のリンク先が ./hogehoge/hoge/hoge1.jpgの場合ブラウザに出力する前に ./hoge_hoge/hoge1.jpgに変更してブラウザに出力する。 |
@konanさん 68userさんでなくて申し訳無いですが・・・ #しかも多分役に立たない内容です。スミマセン ただのテキストのやり取りなワケですから、 いったん読み込んだHTMLをブラウザに渡す前に 内容を書き変えてやれば良いだけですよね? そう言う話でなくて、その書き換えのやり方を聞いてらっしゃるのなら それは答えようの無い話だと思います。 それを考えるのがプログラマの仕事なワケですから。 |
>まさか IP データグラムを自前で作る、とかいう話じゃないですよね? IPデータグラムって要はパケットのことですよね? 自前で作ることになるのかな?よく分かりませんが 例えば、適当なゴミパケットを送りたい時はどうすればいいですか? そのゴミパケットの作り方を教えて頂きたいです。 別に中身のあるデータじゃなくていいんです。 |
@konan さん > ./hogehoge/hoge/hoge1.jpgの場合ブラウザに出力する前に > ./hoge_hoge/hoge1.jpgに変更してブラウザに出力する。 s|\./hogehoge/hoge/|\./hoge_hoge/|g とかそういうことですか? @hsj さん > 68userさんでなくて申し訳無いですが・・・ 言うまでもないですけど、どなたでもご自由に回答して いただいて結構でござんす。 @ケイさん 普通、パケットを自前で作ると言えば GET /index.html HTTP/1.0 というようなアプリ層のプロトコルに、TCP ヘッダを付けて TCP セグメントを作ったり、さらに IP ヘッダを付けて IP データグラムを作ったりすることを指すような気がします。 こういうレベルの処理は、普通 OS がやってくれるものです。 > 例えば、適当なゴミパケットを送りたい時はどうすればいいですか? こういうアプリケーション層のプロトコルは、クライアントと サーバが協調して動けばいいので、クライアントとサーバ 両方を作るならば、プログラマが勝手に決めればよいです。 send(SOCKET, 'hoge', 0, pack_sockaddr_in(1234,inet_aton('10.0.0.1'))); というふうに。 ところで UDP の解説って需要あるのかしら。Perl/Tk で IP Messenger http://www.asahi-net.or.jp/~VZ4H-SRUZ/ipmsg.html を作りかけたんだけど、途中で飽きちゃってそのまま… (実用レベルではありません)。UDP の解説を書こうとしたんですが、 あんまり読みたい人もいないかなと思って、未着手です。 ちなみにこの IP Messenger を作ろうとすると、UDP は理解できるわ、 ブロードキャストもバッチリだわで、とても勉強になります。時間の ある方、チャレンジしてみては。 |
昨夜68userさん宛てにメールで質問してしまい、失礼しました。 掲示板なるものがあるんですね。 さっそくですが、 もしどなたか知ってる方がいらっしゃったら教えてほしいのですが。 GETの場合 HTTPアクセスするときに http://www.foo.com/bar.cgi?data1=hoge&data2=fuga とすることで結果(HTMLソース等)を取得できますよね。 でも、 POSTの場合 このdata1=hoge&data2=fugaを見せないようにするために ストリームでサーバに送信しますよね。 でも、この送信部分を自分で作成した時にどのように 送信すれば良いのかが不明です。 言語はJavaです。 Javaだと、どのストリームに変換すれば良いのか、データにヘッダ情報 のようなものが必要なのかも不明ですし、実際の通信ではどのソケットを 開いてサーバ側と接続すれば良いのか全く分かりません。 他の言語でも良いのですが(可能であればJava)、 プログラム自身がPOSTでデータを送信して結果(HTMLソース等)を取得する ようなサンプルコードってないものでしょうか? |
Java のことなら、まずは java house にあたってみる のがいいでしょう。 http://java-house.etl.go.jp/ml/archive/j-h-b/015871.html#body で POST できることは確認しました。 # アプレットではなくアプリケーションから、ですが。 ここらへんに詳しくなるには http://java-house.etl.go.jp/ml/archive/j-h-b/015872.html#body で紹介されている tutorial を読むのがよさそうですね。 |
ありがとうございましたー。 これでおそらくブラウザの代わりにプロキシからjavaでリクエストを POSTできると思われます。 相手(webサーバ)がCGIでも何で書いていても、同じだと思っていい んですよね?httpで標準化されてるんでしょうから。 |
ありがとうございました! アドバイスのおかげで処理方法が浮かびました。 >ところで UDP の解説って需要あるのかしら。 あります! もし時間があるなら是非解説をやって頂きたいです! |
@osa さん > 相手(webサーバ)がCGIでも何で書いていても、同じだと思っていい > んですよね?httpで標準化されてるんでしょうから。 そういうことです。 # 1年ぶりに Java を使ったので、僕の知識はあやしいですが。 @ケイさん >> ところで UDP の解説って需要あるのかしら。 > あります! へい、暇を見付けて書いてみます。 多分「IP Messenger を作ってみよう」になると思いますけど。 # 他に UDP でおもろいネタってあるかなぁ。resolver を作っても # あんまりおもしろくなさそうだし、NFS なんて全くわからんし。 ただし、最近人生に疲れていて (笑) 書く気力がないので、 気長にお待ち下さいまし。 |
はじめまして。 Kshについて質問があります。 シェルスクリプトの中で設定した変数、例えば、x=300とかを 別のスクロリトで参照することはできないのでしょうか? export x=300 と、言うようにしてもだめでした。 もう少し具体的に書くと、script1の内容は x=300 print "設定した値は$x" script2の内容は print "設定した値は$x" と、言ったようにscript1で設定したxをscript2で参照したいのです。 ご回答、よろしくお願いします。 |
どうも、いつもお世話になっております。 今 Bourne SHELL のスクリプトを書いたり解析したりすることができる ようになりたいのですが、最適な本はないでしょうか。man shでは分 かりにくい部分を例で示しながら文法を解説した本をご存じでしたら 教えていただけませんか。ちょうど C SHELL でいうところの 「csh & tcsh Manual & Reference」(秀和システム) みたいな本です。書店を探したけどなかなか見つからなくて…。68user さんが Bourne SHELL について勉強したときにどんな本を読んだのでしょうか。 #bash については秀和システムの「bash Manual & Reference」がありますが… |
>skel.103Mさん これなんかどうですか? 良さそうですよ。 Bourne Shell 自習テキスト http://www.tsden.org/takamiti/shText/index.html |
@skel.103M さん 僕はこのまえ sh スクリプトを初めて書きましたが、 > Bourne Shell 自習テキスト > http://www.tsden.org/takamiti/shText/index.html と man で乗り切りました。 あと、UNIX USER 10月号 (最新号) に 20 ページ程度ですが、 シェルスクリプト講座が載ってます。結構勉強になると思います。 ただ、sh スクリプトの決定版、というような本は知らないです。 http://www.oreilly.co.jp/BOOK/bash2/contents.htm ってのがありますが、読んだことはないです。 # 結局 bash と sh は別物だし…。 @やすさん > シェルスクリプトの中で設定した変数、例えば、x=300とかを > 別のスクロリトで参照することはできないのでしょうか? export して環境変数にセットしておけば、子プロセスからも 参照できるはずです。それができないということは、script1 から script2 を呼んでいるのではなく、あるプロセスから script1 を呼び、script1 の終了後に script2 を呼んでませんか? そういう場合は、ファイル経由で情報を渡すのがいいと思います。 |
管理人様 はじめまして、黒揚羽というものです。 私は UNIX に興味のある者で、今度とある IRC チャンネルで、 『UNIX 雑談会』を毎週催すことになりました。 それで、この掲示板にはことに UNIX 等のオペレーティングシステムに 興味のある方が集っておられると思い、ここでその IRC での 雑談会の紹介をしたいのですが、よろしいでしょうか? もちろん、商業的・営利的なものではなく純粋に個人の趣味の範囲で 行っているようなものであることをあらかじめお断りしておきます。 |
> ここでその IRC での雑談会の紹介をしたいのですが、 > よろしいでしょうか? よいですよ〜。僕も暇があれば、参加させていただこう かなと思います。 ただ、「文字コードは Shift_JIS で」というのは 参加者にとって ある意味ハードルが高いのでは ないかなと思いました。 # そこに至った事情を知らないので、ただ思っただけです。 |
よいですよ〜。僕も暇があれば、参加させていただこう >かなと思います。 ご配慮有難うございます。それから、68user さんに参加して頂くと とても話がはずむと思っています。本当に、お暇な折にで結構ですから、 お話したいと思っておりました。 それでは、お言葉に甘えて案内を掲示させて頂きます。 以下の要領で、毎週土曜日深夜から日曜日にかけて UNIX に関する雑談会を催しています。UNIX を肴に くつろいだお話をするのが目的で、会話に参加して 頂ければ現在の使用 OS などの参加資格はありません。 win による参加も OK です。 詳しい要領とIRC クライアントの設定方法は http://members.tripod.co.jp/ageha/irc にあります。これらの説明は読んだ方が無難かと思います。 ○日時: 毎週土曜日 23:00 〜日曜 2:00 ○サーバ: irc.fef.net:6667 他 ○チャンネル: #tsu ○禁止事項 (1) perl およびセキュリティに関する話題 (2) ログとりのみの参加 (一般的な意味での away などは問題ありません。 また、のべつまくなし喋らなければならないというのでありません。) ○注意事項: #tsu は Shift JIS 限定です。 # Shift JIS は、mIRC のためらしいです。 # 個人的には iso2022-jp か euc が良いんですけど。 # とにかく、チャンネルの founder は別の方なので、 # その方の主義にあわせることになりました。 |
どうも、skel.103Mです。 Bourne SHELLに関するアドバイス、どうもありがとうございました。>68userさん・Yuukiさん さっそく、 Bourne Shell 自習テキスト http://www.tsden.org/takamiti/shText/index.html を見てみました。なかなかいいですね、このページ。ブックマークにも 登録しときましたし。このページを見ながら勉強していこうと思います。 > あと、UNIX USER 10月号 (最新号) に 20 ページ程度ですが、 > シェルスクリプト講座が載ってます。結構勉強になると思います。 私も買って少し読んでみました。いわゆるハンドブックとしてはちょっと 不適だと思いました。(←個人的な意見なので気にしないで下さい)ひと 通り文法を知った後で実践として使おうと考えています。 > ただ、sh スクリプトの決定版、というような本は知らないです。 > http://www.oreilly.co.jp/BOOK/bash2/contents.htm > ってのがありますが、読んだことはないです。 このWebページによると bash に関するもののようですね。 明日(っていうか2時間後)秋葉原へ行くので、そのときに見てみよう と思います。 > # 結局 bash と sh は別物だし…。 そうなんですよね。例の秀和システムの「bash Manual & Reference」でも 似たようなことを書いてました。もちろんスタイルは似ているんです けれど、やはり違いがあるらしいです。。。 それでは。 |
こんにちは。 68userさん、Ksh変数のご回答ありがとうございました。 しかし、私はまだ、初心者なので、ファイル経由で情報を渡すということがよく分かりません。 ^^^^^^^^^^^^^^^^^^^^^^ もう少し詳しく教えて頂けないでしょうか。 よろしくお願い致します。 |
こんばんは。 ここには初めててきました。 質問があるのですが、Cシェルで、 サーバー日付より2日前のファイルを削除するとかっていう ことはできるのでしょうか? 教えてください。 お願いします。 |
@ノヴァさん > 質問があるのですが、Cシェルで、 > サーバー日付より2日前のファイルを削除するとかっていう > ことはできるのでしょうか? 使っているシェルにかかわらず可能です。 findというコマンドを使えばいいです。「UNIXの部屋」からfindの概要 や使い方を見たあと、詳細を「man find」で調べればいいと思います。 ではでは。 |
@ノヴァさん > ファイル経由で情報を渡すということがよく分かりません その前に > script1 から script2 を呼んでいるのではなく、あるプロセスから > script1 を呼び、script1 の終了後に script2 を呼んでませんか? に対する回答はどうなっているのでしょうか? 引数で渡すとか、環境変数で渡すとか、ファイル経由で 渡すとか、パイプで渡すとか、やり方はいろいろありますが、 どういう呼び出し方をしていて、どれだけの量のどういう内容の データを script2 に渡したいかがわからないとなんとも言えません。 |
> @ノヴァさん じゃなくて、やすさんでした。 ところで、make world 中に 家の FreeBSD を ぐっちゃんぐっちゃんに壊してしまったので、もし週末 までに復旧できれば IRC に参加させていただきます。 # が、なかなかうまくいかず…。 |
教えていただきありがとうございました。 さっそく、色々やってみます。 |
はじめまして、もりやと申します 実は今、シェルスクリプト(でいいんですかね?DOSでいうBATファイルの ことです)でやろうとしていることがあるのですが、やり方が今ひとつ分 かりません。ファイルの複製を作るのですが、複製されるファイルの名前 には、別のテキストファイルのレコードの先頭の4バイトが付加され、そ のテキストファイルは何レコードあるか分かりません。レコードの数だけ 複製を作ります。awkなど使えばよさそうに思って本を読んだりいろいろ試 しましたが、うまくいきません。教えていただければ幸いです。 OSは、HP-UXでバージョンの見方がわからないのですが、ここ2、3年のも のではあると思います。 |
はじめまして。 MXレコードを調べたいと思っているんですが、モジュールが使える状況にありません。Net::DNSなどのモジュールを使わずにMXレコードを引く方法があればヒントだけでも教えていただけるとうれしいです。 よろしくお願いします。 |
Hmm... I have recovery FreeBSD. But canna server doesn't accept a connection. Something is wrong. sign.... @moriya I can't understand what you want to say. Please show examples of the file and the record. To know OS version, type `uname -a'. @Q > get MX record without Net::DNS There is a sample script to get MX with nslookup. http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/expn.cgi Another way, connect DNS server (port 53/udp), talk DNS protocol. # I hate multipost. You have to reply in 2ch, don't you? |
説明不足で申し訳ありませんでした。 org.datというファイルがあるとします あと、tencd.txtというテキストファイルがあり、その中身は 000420000101 002320001010 034320001020 とします この場合、 org.datをコピーしてorg004.dat、org0023.dat、org0343.dat という3つの複製ファイルを作成したいのです。 tencd.txtは何レコードあるかは不定です。 因みにHP-UXのバージョンはB.10.20でした。 よろしくお願いします |
What do you mean? hahaha... |
sh なら exec < tencd.txt while read line do set -- $line num=`echo $line | sed 's/^\(....\).*/\1/'` cp org.dat org$num.dat done csh なら foreach line (`cat tencd.txt`) set num=`echo $line | cut -c-4` cp org.dat org$num.dat end てな感じでしょうか。 # シェルスクリプトと言っても、シェルにはいろいろ種類が # あるので、sh か csh かそれ以外かを明記してください。 先頭4バイト取得には、sed でも cut でも awk でも お好きな方法をどうぞ。 もちろん全体を awk スクリプトで書くこともできます。 でもまぁ、perl を覚えた方がよいとは思いますね。 |
すいません、Perl一般の話ですいませんが、 サブルーチン リファレンスを使うとコールバック関数が作れる、 という場合の、コールバック関数ってどんなもんなんでしょうか? どんなときにどう使うと便利なんでしょうか? リファレンスの勉強をしていて、そこだけピンと来る例題のある章が なくて困っています。 御無理のない範囲で教えてくださいー。 |
Perl/Tk で何かアクションがあったときの動作を記述する関数 sub pushed { print "ボタンが押されました\n"; } $top->Button( -text => 'Push me', -command => \&pushed, )->pack(-side => 'left'); とか、シグナルハンドラ、たとえば SIGALRM による タイムアウトが起こったときの動作を記述する関数 sub signal_handler { print "1秒待ちましたが、入力がありませんでした\n"; alarm(1); } $SIG{ALRM}=\&signal_handler; alarm(1); $buf = <STDIN>; などをコールバック関数といいます。 後者は、より実践的に書けば http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=889 てな感じです。 なお、関数へのリファレンスを使わず、$SIG{ALRM}=sub {...} などと 無名関数を使ってコールバックを設定することもできます。 |
ありがとうございます。このふたつの例はわかりました。 他に、ユーザープログラムが呼び出すサブルーチンを 「コールバック」と呼ぶことはないんでしょうか。 「コールバック」という言葉じたいの定義が本によってあやふやな気がして、、。 たびたび申し訳ありません、、。 |
> 「コールバック」という言葉じたいの > 定義が本によってあやふやな気がして、、。 その本の記述例を見せていただけますか? |
すいません、、。 −−−−−−−−−−−−−−− 「Perl 5 パワフルテクニック大全集」(インプレス) 、、コード参照は、おもに、コールバック関数(後で呼び出してもらう関数)を指定するときに使う。、、 #! /usr/local/bin/perl # コールバック関数の定義 sub callback { my $mesg = shift; print "$mesg\n"; } # 関数への参照を作成 my $coderef = \&callback; # 異なるパラメータで関数を呼び出す &$coderef("Hi Mike!"); &$coderef("How are you?"); −−−−−−−−−−−−−−−−−−−− 「Perl 5 マスターブック」(翔泳社) サブルーチン関数の一般的な用途としてはコールバック関数があります。コールバック関数では、サブルーチンの配列をテーブル内に作成し、Perl プログラムから1つまたは複数呼び出します。、、 sub central_greeting { print "Hello!"; } sub eastern_greeting { print "Yo!"; } sub western_greeting { print "Howdy!"; } %greetings = ( "Central" => central_greeting, "Eastern" => eastern_greeting, "Western" => western_greeting, ) (中略、どこの土地のひとかを $where に入れて) $hash_ref = \%greetings; $sub_ref = $hash_ref=>($where); &$sub_ref(); −−−−−−−−−−−−−−−−−−−− 「実用Perlプログラミング」(オライリー) コールバック関数とは、リファレンスとしてあちこちに渡され必要に応じて呼び出されるようなサブルーチンです。そうしたものが構文的に用意されているわけではなく、使い方としての名称に過ぎません。呼び出す(リファレンスを使用する)側のコードでは、そのサブルーチンが何をするものかを意識する必要はありません。本節では、ディスパッチテーブル、シグナルハンドラ、描画関数の3つの例を通して、コールバック関数の使い方を説明します。 −−−−−−−−−−−−−−−−−−−− うーん、用例にしても呼び出しのレベルがいたずらに増えてるだけで、いまいち便利になった実感が。 |
こんにちは。 @ふくしさん ぼくの少ない経験でしか言えませんが、 今までぼくは「コールバック関数」(もしくはハンドラ)の名称は、 「何らかのアクションを要求した際に呼び出される関数」 に対して使ってきました。 #ボタン押下のイベントに対して呼び出されるモノであったり #シグナルイベントに対して呼び出されるモノであったり ふくしさんが例に出されている、それぞれの本では、 >「実用Perlプログラミング」(オライリー) の説明がほぼ的確だと思います。 >「Perl 5 パワフルテクニック大全集」(インプレス) や >「Perl 5 マスターブック」(翔泳社) の説明は、これらの部分だけを見ると コールバック関数と呼ぶのはおかしいような気はしますね。 どちらかと言うと、コールバック関数として使う際に便利に呼び出せるように 準備をしているところに見えます。 あくまでもそれぞれ、コード参照とサブルーチンの説明なのではないでしょうか。 |
全くもって同感です<hsj さん > 「何らかのアクションを要求した際に呼び出される関数」 あと、このアクションは「非同期に発生する」というのも 重要な要素なのかな? (違うかも) |
なるほどー(知恵熱) ひとつわからないのが、Tkやシグナルハンドラのように、 そのアクションをキャッチする機構がシステムによって用意されているもの (BASICのON命令みたいなもんですね) だけをコールバックと呼ぶんでしょうか? それとも、呼び出し元も自前のPerlコードで書いた例がなにかあるでしょうか? あと非同期ってどういう意味なんでしょう。 あとなんでコールバック(電話を掛けなおすこと)っていうんでしょね。 すいませんずうずうしくお伺いして、、。 |
ん〜、こういうのは自分の中で納得できるかどうかなので、 うまく説明するのは僕には難しいなぁ。 > あと非同期ってどういう意味なんでしょう。 プログラム側から「いつそのアクションが起きるか」を 知ることができないということです。たとえば、マウスの クリックがいつ発生するだとか、シグナルがいつ飛んで くるかを、プログラムの側から予想することはできません。 > Tkやシグナルハンドラのように、そのアクションをキャッチする機構が > システムによって用意されているものだけをコールバックと呼ぶんで > しょうか? そうだと思います。というより、システム (OS) の手助けを 借りなければ、非同期なアクションに応答することはできません。 signal は非同期でやってきますので、シグナルハンドラという 機構が OS にあります。 ボタンの押下は、結局は X Window System のイベントとして socket 経由でデータが送られてきます。これは select で データが送られてきているかどうかを調べます (たぶん)。 結局どちらも OS の手助けを借りている (=システムコール を使う) わけです。 |
にゃるほどー、わかりました。 非同期というのがユーザープログラムでわからない、 システムがキャッチする、 それを処理するのがコールバック、というのであれば納得できます。 あとはシグナルハンドラやTkのプログラムを勉強するなかで 勉強しようと思います。 どうもありがとうございます!>68userさん、hsjさん |
FreeBSDでネットワークプログラミング(カーネル)を しているのですが、たくさんの構造体が でてきてすこし混乱しています。 わかりそうでわからないので 構造体を日本語で具体的に説明しているHP、本などを 知っている方がいらっしゃいましたら どうか教えてください。HPの方がありがたいです。 乱文ですが、よろしくお願いします。 |
はじめまして、UNIX見習いです。 今まではke◯t氏の有名な掲示板や、ゆいチャ◯トのソース等を参考に Perlの勉強をしていましたが、68userさんのスクリプトを見て 目からウロコが落ちた感じでした。 変数のネーミングセンスも良く、可読性も高いスクリプトを初めて見て、 今まで参考にしていた人のスクリプトって何だったんだろうと思っちゃいました。 あと、Perlでネットワークプログラミングが出来るとは知らなかったし(爆) さっそくechoサーバのサンプルスクリプトを使わせてもらって勉強していますが、 IO::Socketを使ったechoサーバの場合、外部からのアクセスが出来なくて悩んでいます。 現在の状況は、 echo-server.pl・echo-server-fork.pl・echo-server-select.pl は外部からのアクセスでも動きますが、 IO::Socketを使ったechoサーバのサンプルスクリプトは全部 外部からのアクセスには反応しません。localhostからだと、ちゃんと機能するのですが…。 サーバの環境は、Perl 5.005_03 on Linux2.2.14で、 echoサーバのサンプルスクリプトは全てデフォルトのまま設置です。 IO::Socketを使った場合、なぜ外部からのアクセスが出来ないのか 原因が分からずに悩んでいます。 あと、標準モジュールの使い方の学習で効果的なリソースって何でしょうか? 私の手持ちの書籍では、標準モジュールの利用に関して載っていないので 何かオススメの書籍、もしくはネット上のリソースで参考になるところがあれば 紹介していただきたいと思います。なるべく日本語のリソースで(←贅沢かな?) 長々と書いちゃってすみませんが、ご指導の程、よろしくお願いいたします。 |
こんどは canna が かんじに へんかんしてくれなくなりました。やれやれ、 こどもみたいな ぶんしょうだ。 > IO::Socketを使ったechoサーバのサンプルスクリプトは全部 > 外部からのアクセスには反応しません。 おお、ほんとだ。というわけで しらべてみたところ、 LocalAddr => 'localhost', がわるいです。 ふつう、マシンには じぶんじしんあてへのインタフェイスがあります。 これをループバックとよび、127.0.0.1 という IP アドレスがふられて います (127.0.0.1 がループバックという きまりはありません。 (IPv4 では) ただのかんれいです)。 そして、インターネットにつながっているならば、さらにインターネットへ つながるインタフェイスがあります。これには 210.249.139.22 のような グローバル IP アドレスがふられています。 つまり、つうじょう、マシンには 2つのインタフェイス/IP アドレスが あるわけです。 たいていのサーバプログラムは2つのインタフェイスを くべつしません。 しかし、くべつできるような しくみは いちおうあります。それが http://X68000.startshop.co.jp/~68user/net/func.html#bind のさいごにかいてある、bind でどちらの IP あどれすをつかうかを えらべる、ということです。 で、LocalAddr => 'localhost' は、この bind のひきすうに IP アドレス (localhost にたいおうする 127.0.0.1) を あたえたのと おなじいみです。 これは LocalAddr をしていするときと しないときで、それぞれ netstat -an をじっこうすると わかりやすいでしょう。 tcp 0 0 127.0.0.1.5000 *.* LISTEN (LocalAddr してい) tcp 0 0 *.5000 *.* LISTEN (LocalAddr していない) と、LocalAddr をつけると、127.0.0.1:5000 しか みていないのが わかります。だからローカルホストからしか せつぞくできなかったわけです。 > 今まではke◯t氏の有名な掲示板や、ゆいチャ◯トの > ソース等を参考にPerlの勉強をしていましたが、 ゆいチャットはしりませんが、kent とか rescue などと くらべられるのは しんがいです :-) まぁ、こっちもそんなにレベルが たかいわけではないので (こんかいの ようなミスもあるし)、これいじょうは えらいひとからの つっこみが こわいので いいません。 ちなみに perl って、しょしんしゃでも なんとか うごかせるから でしょうか、うそだらけのページがおおいですね。ぼくがぜんめんてきに しんらいしているサイトは http://www.context.co.jp/perlnews/ http://www.din.or.jp/~ohzaki/perl.htm の2つだけです。 > あと、標準モジュールの使い方の学習で効果的な > リソースって何でしょうか? perl モジュールガイドとかいうほんが しゅっぱんされていません でしたっけ? しょうさいは わかりませんが。 ただ、もくてきのモジュールがわかっているならば、perldoc を ながしよみして、けっこうなんとかなるかとおもいます。 よみにくいぶんしょうで しつれいしました。LocalAddr の ぶぶんは、じかいこうしんじに さくじょいたします。 @yuji さん カーネルの TCP/IP まわりのこうぞうたいのことですよね? ぼくもしりたいです。だれかおしえて。 |
そうなんですよ。なかなかネットワークの構造体について わかりやすい説明って詳しいないんですよね。 特にFreeBSDの場合は・・・ 誰か知っていたら教えてください。 |
残念ながら、僕は知らないです。僕の持っている UNIX カーネル 関連の書籍にも、TCP/IP は載ってませんでした。 BSD Magazine No.4 に、IP の話が少し載ってますが、 構造体の説明はありません。 というわけで、解説書いて(笑)>yuji さん |
そうですね。つくってみますか! っていってもなかなか・・・ 理解した分だけ作っていくのは いいかもしれません。あとあと 役に立ちますし。 ええ、BSD Magazine No.4 に書いてありましたね。 どのような流れでデータが動いているのかは 理解するのに役に立ったと思います。 |
LocalAddr => 'localhost'を削除したら、外部からのアクセスに反応することを こちらでも確認できました。 #しかし普段からLinux使ってるのにnetstatしなかった私って…ごめんなさい(汗) それから、Perldocというものが自分のマシンに入っていることも実は知りませんでした。 昨日からネット上で検索かけまくって、やっとPerldocの存在を知りました。 さっそくperldoc -m IO::Socketして読んでみます。 68userさん、早急な解答ありがとうございました。 |
はじめてここに書きこみさせていたただきます よろしくお願いします。 今メーリングリストを開設しようと思っています サーバーはLinuxで aliasesファイルに転送先のメンバーリストファイルを指定したのですが 開かず、悩んでいます ----- The following addresses had permanent fatal errors ----- <aki@my-member.com> :include: /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list (expanded from: <aki@my-member.com> ) ----- Transcript of session follows ----- 550 :include: /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list... Cannot open /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list: Group writable directory 554 <aki@my-member.com> ... aliasing/forwarding loop broken -------------------------------------------------------------------------------- のようなメッセージが帰ってきます。 ファイルのパーミッションは644です すでに1週間と一日・・・私くじけそうです・・・ もしわからる方いらっしゃいましたらお願いします。 |
> Group writable directory グループが書き込めるディレクトリ、だから危険なので 実行するのはや〜めた、と言ってます。 |
68userさんありがとうございます パーミッションをいろいろ試したのですが・・・開きません ファイルやディレクトリのパーミッションを もしよろしければ、どうすればファイルを開いてくれるのか教えてください よろしくお願いします・・・ |
すみません、私のミスでした・・・ ディレクトリのひとつのパーミッションがおかしかっただけです う〜んこんなこと気づかないなんて・・・ ありがとうございました〜 |