2013-02-13 46 views
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.

+0

9000字節== 2250整數(在此架構上)。 – ughoavgfhw 2013-02-13 19:42:21

+0

謝謝,解決了它(: – Locksleyu 2013-02-15 18:18:25

回答

0

正如ughoavgfhw提到的(謝謝!)問題是我在混合字節和整數。 9000字節與2250個整數是相同的,因爲每個int都是4個字節。

相關問題