ZBLOG

linux C 读取文件所有数据

在 Linux C 中,可以使用多种方法读取文件的所有数据。以下是几种常见的方法,包括使用 fopenfread,以及直接使用系统调用 openread。下面提供了示例代码。

方法 1:使用 fopenfread

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file = fopen("example.txt", "rb"); // 以二进制模式打开文件
    if (file == NULL) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    fseek(file, 0, SEEK_END); // 移动到文件末尾
    long filesize = ftell(file); // 获取文件大小
    fseek(file, 0, SEEK_SET); // 移动回文件开头

    char *buffer = malloc(filesize + 1); // 为文件内容分配内存
    if (buffer == NULL) {
        perror("Failed to allocate memory");
        fclose(file);
        return EXIT_FAILURE;
    }

    fread(buffer, 1, filesize, file); // 读取文件内容
    buffer[filesize] = '\0'; // 添加字符串结束符

    printf("File content:\n%s\n", buffer);

    free(buffer);
    fclose(file);
    
    return EXIT_SUCCESS;
}

方法 2:使用 openread

#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main() {
    int fd = open("example.txt", O_RDONLY); // 打开文件只读模式
    if (fd == -1) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    off_t filesize = lseek(fd, 0, SEEK_END); // 获取文件大小
    lseek(fd, 0, SEEK_SET); // 移动回文件开头

    char *buffer = malloc(filesize + 1); // 为文件内容分配内存
    if (buffer == NULL) {
        perror("Failed to allocate memory");
        close(fd);
        return EXIT_FAILURE;
    }

    ssize_t bytesRead = read(fd, buffer, filesize); // 从文件中读取数据
    if (bytesRead == -1) {
        perror("Failed to read file");
        free(buffer);
        close(fd);
        return EXIT_FAILURE;
    }
    
   buffer[filesRead] = '\0'; // 添加字符串结束符

   printf("File content:\n%s\n", buffer);

   free(buffer);
   close(fd);

   return EXIT_SUCCESS;
}

注意事项:

  • 请确保替换 "example.txt" 为实际要读取的文件路径。
  • 使用后需要释放动态分配的内存,以防止内存泄漏。
  • 对于大文件,最好逐块读取而不是一次性加载所有内容,以避免占用过多内存。
  • 当处理二进制数据时,记得选择合适的打开模式(例如 "rb")。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=7988

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?