`

目录相关函数

阅读更多
    用 mkdir 和 mkdirat 函数可以创建目录,用 rmdir 函数可以删除空目录。
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
int mkdirat(int fd, const char *pathname, mode_t mode);

#include <unistd.h>
int rmdir(const char *pathname);
                     /* 三个函数返回值:若成功,返回 0;否则,返回 -1 */

    前两个函数创建一个新的空目录,其中“.”和“..”目录项是自动创建的。所指定的文件访问权限 mode 由进程的文件模式创建屏蔽字修改。常见的错误是指定与文件相同的 mode(只指定读、写权限)。但对于目录,通常至少要设置一个执行权限位,以允许访问该目录中的文件名。
    mkdirat 和 mkdir 函数类似。当 fd 参数具有特殊值 AT_FDCWD 或者 pathname 参数指定了绝对路径名时,两者完全一样。否则,fd 参数是一个打开目录,相对路径名根据此打开目录进行计算。
    如果调用 rmdir 函数使目录的链接计数减为 0,并且也没有其他进程打开此目录,则释放由此目录占用的空间。如果在链接计数变为 0 时,有一个或多个进程打开此目录,则在此函数返回前删除最后一个链接以及“.”和“..”项。另外,在此目录中不能再创建新文件,但在最后一个进程关闭它之前并不释放此目录(即使另一些进程打开该目录,它们也不能在此目录下执行其他操作,因为为了保证 rmdir 函数成功执行,该目录必须是空的)。
    对某个目录具有访问权限的任一用户都可以读该目录,但为了防止文件系统产生混乱,只有内核才能写目录。一个目录的写权限位和执行权限位决定了在该目录中能否创建新文件以及删除文件,不过它们并不表示能否写目录本身。
    为了简化读目录的过程,UNIX 在 POSIX.1 中提供了一套与目录有关的函数。
#include <dirent.h>
DIR *opendir(const char *pathname);
DIR *fdopendir(int fd);
                      /* 两个函数的返回值:若成功,返回指针;否则,返回 NULL */
struct dirent *readdir(DIR *dp);
                      /* 返回值:若成功,返回指针;若在目录尾或出错,返回 NULL */
void rewinddir(DIR *dp);

int closedir(DIR *dp);       /* 返回值:若成功,返回 0;否则,返回 -1 */
long telldir(DIR *dp);       /* 返回值:与 dp 关联的目录中的当前位置 */
void seekdir(DIR *dp, long loc);

/*
struct dirent{
    ino_t d_ino;       // i-node 编号
    char d_name[];     // null 字符结尾的文件名
    ...
};
*/

    其中,fdopendir 函数可以把打开文件描述符转换成目录处理函数需要的 DIR 结构。DIR 结构是一个内部结构,用来保存目录的有关信息,类似于 FILE 结构。由 opendir 和 fdopendir 返回的指向 DIR 结构的指针由另外几个函数使用。opendir 执行初始化操作,使第一个 readdir 返回目录中的第一个目录项。DIR 结构由 fdopendir 创建时,readdir 返回的第一项取决于传给 fdopendir 函数的文件描述符相关联的文件偏移量。注意,目录中各目录项的顺序与实现有关,通常并不按字母顺序排列。

    每个进程都有一个当前工作目录。当用户登录到 UNIX 系统时,其当前工作目录通常是口令文件 /etc/password 中该用户登录项的第 6 个字段----用户的起始目录。进程可调用 getcwd、chdir 或 fchdir 函数来获取或更改当前工作目录(跟随符号链接)。
#include <unistd.h>
int chdir(const char *pathname);
int fchdir(int fd);
                           /* 返回值:若成功,都返回 0;否则,都返回 -1 */

char *getcwd(char *buf, size_t size);
                           /* 返回值:若成功,返回 buf;否则,返回 NULL */

    起始目录是登录名的一个属性,而当前工作目录是进程的一个属性,所以它只影响调用 chdir 的进程本身,而不影响其他进程,因此在子进程中改变当前目录对于父进程来说是不可见的。
    因为内核必须维护当前工作目录的信息,所以我们应当能获取其当前值。但遗憾的是,内核为每个进程只保存指向该目录 v 节点的指针等目录本身的信息,并不保存该目录的完整路径名(Linux 内核可以确定完整路径名。完整路径名的各个组成部分分布在 mount 表和 dcache 表中,然后进行重新组装,比如在读取 /proc/self/cwd 符号链接时)。因此 getcwd 就提供了一种功能,它需要两个参数,一个是缓冲区地址 buf,另一个是缓冲区的长度。从当前工作目录“.”开始,用“..”找到其上一级目录,然后读其目录项,直到该目录项中的 i 节点编号与工作目录的相同,这样就找到了其对应的文件名。按这种方法,逐层上移到根,这样就得到了当前工作目录网站的绝对路径名。
分享到:
评论

相关推荐

    linux目录操作函数汇总 遍历,改变路径等

    此操作对后续对路径的处理和工作目录相关的系统调用有直接影响。 2. chmod函数:用于改变文件或目录的权限。函数原型为`int chmod(const char *path, mode_t mode);`,当成功改变权限时返回0,否则返回-1,并设置...

    VC++ 函数经典 目录+内容

    在"VC++ 函数经典"中,你可能会找到以下几类函数的相关知识: 1. **基本函数**:包括输入/输出函数(如cin和cout),控制流程函数(如if、switch、for、while等),以及类型转换函数(如static_cast、dynamic_cast...

    文件及目录操作函数封装

    "文件及目录操作函数封装"是一个实用的工具集,它整合了多种用于处理文件和目录的操作,使得开发者无需频繁查找API,可以更加便捷地进行相关工作。这个工具集可能包括创建、删除、读取、写入、移动、复制文件,以及...

    2021新函数excel函数公式大全模板教程电子表格Excel office wps

    下面我们将深入探讨相关知识点: 1. **新函数介绍**:每年Excel和WPS Office都会引入新的函数,以满足日益复杂的数据需求。这些新函数可能包括统计分析、日期与时间处理、文本操作等方面,如:`LET()`、`XMATCH()`...

    PHP 文件操作函数

    遍历目录,`scandir()`函数会返回目录中的所有文件和子目录。`chdir()`改变当前工作目录,而`getcwd()`则用于获取当前工作目录。 4. **文件属性与权限** `file_exists()`检查文件或目录是否存在,`is_file()`和`is...

    Matlab函数库,matlab函数库在哪个文件夹,matlab

    在实际操作中,用户可以通过MATLAB的命令窗口(Command Window)输入`help`或者`doc`命令,配合函数名称来查询相关函数的详细信息。同时,MATLAB的在线帮助系统也非常强大,提供了搜索、索引和相关主题等功能,使得...

    浏览目录的API函数,通用浏览目录对话框(2KB)...

    标题中的“浏览目录的API函数,通用浏览目录对话框”是指在编程中使用API(应用程序接口)来实现一个通用的对话框,让用户能够选择或浏览计算机上的目录。这个功能常见于许多应用程序,如文件保存或打开对话框。API...

    php圣经 php bible

    LDAP 目录协议函数库 电子邮件函数库 数学运算函数库 mcrypt 编码函数库 mhash 哈稀函数库 杂项函数库 mSQL 数据库函数库 SQL Server 数据库函数库 MySQL 数据库函数库 Sybase 数据库函数库 网络函数库 ...

    Linux C 函数库参考手册 中文版

    第15章 文件及目录函数 第16章 信号函数 第17章 错误处理函数 第18章 管道相关函数 第19章 Socket相关函数 第20章 进程通信(IPC)函数 第21章 记录函数 第22章 环境变量函数 第23章 正则表达式 第24章 动态函数 第25...

    c语言常用函数大全(网页目录版)

    3. **指针操作函数**:如指针的声明、赋值、解引用,以及动态内存分配和释放相关的函数。 4. **数组与结构体**:介绍如何声明、初始化和操作数组,以及结构体和联合体的定义、使用及结构体数组等。 5. **预处理器...

    Linux函数详解(函数大全)

    线程相关函数,如`pthread_create`用于创建新的线程,`pthread_join`等待线程结束,`pthread_mutex_lock`和`pthread_mutex_unlock`处理线程同步和互斥锁。 在错误处理方面,`errno`全局变量存储了最后一次系统调用...

    InTouch扩展函数集.zip

    3. 文件操作:增加读写文件、目录管理等文件系统相关的功能。 4. 网络通信:支持TCP/IP或其他协议进行数据交换。 5. 数据过滤和排序:处理大量数据时,进行数据筛选和排序操作。 6. 安全和权限管理:增强用户访问...

    易语言API函数目录监控

    4. **撤消监视对象**:当不再需要监控目录时,使用`CloseHandle`函数关闭监视对象,释放相关的系统资源。 5. **监视目录**:调用`ReadDirectoryChangesW`函数持续获取目录的改变信息。这个函数会返回一个结构体,...

    API函数获取系统的相关信息

    这篇描述介绍了如何在Visual C#环境中使用API函数获取系统的相关信息。 首先,为了在C#中调用API函数,需要引入`System.Runtime.InteropServices`命名空间。这个命名空间提供了一系列接口和类,使得托管代码(如C#...

    opencv2.4.3和4.0函数手册带目录可搜索

    此压缩包包含两个版本的手册,分别是针对OpenCV 2.4.3和4.0的函数手册,都有目录且可搜索,方便开发者快速查找和学习相关函数。 OpenCV 2.4.3是该库的一个较早版本,但依然有大量项目在使用。它的函数接口主要基于...

    OPENCV函数手册(带目录)中文.zip_OpenCV中文手册_applejbh_opencv函数手册_opencv手册_op

    这是opencv的函数文档,pdf格式。方便大家查阅相关函数。

    php语言函数参考目录

    这类函数提供有关PHP自身和脚本运行的信息。`phpinfo()`显示PHP配置信息,`ini_set()`和`ini_get()`用于设置和获取PHP配置选项。`getcwd()`返回当前工作目录,`memory_get_usage()`和`memory_limit()`则分别获取...

    一个包括超多函数的Delphi函数单元 MyUnit.pas文件代码.rar

    文件中包括了文件压缩函数、字符串转换函数、字符过滤函数、字符串截取函数、选择文件框函数、文件类型定义函数、内存操作相关函数、驱动器判断函数、获取文件时间、Windows标准API函数、判断目录及文件夹是否存在等...

    php函数 参考大全

    例如,数学函数可以帮助进行复杂的数值计算,网络函数可以处理HTTP请求和响应,文件系统函数则涉及文件的读写和目录操作。这些丰富的函数库使得PHP能够处理各种复杂的任务。 通过系统的函数学习,PHP开发者不仅能...

    C语言函数原型及其头文件

    此函数用于通过BIOS中断0x17在指定的打印机上执行打印操作或其他相关功能。 **参数说明:** - `cmd`: 功能代码。 - `abyte`: 打印的字符。 - `port`: 打印机端口号。 **返回值:** - 返回打印机的状态。 **头文件...

Global site tag (gtag.js) - Google Analytics