繁体   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