2013-03-18 73 views
0

我使用SYS/stat.h返回錯誤的大小

  1. unistd.h中
  2. SYS/stat.h

,什麼是有趣的是,st_size比返回的值越大read()後? st.st_size返回644 - read()返回606, 有什麼想法?

+1

顯示一些代碼。 – piokuc 2013-03-18 20:44:25

+0

是否將文件描述符設置爲非阻塞?該文件是一個普通的磁盤文件,還是有什麼特別的。也顯示一些代碼。 – selbie 2013-03-18 20:45:53

+1

'read()'被允許讀取並返回比請求更少的字節... – twalberg 2013-03-18 20:48:35

回答

0

流的文件大小和大小可能不匹配。例如,當您以文本模式打開文件時,OS可以將多字節EOL序列轉換爲單個字符。這通常在Windows上可見,但如果您在Linux上有Windows文件,則效果可能相同。

0

內存分配在多個塊(st_blocks)中。您注意到的剩餘字節是由於塊對齊。

如果檢查st.st_blocks的價值,你會看到這是一個644好除數,而不是606

所以,如果你想知道的數據所佔用的實際大小,不使用st_size

相關問題