Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 缓冲区大小和从文件读取_C_Linux - Fatal编程技术网

C 缓冲区大小和从文件读取

C 缓冲区大小和从文件读取,c,linux,C,Linux,我已经问了一个类似的问题,但我想现在问题不同了。。 我在eclipse上用C写,linux机器 我需要读取测试文件,每次尝试使用不同的缓冲区大小。。。 我知道如果缓冲区的大小太小,我需要在缓冲区上运行几次,但我不知道如何做到这一点 这是我的代码(当im在大小为67108864的缓冲区上运行时,im出现分段错误)。 *我编辑了我的代码 int main(void) { int fd; char* buff = malloc (67108864); if (buff){

我已经问了一个类似的问题,但我想现在问题不同了。。 我在eclipse上用C写,linux机器

我需要读取测试文件,每次尝试使用不同的缓冲区大小。。。 我知道如果缓冲区的大小太小,我需要在缓冲区上运行几次,但我不知道如何做到这一点

这是我的代码(当im在大小为67108864的缓冲区上运行时,im出现分段错误)。 *我编辑了我的代码

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 buff[67108864];

我不确定它对堆栈来说太大了。试着把它放在堆上。

这不是一个
字符[]

char* buff[67108864];
但是是一个
char*
数组。更改为:

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


@博巴,我想你是被建议把buff变成
char*
,而不是
char*[]使用动态分配的内存。在您使用的<代码> MaloC  -BTW中,您应该考虑撤销应用于先前问题的编辑,因为它使答案迷惑。无论如何,我在这里编辑了我的代码……你们能告诉我,如果现在看起来还好吗?它在我的机器上运行良好,67108864是2 **,并且是因为您的数据。类型为char(1字节),只有64MB,应该可以正常工作。您可能需要检查“read”函数的返回值,该值在出现错误时为-1。
char* buff = malloc(67108864);
if (buff)
{
    /* Use 'buff' and then release it. */

    free(buff);
}