繁体   English   中英

缓冲区大小和文件读取

[英]Buffer size and reading from a file

我已经问过一个类似的问题,但我认为现在的问题有所不同。我在Eclipse,Linux机器上用C语言编写。

我需要读取测试文件,并每次尝试使用不同的缓冲区大小...如果缓冲区的大小太小,我知道我需要在缓冲区上运行几次,但是我不确定如何执行此操作...

这是我的代码(当即时消息在大小为67108864的缓冲区上运行时,我遇到了分段错误。*我编辑了代码

int main(void)
{   int fd;
    char* buff = malloc (67108864);
    if (buff){
    fd = open("testfile.txt", O_RDONLY);
    if (fd >= 0) {
        while (read(fd,buff,67108864)!=0){}
        close(fd);
    }
    }
free(buff);
return 0;
}

这不是一个char[]

char* buff[67108864];

但是是char*的数组。 改成:

char buff[67108864];

另外, buff的大小可能对于堆叠来说太大。 堆栈的典型大小为1MB(1048576字节),但buff的大小远远超过(64MB!),这将导致堆栈溢出错误。 如果您希望使用此缓冲区的缓冲区,请使用malloc()动态分配它,并稍后使用free()释放它:

char* buff = malloc(67108864);
if (buff)
{
    /* Use 'buff' and then release it. */

    free(buff);
}

删除* ,您要声明一个指针数组,但是需要一个字符数组。

   char buff[67108864];

我不确定67108864堆栈太大了。 尝试使其在堆上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM