自动检测C中的OS并处理其特定的换行符

时间:2014-11-23 14:11:24

标签: c linux windows text-files newline

有没有办法检测编译C代码的操作系统,以便在文本文件中处理特定的换行符?例如,我在Windows机器上编译我的代码,它应该使用\ r \ n作为文本文件中的换行符,在Linux上它应该只使用\ n。

我需要这个程序,它应该读取文本文件二进制文件并匹配文件的子串与其他字符串。这应该适用于Windows和Linux。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您不需要知道本机存储格式。当读取文件时,您无法知道它是在Window,Linux还是其他系统上创建的 - 它可以在您正在处理的系统之外的其他系统上创建。当时,您的程序将使用您的操作系统的本机库并输出它认为适合\n的任何内容。

以非法方式阅读文本文件行结尾归结为:

  1. 使用二进制模式而不是"文本模式" (你似乎已经这样做了。)
  2. 阅读文字,直至遇到\r\n
  3. 如果您获得\r,请跳过所有下一个\n;
  4. 如果您获得\n,请跳过所有下一个\r
  5. 这适用于\n(Linux和其他类Unix操作系统,如Mac OS X),类似Windows的\r\n以及以\r结尾的旧Mac OS文件的行结尾只要。这涵盖了所有"正常"的约99.99%。您可能会遇到的文本文件。曾经有一个非常罕见的使用\r\n\n(或可能\n\r\r),但即使这样也会正确处理。

答案 1 :(得分:1)

最好的方法是检查预定义的宏和#ifdef。 您可以使用命令

打印所有预定义的MACRO
gcc -dM -E - < /dev/null

和grep for&#34; LINUX&#34;或&#34; WIN32&#34;

我希望在Linux机器上找到_ LINUX _,在Windows机器上定义_ WIN32 _。