【问题标题】:Low-level read file [closed]低级读取文件[关闭]
【发布时间】:2012-12-29 22:04:20
【问题描述】:
#include <fcntl.h> 
#include <stdio.h> 
#include <string.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main (int argc, char* argv[]) 

{

  char* filename = argv[1]; 

  /* Open the file for writing. If it exists, append to it; 

     otherwise, create a new file.  */ 

  int fd = open (filename, O_RDONLY | O_CREAT | O_APPEND, 0666); 

// Reading file probleme

  close (fd); 

  return 0; 

} 

我的问题是我真的找不到如何读取缓冲区。我在文件中只有整数,但我怎样才能从它读取到该缓冲区?我找不到实现这一目标的函数。

【问题讨论】:

  • 在我看来你的问题可以通过阅读教程来解决。

标签: c linux file


【解决方案1】:

您是否将整数表示为字符串或字节?如果字符串只是在缓冲区上使用sscanf 来读取它。对于字节表示,您可以从缓冲区中读取原始字节。

【讨论】:

  • 我只能使用低级函数,这是一个更大问题的示例问题。它在整数上。
  • @user1922551 “低级”函数是什么意思?使用 read() 将内容读入缓冲区并使用 sscanf 从该缓冲区中读取整数。
  • @user1922551:低级是一个很主观的东西。 read() 系统调用是非常高级的一些,但对其他人来说是低级的。
【解决方案2】:

您要查找的函数称为“读取”。但是,您必须将之前已经分配的缓冲区传递给它。像这样的东西应该可以工作:

if (fd) {
  char buffer[1024];
  int n = read(fd, buffer, 1024);

  /* ... */
}

在调用之后,n 将包含从 fd 读取的字节数(如果发生错误,则为 0 或小于 0)。

如果您在该文件中有原始整数,则可以像这样访问它们:

int *ibuffer = (int*)buffer;

ibuffer 是一个长度为 1024/sizeof(int) 的整数数组,其中包含 fd 中的第一个 n/sizeof(int) 个连续整数。严格来说,这不是完全合法的 C,但我最近还没有看到这样的架构。

【讨论】:

  • 如果我有超过 1024 个,我需要重新读取,我会将缓冲区分配到另一个?整数以二进制形式表示。
  • 最好在循环中执行 read() 并使用 malloc() 动态分配 buffer,然后使用 realloc() 增加其大小。但是,如果您以前从未这样做过,那么这个过程可能会相当令人生畏。但是,根据您要运行该程序的体系结构,您应该可以将缓冲区的大小增加到大约 8 mibibytes - 即 (8*1024*1024)。 (我以前做过一些测试,那是事情开始出错的时候。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多