>>3729 tt newfsしても問題ないと思います。 ただし、実際にswapを使い始めると(書き込みが行われると) ufsとして書き込みに行かないので、結局ファイルシステムは破壊はされます。 よって、newfsする意味がありません。 |
C言語版FTPクライアントを実行させたところ、RETR後、レスポンスが2回続けて ありますが(150、226)、226のレスポンスが異常に遅いです(6分後)。 Solaris8、ProFTP(関係ないとおもいますが。。。)の構成です。 |
HP-UX11.00で、Bシェルなのですが、 awkで表示された内容をある数分出力したら別ファイルに 入れたいのですが、 --------------------------------------- #!/bin/sh # FILE="test.txt" OUTPUT="output.txt" awk -F" " ' BEGIN { count = 0+0 ; } function func() { if (・・・・) { printf("%s\n",$0) ; printf("\n") ; return 0; } else { return 1; } } { if (NF == 0) next ; if (NF == 2 && $1 == "dn:") { ret=func() ; if (ret == 0) count++ ; } if (count == 1000) { count = 0+0 ; } }' ${FILE} > ????? ------------------------------------ 1000件ごとに出力するファイル名を変えたい 「output_nnn.txt」ということはできるでしょうか。 |
>>3731 marlboro ご報告ありがとうございます。 調べてみますが、 - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?) - OS 付属の FTP クライアントでは問題ないのか - (インターネット上に公開されているサーバであれば) 相手のサーバ名 を教えていただけると助かります。 >>3732 すすむ HP-UX11.11 の /bin/awk で、 out="output_nnn.txt"; print "hoge"> out などと出力ファイルを指定できるようです。後は out の内容を 動的に変えていけばよいでしょう。 対象ファイルを切り替えるときは close(out) すればリソースの 無駄が省けてよいかもしれません。 |
>>3733 68user ありがとうございます。 >HP-UX11.11 の /bin/awk で、 > out="output_nnn.txt"; > print "hoge"> out >などと出力ファイルを指定できるようです。後は out の内容を >動的に変えていけばよいでしょう。 >対象ファイルを切り替えるときは close(out) すればリソースの >無駄が省けてよいかもしれません。 確認できる環境が近くにないので確認ができませんが、 以下の様なことなのでしょうか。 ------------------------ #!/bin/sh # FILE="test.txt" OUTPUT="output.txt" awk -F" " ' BEGIN { count = 0+0 ; num = 1; output="output_num.txt" } function func() { if (・・・・) { printf("%s\n",$0) >> output ; printf("\n") >> output ; return 0; } else { return 1; } } { if (NF == 0) next ; if (NF == 2 && $1 == "title:") { ret=func() ; if (ret == 0) count++ ; } if (count == 1000) { count = 0+0 ; num++ ; output="output_num.txt" } }' ${FILE} |
>>3731 marlboro 手元の複数の環境で実験した限りでは再現しませんでした。 >>3733 68user をご参照の上、より詳細なご報告いただければ幸いです。 >>3734 すすむ ご自分で動作確認して、わからなければ再度質問してください。 |
>>3735 68user >ご自分で動作確認して、わからなければ再度質問してください。 失礼しました。 ありがとうございました。 希望通りの動きをしました。 |
>> 「./configure; make new_japan; make install」ってのがすごいですね。 > 何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で > なくて && でつなぐべきだとか、 ごめんなさい、教えてください。 ;ではなく&&でつなぐとどうなるのですか? |
>>3737 kentarou 例として、「cmd1 && cmd2」とした場合は、 cmd1の戻り値が0の場合のみcmd2を実行します。 |
>>3738 zsh そして、make は成功時には 0 を、失敗時には 1 を返します。 # http://x68000.startshop.co.jp/~68user/unix/glossary.html#%CC%E1%A4%EA%C3%CD よって && でつなぐことで、 - configure でこけたら make 以降は行なわない - make でこけたら make install は行なわない という効果があるわけです。 |
Perl&CGIで授業の出席フォームを作成しようとしています。Perlは初心者です。 サーバーは、Windows2000+IIS+ActivePerl5.6.0で、ブラウザはIE6.0です。 クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。 inet_aton、gethostbyaddr、inet_ntoaの各関数を使ってIPアドレスを取得する コードを試しましたが、ブラウザIE6.0のプロキシ設定をしていれば、プロキシ のIPアドレスが取得でき、クライアントのIPアドレスが取得できません。もちろん プロキシの設定を外せば、クライアントのIPアドレスが取れます。プロキシを設定 した状態で、クライアントのIPアドレスを取得できる方法がありましたら、ご教示 ください。 |
>>3740 瓜倉 茂 > クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。 IP アドレスは $ENV{REMOTE_ADDR} で取得できますよね。FQDN (ホスト名) の 取得が目的ですか? それはそれとして、 > プロキシを設定した状態で、クライアントのIPアドレスを取得できる方法が > ありましたら、ご教示ください。 については >>3450 68user の「理屈的には、100% の精度の proxy 判定は不可能です」のくだりを 読んでください。 100% は無理と書きましたが、学内限定でなおかつあなたが管理者の立場なの であれば、必ず HTTP_X_FORWARDED_FOR を設定させるように proxy サーバの 設定変更するなどの手はあります。 ただ、根本的に信頼性がないので「web で出席を取る」という仕組みが妥当か どうかは微妙な気がします。 |
>>3733 68user 遅くなりました。すでに確認していただいているのですが。 >調べてみますが、 > - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?) > - OS 付属の FTP クライアントでは問題ないのか > - (インターネット上に公開されているサーバであれば) 相手のサーバ名 >を教えていただけると助かります。 あて先は、同じネットワーク内に存在するサーバです。同じくSolaris8です。 UNIXのftpコマンド、Windowsのツール(FFFTP)では問題なく動作します。 #ftpコマンドでPASVで送受信する方法を知らないんですね。。。 サーバ側の問題とも考えにくいです。 |
コマンドを&&でつなぐ件、勉強になりました。 ありがとうございます。 |
68user様 早速のご回答ありがとうございます。Perlの使い方で問題が解決するのかと 思ってましたが、ネットワーク経由だと他のところも絡んでくるのですね。 Webにこだわらないで、出席を取る問題を再考してみます。 |
marlboro様 先ほどのNo.3744の内容は、No. 3742のmarlboro様へのお礼でした。 あて先を間違い失礼しました。改めてmarlboro様の回答にお礼申し 上げます。 |
>>3742 marlboro ProFTPD を相手にすると再現することがわかりました (一番 最初に試すべきことでしたね)。 % time ./ftp-client -d anonymous foo@example.com ftp.proftpd.org /MIRMON.PROBE <-- 220 ProFTPD 1.2.10rc2 Server (proftpd.org Project) [81.223.20.36] --> USER anonymous <-- 331 Anonymous login ok, send your complete email address as your password. --> PASS foo@example.com <-- 230 Anonymous access granted, restrictions apply. --> PORT aaa,bbb,ccc,ddd,16,36 <-- 200 PORT command successful --> RETR /MIRMON.PROBE 1085749801 <-- 150 Opening ASCII mode data connection for /MIRMON.PROBE (11 bytes) (ここで6分待たされる) <-- 226 Transfer complete. --> QUIT <-- 221 Goodbye. 0.000u 0.005s 6:03.75 0.0% 0+0k 0+0io 0pf+0w 対策ですが、 http://x68000.startshop.co.jp/~68user/net/c-ftp-1.html の while (1){ int read_size; read_size = read(data_socket, buf, BUF_LEN); ... } の後に close(data_socket); を入れることで直るようです。 データコネクションはサーバ側から切ってくれると認識して いたのですが、間違いなのかもしれません。調査します。 ご指摘いただきありがとうございました。 > #ftpコマンドでPASVで送受信する方法を知らないんですね。。。 Solaris8 の ftp はカスなので、passive モードにできない と認識しています。GNU モノや BSD モノなら、passive でできます。 |
はじめまして。 ミラーリングの質問をさせていただきたいの ですが、solaris8 10/01で 内蔵ディスクをRAID1は一般的でしょうが、 RAID1+0(ミラー+ストライピング)を構成 するのはアリなのでしょうか? そもそもできるのでしょうか?? 危険・・・? ソフトはVeritasCSです。 VxVM VxFSも購入予定 標準内蔵DISKは73GBが6個で、 現状下記で振り分けようとしています。 disk1スライス: /(usr opt含む) , swap disk2スライス: /export/home , /work disk3,4でRAID1ミラーを予定だが、 RAID0+1が実は実現できそう・・・ |
LAN内だけで有効なドメイン名(hogehoge.example等)を使いたいのですが、 そういったことは可能でしょうか? 具体的にはLAN内のWEBサーバに名前でアクセスしたり、 LAN内のメールアドレスを作りたいのです。 なんだか、漠然とした質問で申し訳ありません。 このようなことができるのであれば、解説しているサイトや、 検索に有効なキーワードでも教えていただけると幸いです。 サーバ構成は以下のようになっています。 ・OS RedHat Linux8 ・MTA sendmail 8 ・DNS bind 9 ・MUA OutLook Express 6(Windows2000, XP Pro) WEBサーバにはローカルIPアドレスでアクセスし、 メールはWEBアプリからpostmaster@host.localdomainのように送信して、 POPはOutlook Expressで受信しています。 |
>>3748 hash > WEBサーバにはローカルIPアドレスでアクセスし、 > メールはWEBアプリからpostmaster@host.localdomainのように送信して、 > POPはOutlook Expressで受信しています。 度々すいません。 なんだか、意味のわからない文章になっていました。 現在は引用部分のように利用しているということです。 いろいろと面倒なので、何とかしたいと思って色々調べているのですが、 今のところ手がかりも見つからず質問させていただいた次第です。 |
>>3746 68user 興味があったので調べてみました。 現状のftp-client.cはデータコネクションでのデータ転送終了時にソケットのcloseを行っていないため、 サーバー側からのFIN-ACKパケットに対してFIN-ACKを送り返しません。 このため、データコネクションの切断について、クライアントからのFIN-ACKパケットを待つProFTPDと、 FIN-ACKパケットを特に待たない他のFTPDとの実装の差が、今回の問題であるプログラムの動作の差になっている ようです。 >データコネクションはサーバ側から切ってくれると認識していたのですが、間違いなのかもしれません。 データコネクションの切断はサーバー側から行います。原理的に考えても、ファイルやファイルリストのサイズを 送信前に調べることはできませんので、これは間違いありません。 「サーバー側から切断」とはつまりサーバー側からFIN-ACKパケットが送信されるということです。 この際にreadが0を返すので、プログラムはwhileループを抜けます。 ここにclose(data_socket);を追加するとFIN-ACKを返信するようになり、ProFTPDはデータコネクションの切断が 正常に行われたと考え、処理が進みます。 つまり、close(data_socket);を追加することは「切断をクライアント側から行う」ことにはなりません。 以上、まとまりがなく申し訳ありませんが、参考になれば幸いです。 |
初めて投稿します。 現在、sendmail 8.12.9 でSTARTTSLコマンドを有効にしてSSL接続を行っています。 デフォルトでは、SSLプロトコルバージョンは3.1です。これを、SSLプロトコル バージョン3.0にする必要があるため、プロトコルバージョンが3.1の実行ファイル と、3.0の実行ファイルを両方作成し、必要に応じて、実行ファイルを置き換えて、 sendmail を起動しなおして、sendmail に接続しています。 プロトコルバージョン3.0のものをコンパイルし、インストールした直後では、 正常にSSLプロトコルバージョンは3.0で通信できました。しかし、一旦、 SSLプロトコルバージョン3.1の実行ファイルに置き換えて起動し、数時間後に、 再度プロトコルバージョン3.0の実行ファイルで起動したところ、プロトコルバー ジョン3.0では通信できないというおかしな状況になってしまいました。 プロトコルバージョン3.0で、通信できずにエラーとなった時の、 /var/log/syslog に出力された、sendmail のエラーメッセージは以下の とおりです。 Jun 4 13:52:27 xxxx sm-mta[7195]: STARTTLS=server: 7195:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:290: プロトコルバージョン3.0にする方法は、SSL_CTX_new() の引数に、 サーバの時はSSLv3_server_method()、クライアントの時は、SSLv3_client_method()を指定するという方法で行っています。 SSLライブラリは、OpenSSL 0.9.6c[engine] を使用しています。 どなたか、原因や対応方法などわかる人がいたら、ご教示していただきたいと 思います。 よろしくお願いします。 |
お世話になります。 solaris9のx86版で、syslogの設定について質問なのです。 inetdから起動されるデーモンで、 クライアントのIP等の情報を/var/adm/messagesに出力させるには、 /etc/init.d/inetsvc内の最後を、「/usr/sbin/inetd -s -t」として、 マシンを再起動すれば良いらしいのですが、そのようにしてからtelnetで試したところ、 どうしてもログに出力されません。 /etc/syslog.confの設定はデフォルトのままで、 「*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages」 の設定はコメントアウト等されていません。 他に何か設定すべき場所等ありますでしょうか? 宜しくお願い致します。 |
>>3752 bon /etc/default/inetdに ENABLE_CONNECTION_LOGGING=YES の指定が必要です。 |
>>3748 hash >WEBサーバにはローカルIPアドレスでアクセスし、 >メールはWEBアプリからpostmaster@host.localdomainのように送信して、 >POPはOutlook Expressで受信しています。 これが今の運用だとすると、 postmaster@host.localdomain と指定している時点でローカルのドメインを使えているように見えますが・・・ クライアントからホスト名でアクセスするだけだったら hostsファイルに指定してやれば良い気がします。 |
>> 3753 zsh様 やっと動きました! ありがとうございました。 |
>>3746 68user ありがとうございました。 動作確認できました。やはり6分待たされるんですよね。 >ProFTPD を相手にすると再現することがわかりました (一番 >最初に試すべきことでしたね)。 最初にお伝えするべきでした。 |
>>3747 kouzu > RAID1+0(ミラー+ストライピング)を構成するのは > アリなのでしょうか? わかりません。RAID1 しかやったことがないです。 システム領域は RAID1 しか対応していないミドルウェアも あるようですのでね。どう考えてもお仕事なようですから、 素人のアドバイスなど聞かず、まずは Veritas 社に問い 合わせることをお勧めします。 >>3750 金床 なるほど、勉強になります。サーバプログラムの書き方の違いとしては、 クライアントの FIN-ACK を待たない ⇒ close か、shutdown(fd, SHUT_RDWR) クライアントの FIN-ACK を待つ ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ てな感じなんでしょうかねぇ。 >>3751 TSURU 単に 3.0 サーバに 3.1 プロトコルでお話しているということは ないですよね? tcpdump や ethereal などでプロトコルバージョンを 確認しても間違いはありませんか? SMTP over TLS は使ったことがないため、たいしたことは言えなくて 申し訳ないです。 |
>>3751 TSURU こんばんは。 V3.0で通信できない、という件ですが、設定方法を変えたら、正常にV3.0で通信 できるようになりました。 具体的には、sendmail.cfにて、CipherList を設定する方法で、できるように なりました。 お騒がせしました。 68userさん、レスをいただきありがとうございます。 ありがとうございました。 |
>>3758 TSURU V3.0 と V3.1 で sendmail.cf を共用にしていたため、 V3.1 でしか使用できない Cipher を V3.0 で使おうとして エラーになっていた、ということでしょうか? |
>>3759 68user いや、それはないと思います。 sendmail.cfファイルも、V3.0用とV3.1用で別々に作成して、置き換えて使っています。 僕も、それほどSSLについて詳しいわけではありませんが、 SSLプロトコルバージョンと暗号化アルゴリズム(Cipher)は、直接は関連性はないように 思います。 おそらく、この認識で合っているとは思いますが。 |
>>3760 TSURU SSL3.0 と TLS1.0 (≒SSL3.1) の仕様上は、使用できる暗号 スイートに違いがあります。たとえば SSL3.0 では FORTEZZA が使用できましたが、TLS1.0 では削除されました。また、AES 関連の暗号スイートについては、TLS のみに追加されました。 今後も新規暗号スイートは TLS のみに追加されていくでしょう。 http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt http://www21.ocn.ne.jp/~k-west/SSLandTLS/draft302-Ja.txt http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc3268-Ja.txt # ただし実装においては SSL3.0 と TLS1.0 はコードを共有して # いるでしょうから、もしかしたら SSL3.0 で AES が使用できる # ような実装もあるのかもしれません。 よって、暗号スイートの違いから接続がうまくいかなかったのでは ないかと考えた次第です。 後学のために教えていただきたいのですが、 >>3758 TSURU > sendmail.cfにて、CipherList を設定する方法 何と書くとうまくいかなくて、何と書くとうまくいったのか お教えいただけますか? |
>>3761 68user 1.通信できなかった場合 sendmail.cfで、CipherList は特に設定していない。 また、SSL_CTX_new() の引数にSSLv3_server_method()、 又は、SSLv3_client_method()を指定する。 この方法だと、通信できなくなった。 2.通信できた場合 sendmail.cfで、CipherList に、DEFAULT:+SSLV3 を指定する。 また、SSL_CTX_new() の引数にSSLv23_server_method()、 又は、SSLv23_client_method()を指定する。 (つまり、sendmail のソースコードをいじらないままの状態です。) この方法で、正常に通信できるようになりました。 |
どなたかご教授下さい。 すでに動いているSolaris8の機器に新規Diskを追加し、Formatコマンドでパーティション切って、 labelしたあとにリブートする必要はありますか? リブートしないと反映しないのですかね? リブートは必要ないと思っていますが。。 |
>>3762 TSURU ありがとうございます。暇を見つけて試してみたいと思います。 >>3763 aits リブートして /etc/vfstab の内容が正しいことを検証しておく 方がよいと思われますが、リブートが必須かどうかと問われれば、 必須ではありません。リブートせずに、そのまま mount できます。 |
>>3757 68user >サーバプログラムの書き方の違いとしては、 > クライアントの FIN-ACK を待たない > ⇒ close か、shutdown(fd, SHUT_RDWR) > クライアントの FIN-ACK を待つ > ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ > てな感じなんでしょうかねぇ。 ProFTPDのソースを見てみました。ご指摘の通り、 shutdown(fd, SHUT_WR) になっていました。 #実際にはSHUT_WRはハードコーディングされて1になっていましたが shutdown後にreadしているかどうかまでは追えていません。 時間があるときにコードを書いてshutdownの動作を確かめてみたいと思ってます。 ちなみにProFTPDのこの部分を shutdown(fd, SHUT_RDWR) に変えてみたところ、closeを追加しないftp-client.cでも処理が止まらずに進むことを確認できました。 |
unix上でzip圧縮した際にパスワードを設定したいのですが、 どなたかご存知な方いらっしゃいいますか? windowsだと基本的にzip圧縮の際にパスワードを設定できるように なっているのですが・・・。 一応manコマンドで調べると-eという暗号化のオプションが存在する ようなのですが出来ません。 環境はsolarisです。よろしくお願いします。 |
>>3754 zsh > クライアントからホスト名でアクセスするだけだったら > hostsファイルに指定してやれば良い気がします。 お返事ありがとうございます。 全クライアント(Win2000)のhostsファイルを変更するのは 大変(そんなに数はないのですが)なのでDNSにローカルのbindを指定して使っています。 ということは、bindのゾーン設定が悪いんですね。 とりあえず切り分けができたのでもう少し試行錯誤してみます。 報告できるようなことがあれば、また報告させていただきたいと思います。 ありがとうございました。 |
>>3766 初心者 $zip -e out.zip target.o Enter password: Verify password: adding: target.o (stored 80%) で出来ました。 RedHatですが、同じだと思います。 |
>>3766 初心者 > unix上でzip圧縮した際にパスワードを設定したいのですが、 Solaris 標準の zip は、おそらく暗号化ライブラリなしで コンパイルされていると思うんですよね。たぶん。 FreeBSD の ports http://www.jp.freebsd.org/cgi/cvsweb.cgi/ports/archivers/zip/Makefile?rev=1.29 を参考に、zcrypt29-exportable.zip を持ってきたり、 -DUSE_CRYPT を指定したりして自分でソースからコンパイル すれば大丈夫でしょう。 もしかしたら SunSite http://sunsite.tus.ac.jp/sun/solbin/ のバイナリパッケージが暗号化機能付きでコンパイルされて いるかもしれません (試していません)。 |
>>3769 68user Solaris標準・SunSiteのバイナリパッケージ共に暗号機能なしのようです。 |
Servlet を C の exe からソケットを使って起動させようとしているのですが うまく起動しません。 どなたかわかる方はいませんか? |
>>3771 den 情報不足です。 http://www.hyuki.com/writing/techask.html を読んでください。 |
日記。 今日は http://www.amazon.co.jp/exec/obidos/ASIN/475614389X/qid%3D1087134585/249-1275008-5298706 プログラミングテクニック - UNIXコマンドのソースコードにみる実践プログラミング手法 (UNIX MAGAZINE COLLECTION) を買いました。UNIX MAGAZINE に連載されていた記事をそのまま まとめただけですが、これでたまっていた UNIX MAGAZINE を捨て られるので、部屋が狭い人にはお勧めです。 ただ、この人の書く文章にはおもしろみのかけらもなく、全く読む 気にならないのが残念なところ。プログラミングって こんなに つまらないものだったかなぁ、と思えることうけあいです。 |
日記 2。 久々に whois.cgi なぞを触っていたら、FreeBSD 5.2.1-RELEASE の /usr/bin/whois は、いちいち NIC (Network Information Center) を 指定しなくても、 % whois u-tokyo.ac.jp で情報を参照できる。昔は % whois -h whois.nic.ad.jp u-tokyo.ac.jp としなくてはならなかったはずなのに何故? と思ってソースを読んだ 結果、 xxx.whois-servers.net (例えば TLD が jp だったら jp.whois-servers.net)。 の CNAME を引っ張ると、whois.nic.ad.jp が返ってくるので、 そこに再接続すればよいらしい。 あるいは % whois -h jp.whois-servers.net u-tokyo.ac.jp とすると whois-servers.net が proxy となって whois.nic.ad.jp から勝手に情報を取得してくれるようだ。 whois-servers.net に対応したのは、FreeBSD 4.0-RELEASE・ FreeBSD 3.4-RELEASE から。 http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/whois/whois.c |
dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか? 教えてください。 |
Solaris(UNIX)でフォルダの削除が行えません。 rmdir フォルダ名のコマンドでは「ディレクトリが存在しません。」 のメッセージがでます。CPコマンドで同じフォルダを同じ場所にコピーすると 同じ名前のファルダが2つできてしまいます。 このフォルダの消し方をどなたか教えていただけないでしょうか。 |
>>3776 yoko こんばんは。 rm -r <ディレクトリ名> で削除できませんか? |
ソースを載せます。 //*************************************************************** // From the book "Win32 System Services: The Heart of Windows 95 // and Windows NT" // by Marshall Brain // Published by Prentice Hall // // Copyright 1995, by Prentice Hall. // // This code implements a TCP sender. //*************************************************************** // ssipsend.cpp #include <windows.h> #include <iostream.h> #include <winsock.h> #define NO_FLAGS_SET 0 #define PORT (u_short) 8080 #define DEST_IP_ADDR "127.0.0.1" #define MAXBUFLEN 256 INT main(VOID) { WSADATA Data; SOCKADDR_IN destSockAddr; SOCKET destSocket; unsigned long destAddr; int status; int numsnt; char toSendtxt[3][256]; int numrcv; char buffer[MAXBUFLEN]; strcpy( toSendtxt[0], "GET http://localhost:8080/example00/HitTime?userid=1207&date=20004/06/11%2008:30:00 HTTP/1.1\r\n" ); strcpy( toSendtxt[1], "Host: localhost:8080\r\n" ); strcpy( toSendtxt[2], "\r\n" ); /* initialize the Windows Socket DLL */ status=WSAStartup(MAKEWORD(1, 1), &Data); if (status != 0) cerr << "ERROR: WSAStartup unsuccessful" << endl; /* convert IP address into in_addr form */ destAddr=inet_addr(DEST_IP_ADDR); /* copy destAddr into sockaddr_in structure */ memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr)); /* specify the port portion of the address */ destSockAddr.sin_port=htons(PORT); /* specify the address family as Internet */ destSockAddr.sin_family=AF_INET; /* create a socket */ destSocket=socket(AF_INET, SOCK_STREAM, 0); if (destSocket == INVALID_SOCKET) { cerr << "ERROR: socket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << "Trying to connect to IP Address: " << DEST_IP_ADDR << endl; /* connect to the server */ status=connect(destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr)); if (status == SOCKET_ERROR) { cerr << "ERROR: connect unsuccessful" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << "Connected..." << endl; int idx = 0; while(1) { Sleep(1000); cout << "Sending..." << endl; numsnt=send(destSocket, toSendtxt[idx], strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET); if (numsnt != (int)strlen(toSendtxt[idx]) + 1) { cout << "Connection terminated" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } idx++; if(idx>2){ break; } /* Wait before sending the message again */ //Sleep(4800); } /* while */ return 0; } それほど難しいことはしていないはずなのですが... よろしくお願いします。 |
>> 3771 Servletって、JavaのServletのことですよね? なぜ、わざわざCのプログラムからServletを起動する必要があるのですか? そこが分かりません。 |
>>3776 yoko ディレクトリを作成した時にディレクトリ名にスペースとか コントロールコード(^hとか)が入ってしまったってことはないですか? とりあえず そのディレクトリ上位の階層でls -l > hoge.lst としてvi hoge.lst を表示もしくはod -x hoge.lstあたりで 確認されてみてはいかがでしょうか? 外してしたらスミマセン |
>> 3779 TSURU なぜ、わざわざといわれるとどう答えていいのかわからないのですが。 サーブレットは、起動されるとデータベースに時刻を登録するようにできています。 それでタイムカードのように出社時間と退社時間を記録してゆこうとしているのです。 そのときにわざわざブラウザを立ち上げてフォームのボタンを押してサーブレットを 起動するのは面倒らしいので、スタートアップにEXEをと登録して、 パソコンが起動するとサーブレットを呼び出すようにしようとしています。 という回答でよいでしょうか。 よろしくお願いします。 |
>> 3779 TSURU ちなみになぜ、Cでやろうとしているかというと、Java だと各パソコンに JREをインストールしてやらなければならないかなと思っているので それが面倒なのでCを使おうとしています。 |
>>3775 kiyo > dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか? FreeBSD の date は 1900 年まででした。他の OS でも、time_t の仕組みに のっけているなら、同じでしょうね。てゆーか OS 名くらい書きましょうね。 >>3776 yoko > Solaris(UNIX)でフォルダの削除が行えません。 ファイルの特定方法もいろいろあるので参考にしてください。 http://www.jp.freebsd.org/QandA/HTML/1671.html >>3778 den > ソースを載せます。 どこでどういうふうにエラーになるんですか? 「うまく起動しません」 とはどういう意味ですか? OS は? ブラウザで該当 URL を見ると正しく 記録されるのですか? …などという点が情報不足なのですよ。期待した結果と実際の結果を書けと http://www.hyuki.com/writing/techask.html にもあったはずです。 ソースをざっと見た感じでは怪しげなところはないように見えますが、 わたしの手元に Windows 開発環境がなくコンパイルできないので、 どなたかコンパイルして検証できる環境をお持ちの方がいらっしゃい ましたらよろしくお願いします。 >>3779 TSURU > なぜ、わざわざCのプログラムからServletを起動する必要があるのですか? C で HTTP クライアントを作るって話なので、別に変ではないです。 |
OS は、クライアント、サーバともに Windows 2000 Professtional 又は Windows XP Professtional です。 Tomcat は、Tomcat/4.1.27 です。 サーブレットに動作したことがわかるようにコンソールへの出力が組み込んであるので 起動したことは、コンソールを見るとわかるようになっています。 ブラウザでサーブレットの URL をたたいた場合は、ちゃんとコンソールへの 出力がでて、起動していることがわかります。 |
>> 3783 HTTP は、ここで改行しないとダメだとかこういう順番でテキストを 送らないとダメだとかどういうルールがあるのでしょうか? |
>> 3783 改行を入れるようにしたらレスポンスは返すようになってのですが、 やはりサーブレットは起動しません。 OS は、サーバ、クライアントともに Windows 2000 Professtional か Windows XP Professtional です。 Tomcat は、Apache Tomcat/4.1.27 です。 起動するというのは、コンソールに文字が出力されるということです。 ブラウザで同じことをした場合は、ちゃんと起動します。 |
>> 3783 レスポンスは、 HTTP/1.1 505 HTTP Version Not Supported Content-Type: text/plain Date: Tue, 15 Jun 2004 06:24:28 GMT Server: Apache Coyote/1.0 Connection: close ・・・・・・ です。 |
>> 3783 リクエストの2行目の strcpy( toSendtxt[1], "Host: localhost:8080" ); を削除したらうまく行きました。 どうもありがとうございました。 |
>>3786 den > 改行を入れるようにしたらレスポンスは返すようになってのですが、 全くついていけません。具体的にどこをどういうふうに修正したんですか? ふと思いましたが、 >>3778 den > numsnt=send(destSocket, toSendtxt[idx], > strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET); この +1 は不要では? |
はじめまして。まだ初めて1ヶ月の初心者です。 すいませんがどうしてもエラーメッセージの意味がわからないので、教えていただかないでしょうか? OSはSolarisの5.8です。 -------------------------------------------------------------------------------- ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS 6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます 。それ以外は無視されます ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 -------------------------------------------------------------------------------- というものでした。特にldというものがいまいち理解できないのですが、ぜひとも教えてただければと思います。よろしくお願いします。 |
>> 3786 HTTP 1.0 以降では、ヘッダと本文を空行で分けているらしく、その空行が ないためにレスポンスがないことがわかりました。 その後、HTTP Version Not Supported というレスポンスが返されるだけ だったのですが、リクエストを "POST <<URL>> HTTP1.1" と空行だけに したところちゃんとしたレスポンスを返すようになりました。 |
>>3783 68user >C で HTTP クライアントを作るって話なので、別に変ではないです。 いえ、僕は、サーバ上にある、Servletのプロセスを起動する処理を Cのプログラムの中で実装する話だと思ってしまったので、 おかしいと思ったんですよ。 |
denさんへ 根本的な話をしていいですか? >>3781 den の発言を読むかぎりでは、denさんのやりたいことは、 出社時間と退社時間を記録したいということですよね。 それだけのために、なぜサーブレットが必要になるんですか? そこが分からないんですよ。 出社時間と退社時間を記録するだけだったら、別にサーブレット を使わなくても、方法はいくらでもありますよね。 どうしてもサーブレットじゃないとだめなんですか? でも、もうできたんですよね。 だったら、無理に他の方法でやれとは言いませんが、 ただ気になったので、書いてみました。 |
denさんへ >>3793 TSURU の書き込みは、べつにあげあしとりとか、意地悪をするために書いたのではありません。 あくまで、単に疑問に思ったことを書いただけですので、くれぐれも誤解なきよう お願いします。 |
>> 3793 話がややこしくなりそうなのであまり追求しようとは思わないのですが、 サーブレット以外にもやり方はあると思います。 ただインターネットエクスプローラから時間の記録ができたら便利かなと思って そのようにしました。 でも仮で運用しているとそれでは使いづらいといわれてしまったので、 既存のサーブレットを利用して、C で起動する処理を作って済まそうと 思ったわけです。 サーブレットは、HTTPのリクエストをサーブレットコンテナが受信すれば 起動されるのでサーブレットを起動するには、HTTPクライアントとして リクエストを送るだけでいいのです。 どうもありがとうございました。 |
>>3795 den なるほど。 細かい事情は分かりませんが、サーブレットを起動することで 済ませたかった訳ですね。 ゼロから実装するより、既存のもので済ませた方がずっど楽ですからね。 分かりました。 |
>>3776 yoko 返事遅くなりました。No.3776 yokoです。 No. 3783 # 68user No. 3780 # とーりすがり No. 3777 # TSURU さん、レスありがとう。 ls -l > hoge.lst で調べるとtest^Mといった(^M)がついていました。 原因は分かりましたが、まだ格闘中です。 rm -r test^M rm -r 'test^M' rmdir 'test^M' でも消えないんですよね。 rm-r |
>>3776 yoko 3776で投稿した yokoです。 rm -r test^Mで消えませんでしたがrm -r test*で消す事ができました。 皆さん、 ありがとうございました。 |
RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。 それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか? 循環する頻度と公開鍵があれば秘密鍵も分かってしまうのでは・・? |
>>3790 どら まず、以下の質問に答えてください。 - gcc をインストールしていますか? - Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?) - which cc と which ld の結果は? - echo $PATH の結果は? - 「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc) - 実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は? >>3797 yoko > ls -l > hoge.lst で調べるとtest^Mといった(^M)が > ついていました。 ^M はエスケープシーケンス \r (0x0d) です。シェルから 入力する場合は sh なら % rm test(Ctrl-v Ctrl-m) tcsh なら % rm test(Ctrl-v Ctrl-j) とします。csh はどっちだか知りません。 ところでなぜ tcsh は Ctrl-j が ^M で、Ctrl-m が ^J なんでしょうね? >>3799 kou > RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。 > それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか? えーと、そういうことはないんですが、何と説明すればよいか わかりません。 秘密鍵: e, n 公開鍵: d, n 暗号化: (平文^e)%n 復号化: (暗号文^d)%n として、今、平文と e が不明だとします。何をどうすると、 何がどういうふうに循環すると考えておられますか? なお、(平文^e)%n という操作は単射です。つまり異なる平文が 同じ値になることはありません。 もし数学的に厳密な証明を期待しておられるなら、わたしには その能力がないので、 http://www.faireal.net/ での質問をお勧めします。 |
>>3800 68user 68userさん、レスありがとうございます。 質問に答えさせていただきます。 (1)gcc をインストールしていますか? gccというもの自体はわかりませんが、fccとccはインストールしてあるみたいです。(すいません、学校のものなので・・・) (2)Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?) /opt/SUNWspro/bin/ccはディレクトリの中にありました。 (3)which cc と which ld の結果は? which cc:/usr/ucb/cc which ld:/usr/ucb/ld という結果でした。 (4)echo $PATH の結果は? /bin /usr/bin /usr/ucb /etc /opt/SUNWspro/bin /opt/FSUNf90/bin /disk2/user/md/gnuplot という結果でした。 (5)「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc) いままでの練習ではccでコンパイルしていました。これからもccでコンパイルするつもりです。 (6)実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は? 上にも書きましたが、いままではccのコンパイラでコンパイルしていたので、ccのコンパイラだと思います。 さきほどgccについて調べた所、GNUが関連しているみたいでした。これから先にGNUplotを使用してグラフも書きたいと思っているのですが、 それについても何かアドバイスをいただければありがたいと思います。よろしくお願いします。 |
>>3801 どら あらそうですか。予想と外れていたのでもうひとつ追加で質問。 >>3790 どら > ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:... ここだけでなく、コンパイルしてからコンパイルが終わるまで全ての 部分を見せてください。Makefile を使っているにせよ、自分でタイプ したにせよ、とにかく全部見せてください。 > これから先にGNUplotを使用してグラフも書きたいと思っているのですが、 紛らわしいですが、gnuplot は GNU とは関係ありません。 GNU というのは、フリーなソフトウェアが大好きな FSF という団体が提唱するソフトウェアのライセンス方式の ことを指します。gcc も GNU ライセンスで配布されています。 しかし gnuplot はそうではありません。 あと、gcc と gnuplot は関係ないです。gcc はコンパイラ。 gnuplot はグラフ描画ソフト。 |
はじめまして、こんにちは。いきなりで非常に申し訳ないのですが、socketのインクルードファイルはどこでダウンロードしたらいいのでしょうか?もしくは、どのOSになら入っているのでしょうか? |
>>3803 鼈 わたしの知る限りでは、UNIX 系であれば標準で入っています。 Windows 系であれば、VC++ や C++ Builder などのコンパイラに 添付されているのかな? |
UNIXの<sys/socket.h>の様なファイルは windowsでどこにあるのですか windowsで<sys/socket.h>をインクルードしてもファイルが開けない というようなメッセージがでてしまいます。 |
> 秘密鍵: e, n > 公開鍵: d, n > 暗号化: (平文^e)%n > 復号化: (暗号文^d)%n > >として、今、平文と e が不明だとします。何をどうすると、 >何がどういうふうに循環すると考えておられますか? nを生成するのがp,qで、それらの最小公倍数がe,dだという私の認識自体が間違っていたのでしょうか^^; 一定の頻度で循環しているから、それ以内の適当な数eでべき乗しても補完関係にあるd(最小公倍数-e)で復号化できる。 平文に「1,2,3・・」といった具合に数を代入していけば循環周期が分かるのでは?と思ったのです |
>>3805 蒲鉾 > UNIXの<sys/socket.h>の様なファイルはwindowsでどこにあるのですか winsock.h ですが、Windows の場合は他にもいろいろと書き方が 異なります。「winsock」で検索して、よさそうなサンプルを 探してください。 もっとも信頼できると思われるサンプルは http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/ でしょうが、ライブラリ化してあるのでわたしは初心者には わかりやすいとは思いませんが、もし理解できるならこれを 参考にするのがよいでしょう。 >>3806 kou > nを生成するのがp,qで、それらの最小公倍数がe,d 誤りと思われます。 http://x68000.startshop.co.jp/~68user/net/crypt-2.html の「RSA の本当のところ」を読んでください。 もう少し正確に、かつ数学的に書くと、 p,q: 素数 n: n=pq e: 1<e<(p-1)(q-1) かつ gcd(e, (p-1)(q-1))=1 を満たす自然数 d: 1<d<(p-1)(q-1) かつ de≡1 (mod (p-1)(q-1)) を満たす自然数 として求めます。 # gcd(e, (p-1)(q-1))=1 は、e と (p-1)(q-1) が共通の約数を持たないということ。 # de≡1 (mod (p-1)(q-1)) は、d*e を (p-1)(q-1) で割った余りが 1 であるということ。 |
>>68user 何度もありがとうございます。 “ex3-2.c”というファイルを“keisan3-2”としてコンパイルした結果を載せさせていただきます。 -------------------------------------------------------------------------------- tds1% cc -o keisan3-2 ex3-2.c ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS 6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます 。それ以外は無視されます "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 --------------------------------------------------------------------------------- 以前実行した時はうまくいったのですが、いつの間にかできなくなりました。 あと、上の文章の中で“16行目:〜ありません”という警告文もどのプログラムにも発生するみたいです。(この警告も以前はありませんでしたし、ファイルの中身はかえてないはずです。) 一応、簡単な文章でもうしわけないのですが、プログラムも載せさせていただきます。(教科書のコピーです…) --------------------------------------------------------------------------------- /* 【例題3.2】 rei3_2 */ #include <stdio.h> main() { int a,b; printf("異なる2つの整数を入力してください--->"); scanf("%d %d",&a,&b); if(a > b) printf("%d --- BIG\n",a); else printf("%d --- BIG\n",b); return(0); } ----------------------------------------------------------------------------------- よろしくお願いします。 |
>>3808 どら たびたびすみませんが、 % sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.c の結果 (全文) を教えてください。 あと、env の結果も教えてください。ホスト名やログイン名などを 公開するのが嫌なら、適当に削ってから提示してください。 これ以上引っ張ると怒られそうなので、一部回答しておきますが、 > ucbcc: 警告: ld が起動される場合は、... 無視されます > ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 これは警告なので、実行には支障がないはずです。keisan3-2 が 生成されていませんか? > "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません これは文字通り、ファイルの最終行が改行コードが付いて いないのでしょう。ファイルの最終行の末尾で改行してください。 ファイル末尾に改行がないとその行を読んでくれないプログラムも あるので、改行をつける癖をつけておくことをお勧めします。 |
>>3809 68user 何度もありがとうございます。このミスが見つからないと先に進みづらいので、教えていただけるのなら、どれだけ質問されても怒ったりしません。むしろどれだけでも聞いてください。お願いします。 % sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.cの結果を下に書きます。 ------------------------------------------------------------------------------ + [ -f /usr/ccs/bin/ucbcc ] + [ 4 -eq 0 ] UCB_LIB_DIR=/usr/ucblib CCS_LIB_DIR=/usr/ccs/lib USR_LIB=/usr/lib TYPE= dopt= cgdir= + [ x = x ] LD_RUN_PATH=/usr/ucblib + export LD_RUN_PATH + [ = -Bstatic ] LIBS=-lucb -lsocket -lnsl -lelf -laio + + awk/usr/bin/ls -ln /usr/ccs/bin/ucbcc{print $11} cclink=/opt/SUNWspro/WS6U2/bin/acc + /usr/bin/dirname /opt/SUNWspro/WS6U2/bin/acc ccdir=/opt/SUNWspro/WS6U2/bin + [ != ] nccdir=/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin LD_LIBRARY_PATH=/usr/ucblib:/usr/ccs/lib:/usr/lib + export LD_LIBRARY_PATH + /usr/ccs/bin/ucbcc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SU NWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude -lucb -lsocket -lnsl -lelf -laio ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS 6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます 。それ以外は無視されます ### コマンド行ファイルおよびオプション (展開済み): ### -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude -lucb -lsocket -lnsl -lelf -laio ### ucbcc: 注釈: LM_LICENSE_FILE = (null) ### ucbcc: 注釈: NLSPATH = /opt/SUNWspro/WS6U2/bin/../lib/locale/%L/LC_MESSAGES/ %N.cat:/opt/SUNWspro/WS6U2/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat /usr/ccs/lib/cpp -undef -D__SunOS_5_8 -D__SUNPRO_C=0x510 -Dunix -D__unix -Dsun - D__sun -D__BUILTIN_VA_ARG_INCR -D__SVR4 -Dsparc -D__sparc -I/usr/ucbinclude ex3- 2.c >/tmp/cpp.20856.0.i /opt/SUNWspro/WS6U2/bin/acomp -Qy -y-o -yex3-2.o -I/usr/ucbinclude -g "/opt/SUNW spro/WS6U2/bin/acc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNW spro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -I/usr/ucbinclude -c" -b -y-fbe -y/opt/ SUNWspro/WS6U2/bin/fbe -y-xarch=generic -y-xmemalign=4s -y-verbose -Xs -D__SunOS _5_8 -D__SUNPRO_C=0x510 -Dunix -Dsun -Dsparc -D__unix -D__sun -D__sparc -D__BUIL TIN_VA_ARG_INCR -D__SVR4 -y-s -I/opt/SUNWspro/WS6U2/include/cc -i /tmp/cpp.20856 .0.i "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません rm /tmp/cpp.20856.0.i ### ucbcc: 注釈: LD_LIBRARY_PATH = /usr/ucblib:/usr/ccs/lib:/usr/lib ### ucbcc: 注釈: LD_RUN_PATH = /usr/ucblib ### ucbcc: 注釈: LD_OPTIONS = (null) /usr/ccs/bin/ld -o keisan3-2 /opt/SUNWspro/WS6U2/lib/crti.o /opt/SUNWspro/WS6U2/ lib/crt1.o /opt/SUNWspro/WS6U2/lib/values-xs.o -Y P,/opt/SUNWspro/WS6U2/lib:/usr /ccs/lib:/usr/lib -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/ WS6U2/bin:/usr/ccs/lib:/usr/lib ex3-2.o -lucb -lsocket -lnsl -lelf -laio -lc /op t/SUNWspro/WS6U2/lib/crtn.o ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 rm ex3-2.o ret=0 + exit 0 ------------------------------------------------------------------------- envの結果も書かせていただきます。 ------------------------------------------------------------------------- HOME=/disk2/user/md PATH=/bin:/usr/bin:/usr/ucb:/etc:/opt/SUNWspro/bin:/opt/FSUNf90/bin:/disk2/user/ md/gnuplot:. LOGNAME= HZ=100 TERM=vt100 TZ=Japan SHELL=/bin/csh MAIL=/var/mail/md LANG=ja _INIT_NET_STRATEGY=none _INIT_PREV_LEVEL=S _INIT_RUN_LEVEL=3 _INIT_RUN_NPREV=0 _INIT_UTS_ISA=sparc _INIT_UTS_MACHINE=sun4u _INIT_UTS_NODENAME= _INIT_UTS_PLATFORM=SUNW,Sun-Blade-1000 _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-27 PWD=/disk2/user/md USER=md LD_LIBRARY_PATH=/opt/FSUNf90/lib:/opt/SUNWspro/lib MANPATH=/opt/FSUNf90/man:/opt/SUNWspro/man ------------------------------------------------------------------------- という結果でした。 >>ucbcc: 警告: ld が起動される場合は、... 無視されます >>ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 >これは警告なので、実行には支障がないはずです。keisan3-2 が >生成されていませんか? はい、ファイルはできています。実行すれば結果も出力されています。ただ、毎回この警告文がでていて、どれぐらい問題なのかどうかもわからないので、できるかぎり問題を取り除くことと、その理由が知りたいので… >ファイル末尾に改行がないとその行を読んでくれないプログラムも >あるので、改行をつける癖をつけておくことをお勧めします。 初めてしりました。ありがとうございます。気をつけます。 あと、もしお手数でなければ、今までされた質問の意図を教えていただければありがたいと思うのですが…手間がかかるようでしたら全然かまいませんので、よろしくお願いします。 それではまたよろしくお願いします。 |
>>3810 どら 結局、よくわかりませんでした。 Solaris の /usr/ucb/cc はシェルスクリプトで、/usr/ccs/bin/ucbcc を起動しています。/usr/ccs/bin/ucbcc は /opt/SUNWspro/WS6U2/bin/acc へのシンボリックリンクになっているはず。ですから、 ucbcc: 警告:... というのは acc が出力しているわけです。 コンパイラは http://x68000.startshop.co.jp/~68user/unix/pickup?gcc にあるように、プリプロセス・コンパイル・アセンブル・リンクという ステップを踏みます。提示していただいた例だと、最初に /usr/ccs/bin/ucbcc (実体は /opt/SUNWspro/WS6U2/bin/acc) が実行され、それが /usr/ccs/lib/cpp (プリプロセッサ) /opt/SUNWspro/WS6U2/bin/acomp (コンパイラ) /usr/ccs/bin/ld (リンカ) を順次起動しています。 # この場合、アセンブルはコンパイラの中で行われています。 で、 ucbcc: 警告: ld が起動される場合は、オプション .. は ld に渡されます。... というのは、最初に起動された ucbcc が -YP,.. というオプションを 理解できなかったため、 「わたしの知らないオプションだけど、今から起動する ld ならこの オプションを理解できるかもしれないので、ld に -YP を渡します」 と言っているわけです。ただし、cc に -c オプションをつけたりすると リンクは行われないため、そういうときに備えて 「ld を実行しないようなオプションを指定された場合は ld が 実行されないので、結果的に -YP オプションは無視されます」 とも言ってます。 で、 > ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 についてですが、-YP オプションは ld に渡されます。実行結果を 見るとなぜか /usr/ccs/bin/ld に -YP が 2つ渡されてしまって います。-YP オプションは、ライブラリを検索するディレクトリを 指定するものなので、ld は 「ライブラリを検索するディレクトリが 2つ指定されているので、 後の方を無視して、最初の方を使います」 と警告しています。 なぜ -YP オプションが複数渡されるのかを知りたいため、-v オプションを つけてもらったり、env で環境変数を見せてもらったりしましたが、怪しげ なものを見つけることはできませんでした。 > 特にldというものがいまいち理解できないのですが ld はリンカです。例えば >>3868 jeiu で printf や scanf などの関数を使っていますが、これらの関数は OS の機能として用意されているものではありませんし、コンパイラが 内蔵している機能でもありません。 /usr/lib/ の下に *.a や *.so などのファイルがあると思いますが、 ここにコンパイル済の printf や scanf が入っており、それと結合 しているわけです。それらのライブラリ関数と、あなたが作った プログラムを結合するのがリンカの仕事で、コンパイル済の printf や scanf はどのディレクトリに置いてあるかを指定するのが -YP オプションです。 だらだらと書いてきましたが、ぶっちゃけて言うと一般的な解決方法は Solaris では /usr/ucb/cc を使わず、/opt/SUNWspro/bin/cc を 使う。できれば PATH から /usr/ucb/cc を削除した方がよい というもので、これはよく知られたノウハウです。/usr/ucb は SunOS4 時代 (20年くらい前) との互換性のためのディレクトリで あって、今どき積極的に使う必要性はありません。 ただ、わたしは根本的な原因を知りたかったので しつこく聞いて みたのですが、実を結ばなかったようで誠に残念です。 以下は余談ですが、あなたの環境のコンパイラはおそらく Forte C update 2 という Sun の製品です。わたしの手元には Solaris2.6 + Sun Workshop (Forte C の前バージョン。Sun の製品) がありますが、いくら頑張っても 同じエラーメッセージを出すことができませんでした。 よって、多分 Forte C の不具合ではないかと予想しています。 |
>>3811 68user >>3810 どら 富士通のコンパイラも入っていそうだという事が気になるのですが・・・ /usr/ccs/bin/ucbcc は Forte へのシンボリックリンクになってますか? |
>>3812 zsh > 富士通のコンパイラも入っていそうだという事が気になるのですが・・・ /opt/FSUNf90/bin とかですか? Fortran のコンパイラと見たので 特に関係はないかと判断したのですが、どうなんでしょうね。 |
>>3811 68user お手数をおかけしてすいませんでした。 説明がわかりやすくてうれしかったです!! PATHから/usr/ucb/ccを削除してみました。 そしたらいままでの警告文はなくなりました!!ありがとうございました。 しかし今までになかった警告文がでました。 ------------------------------------------------------------------- "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります ------------------------------------------------------------------- というものでした。今まではこんな警告もなかったし、3行目の空白も見当たりません。 この前載せたプログラムと同じものなのですが、#includeと<stdio.h>の間の空白を消してみましたが同じでした。 またなにか問題なのでしょうか?他の例題に関してもまったくおんなじ警告文がでます… この形の警告文はたいていプログラムの問題だったので、プログラムをいじれば解決していたのですが… あと、もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが… いろいろなホームページ上の例題をやってみたのですが、どれもうまくいかなくて… (特に、Cのプログラムをgnuplotに出力させたいのですが、gnuplot本体を置くディレクトリの場所とか、リンクの仕方とか…) もし時間があればでけっこうですので、少し教えていただけないでしょうか。よろしくお願いします。 |
>>3814 どら > "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります ソースを少しずつ削って、この警告が出る場所を特定してください。 問題の行を特定したけれども原因がわからない場合は、 % od -cx < ex3-1.c (最小限まで削ったファイル) として、変な文字が入っていないか確認してください。 > もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが… 質問がある場合は http://www.hyuki.com/writing/techask.html を熟読した上でお願いします。ただしこの掲示板ではこれまで gnuplot の話題が 出たことはないので、 Gnuplot Q&A 掲示板 http://ayapin.film.s.dendai.ac.jp/cgi-bin/trees.cgi などで聞いた方がよいかもしれません。適切な答えをもらうにはどこで 質問するのが効果的かを見極めた上でどうぞ。 それはそれとして > Cのプログラムをgnuplotに出力させたいのですが やればできるでしょうけど、gnuplot の使い方としては適切ではないような気がします。 |
>>3815 68user >> "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります >ソースを少しずつ削って、この警告が出る場所を特定してください。 includeの文を1行全部削ってみた所、正常に動きました。 しかし、includeの文はプログラムには絶対必要なものと思っていたのですが… include文が無くても動くということはありえるのですか? 下に正常に動いたプログラムを書きます。 ----------------------------------------------------------------------- /* 【例題3.1】 rei3_1 */ main() { int a,b; printf("異なる2つの整数を入力してください--->"); scanf("%d %d",&a,&b); if(a > b) printf("%d --- BIG\n",a); } ------------------------------------------------------------------------ |
>>3816 どら > includeの文を1行全部削ってみた所、正常に動きました。 逆です。動くように削っていくのではなく、動かない最小限の部分を 突き止め、その原因を探る方法を教えたつもりです。 つまり #include に原因があることがはっきりしたので、 % grep include ex3-1.c | od -cx として、なぜ警告が出るのかを調べるべきです。 > include文が無くても動くということはありえるのですか? いろいろありますが、初心者のうちは include 文は書くべきと 思っておく方がよいでしょう。 |
>>3817 68user この前のプログラムから、#includeと<stdio.h>の間の空白を削除してみましたが、やはり同じ警告が出ました。 それで、そのプログラムにgrepをかけてみました。どこに空白文字があるのかがわかりません… あるとしても最後の“\d\n”ぐらいだと思うのですが、これは指令とは関係ないし、必要なもののはずなのですが… 下に“grep include ex3-1.c | od -cx”の結果を書きますので、終えてください。よろしくお願いします。 -------------------------------------------------------------------------- 0000000 # i n c l u d e < s t d i o . h 2369 6e63 6c75 6465 3c73 7464 696f 2e68 0000020 > \r \n 3e0d 0a00 0000023 ------------------------------------------------------------------------- |
>>3818 どら > 0000020 > \r \n 改行コードが CR LF になっています。UNIX の改行コードは LF です。 CR が空白文字扱いされているのでしょう。 とりあえず CR を削るだけなら tr コマンドが使えます。 http://x68000.startshop.co.jp/~68user/unix/pickup?tr Windows で作ったソースを ftp などで UNIX 上に持ってきて いるなら、アスキーモードで転送しましょう。ただし、全て UNIX 上で開発するのがスキルアップへの道だと思います。 |
>>3819 68user trコマンドで\r\nを\nに変えてみるとうまく作動しました。 ためしに、ftpでの転送もアスキーモードに変えると うまく作動しました。 原因が改行コードとは…気づきませんでした。 いろいろとありがとうございました。 |
初めて掲載しますが....、 ソケット通信で、select()を使用した非同期通信をさせているのですが、 select()で検知した当該FDを(例としてFD=10と設定)recv()したら、 FD=10のrecv()返値が0(CLOSE?)となることがあります。 recv()返値が0の場合は、相手側がCLOSEしたものと認識はできるのですが、 疑問に思う動作でそれは、通常FD=10ならFD=10を介して送受信を行い、 select()監視しさせて、何かイヘ゛ント発生があればrecv()の動作に遷移する 動きを正常にしているのですが、突然的に(不規則と言うか、不確定と言うか) FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒 (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら 返値が0であると言う動作があります。 このような動作になる原因が解らず、何かヒントや調べる手立てとかありませんか???。 (これって、ネットワーク障害/ネットワーク負荷とか、相手側マシンのHW的障害 などの影響も考えられますか....???) ...記述表現が的確でありませんが、ご了承ください。 |
いまここのHTTPクライアントを参考にして POSTをCGIへ仲介するCGIを作っているのですがうまくいきません; GETのところを print SOCKET "POST / HTTP/1.0\r\n"; print SOCKET "Content-Length: $size\r\n"; print SOCKET "\r\n"; print SOCKET "$buffer\r\n"; として $buffer = $ENV{ 'QUERY_STRING' }; $size = length $buffer; を追加してみたのですが・・・。お知恵を拝借できませんでしょうか? |
>>3821 マツマツ > FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒 > (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら > 返値が0であると言う動作があります。 よく理解できませんが、 1. send し、select で待つ。 2. 相手側はデータを受信後、すぐに close しているはず。 3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。 4. recv すると 0 が返ってくる。 ということであれば、 a. ネットワークの質が悪く、TCP の再送タイマが働いている b. 2 で相手が 24〜25 秒かけて何かを処理してから close している くらいしか思いつきませんでした。パケットダンプしてみては。 >>3822 ユウキ そんな複雑なプログラムを書くのはやめて、まずは単純に POST する プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済 ということであれば、うまくいく場合とうまくいかない場合のリクエストを 見比べればわかるでしょう。 あと、質問をする前に http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を読んでください>質問者の方々 自分の使っている環境すら書かない人、回答してもわかったのかどうか返事さえ 書かない人が多くて、少々うんざりです。 |
申し訳ないです;少し安易に書き込んでしまいました。。。 単純にPOSTしてみます。深夜なのに申しわけなかったッス |
●コメント/アドバイスの程ありがとうございます。 (個人的に多忙な面もあり、有意な内容が書かれていることに対して、 返事が遅れた点は、お許しください) 後追いの記載ですいませんが、使用しているマシンはSUNのSC2000 (OS:Solaris2.4)と、SVR4ベースOSを使ったマシン(ここでは相手側) です。(LANのスペックは10BASE) <=両者とも今ではかなり古いものですが...。 またあえて言わしていただきますと、下記の3,4が発生するのは SVR4ベースOSを使ったマシン側です。 > FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒 > (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら > 返値が0であると言う動作があります。 よく理解できませんが、 1. send し、select で待つ。 2. 相手側はデータを受信後、すぐに close しているはず。 3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。 4. recv すると 0 が返ってくる。 ということであれば、 a. ネットワークの質が悪く、TCP の再送タイマが働いている b. 2 で相手が 24〜25 秒かけて何かを処理してから close している くらいしか思いつきませんでした。パケットダンプしてみては。 ●まずは、LANアナライザーを噛まして見たいと思います。 ちなみにTCPの再送タイマってものが働いている場合、そのタイマは 24〜25秒の値なのでしょうか。 >>3822 ユウキ そんな複雑なプログラムを書くのはやめて、まずは単純に POST する プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済 ということであれば、うまくいく場合とうまくいかない場合のリクエストを 見比べればわかるでしょう。 ●そうですね。(基本的なことから行うべきですね) |
>>3825 マツマツ > ちなみにTCPの再送タイマってものが働いている場合、そのタイマは > 24〜25秒の値なのでしょうか。 「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、 再送間隔は 1秒・3秒・6秒・12秒・24秒… で、これを最初の送信からの経過時間で表すと 1秒・4秒・10秒・22秒・46秒… だそうです。 ただし RTT にそれなりの時間がかかる場合は、上記の通りには なりません (計算式が難しくてよくわかりませんが)。 なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て はまるかどうかはわかりません。 |
> ちなみにTCPの再送タイマってものが働いている場合、そのタイマは > 24〜25秒の値なのでしょうか。 「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、 再送間隔は 1秒・3秒・6秒・12秒・24秒… で、これを最初の送信からの経過時間で表すと 1秒・4秒・10秒・22秒・46秒… だそうです。 ●ありがとうございます。 (TCP/IPプロトコルについて、技術的な専門知識が分っていないため、 今後は勉強したいと思います。) で、少々また不仕付けなお話ですみませんが、再送タイマが発生していると した場合に、その原因/要因には、何があるでしょうか。 ”ネットワークの質が悪く、TCP の再送タイマが働いている” の部分で気になり、どちらかのマシンのHW不調(LAN・I/Fカードや CPUボード等)とか、LANケーブル、HUB、トランシーバなどの 不調の影響で発生することとか考えられるでしょうか?。 (パケットトレースで確認することは必要なのですが、発生していると 分った時の発生原因を特定する上で、まず想定できる可能性のものがあれば と思った次第からです) (HW回りを疑って見るべきかどうか、何とも言えないのですが...) ただし RTT にそれなりの時間がかかる場合は、上記の通りには なりません (計算式が難しくてよくわかりませんが)。 なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て はまるかどうかはわかりません。 |
>>3827 マツマツ パケットを送信した後、一定時間が経過しても ACK が返ってこなければ 再送するわけなので、 > どちらかのマシンのHW不調(LAN・I/FカードやCPUボード等)とか、 > LANケーブル、HUB、トランシーバなどの不調の影響で発生することとか > 考えられるでしょうか?。 これらすべてがパケット再送の原因となりえます。 |
この土日で当ページの引越しを予定しています。しばらく繋がらなかったり するかもしれませんが、あらかじめご了承ください。 |
というわけで引っ越しました。 現時点でわかっている問題点は、 - 掲示板の全文検索が動かない (準備中) - SEGA BBS 過去ログの全文検索が動かない (準備中) です。この他に変なところがあればご指摘いただけると幸いです。 |