在C中自动检测操作系统,并处理其特定的换行符

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

我需要这个程序,它应该读取文本文件的二进制和匹配与其他string的文件的子串。 这应该在Windows和Linux上工作。

谢谢你的帮助!

您不需要知道本机存储格式。 读取文件时,无法知道它是在Window,Linux还是其他系统上创建的 – 可以在另一个系统上创建,而不是在您正在使用的系统上创建。 在编写时 ,您的程序将为您的操作系统使用本地库,并输出它认为适合于\n任何内容。

读取文本文件行结束agnostically归结为:

  1. 使用二进制模式,而不是“文本模式”(你似乎已经这样做)。
  2. 阅读文本,直到遇到\r\n
  3. 如果你得到一个\r ,跳过所有的下一个\n ;
  4. 如果您收到\n ,请稍后跳过\r

这将适用于\n (Linux和其他类Unix操作系统,如Mac OS X),Windows \r\n和仅以\r结尾的旧版Mac OS文件的行结尾。 这涵盖了您可能遇到的所有“普通”文本文件的大约99.99%。 曾经是一个非常罕见的使用\r\n\n (或可能\n\r\r ),但即使这将被正确处理。

最好的办法是检查一个预定义的宏和#ifdef就可以了。 您可以使用该命令打印所有预定义的MACRO

 gcc -dM -E - < /dev/null 

grep为“LINUX”或“WIN32”

我期望找到在Linux机器上定义的_ LINUX _和在Windows机器上定义的_ WIN32 _。