0
我有一个奇怪的问题,试图用open(),read()和write()来读写9k字节。当我试图将9k写入文件并读回时,数据只能达到2250字节。之后,一切都是零。iOS上的read()/ write()调用似乎受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.
9000字节== 2250整数(在此架构上)。 – ughoavgfhw 2013-02-13 19:42:21
谢谢,解决了它(: – Locksleyu 2013-02-15 18:18:25