Matlab的fwrite:跳过的字节会发生什么?

New*_*yes 6 linux ubuntu matlab skip fwrite

假设我有以下代码:

fid = fopen(my_filename,'w','ieee-le','ISO-8859-1');
fwrite(fid,1,'short',10,'ieee-le')
Run Code Online (Sandbox Code Playgroud)

然后这将打开一个早期指定的文件,跳过前10个字节并将1写入以下两个.

但前十个字节会发生什么,假设打开的文件以前不存在?如果我要访问一个,我最终会得到什么?为什么?

Cri*_*ngo 1

来自POSIX 文档

fseek()函数应允许将文件位置指示符设置为超出文件中现有数据的末尾。如果稍后在此时写入数据,则后续读取间隙中的数据将返回值为 0 的字节,直到数据实际写入间隙为止。

因此,假设 MATLABfwrite使用fseek跳过再见(这很有可能),那么在任何 POSIX 体系结构(Linux、MacOS)上,文件末尾之后跳过的字节都将用零填充。Windows 则不一定如此,因为 Windows 不是 POSIX。

MacOS 上的快速测试证实了此行为:

fn = 'test.bin';
fid = fopen(fn,'wb');
fwrite(fid,1,'uchar',10);
fclose(fid);
fid = fopen(fn,'r');
fread(fid,Inf,'uchar')
fclose(fid);
Run Code Online (Sandbox Code Playgroud)

输出:

ans =
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     1
Run Code Online (Sandbox Code Playgroud)