由参数b的想到的
在使用PHP时,过去有时会使用fopen(),但现在经常使用file_get_contents()。当时我在他们的参数表里看到了参数“b”。当时没怎么关注,只知道是二进制的意思。最近经过专门的观察,发现这个参数原本是指定打开的文件是否是二进制文件,或者更正确的说法是文件是否以二进制模式打开。
经过进一步的研究,取得了一些成果。因为Linux不区分二进制文件和文本文件,所以在Linux下使用上述两个函数时,添加或不添加参数“b”没有区别,但在Windows下有区别。Windows在二进制模式下打开文件,和Linux是一样的,但是在文本模式下打开文件,会自动翻译文件。换行符就是一个例子。在Linux中,换行符是“\n”,无论是二进制文件还是文本文件。但是在Windows中,文本文件中的换行符是“\r\n”,这会给文件操作带来一些麻烦,所以需要指定是以二进制模式(参数B)还是文本模式(参数T)打开文件。
在C语言方面,也是如此。下面三个函数用于在c中打开标准I/O库中的文件.
FILE * fopen(const char * pathname,const char * type);
FILE * freopen(const char * pathname,const char *type,FILE * FP);
FILE *fdopen(int filedes,const char * type);
type参数指定I/O流的读写方式,如下
类型描述
r或rb打开读
w或wb使文件长度为0,或创建
a或ab添加写;在文件末尾打开进行写入,或创建进行写入
r+或r+b或rb+打开进行读取和写入
w+或w+b或wb+使文件为0长,或打开进行读取和写入
a+或a+b或ab+在文件末尾打开或创建进行读取和写入。我相信PHP的源代码中的C是这样写的。
虽然在Linux中不需要指定这个参数,但是值得注意的是,为了保证可移植性,或者将来是否会移植到其他操作系统,比如Windows,还是添加一下比较好。
0条评论