0

0

【Linux】Linux文件

蓮花仙者

蓮花仙者

发布时间:2025-04-19 20:15:57

|

1009人浏览过

|

来源于php中文网

原创

linux文件系统和操作方法

Linux文件系统的结构如下:

【Linux】Linux文件

  • root: 这是系统管理员(也称为超级管理员)的用户主目录。
  • bin: 这是Binary的缩写,存放最常用的命令。
  • boot: 这里存放启动Linux时使用的核心文件,包括一些连接文件和镜像文件。
  • dev: 这是Device(设备)的缩写,存放Linux的外部设备。Linux中访问设备的方式与访问文件的方式相同。
  • etc: 存放所有配置文件和系统管理所需的配置文件和子目录。
  • home: 用户的主目录,每个用户在Linux系统中都有一个以用户账号命名的目录。
  • var: 存放不断变化的文件数据,通常将经常被修改的目录放在这里,包括各种日志文件。
  • lib: 存放系统最基本的动态链接共享库,类似于Windows中的DLL文件,几乎所有应用程序都会用到这些共享库。
  • usr: 存放系统用户工具和程序,包括:
    • bin: 用户命令
    • sbin: 超级用户使用的管理程序和系统守护程序
    • include: 标准头文件
    • lib: 库文件
    • src: 内核源代码
  • tmp: 用于存放临时文件。
  • media: Linux系统会自动识别一些设备,如U盘、光驱等,并将这些设备挂载到这个目录下。
  • mnt: 用于临时挂载其他文件系统。
  • proc: 包含进程的相关信息。

Linux文件操作方式主要通过文件描述符(fd)进行底层文件操作(系统调用)以及使用I/O库函数。


Linux底层文件操作(关于文件的系统调用)


write函数的使用:

成功:返回实际写入的字节数
失败:返回-1,并设置错误号errno,可使用strerror(errno)查看错误信息
注意:从文件当前指针位置开始写入,文件刚打开时指针指向文件头。

示例:

#include 
#include 
#include 
#include 
int main(void) {
    char buff[] = "hello world\n";
    //1 2 都是输出到控制台
    int len = 0;
    len = write(1, buff, sizeof(buff)); //标准输出
    if (len != -1) {
        printf("写入成功,写入的字节数为:%d\n", len);
    } else {
        printf("写入失败,错误信息为:%s\n", strerror(errno));
    }
    return 0;
}

【Linux】Linux文件


read函数的使用:

返回值大于0——实际读取的字节数
返回值为0——已读到文件尾
返回值为-1——出错
注意:参数3表示最多能接受的字节数,而不是指一定要输入的字节数。

示例:

char buffer[1024];
int cnt = read(0, buffer, sizeof(buffer)); //从标准输入读
if (cnt > 0) {
    buffer[cnt] = '\0'; //确保字符串以空字符结尾
    printf("读取成功,读取的字节数为:%d,内容为:%s\n", cnt, buffer);
} else if (cnt == 0) {
    printf("已读到文件尾\n");
} else {
    printf("读取失败,错误信息为:%s\n", strerror(errno));
}

open函数的使用:

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

成功:返回文件描述符
失败:返回-1
打开方式:

  • O_RDONLY:只读
  • O_WRONLY:只写
  • O_RDWR:读写
  • O_CREAT:如果文件不存在,则创建该文件,并使用第三个参数设置权限;如果文件存在,则只打开文件。
  • O_EXCL:如果同时使用O_CREAT且文件已存在,则返回错误,用于防止多个进程同时创建同一个文件。
  • O_APPEND:尾部追加方式(打开后,文件指针指向文件的末尾)。
  • O_TRUNC:若文件存在,则长度被截为0,属性不变。

第三个参数:设置权限(略)

Hoppy Copy
Hoppy Copy

AI邮件营销文案平台

下载

注意:返回的文件描述符是该进程未打开的最小的文件描述符。

示例:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define FILE_RW_LEN 1024
int main(void) {
    //第二个参数-文件存在则无法打开
    //O_APPEND —— 追加
    int fd = open("./test_open.txt", O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH);
    int count = 0;
    char buffer[FILE_RW_LEN] = "hello i am test";
    if (fd != -1) {
        count = write(fd, buffer, strlen(buffer));
        if (count != -1) {
            printf("写入成功,写入的字节数为:%d\n", count);
        } else {
            printf("写入失败,错误信息为:%s\n", strerror(errno));
        }
        close(fd);
    } else {
        printf("打开文件失败,错误信息为:%s\n", strerror(errno));
    }
    return 0;
}

【Linux】Linux文件


close函数的使用:

int close(int fd);

成功:返回0
失败:返回-1

示例:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define FILE1_NAME "file1.txt"
#define FILE2_NAME "file2.txt"
int main(void) {
    int file1, file2;
    char buffer[4096];
    int len = 0;
    file1 = open(FILE1_NAME, O_RDONLY);
    if (file1 != -1) {
        file2 = open(FILE2_NAME, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
        if (file2 != -1) {
            while ((len = read(file1, buffer, sizeof(buffer))) > 0) {
                write(file2, buffer, len);
            }
            close(file2); //实战记得判断是否关闭成功
        } else {
            printf("无法打开文件%s,错误信息为:%s\n", FILE2_NAME, strerror(errno));
        }
        close(file1);
    } else {
        printf("无法打开文件%s,错误信息为:%s\n", FILE1_NAME, strerror(errno));
    }
    return 0;
}

观察耗时:
time xxx 程序总的执行时间
程序本身所消耗的时间
系统调用所消耗的时间

【Linux】Linux文件


lseek函数的使用:

off_t lseek(int fd, off_t offset, int whence);

成功:返回新的文件位置与文件头之间的偏移
失败:返回-1

示例:从一个文件偏移100处,拷贝100字节到另一个文件。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define FILE1_NAME "lseek_test.c"
#define FILE2_NAME "lseek_test2.txt"
#define SIZE 100
int main(void) {
    int file1, file2;
    char buffer[1024];
    int ret;
    file1 = open(FILE1_NAME, O_RDONLY);
    if (file1 != -1) {
        file2 = open(FILE2_NAME, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
        if (file2 != -1) {
            lseek(file1, 100, SEEK_SET); // 移动文件指针到偏移100处
            ret = read(file1, buffer, SIZE); // 读取100字节
            if (ret > 0) {
                buffer[ret] = '\0';
                write(file2, buffer, SIZE);
            }
            close(file1);
            close(file2);
        } else {
            printf("无法打开文件%s,错误信息为:%s\n", FILE2_NAME, strerror(errno));
        }
    } else {
        printf("无法打开文件%s,错误信息为:%s\n", FILE1_NAME, strerror(errno));
    }
    return 0;
}

ioctl函数的使用(嵌入式相关):

int ioctl(int fd, int cmd, [int *argdx, int argcx]);

fd是用户程序打开设备时使用open函数返回的文件标识符,cmd是用户程序对设备的控制命令,后面是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

280

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

254

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

121

2025.08.07

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

621

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1104

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

792

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

452

2023.08.02

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号