• ベストアンサー

本の内容とアドバイスの違い

こんばんわ。今Cの入門の書籍を読んでいるのですがそこに載っているコードをテキストエディタに書いて、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1607365で教えていただいたと通りにコンパイルしアップロードして権限を与え、アクセスしたのですが、エラーが出ます。 原因は書籍のコード中に\r\nが入っていないということが原因であるということがわかりました。 \r\nとは何を意味するのか教えてください。 またなぜ書籍には\r\nが記載されていなかったのでしょうか?何か意味があって記載していないのかと疑問に思いました。ご存知の方おられましたら是非教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.5

> つまり、Fire Foxのようなcgiではないプログラムと > cgiプログラムでは書き方(ここでは改行コードのこと)が > 違うという解釈をしてよろしいのでしょうか? > 大きな誤解があります。 改行コードの問題ではありません。 あなたは、アプリケーションプログラムとは何か、オペレーティングシステムとはなにかということから知る必要があるように思います。 > それとcgiじゃないプログラムとはどのようなものが > あるんでしょうか? CGIに対応していないプログラムの方が大多数です。WindowsやMacOSの上で普段あなたが使っているアプリケーションはほぼ100%がCGIに対応していません。 > perlの場合は全部cgi見たいな感覚でかじっていたので > コンパイル言語とインタープリタ言語の違いが飲み込めずに > 苦労しています。 perlはCGIのための言語ではありません。インタープリタ言語であることは確かにそのとおりですが、CGIに対応するためにはCGIの規約にしたがった書き方をしなければなりません。また、perlとCの違いはCGIに対応するという点において、コンパイル言語とインタープリタ言語の違い以上の違いはありません。つまり、CGIの規約に従って記述すればCでもperlでもそれ以外の言語でもCGIを作成することは可能です。(ただし、言語仕様上CGIの規約に従うことができない言語は除きます。例:Visual basicなどの標準入出力インターフェースのない言語) > Internet Explorerの拡張子はexeになっていますが、 > これはcgiの書き方で書かれているんですか? Internet ExplorerはCGIに対応していません。 CGIはウェブサーバとCGI対応プログラムの間でやり取りするためのものですから、通常のアプリケーションは対応する必要がありません。 ここまで読んで多分あなたは「Internet ExplorerはCGIの結果を表示できるじゃないか」と言うかもしれませんが、Internet ExplorerはウェブサーバがHTTPというプロトコルで送信してきたデータ(通常はHTMLテキストや画像ファイルなど)を表示しているだけで、そのウェブサーバがそのデータを作成する際にどういう動作をしているかについてはなんら関知していません。 あくまでもCGIは、ウェブサーバとCGI対応プログラムの間でデータをやり取りするための規格です。

その他の回答 (5)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.6

#5で用語について説明していませんが、参考URLにあげたような用語辞典などを参照してご自身で確認していただくべきかと思います。 @Nifty:辞書 http://www.nifty.com/dictionary/ @IT Insider's Computer Dictionary http://www.atmarkit.co.jp/icd/index.html IT用語辞典e-Words http://e-words.jp/ あなたは、以前の質問でもいろいろと質問をされていて、高校生だということですね。若いということはそれだけまだまだ学ぶにあたって時間的な余裕があるということですから、がんばって。

smalldeveloper
質問者

お礼

ご回答くださった皆様本当にありがとうございます。OSなどは判ったような気になっていて実際には理解できていなかったりするので、もうすこし基礎を学びたいと思います。本当にありがとうございました。

回答No.4

No.3 訂正です。 '\f' は、フォームフィード(改ページ)ですね。 '\n' で、復帰改行(0x0d)ということで、OKのようです。 ただ、Windows 環境のテキストモードでは、確かに、'\n' ひと文字(の扱い)で、0x0d 0x0a のペアに展開される処理系が多いのですね。 おそらく、もともとのテキストは、Windows 用だったので、'\n' ひとつですませていたのではないかなと思います。 '\n' すらなかった……というのであれば、単なるミスでしょうけど。 失礼しました。 ちなみに、私の場合、明示的に cr+lf を出力させるときには、直接文字コードで、 "\x0d\x0a" という標記にしています。 単なる改行は、"\n" ですませますが。

