`

linux c学习笔记----目录文件的操作(opendir,readdir,closedir)

阅读更多

注:为什么要说目录文件?其实在linux中目录也是一种文件,只是它的内容是上级的目录和当前目录下的文件信息等,详情可以看看相关深入的书籍

 

opendir(打开目录)


相关函数
open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include<sys/types.h>
#include<dirent.h>
定义函数
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
返回值
成功则返回DIR* 型态的目录流,打开失败则返回NULL。
错误代码
EACCESS 权限不足
EMFILE 已达到进程可同时打开的文件数上限。
ENFILE 已达到系统可同时打开的文件数上限。
ENOTDIR 参数name非真正的目录
ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。
ENOMEM 核心内存不足。

 

readdir(读取目录)

 

相关函数
open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include<sys/types.h>
#include<dirent.h>
定义函数
struct dirent * readdir(DIR * dir);
函数说明
readdir()返回参数dir目录流的下个目录进入点。
结构dirent定义如下
struct dirent
{
ino_t d_ino;
ff_t d_off;
signed short int d_reclen;
unsigned char d_type;
har d_name[256;
};
d_ino 此目录进入点的inode
d_off 目录文件开头至此目录进入点的位移
d_reclen _name的长度,不包含NULL字符
d_type d_name 所指的文件类型
d_name 文件名

返回值
成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL。
附加说明
EBADF参数dir为无效的目录流。

 

closedir(关闭目录)


相关函数
opendir
表头文件
#include<sys/types.h>
#include<dirent.h>
定义函数
int closedir(DIR *dir);
函数说明
closedir()关闭参数dir所指的目录流。
返回值
关闭成功则返回0,失败返回-1,错误原因存于errno 中。
错误代码
EBADF 参数dir为无效的目录流
范例
参考readir()。

 

下面我们开发一个小程序,这个程序有一个参数.如果这个参数是一个文件名,我们输出这

个文件的大小和最后修改的时间,如果是一个目录我们输出这个目录下所有文件的大小和

修改时间.

 

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <time.h>

static int get_file_size_time(const char *filename) {
    struct stat statbuf;
    if (stat(filename, &statbuf) == -1) {
        printf("Get stat on %s Error:%s\n",
                filename, strerror(errno));
        return (-1);
    }
    if (S_ISDIR(statbuf.st_mode))return (1);
    if (S_ISREG(statbuf.st_mode))
        printf("%s size:%ld bytes\tmodified at %s",
            filename, statbuf.st_size, ctime(&statbuf.st_mtime));
    return (0);
}

int main(int argc, char **argv) {
    DIR *dirp;
    struct dirent *direntp;
    int stats;
    char buf[80];
    if (argc != 2) {
        printf("Usage:%s filename\n\a", argv[0]);
        exit(1);
    }
    if (((stats = get_file_size_time(argv[1])) == 0) || (stats == -1))exit(1);
    if ((dirp = opendir(argv[1])) == NULL) {
        printf("Open Directory %s Error:%s\n",
                argv[1], strerror(errno));
        exit(1);
    }
    while ((direntp = readdir(dirp)) != NULL){
        sprintf(buf,"%s/%s",argv[1],direntp->d_name);
        if (get_file_size_time(buf) == -1)break;
    }
    closedir(dirp);
    exit(1);
}
 

 

分享到:
评论

相关推荐

    Linux下C语言编程--文件操作.rar_c 五子棋_c++ 写文件 linux_linux shell_linux c_

    在Linux中,处理目录操作时,我们可以使用标准库的`opendir()`、`readdir()`和`closedir()`函数。`opendir()`打开一个目录,`readdir()`读取目录中的条目,`closedir()`关闭目录。以下是一个简单的遍历目录的例子: ...

    Linux下C语言编程--文件的操作

    根据提供的信息,我们可以详细探讨 Linux 下 C 语言编程中关于文件操作的相关知识点。这包括文件的创建、读写、属性管理、目录文件操作以及管道文件等主题。 ### 1. 文件的创建和读写 #### 系统调用 `open` `open...

    管理文件和目录之opendir和closedir目录

    Linux系统编程之opendir和closedir目录管理 在Linux系统编程中,文件和目录...opendir和closedir函数是Linux系统编程中管理文件和目录的重要函数,掌握这些函数可以帮助我们更好地管理文件和目录,实现更多的功能。

    readdir,opendir,closedir详解

    在Linux和Unix-like系统中,以及许多支持POSIX标准的操作系统中,`readdir`, `opendir`, 和 `closedir` 是一组用于遍历目录内容的重要C语言函数。这些函数是标准C库(`&lt;dirent.h&gt;`)的一部分,允许程序员以结构化的...

    Linux C语言 遍历目录搜索文件的C源程序,支持嵌套目录搜索。

    相关函数是opendir -&gt; readdir -&gt; closedir 这样是不能遍历目录中的所有文件。 //LINUX下目录遍历搜索文件程序,支持嵌套目录 #include #include #include &lt;sys/types.h&gt; #include &lt;dirent.h&gt; #include ...

    深入探索C语言中的目录读取:使用`opendir`、`readdir`和`closedir`

    C标准库提供了一组函数来处理目录,包括opendir、readdir和closedir。本文将详细介绍这些函数的使用方法、应用场景以及如何通过代码实现目录内容的读取。 opendir、readdir和closedir是C语言中用于读取目录内容的一...

    嵌入式Linux高级编程--02posix_目录操作.ppt

    在这一主题中,我们重点关注的是POSIX(Portable Operating System Interface)标准下的目录操作和文件属性查询。POSIX是UNIX系统的一个子集,旨在提供跨多个操作系统平台的兼容性。 1. **与目录相关的操作** - *...

    linux c 实现遍历指定路径下的文件夹及文件

    这个程序的核心在于使用Linux系统调用,如`opendir()`、`readdir()`和`closedir()`,来读取目录内容,并通过递归的方式处理子目录。以下是对这个主题的详细阐述: 首先,`opendir()`函数用于打开一个目录流,返回一...

    C语言课程设计-文件管理系统

    在C语言课程设计中,构建一个文件管理系统是一个实用且具有挑战性的项目,它涉及操作系统接口、文件操作和基本的文件系统交互。以下是该系统中涉及的一些核心知识点: 1. **目录操作**: - `opendir()`:打开指定...

    linux 系统命令 ls -l命令的实现

    在Linux操作系统中,`ls` 是一个非常基础且常用的命令,用于列出目录中的文件和子目录。`ls -l` 命令是其一种扩展形式,提供了更详细的信息展示,包括文件权限、所有者、组、大小、修改日期以及文件或链接的名称。这...

    linux_ls_-l.zip_linux c ls_ls_l linux

    - 使用`opendir()`, `readdir()`, `closedir()`进行目录操作。 - 主函数中调用上述函数,构建并输出`ls -l`风格的列表。 编写这样的程序可以深入理解文件系统的操作,以及C语言如何与系统接口交互。此外,通过此...

    linux 实现cp -r命令

    在C语言中,我们需要使用标准库函数,如`opendir()`、`readdir()`和`mkdir()`等来遍历目录和创建新目录,使用`stat()`来获取文件信息,以及`open()`, `read()`, `write()` 和 `close()` 来读取、写入和关闭文件。...

    linux-scan-dir.rar_LINUX 遍历文件

    总之,Linux下的目录遍历是通过系统调用`opendir()`、`readdir()`和`closedir()`完成的,这为开发者提供了灵活的文件系统操作能力。掌握这些基础知识对于任何Linux开发人员来说都至关重要,无论是编写简单的脚本还是...

    linux-sys.zh

    - `opendir/fdopendir`:打开目录流。 - `readdir`:读取目录条目。 - `closedir`:关闭目录流。 - **递归遍历目录**:使用递归算法遍历整个目录树。 - **VFS虚拟文件系统**: - `dup/dup2`:复制文件描述符。...

    PHP学习笔记之目录与文件操作

    本篇学习笔记将深入探讨这些主题,帮助开发者更好地理解和应用PHP进行文件系统操作。 1. **文件操作** - `file_get_contents()`:用于读取一个文件的全部内容,返回一个字符串。 - `file_put_contents()`:向文件...

    Linux下C语言,拷贝目录树

    - `opendir`, `readdir`, `closedir`: 这些函数用于打开、读取和关闭目录流。 3. **文件属性操作:** - `stat`: 获取文件的状态信息。 - `chmod`: 改变文件的权限。 - `chown`: 改变文件的所有者。 4. **路径...

    管理文件和目录之readdir读取目录信息

    在 Linux 系统编程中,管理文件和目录是非常重要的一部分,而 readdir 函数则是读取目录信息的关键函数之一。在本节中,我们将详细介绍 readdir 函数的使用方法和原理,以及其在实际开发中的应用。 一、readdir ...

    Linux下的SFTP C语言客户端,包括SFTP下载、上传、list目录和创建目录

    开发者会使用libssh2_sftp_opendir()打开一个远程目录,接着调用libssh2_sftp.readdir()循环遍历目录中的每个条目,获取文件或子目录的信息,如文件名、大小、权限等。 `upload.c`文件则包含上传文件到SFTP服务器的...

    C语言遍历文件下指定后缀文件(包括子文件夹)

    在C语言中,遍历一个目录下的所有文件以及其子目录中的特定后缀文件是一项常见的任务,这在处理大量数据或者需要对特定类型文件进行操作时尤其有用。本知识点将详细讲解如何实现这一功能。 首先,我们需要理解C语言...

    LINUX编程-实验四Linux的文件处理.pdf

    在Linux编程中,文件处理是核心部分之一,它涉及到对文件的创建、读取、写入、关闭等操作。实验四旨在让学生深入理解Linux下的文件系统调用以及目录信息的处理。以下是关于这个实验涉及的一些关键知识点的详细说明:...

Global site tag (gtag.js) - Google Analytics