C 中 File I/O 中的二进制模式和文本模式

Binary mode and Text mode in File I/O in C

Text ModeBinary Mode 中打开文件时我有点困惑。我阅读了一些文档和示例,观察到它在 Text ModeBinary Mode 中使用了 getc()-putc()fgets()-fputs()。我可以在 Text Mode 中打开一个文件以使用 fread()-fwrite() 还是我应该只使用 Binary Mode 用于二进制 I/O 函数,如 fread()-fwrite()。 要使用 fseek()ftell() 我应该使用哪种模式 Text ModeBinary Mode ?

我正在使用 C 编程语言和 Linux 发行版 (fedora)。

您可以在文本和二进制中使用 freadfwrite,尽管它们更常用于二进制。您还可以在两种模式下使用 fseekftellwb(写入二进制)和 w(写入文本))

在 Unix 系统中(尤其是 linux),二进制模式和文本模式之间没有区别(库只是忽略了 t 限定符),但在其他系统中则不同。在Windows中,行尾用\r\n个字符的序列表示,在输入时被转换成\n,而在输出时,\n被转换成一个序列\r\n 个文本文件。二进制文件根本没有被转换,所以没有转换,无论是在输入还是在输出中。您必须证明此转换是不可逆的,因为您不知道字符或序列是否已转换,因为它们是在过程中转换的,还是已经以读取的形式存在。

文本模式意味着您的文件是文本文件,并且将被转换以符合操作系统的行结束方式。如果它实际上是文本,通常这不是问题,但如果您使用实际二进制文件(例如压缩文件或 .jpg 图像)执行此操作,结果将不可预测。