linux中的目录操作函数

简介: 本文详细介绍了Linux系统编程中常用的目录操作函数,包括创建目录、删除目录、读取目录内容、遍历目录树以及获取和修改目录属性。这些函数是进行文件系统操作的基础,通过示例代码展示了其具体用法。希望本文能帮助您更好地理解和应用这些目录操作函数,提高系统编程的效率和能力。

Linux中的目录操作函数

在Linux系统编程中,目录操作是一个常见的任务。目录操作包括创建、删除、读取目录内容以及遍历目录树等。本文将详细介绍Linux中常用的目录操作函数,包括其用法和示例代码。

一、创建目录

1.1 mkdir函数

mkdir函数用于创建一个新目录。其原型定义在 <sys/stat.h>头文件中:

#include <sys/stat.h>
#include <sys/types.h>

int mkdir(const char *pathname, mode_t mode);
​
AI 代码解读
  • pathname:要创建的目录路径。
  • mode:新目录的权限位。

示例代码:

#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

int main() {
    const char *dir = "/tmp/newdir";
    mode_t mode = 0755;

    if (mkdir(dir, mode) == 0) {
        printf("Directory created successfully.\n");
    } else {
        perror("mkdir");
    }

    return 0;
}
​
AI 代码解读

二、删除目录

2.1 rmdir函数

rmdir函数用于删除一个空目录。其原型定义在 <unistd.h>头文件中:

#include <unistd.h>

int rmdir(const char *pathname);
​
AI 代码解读
  • pathname:要删除的目录路径。

示例代码:

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

int main() {
    const char *dir = "/tmp/newdir";

    if (rmdir(dir) == 0) {
        printf("Directory deleted successfully.\n");
    } else {
        perror("rmdir");
    }

    return 0;
}
​
AI 代码解读

三、读取目录内容

3.1 opendir函数

opendir函数用于打开一个目录。其原型定义在 <dirent.h>头文件中:

#include <dirent.h>

DIR *opendir(const char *name);
​
AI 代码解读
  • name:要打开的目录路径。

3.2 readdir函数

readdir函数用于读取目录中的下一个条目。其原型定义在 <dirent.h>头文件中:

#include <dirent.h>

struct dirent *readdir(DIR *dirp);
​
AI 代码解读
  • dirp:由 opendir返回的目录指针。

3.3 closedir函数

closedir函数用于关闭一个目录。其原型定义在 <dirent.h>头文件中:

#include <dirent.h>

int closedir(DIR *dirp);
​
AI 代码解读
  • dirp:由 opendir返回的目录指针。

示例代码:

#include <dirent.h>
#include <stdio.h>

int main() {
    const char *dir = "/tmp";
    DIR *dp;
    struct dirent *entry;

    dp = opendir(dir);
    if (dp == NULL) {
        perror("opendir");
        return 1;
    }

    while ((entry = readdir(dp)) != NULL) {
        printf("Name: %s\n", entry->d_name);
    }

    closedir(dp);
    return 0;
}
​
AI 代码解读

四、遍历目录树

4.1 nftw函数

nftw函数用于遍历目录树。其原型定义在 <ftw.h>头文件中:

#include <ftw.h>

int nftw(const char *dirpath,
         int (*fn) (const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf),
         int nopenfd, int flags);
​
AI 代码解读
  • dirpath:要遍历的目录路径。
  • fn:对每个文件调用的函数指针。
  • nopenfd:同时打开的文件描述符的最大数量。
  • flags:控制遍历行为的标志。

示例代码:

#include <ftw.h>
#include <stdio.h>
#include <sys/stat.h>

int display_info(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) {
    printf("Name: %s\n", fpath);
    return 0;
}

int main() {
    const char *dirpath = "/tmp";

    if (nftw(dirpath, display_info, 20, 0) == -1) {
        perror("nftw");
        return 1;
    }

    return 0;
}
​
AI 代码解读

五、获取和修改目录属性

5.1 stat函数

stat函数用于获取文件或目录的属性。其原型定义在 <sys/stat.h>头文件中:

#include <sys/stat.h>

