它有嗎?我一直對這種東西模糊,但如果我有這樣的:C - does read()添加' 0'嗎?
char buf[256];
read(fd, buf, 256);
write(fd2, buf, 256);
是否有潛在的錯誤在這裏,不到哪裏這些函數返回-1的情況下,其他的?
如果它只能讀取40個字符,它會在它之後放一個\ 0嗎? (而且會寫認識到,\ 0,並停止? 另外,如果它是閱讀256個字符,是有一個\ 0後的256?
它有嗎?我一直對這種東西模糊,但如果我有這樣的:C - does read()添加' 0'嗎?
char buf[256];
read(fd, buf, 256);
write(fd2, buf, 256);
是否有潛在的錯誤在這裏,不到哪裏這些函數返回-1的情況下,其他的?
如果它只能讀取40個字符,它會在它之後放一個\ 0嗎? (而且會寫認識到,\ 0,並停止? 另外,如果它是閱讀256個字符,是有一個\ 0後的256?
並讀取數據()加上 '\ 0'
不,它沒有它只是讀取
?。讀()函數應嘗試從與打開文件描述符,fildes關聯的文件中讀出字節nbyte,到緩衝區指向buf中。
是否有潛在的錯誤在這裏,不到哪裏這些函數返回-1的情況下,其他的?
read()
可能會返回0
指示文件結束。
如果讀取(也來自套接字描述符)read()
不一定讀取的字節數與它被告知的一樣多。因此,在這種情況下,不要只測試-1
的讀取結果,還要將它與函數被告知要讀取的字節數進行比較。
的一般注意事項:
功能做的是記錄(至少爲C語言的正確實現)。您的假設(自主設置0終止,檢測後者)都沒有記錄。
'read()'也可以返回一個介於0和256之間的值,即使當'fd'不是套接字描述符時。任何'read()'都應該檢查一個簡短的閱讀。 –
號
考慮閱讀二進制數據(如照片從文件):增加額外的字節將破壞
從手冊頁:
Synopsis
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
也就是說void *
,不char *
,因爲read()
讀取字節,而不是字符。它讀取零字節以及任何其他值,並且由於字節塊(與字符串相反)不會終止,所以read()
不會。
是否必須?
除非從文件中成功讀取的數據包含'\0'
...
這裏有錯誤的可能性,除了這些函數返回-1的情況嗎?
是的。 read
返回讀取的實際字節數(或負值表示失敗)。如果你選擇write
以上的字節數到你的其他文件中,那麼你正在編寫潛在的垃圾。
編號'read(2)'不會添加零終止符,即使它只能讀取小於請求的字節數。 –
當你有這樣的疑惑時,理解答案的最快和最可靠的方法就是閱讀文檔。有在線資源,有手冊頁等。 –