回答No.3

C言語の規約上、 '\n' で、「その処理系における適切な改行」をするはずですが。 その上で、詳しく書くのであれば、mac は、'\r' (文字コードは、0x0d) Unix 系は、'\f' (ラインフィード・文字コードは、0x0a) Windows は、"\r\f" (文字コードは、0x0d 0x0a) これらの、OSの違いを吸収するために、'\n' は、それだけで、(その環境における)改行になるはずですが。 なので、特別に、異なった環境に対応するのでなけれ ば、'\n' でOKです。 (ちなみに、Windows 上で、 GCC を使うのは、設定によってはこのパターンになります) ただし、これが、実際にはいろいろなコードに展開されるため、ファイルを、「テキストモード」で扱う必要があったりしますが。

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

前回の#2,#5 #6で回答したrentaheroです。 > \r\nとは何を意味するのか教えてください。 \rとは、制御文字0x0d(ASCIIコード14)です。意味は#1氏の回答のとおり、キャリッジリターン(Carriage Return 略称CR)です。日本語では復帰といいます。もともとタイプライターの紙を左端まで戻すことをいいます。 \nとは、制御文字0x0a(ASCIIコード10)です。意味は同様にラインフィード(Line Feed 略称LF)です。日本語では改行または行送りといいます。もともとタイプライターで次の行に紙を送ることをいいます。 #1氏の回答にあるように、 Windowsのテキストファイルでは\r\nで復帰改行を表します。 Macintoshのテキストファイルでは\rで復帰改行を表します。 UNIXのテキストファイルでは\nで復帰改行を表します。 このように復帰改行は環境によってばらばらなので、復帰改行文字として、ニューライン(New Line 略称NL)としてまとめて表現されます。 CGIの規格書としてまとめられているのは、CGI/1.1(rfc3875)です。 rfc3875:http://www.ietf.org/rfc/rfc3875.txt 上記rfc3875の7章システム仕様(System Specifications) において、「NLはLFであらわされるが、サーバーはCR LFも同様に受け入れる"べきである"(The newline(NL) sequense is LF; servers SHOULD also accept CR LF as a newline.)」と書いてあります。 簡単にCGI応答(CGI Response)の形式を書くと、 ヘッダフィールド+<NL> (必要な分だけ繰り返し) 空行(行頭に<NL>のみ) メッセージボディ(本文) となります。 前の質問の回答#2であげたもので説明すると、 printf("Content-Type: text/plain\r\n");←ヘッダフィールド+<NL> printf("\r\n");←空行 printf("ABCDEFG");←メッセージボディ となるわけです。 CGI応答では、形式が間違っていると当然のことながら動作しません。改行(NL:\r\nまたは\n)がないというのは形式が間違っていることなので、エラーがでたのです。 > またなぜ書籍には\r\nが記載されていなかったのでしょうか? どの書籍をご覧になっているのかわからないため、正しい回答になるかどうかはわかりかねますが、その書籍がCGI作成を対象にしていない場合や、標準出力への出力用の関数としてputsを利用しているということが考えられます。 JM Project:http://www.linux.or.jp/JM/ manpage of PUTS:参考URL 上記のmanpageを読むとわかりますが、putsは引数に与えた文字列sと改行をstdoutに書き込むとなっています。当然ながら、printfではformat文字列の制御にしたがって出力をstdoutに書き込むため、format文字列や与える引数に改行がなければ、余分な改行がつくことはありません。だから\r\nを明示してあるわけです。それに対してputsは改行をつけてくれるため、改行文字を明示する必要がないのです。 このような理由から、putsとprintfの動作の違いが考えられるということです。 また、CGIを対象にしていない場合は、通常、標準出力はコンソールアプリケーションにおいて、コンソールに出力されるため、改行を考慮する必要がないのかもしれません。 もちろんこの両方の理由がともにあてはまるのかもしれません。 疑問の解消の一助になれば幸いです。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/puts.3.html
smalldeveloper
質問者

