• 締切済み

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

こんばんは。 Solarisの環境下で、 ファイルをオープン&編集&別ファイルを作成する処理において、 改行コードをCRLFにしたいと考えています。 プログラムはC言語で作成されています。 生成後のファイルは、文字コード:EUC、改行コード:LFで作成されています。 今回は、文字コード:SJIS、改行コード:CRLFで作成したいです。 現在、「\n」で、改行コードをLFとして作成しているようです。 この改行コードをCRLFにしたい、という意味です。 ファイルレコードの行末に「\n」を入れている処理の個所を、 「\r\n」に変更すれば、CRLFになるのでしょうか? プログラミング言語の仕様というよりは、 その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、どうでしょうか? よろしくお願いします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

改行コードもそうですが、EUCとShift-JISの対応は大丈夫ですか? こちらも気を付けないと思わぬ不具合に遭遇します(いわゆるダメ文字とか) Cでやらなければいけない積極的な理由が無いのなら、Perlとか使った方が楽だと思います。

Miyabi__
質問者

お礼

ありがとうございます。 「だめ文字」という言葉を初めて知りました。 文字コード変換は怖いですね…。 C言語でなければならない理由は、 既存プログラムがC言語で作成されており、そのプログラムの改修であるためです。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

>ファイルレコードの行末に「\n」を入れている処理の個所を、 >「\r\n」に変更すれば、CRLFになるのでしょうか? 出力だけならそうですが入力は考えなくていいんでしょうか?

Miyabi__
質問者

お礼

ありがとうございます。 入力については、 入力ファイルの仕様が、  ・SJIS + LF  ・SJIS + CRLF のどちらなのか相手側に確認中です。 既存のプログラムに対しては、LFで来るので、 CRLFで来ると決まった場合、どういう動きをするのか・どこを改修すべきか、確認する必要があります。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

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

Miyabi__
質問者

補足

ありがとうございます。 なるほど、そうなのですね。 ソースコードは、うろ覚えなので改めて確認しますが、 fopenの引数は、wかaしか書かれてなかった気がするので、あえてバイナリモード指定はされていません。 http://simd.jugem.jp/?eid=46 ただどの道、Solaris上であるため、無指定でもバイナリモードで開かれるということですね。 ありがとうございます。勉強になります。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

Miyabi__
質問者

お礼

ありがとうございます。 本プログラムはSolaris上でしか動かさないです。 \r\n に変更するだけで良いのですね。 ありがとうございます。

関連するQ&A