【问题标题】:How to use read() function to read data from a file in C?如何使用 read() 函数从 C 中的文件中读取数据?
【发布时间】:2022-01-09 20:05:45
【问题描述】:

我想从文件中读取数据,我需要以二进制形式打开文件并一次读取数据块?

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char* argv[])
{
  int n;
  FILE * fp;
  size_t nbyte;
  unsigned char * buffer[1024];
  fp=open("file_test.txt",O_RDONLY);
  read(fp,buffer,1);  
    printf("%s\n",buffer[0]);
    close(fp);
 
  return 0;
  
   

}

【问题讨论】:

  • 您查看过文档或学习资料吗?基本上你需要openreadclose。另请阅读:How to Ask
  • Documentation - 包括示例。
  • unsigned char * buffer[1024] -> unsigned char buffer[1024]。除此之外:你不检查open 是否成功,你只读取一个字节。

标签: c file


【解决方案1】:

open/readfopen/fread的POSIX版本,open不返回FILE*指针。

unsigned char * buffer[1024]; 用于字符串数组。你只需要一个缓冲区unsigned char buffer[1024];

printf("%s\n",...);用于打印c-string,一般不能打印二进制数据。

int main(void)
{
    int fin = open("file_test.txt", O_BINARY | O_RDONLY);
    if (!fin)
        return 0;
    unsigned char buffer[1024];
    while (1)
    {
        size_t size = read(fin, buffer,  sizeof(buffer));
        if (size == 0) 
            break;
        for (size_t i = 0; i < size; i++)
            printf("%02X ", buffer[i]);
        //break; print the whole file!
    }
    close(fin);
    return 0;
}

【讨论】:

  • 我认为他宁愿打开/读取/关闭而不是 fopen/fread/fclose。
  • @Jabberwocky 我改变了答案,因为问题是关于read(),但根据提问者的previous question fread 可能会这样做。
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多