iOS上的文件io-read()/write()调用似乎受到2250字节的限制



我在尝试用open()、read()和write()读取和写入9k字节时遇到了一个奇怪的问题。当我试图向文件写入9k并将其读回时,数据最多只能达到2250字节。在那之后,所有的东西都是零。

这是我的代码(除了文件名不相关,我只是把它放在NSDocumentDirectory中):

int fp = open([appFile cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR | O_CREAT, 0644);
[_detailViewController log:@"first open() returns %i (err: %i)", fp, errno];
 int data2[10000];
 int data3[10000];
 for (int i=0;i<10000;i++) data2[i] = 1;
 [_detailViewController log:@"resetting seek to 0"];
 int seekPos = lseek(fp, 0, SEEK_SET);
 result = write(fp, data2, 9000);
 [_detailViewController log:@"wrote 9k, result is %i", result];
 [_detailViewController log:@"resetting seek to 0"];
 seekPos = lseek(fp, 0, SEEK_SET);
 result = read(fp, data3, 9000);
 [_detailViewController log:@"read 9k, result is %i", result];
 [_detailViewController log:@"values of data2[2248-2252] = 0x%x 0x%x 0x%x 0x%x 0x%x", data2[2248], data2[2249], data2[2250], data2[2251], data2[2252]];
 [_detailViewController log:@"values of data3[2248-2252] = 0x%x 0x%x 0x%x 0x%x 0x%x", data3[2248], data3[2249], data3[2250], data3[2251], data3[2252]];
 close(fp);

这是一个奇怪的输出:

2013-02-13 14:08:38.290 FileTester[2800:907] first open() returns 6 (err: 3)
2013-02-13 14:08:38.295 FileTester[2800:907] resetting seek to 0    
2013-02-13 14:08:38.301 FileTester[2800:907] wrote 9k, result is 9000
2013-02-13 14:08:38.306 FileTester[2800:907] resetting seek to 0
2013-02-13 14:08:38.311 FileTester[2800:907] read 9k, result is 9000
2013-02-13 14:08:38.319 FileTester[2800:907] values of data2[2248-2252] = 0x1 0x1 0x1 0x1 0x1
2013-02-13 14:08:38.327 FileTester[2800:907] values of data3[2248-2252] = 0x1 0x1 0x0 0x0 0x0

正如你在最后一行看到的,数据突然变为零。

你知道我可能做错了什么吗?真正让我着迷的是,read()和write()都返回9000。

正如ughoavgfhw所提到的(谢谢!),问题是我混淆了字节和int。9000个字节和2250个int是一样的,因为每个int是4个字节。

最新更新