質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

3回答

15124閲覧

改行:CR, LF, CRLF の処理の区別

退会済みユーザー

退会済みユーザー

総合スコア0

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2016/09/24 18:51

編集2016/09/24 22:36

これら改行がプログラム上どのように処理されるのかが知りたいです。

タイトルの通りなのですが、調べてもいまいち腹に落ちる解が得られなかったので知識を頂戴させてください。

現状、各改行コードは以下の処理をしてる認識です。

CR : MacOS
左端に寄せ (CR)
自動で改行

LF : UNIX系 改行
自動で左寄せ
改行している (LF)

CRLF : Windows
左寄せ (CR)
改行 (LF)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/09/24 22:33

質問の意図がわかりません。なぜこのように各OSで改行コードが違うのか理由が知りたいのでしょうか? それともこれらの違いをプログラムを書くときにどう処理したらいいかの知りたいのでしょうか?
guest

回答3

0

CR(Carrige Return) や LF(Line Feed) は古のタイプライターを
模した概念であり、コンピューター的には「改行」以上の意味は
ないと思います。
ドットインパクトプリンターを知っているならまだ分かるかも
しれませんが、現代では分かりにくい「動き」かもしれませんね。

ちなみに、Mac OS X にて改行を CR にして以下のスクリプトを動かすと

Sh

1#!/bin/sh 2echo 'HOGEHOGE'

なにもおこりません。
改行を LF にすると動くんですけどね。

投稿2016/09/25 01:17

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/26 12:27

ありがとうございます。実際にタイプライターを模したペンと紙で理解できました。助かります
guest

0

ベストアンサー

改行コードの歴史や概要はWikipedia:改行コードによくまとまっていますので、まずはこちらを確認してみてください。

さて、上を踏まえて、プログラムではどのように処理されるのかを解説したいと思います。
※ 以下の文章で、UNIX/LinuxにはMac OS X(最新版はmacOSと名称変更)が含まれます。Mac OS XはUNIXの一つです。

###プログラムでの動作

####テキストモードとバイナリモード

C言語由来かC言語に影響を受けた言語の多くでは、ファイルを開くときに、テキストモードとバイナリモードという区別があります。それぞれのモードおよびOSの組み合わせで、ファイルの入出力時に改行コードの変換を行う場合があります。(標準入出力もファイル入出力の一つであり、デフォルトではテキストモードとして処理されます)

OSテキスト入力テキスト出力バイナリ入力バイナリ出力
WindowsCRLF->LFLF->CRLF(何もしない)(何もしない)
UNIX/Linux(何もしない)(何もしない)(何もしない)(何もしない)

つまり、プログラム内部では常に改行をLFとして扱い、入出力するときに自動変換される仕組みです。これはFTPのASCIIモードやgitのcore.autocrlfが有効な場合等も同じ動作をします。ただし、この動作はWindowsのみです。UNIX/Linuxではテキストモードとバイナリモードの区別は無く、どちらも同じ動作をします。

####テキストストリームとバイナリストリーム

JavaやC#ではテキストモード・バイナリモードという考えてでは無く、テキストストリーム・バイナリストリームという考えで処理します。テキストストリームとして処理する場合、

  • 読み込み時は、CRLFCRLFのどれかであれば改行の区切りとして扱い、行単位で処理する。1行を取得したとき、末尾に改行コードは含まれない。(なので、改行コードがどれであっても同じ処理になる)
  • 書き込み時は、改行のみまたは最後に改行するメソッドを用い、システム規定の改行コードを出力する。

という動作になります。出力に関してはOSによって改行コードの規定値が異なることがありますが、入力はOSによって変わるということはありません。また、出力時の改行コードは変更することができます。

###その他

####旧MacのCRのみについて

Mac OS 9(以下、旧Mac)では、テキストにおける改行はCRでした。Mac OS XからはUNIX化下のに伴い、UNIX/Linuxと同じくLFのみになっています。旧Macは既にサポートもされておらず、動作するのは骨董品のMacのみです。旧Mac時代に作られたテキストファイルでなければ、改行がCRのみの処理について気にする必要はありません。

####CRのみの場合のCUIでの動作

WindowsのコマンドプロンプトやUNIX/Linuxでのターミナルでは、CRはまさしくCRとして動作します。どういうことかというと、CRが入力されると、カーソルが行の先頭に戻ります。これを利用すると、CUIでもプログレスバーを表示するなどができます。

なお、WindowsのコマンドプロンプトでLFのみを渡しても、普通に改行され、カーソル位置は先頭になります。

####通信プロトコルについて

多くの通信プロトコル(SMTPやHTTP等)では、改行コードをCRLFとしています。OS毎の動作が変わらないように、ネットワーク通信はバイナリのストリームとして扱い、プロトコルの仕様に従って改行コードを処理する必要があります。しかし、正しい改行コードを使っていない実装もありますので、実際はどのような改行コードであっても処理できるようにすべきでしょう。

###telnetやSSH通信

通常、Enterキーを押したときに、クライアントからサーバへはCRのみが送られます。これは、押されたキーを送るのであって、改行コードを送っているというわけでは無いからです。つまり、本来のターミナルやコンソールでキーボードのEnterキーを押されたときにCRが送られると同じ動作をしているというわけで、CRのみであっても仮想ターミナル(pty)側で正しく改行してくれます。

投稿2016/09/25 03:26

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/26 12:30

質問の内容を含め非常に勉強になります。助かりました。
guest

0

これら改行がプログラム上どのように処理されるのかが知りたいです。

結論としては、OS次第か、テキスト編集・表示しているソフト次第となります。

改行コードですが、改行と次の行でのテキスト表示位置の左寄せの処理は
質問者さまの挙げた改行コードの組み合わせでも同じです。

CRとLFについてはタイプライターの動作が由来です。
(キーボードのキー配置もタイプライターが由来だったりします。)
LFが行送り(紙に文字を打つ行を1行分下にずらす)、
CRが文字を打つ装置の位置を左端に戻す、でした。

テキスト表示の動きを見ているとタイプライター的には全部CRLFですが
windows・unix・macの開発者がそれぞれのOSでどの組み合わせを
改行コードとしてEnterまたはReturnキーで認識するかを
質問者さまの挙げた通りの組み合わせにしちゃったようです。

CRとLFの改行コード文字自体はasciiコードの中に含まれていますが
どう扱うかはOSの開発者次第だったのかなぁと。

改行コードを指定する機能を持つテキストエディタならCR・LF・CRLFを指定して
テキストファイルの改行コードに応じて改行処理をしてくれます。
EnterまたはReturnキーを押した時は指定した改行コードを出力してくれます。
この機能を持つソフトは行末に改行コードの種類を区別して薄い色で文字表示してくれたり
ステータス表示部分にテキストファイルが改行コードとして認識しているものが
CR・LF・CRLFのどれかを表示する機能がついています。

windowsのメモ帳の様に改行コードを指定しないソフトはOSがEnterまたはReturnキーで
出力すると決めている改行コードを出力してそれを改行コードとして認識・表示します。

中にはwindowsでのMS word(Shift+Enter)やexcel(Alt+Enter)のようにOS標準の改行コード以外
を出力してテキスト表示の挙動を調整するソフトもあるようです。

投稿2016/09/25 01:00

yoshitia

総合スコア157

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/26 12:29

確かにexcel(Alt+Enter)ですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問