- 締切済み
Solaris上のC言語でCRLFのファイル作成は
こんばんは。 Solarisの環境下で、 ファイルをオープン&編集&別ファイルを作成する処理において、 改行コードをCRLFにしたいと考えています。 プログラムはC言語で作成されています。 生成後のファイルは、文字コード:EUC、改行コード:LFで作成されています。 今回は、文字コード:SJIS、改行コード:CRLFで作成したいです。 現在、「\n」で、改行コードをLFとして作成しているようです。 この改行コードをCRLFにしたい、という意味です。 ファイルレコードの行末に「\n」を入れている処理の個所を、 「\r\n」に変更すれば、CRLFになるのでしょうか? プログラミング言語の仕様というよりは、 その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、どうでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
改行コードもそうですが、EUCとShift-JISの対応は大丈夫ですか? こちらも気を付けないと思わぬ不具合に遭遇します(いわゆるダメ文字とか) Cでやらなければいけない積極的な理由が無いのなら、Perlとか使った方が楽だと思います。
- wormhole
- ベストアンサー率28% (1626/5665)
>ファイルレコードの行末に「\n」を入れている処理の個所を、 >「\r\n」に変更すれば、CRLFになるのでしょうか? 出力だけならそうですが入力は考えなくていいんでしょうか?
お礼
ありがとうございます。 入力については、 入力ファイルの仕様が、 ・SJIS + LF ・SJIS + CRLF のどちらなのか相手側に確認中です。 既存のプログラムに対しては、LFで来るので、 CRLFで来ると決まった場合、どういう動きをするのか・どこを改修すべきか、確認する必要があります。
- notnot
- ベストアンサー率47% (4900/10358)
>プログラミング言語の仕様というよりは、 >その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、 多くのプログラミング言語では、Windows環境の時だけファイル読み書きにバイナリモード・テキストモードというのがあり、Windowsのテキストモードだと、"\n" が "\r\n" と相互に書き換わります。 Unix/Linuxにはそういうモードはない(仮にモードの指定はエラーにならなくても無視される)ので常にWindowsでいうところのバイナリモードと同じ動きをします。なので、CRLFにしたければ "\r\n" を出力すれば良いです。
補足
ありがとうございます。 なるほど、そうなのですね。 ソースコードは、うろ覚えなので改めて確認しますが、 fopenの引数は、wかaしか書かれてなかった気がするので、あえてバイナリモード指定はされていません。 http://simd.jugem.jp/?eid=46 ただどの道、Solaris上であるため、無指定でもバイナリモードで開かれるということですね。 ありがとうございます。勉強になります。
- Tacosan
- ベストアンサー率23% (3656/15482)
いちばんがんばるなら バイナリモードにして \r\n を出力する のが正しいんだけど, Unix 限定だと思えば単純に \r\n を出力する だけでいい.
お礼
ありがとうございます。 本プログラムはSolaris上でしか動かさないです。 \r\n に変更するだけで良いのですね。 ありがとうございます。
お礼
ありがとうございます。 「だめ文字」という言葉を初めて知りました。 文字コード変換は怖いですね…。 C言語でなければならない理由は、 既存プログラムがC言語で作成されており、そのプログラムの改修であるためです。