2015-06-10 26 views
-1

它有嗎?我一直對這種東西模糊,但如果我有這樣的:C - does read()添加' 0'嗎?

char buf[256]; 
read(fd, buf, 256); 

write(fd2, buf, 256); 

是否有潛在的錯誤在這裏,不到哪裏這些函數返回-1的情況下,其他的?

如果它只能讀取40個字符,它會在它之後放一個\ 0嗎? (而且會寫認識到,\ 0,並停止? 另外,如果它是閱讀256個字符,是有一個\ 0後的256?

+0

編號'read(2)'不會添加零終止符,即使它只能讀取小於請求的字節數。 –

+2

當你有這樣的疑惑時,理解答案的最快和最可靠的方法就是閱讀文檔。有在線資源,有手冊頁等。 –

回答

6

並讀取數據()加上 '\ 0'

不,它沒有它只是讀取

?。

read()'s documentation

讀()函數應嘗試從與打開文件描述符,fildes關聯的文件中讀出字節nbyte,到緩衝區指向buf中。


是否有潛在的錯誤在這裏,不到哪裏這些函數返回-1的情況下,其他的?

read()可能會返回0指示文件結束。

如果讀取(也來自套接字描述符)read()不一定讀取的字節數與它被告知的一樣多。因此,在這種情況下,不要只測試-1的讀取結果,還要將它與函數被告知要讀取的字節數進行比較。


的一般注意事項:

功能做的是記錄(至少爲C語言的正確實現)。您的假設(自主設置0終止,檢測後者)都沒有記錄。

+0

'read()'也可以返回一個介於0和256之間的值,即使當'fd'不是套接字描述符時。任何'read()'都應該檢查一個簡短的閱讀。 –

7

考慮閱讀二進制數據(如照片從文件):增加額外的字節將破壞

1

從手冊頁:

Synopsis 

#include <unistd.h> 
ssize_t read(int fd, void *buf, size_t count); 

也就是說void *,不char *,因爲read()讀取字節,而不是字符。它讀取零字節以及任何其他值,並且由於字節塊(與字符串相反)不會終止,所以read()不會。

0

是否必須?

除非從文件中成功讀取的數據包含'\0' ...

這裏有錯誤的可能性,除了這些函數返回-1的情況嗎?

是的。 read返回讀取的實際字節數(或負值表示失敗)。如果你選擇write以上的字節數到你的其他文件中,那麼你正在編寫潛在的垃圾。