当前位置: 首页 > article >正文

Linux 文件 I/O 基础

目录

前言

一、文件描述符(File Descriptor)

二、打开文件(open 函数)

三、读取文件(read 函数)

四、写入文件(write 函数)

五、关闭文件(close 函数) 

六、总结


前言

在 Linux 系统编程的世界里,文件 I/O 操作是至关重要的一环。无论是系统管理员进行配置文件的读写,还是开发者处理应用程序的数据存储与读取,掌握 Linux 文件 I/O 基础都是必备技能。今天,就让我们一同深入探索 Linux 文件 I/O 的基础知识。

一、文件描述符(File Descriptor)

在 Linux 中,文件描述符是一个非负整数,用于标识一个打开的文件。当我们打开一个文件时,操作系统会返回一个文件描述符,后续对该文件的操作(如读、写、关闭等)都通过这个文件描述符来进行。

例如,当我们使用 open 函数打开一个文件时:

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

int main() {
    int fd = open("test.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        return -1;
    }
    // 在这里可以使用 fd 对文件进行操作
    close(fd);
    return 0;
}

在上述代码中,open 函数尝试打开名为 "test.txt" 的文件,以只读方式(O_RDONLY)打开。如果打开成功,返回的文件描述符 fd 就可以用于后续的读操作,最后通过 close 函数关闭文件,释放相关资源。

二、打开文件(open 函数)

open 函数用于打开一个文件,其原型如下:

#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

pathname:要打开的文件的路径名。

flags:打开文件的标志,可以是以下常量的组合:

  • O_RDONLY:只读方式打开。
  • O_WRONLY:只写方式打开。
  • O_RDWR:可读可写方式打开。
  • 还有其他一些标志,如 O_CREAT(如果文件不存在则创建)、O_TRUNC(打开文件时将其截断为 0 长度)等。

 

mode:当使用 O_CREAT 标志创建文件时,需要指定文件的权限模式,例如 0644 表示所有者具有读写权限,组用户和其他用户具有读权限。

三、读取文件(read 函数)

read 函数用于从文件描述符指定的文件中读取数据,其原型为:

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);
  • fd:文件描述符。
  • buf:用于存储读取数据的缓冲区。
  • count:要读取的字节数。

例如:

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

int main() {
    int fd = open("test.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        return -1;
    }
    char buffer[100];
    ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
    if (bytesRead == -1) {
        perror("read");
        close(fd);
        return -1;
    }
    buffer[bytesRead] = '\0';
    printf("读取到的数据:%s\n", buffer);
    close(fd);
    return 0;
}

在这段代码中,首先打开文件,然后使用 read 函数从文件中读取数据到 buffer 中,最后将读取到的数据输出并关闭文件。

四、写入文件(write 函数)

write 函数用于向文件描述符指定的文件中写入数据,原型如下:

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);
  • fd:文件描述符。
  • buf:要写入的数据的缓冲区。
  • count:要写入的字节数。

例如:

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

int main() {
    int fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open");
        return -1;
    }
    const char *data = "Hello, Linux File I/O!";
    ssize_t bytesWritten = write(fd, data, strlen(data));
    if (bytesWritten == -1) {
        perror("write");
        close(fd);
        return -1;
    }
    printf("写入的字节数:%ld\n", bytesWritten);
    close(fd);
    return 0;
}

这段代码打开一个文件(如果不存在则创建,存在则截断),然后向文件中写入一个字符串,并输出写入的字节数,最后关闭文件。

五、关闭文件(close 函数) 

close 函数用于关闭一个打开的文件,释放相关资源,其原型为:

#include <unistd.h>

int close(int fd);
  • fd:要关闭的文件的文件描述符。

及时关闭文件是一个良好的编程习惯,可以避免资源泄漏和其他潜在的问题。

六、总结

Linux 文件 I/O 基础操作虽然看似简单,但却是系统编程中不可或缺的部分。通过熟练掌握文件描述符、打开、读取、写入和关闭文件等基本操作,我们可以在 Linux 系统上进行各种复杂的文件处理任务,为进一步深入学习系统编程打下坚实的基础。希望这篇文章能帮助你对 Linux 文件 I/O 有一个初步的理解和掌握。

 

 

 

 

 

 


http://www.kler.cn/a/454272.html

相关文章:

  • 机器人C++开源库The Robotics Library (RL)使用手册(三)
  • 变频器在电动机的节能原理是什么?
  • 深入解析 Tengine:高性能 Web 服务器与反向代理的企业级应用
  • ssh 完全命令行 登录服务器 , 无需交互的方法
  • Milvus×EasyAi:如何用java从零搭建人脸识别应用
  • 命令行之巅:Linux Shell编程的至高艺术(中)
  • 生活教育杂志社生活教育杂志生活教育编辑部2024年第10期目录
  • 【ArcGIS技巧】如何制作轨迹动画
  • docker基础命令入门、镜像、运行容器、操作容器
  • CentOS 下使用 xrandr 分屏输出问题: xrandr有概率设置分辨率失败
  • 微服务——服务通信与接口设计
  • FPGA远程升级 -- FLASH控制
  • 若依管理系统字典数组forEach改变原数组
  • Flutter web - 5 项目打包优化
  • NVIDIA GPU 内部架构介绍
  • 剑指Offer|LCR 014. 字符串的排列
  • Spring02 - 代理和事务篇
  • ModbusTCP从站转Profinet主站案例
  • LangChain教程 - 表达式语言 (LCEL) -构建智能链
  • windows下Redis的使用
  • Python vs PHP:哪种语言更适合网页抓取
  • 计算机基础复习12.22
  • 记录jvm进程号
  • jangow-01-1.0.1靶机
  • 16.3、网络安全风险评估项目流程与工作内容
  • 骑砍2霸主MOD开发(26)-Mono脚本系统