[英]How to read a large file with function read() in C
阿羅哈,
我是新來的,所以請放輕松。 我正在嘗試使用read()
函數read()
文件,然后write()
文件或文件描述符。 我的函數成功讀取了一個文件,但是當我嘗試讀取一個較大的文件時(在我的示例中為40,000字節),會出現問題。
我認為我必須編寫一個while循環,該循環將一直讀取到文件末尾,但我仍然堅持如何循環的想法。
(我在程序主體中打開文件或文件描述符)
我的函數(還轉換二進制輸入char數據並寫入ASCII):
void function(int readFrom,int writeOn){
char buffer[100];
int x = read(readFrom, buffer, sizeof(buffer));
int size= x/8;
int i;
for(i=0; i<size; i++){
char temp[sizeof(int)-1];
sprintf(temp,"%d",buffer[i];
write(writeOn, temp, sizeof(temp));
}
}
您需要檢查read
和write
函數的返回值。 它們返回的讀/寫字節數可能小於您作為第三個參數傳遞的字節數。 無論read
和write
必須像一個循環來實現:
int bytesRead = 0;
while (bytesRead < sizeof(buffer)) {
int ret = read(readFrom, buffer + bytesRead, sizeof(buffer) - bytesRead);
if (ret == 0)
break; / * EOF */
if (ret == -1) {
/* Handle error */
}
bytesRead += ret;
}
您可以使用sprintf()
將字符從buffer
轉換為非常小的緩沖區temp
。 在大多數當前系統上, int
是4個字節,因此您的printf會導致大於99
(ASCII字母'c'
)的char
值導致緩沖區溢出。 請注意, char
可以默認為帶符號,因此小於-99
負值將需要5個字節來進行字符串轉換:3位數字,減號和空終止符。
您應該使此緩沖區更大。
此外,我不明白為什么您只處理read()
函數read()
的緩沖區中的x/8
字節。 您的功能用途不明確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.