補足

つまり、Fire Foxのようなcgiではないプログラムとcgiプログラムでは書き方(ここでは改行コードのこと)が違うという解釈をしてよろしいのでしょうか? それとcgiじゃないプログラムとはどのようなものがあるんでしょうか?perlの場合は全部cgi見たいな感覚でかじっていたのでコンパイル言語とインタープリタ言語の違いが飲み込めずに苦労しています。 Internet Explorerの拡張子はexeになっていますが、これはcgiの書き方で書かれているんですか?

  • marimo_cx
  • ベストアンサー率25% (873/3452)
回答No.1

\rはキャリッジリターンのキャラクターコード(&h0D)を \nはラインフィールドのキャラクターコード(&h0A)を それぞれ表しています。 そしてWindowsで用いられている改行コードが\r\nです。 ちなみにUNIX系では\n、Macだと\rです。 前の質問?からするとcgiをやっているのですね? cgiは出力先は標準出力で良いんですけど、行単位でちゃんと出さなきゃならないし、mimeヘッダとデータ本体は改行文字2連で区切られなければならないので、改行文字がひとつも無ければ、ヘッダとデータの区切りがわからないので当然エラーをはきます。 ちなみにUNIX系でしたら改行は\nだけで十分です。(\r\nとする必要なし)

参考URL:
http://speana-1.hp.infoseek.co.jp/serial/serial_4/char.htm

