簡體   English   中英

如何在C中使用函數read()讀取大文件

[英]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));
    }
}

您需要檢查readwrite函數的返回值。 它們返回的讀/寫字節數可能小於您作為第三個參數傳遞的字節數。 無論readwrite必須像一個循環來實現:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM