在windows下使用mingw,在linux下工作的以下代码不起作用:
int fh = open(filename, O_RDONLY);
const int size=100000;
int bytesRead = read(fh, buffer, size);
该文件大于100k,但读取的字节数仅为232。我认为这与windows中的二进制文件有关?
这段带有ifstream的代码将在windows和Linux中运行。
ifstream in(filename, ios::binary);
const int size=100000;
in.read(buffer, size);
有没有办法让2级IO调用也能在windows上工作?
阅读手册是非常有用的技巧。
_读取
返回值
_read
返回读取的字节数,如果文件中剩余的字节数小于buffer_size,则可能小于buffer_size,或者如果文件是以文本模式打开的。在文本模式中,每个回车换行符对\r\n都替换为一个换行字符。返回值中只计算单行换行符。替换不会影响文件指针。
文本和二进制模式文件I/O
文件I/O操作以文本或二进制两种转换模式之一进行,具体取决于打开文件的模式。数据文件通常以文本模式处理。
使用函数
_set_fmode
更改新打开文件的默认模式。使用_get_fmode
查找当前默认模式初始默认设置为文本模式(_O_text(。通过在程序中设置全局变量
_fmode
,直接更改默认翻译模式。函数_set_fmode
设置该变量的值,但也可以直接设置。
open(filename, O_RDONLY);
默认情况下在Windows中以文本模式打开文件。
open(filename, O_RDONLY | O_BINARY);
在Windows中以二进制模式打开文件,如果文件中还有足够的字节,read
将读取所有请求的字节。