こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Solaris上のC言語でCRLFのファイル作成は

こんばんは。

Solarisの環境下で、
ファイルをオープン&編集&別ファイルを作成する処理において、
改行コードをCRLFにしたいと考えています。

プログラムはC言語で作成されています。

生成後のファイルは、文字コード:EUC、改行コード:LFで作成されています。

今回は、文字コード:SJIS、改行コード:CRLFで作成したいです。


現在、「\n」で、改行コードをLFとして作成しているようです。
この改行コードをCRLFにしたい、という意味です。

ファイルレコードの行末に「\n」を入れている処理の個所を、
「\r\n」に変更すれば、CRLFになるのでしょうか?


プログラミング言語の仕様というよりは、
その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、どうでしょうか?


よろしくお願いします。

投稿日時 - 2014-09-30 00:00:10

QNo.8773402

暇なときに回答ください

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

改行コードもそうですが、EUCとShift-JISの対応は大丈夫ですか?
こちらも気を付けないと思わぬ不具合に遭遇します(いわゆるダメ文字とか)

Cでやらなければいけない積極的な理由が無いのなら、Perlとか使った方が楽だと思います。

投稿日時 - 2014-09-30 06:51:17

お礼

ありがとうございます。

「だめ文字」という言葉を初めて知りました。
文字コード変換は怖いですね…。


C言語でなければならない理由は、
既存プログラムがC言語で作成されており、そのプログラムの改修であるためです。

投稿日時 - 2014-09-30 22:37:45

ANo.3

>ファイルレコードの行末に「\n」を入れている処理の個所を、
>「\r\n」に変更すれば、CRLFになるのでしょうか?

出力だけならそうですが入力は考えなくていいんでしょうか?

投稿日時 - 2014-09-30 02:46:31

お礼

ありがとうございます。

入力については、
入力ファイルの仕様が、
 ・SJIS + LF
 ・SJIS + CRLF
のどちらなのか相手側に確認中です。

既存のプログラムに対しては、LFで来るので、
CRLFで来ると決まった場合、どういう動きをするのか・どこを改修すべきか、確認する必要があります。

投稿日時 - 2014-09-30 22:43:18

ANo.2

>プログラミング言語の仕様というよりは、
>その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、

多くのプログラミング言語では、Windows環境の時だけファイル読み書きにバイナリモード・テキストモードというのがあり、Windowsのテキストモードだと、"\n" が "\r\n" と相互に書き換わります。
Unix/Linuxにはそういうモードはない(仮にモードの指定はエラーにならなくても無視される)ので常にWindowsでいうところのバイナリモードと同じ動きをします。なので、CRLFにしたければ "\r\n" を出力すれば良いです。

投稿日時 - 2014-09-30 01:09:03

補足

ありがとうございます。

なるほど、そうなのですね。


ソースコードは、うろ覚えなので改めて確認しますが、
fopenの引数は、wかaしか書かれてなかった気がするので、あえてバイナリモード指定はされていません。

http://simd.jugem.jp/?eid=46


ただどの道、Solaris上であるため、無指定でもバイナリモードで開かれるということですね。

ありがとうございます。勉強になります。

投稿日時 - 2014-09-30 22:57:04

ANo.1

いちばんがんばるなら
バイナリモードにして \r\n を出力する
のが正しいんだけど, Unix 限定だと思えば単純に
\r\n を出力する
だけでいい.

投稿日時 - 2014-09-30 00:18:09

お礼

ありがとうございます。


本プログラムはSolaris上でしか動かさないです。

\r\n

に変更するだけで良いのですね。
ありがとうございます。

投稿日時 - 2014-09-30 22:47:21

あなたにオススメの質問