int stat(const char *pathname, struct stat *statbuf);
​
AI 代码解读
  • pathname:文件或目录路径。
  • statbuf:用于存储文件属性的结构体。

5.2 chmod函数

chmod函数用于修改文件或目录的权限。其原型定义在 <sys/stat.h>头文件中:

#include <sys/stat.h>

int chmod(const char *pathname, mode_t mode);
​
AI 代码解读
  • pathname:文件或目录路径。
  • mode:新的权限位。

示例代码:

#include <sys/stat.h>
#include <stdio.h>

int main() {
    const char *dir = "/tmp/newdir";
    struct stat statbuf;

    if (stat(dir, &statbuf) == 0) {
        printf("Permissions: %o\n", statbuf.st_mode & 0777);
    } else {
        perror("stat");
    }

    if (chmod(dir, 0755) == 0) {
        printf("Permissions changed successfully.\n");
    } else {
        perror("chmod");
    }

    return 0;
}
​
AI 代码解读

六、总结

本文详细介绍了Linux系统编程中常用的目录操作函数,包括创建目录、删除目录、读取目录内容、遍历目录树以及获取和修改目录属性。这些函数是进行文件系统操作的基础,通过示例代码展示了其具体用法。希望本文能帮助您更好地理解和应用这些目录操作函数,提高系统编程的效率和能力。

目录
打赏
0
26
26
3
446
分享
相关文章
|
4月前
|
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
313 3
|
8天前
|
Linux目录删除指南:彻底解决“Is a directory”错误
在 Linux 系统中遇到 `cannot remove &#39;xxx&#39;: Is a directory` 错误,是因为删除目录时未使用正确参数。解决方法包括:1) 使用 `rmdir` 删除空目录或 `rm -r` 删除非空目录;2) 检查并调整目录权限(如通过 `sudo` 提权);3) 处理特殊场景,例如文件属性异常、特殊字符或进程占用;4) 替代方法如 `find -delete` 或文件系统修复。操作前建议备份数据,并启用防误删功能(如 `alias rm=&#39;rm -i&#39;`)。掌握 `rm` 和 `rmdir` 的区别是关键。
38 1
|
1月前
|
Linux文件与目录的日常
目录的切换 一般使用(”pwd“)显示当前所在的目录 比如:当前目录是在home下面的,与用户名相同的文件夹,可以使用(”cd“)命令来切换目录; 进入下载目录(”cd home/a/下载“)这种从给目录开头的一长串路经”叫做绝对路径“; 进入图片目录(”cd .. /图片/“)".."代表当前路径的上级路径,相对于当前的目录而言的”叫做相对路径“,(”.“)代表当前路径; 如果,想快速切换,上一个所在目录可以(”cd - / cd..“); 如果,想快速切换,追原始的目录可以(”cd --“); 查看目录及文件
42 14
|
3月前
|
【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
System V信号量的概念及其在Linux中的使用,包括 `semget()`、`semctl()`和 `semop()`函数的具体使用方法。通过实际代码示例,演示了如何创建、初始化和使用信号量进行进程间同步。掌握这些知识,可以有效解决多进程编程中的同步问题,提高程序的可靠性和稳定性。
135 19
linux m、mm、mmm函数和make的区别
通过理解和合理使用这些命令,可以更高效地进行项目构建和管理,特别是在复杂的 Android 开发环境中。
102 18
|
3月前
|
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
225 8
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
145 13
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
378 3
|
4月前
|
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下文件数量是常见的需求。本文介绍了四种方法:使用 `ls` 和 `wc` 组合、`find` 命令、`tree` 命令以及编程实现(如 Python)。每种方法都附有详细说明和示例,适合不同水平的用户学习和使用。掌握这些技巧,可以有效提升系统管理和日常使用的效率。
2411 6
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
通过以上步骤,可以有效地解决 `HADOOP_HOME`和 `JAVA_HOME`删除后依然指向旧目录的问题。确保在所有相关的配置文件中正确设置和删除环境变量,并刷新当前会话,使更改生效。通过这些措施,能够确保系统环境变量的正确性和一致性。
59 1