関連するQ&A

  • プログラミングを勉強したいのですが

     僕は、13歳の中学生です。  MacOSX でプログラミングをしたいのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=178026  の参考リンクを読んで、自分も作ってみても、よく理解ができません。  僕には、プログラミングの経験がなく、テキストエディタで HTML を書くくらいのことしかできません。Objective-C, Java はもちろん、C, C++ などのソースコードの読解も、ほとんどできません。 一応、オブジェクト指向については、書籍「オブジェクト指向アプローチ」などで学習したので、だいたい分かります。  そこで、どのようにして入門すればよいのか教えてください! なるべく Developer Tools でやりたいです。また、分かりやすくて有用な高級言語があれば、それも教えてください。  あと、僕は MacOSX 10.2.4 を使っていますが、Developer Tools を古いバージョンに入れ替える方法がありましたら、教えてください(MacOSX 10.1 を持っています)。「Cocoa はやっぱり!」のソースが、10.1 向けに書かれているからです。  よろしくお願いします!

    • ベストアンサー
    • Mac
  • VC++6.0をコマンドプロンプトで使用する方法

    すみません。http://oshiete1.goo.ne.jp/kotaeru.php3?q=1885181で質問したものですが、戴いた回答に、VC++はコマンドプロンプトでコンパイルできると言うような記述がありました。僕なりにヘルプやインターネットを調べたのですが、わかりません。。 やりたいことは、エディタでCのソースを記述し、任意のフォルダに保存し、そこをカレントディレクトリにしてコマンドプロンプトを開きコンパイル・実行するというものです。要するにJavaみたいな感じでコンパイル・実行したいのです。 使用バージョンは、VC++6.0です。BCCコンパイラ5.5を試したのですが、getcharやgetche関数で意味不明な動作をするものですから、やはりVC++を使用したいなと思い。。 度々の質問で恐縮ですが、分かる方、よろしくお願いいたします。

  • IEから、自分のマシンのTEXTファイルを編集

    検索をして、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=26220 辺りを読ませていただくと難しいようなのですが、 IEの画面上に編集したいテキストファイルを記載して、それをクリックすると、テキストエディタが起動し、その編集したいテキストファイルを編集することはできないものでしょうか。 過去ログによると、難しそうなんですが、できないことはないような記載でしたので、再度お尋ねします。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • (php) メールの改行コードについて

    phpでプログラミング中です。 メールを送信する際に 、メッセージ中に改行コードを入れたいのですが 思ったように改行してくれません。 (メールを送信はRestAPIを使って行っていますので、詳しくはわかりません) 実際には、思ったとおりに改行してくれていたのですが、そのRestAPIをバージョンアップしたら、改行されなくなってしまいました。 エディタ上での改行、 \n \r \r\n 全て試したのですが、  エディタ上での改行では、改行されず、 \r、\n、\r\n、全て2行改行になってしまいます。 PHP_EOLも使ってみましたが、改行されませんでした。 見た目、改行されているのはどうも、そのAPI自身が 70文字を超えたら改行しているように見えます。 他に改行するコード、改行する方法はありますでしょうか? 何でも試したいのです。 APIの開発元に聞いたり、バージョンアップの内容がわかればよいのでしょうが それを確認することは出来ない状態です。 何故出来ない? って言われそうですが。すみません。。。

    • 締切済み
    • PHP
  • vocal tract

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1528400の質問に、vocal tractには、鼻の部分は含まれないという本もあると書かれていますが、実際にそのように記述されている書籍があればおしえてください。 医学や実験心理学の方でこれを見ておられる方があれば、医学書や心理学の専門書か入門書でそういう書籍があれば、よろしくお願いします。 専門家のどちらが正しいというご意見は不要ですが、鼻がvocal tractに含まれないというご意見があれば根拠を示して教えてください。 含まれるという意見のその理由は不要です。

  • バッテリーについて

    先ほどの続きなんですが、電源コードをコンセントに差しても、電源がすぐに落ちてしまいます。何故でしょうか? やはり、バッテリーが原因でしょうか? 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=257706

  • 教えて!gooの質問内容

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=786246 で回答した者ですが、他の方の回答文に、質問文からでは知り得ない内容の事が記載されていました。(具体的には「車を2台所有している」ことです) 回答者はこの情報をどうやって知ったのでしょうか? もし特定の回答者だけに特別な情報が行っているのであれば、私のような一般回答者は「お呼びでない」ということでしょうか? よろしくお願いします。

  • CPU選定にアドバイスを

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1153331 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1154722 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1157838 上記の質問をさせていただき、いろいろ考えた上、 PC使用目的:画像エンコードなど(3Dゲームしません) チップセット:intel865G メモリー:DDR400 256MB×2 M/B:まだ検討中(いくつか候補はありますが) グラフィック:GPU RADEON9600PRO にて組もうかと検討していますが CPUをどうしようか決めかねています。 静音性と処理能力、発熱量など(あと価格)で 妥当なところはどんなとこでしょうか? (これは主観があると思うのでいろいろな方の 意見を聞きたいと思います。) <捕捉> (現状P4 1.80A(Northwood) なのですが、これよりある程度スペックアップ (体感できるほど)しないと意味ないので) Northwoodがいいのかプレスコットがいいのか P4がいいのか、セレロンDがいいのか また、クロックはどの程度がいいのか アドバイスいただけると幸いです。 (M/Bをしぼってないのでアドバイス しずらいかと思いますがご了承ください。) また、CPU以外の構成で問題ある場合 ご指摘いただけると幸いです。 よろしくお願いいたします。

  • IPを検索するプログラム

    以前違うカテゴリで教えていただいていたのですが、 未だにどうしてもうまくいくことができません。 文字に制限がありますので下記URLを参照して頂いて 原因がわかれば教えていただけないでしょうか? どうかよろしくお願い致します。 わからないところがあればその都度補足させていただきます。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=326865 http://oshiete1.goo.ne.jp/kotaeru.php3?q=361024

  • 使っている書式付きエディタ(簡易ワープロ)(Windows用)を教えて下さい。

    最近、他の質問に答えてふと思った事です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1397494 Windowsユーザーの方、使っている書式付きエディタ(簡易ワープロ)を教えて下さい。 私はまだWindwsには詳しくありません。 宜しくお願い致します。

専門家に質問してみよう