C 读取文件数据而不将其写入内存

C 读取文件数据而不将其写入内存,c,file-io,C,File Io,我正在编写一个C代码,出于某种原因,我正在编写的代码只需要读取而不需要实际写入内存缓冲区。我可以方便地将数据写入一个伪局部变量,但将一些变量写入内存肯定会导致不必要的开销 int rdsize = 0; while (rdsize > SOME_BYTES) { rdsize += fread (/* SOME BUFFER */, 1, SOME_BYTES - rdsize, file); if (rdsize == -1) break; } 总之,我想让上面的代码在没有/*

我正在编写一个C代码,出于某种原因,我正在编写的代码只需要读取而不需要实际写入内存缓冲区。我可以方便地将数据写入一个伪局部变量,但将一些变量写入内存肯定会导致不必要的开销

int rdsize = 0;
while (rdsize > SOME_BYTES) {
  rdsize += fread (/* SOME BUFFER */, 1, SOME_BYTES - rdsize, file);
  if (rdsize == -1) break;
}

总之,我想让上面的代码在没有/*缓冲区的情况下工作。我该怎么做?关闭解决方案也非常受欢迎。

您可以使用
fseek
跳过任意数量的字节:

#include<stdio.h>

// Inside a function:
success = fseek(file, 1, SOME_BYTES - rdsize, SEEK_CUR);
#包括
//函数内部:
success=fseek(文件,1,一些字节-rdsize,SEEK\u CUR);

如果函数的目的只是了解文件的大小,则可以使用此函数:

int filesize(FILE *file ){
    int pos, size = -1;
    pos = fseek( file, 0, SEEK_CUR);         //save current position
    if( pos != -1 ){
              fseek(file, 0  , SEEK_END);    // move to end
       size = ftell(file);                   // get file size
              fseek(file, pos, SEEK_SET);    // rewind
    }
    return size;
}

您可以使用
fscanf
并放弃您所阅读的内容。这样做的实际原因会有所帮助。在我看来,仅仅丢弃读取的数据是不寻常和毫无意义的。但也许您的用例是一个例外。如果您不打算将其拉入内存,那么为什么要从媒体读取呢?这是个没用的手术。如果你不想要这些数据,就不用费心阅读了。如果你想得到阅读的副作用,告诉我们你想发生什么,我们也许可以帮助你。你想实现什么。或者换句话说:您的实际问题是什么?如果在林中读取文件并且没有缓冲区来接收它,是否实际执行了任何I/O?如果操作确实需要“跳过”一部分字节,那么您的问题就是正确的解决方案。谢谢