网站首页 > 技术教程 正文
概述
在Linux系统中,文件系统是组织和管理数据的关键组件,而目录则是文件系统的骨架。目录本质上是一个特殊的文件,包含了指向其他文件或目录的链接。每个目录都有一个唯一的inode号,用来标识它在文件系统中的位置。目录可以包含普通文件、其他目录(子目录)、符号链接、其他类型的文件(比如:设备文件等)。
创建目录
创建目录是一项基本任务,可以通过mkdir函数来实现。其函数原型如下。
int mkdir(const char *path, mode_t mode);
path:指向要创建的目录路径名的指针,可以是绝对路径(从根路径“/”开始),也可以是相对路径(相对于当前工作目录)。
mode:目录的权限模式,可使用符号常量S_IRUSR、S_IWUSR、S_IXUSR等来指定。通常情况下,我们会直接写成八进制数。比如:0755表示所有者有读、写、执行权限,而组用户和其他人只有读和执行权限。
返回值:成功时返回0,失败时返回-1,并设置errno来指示具体的错误类型。
在下面的示例代码中,我们在当前目录下创建了一个名为“hope_wisdom”的子目录,并设置了适当的权限。
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main()
{
const char* pszDirPath = "./hope_wisdom";
// 设置新目录的权限为:rwxr-xr-x
mode_t permissions = 0755;
if (mkdir(pszDirPath, permissions) == -1)
{
printf("Dir created failed: %s\n", strerror(errno));
}
else
{
printf("Dir created successfully\n");
}
return 0;
}
删除空目录
当需要删除一个空目录时,可以使用rmdir函数。需要特别注意的是:该函数只能删除空目录,如果目录中有文件或子目录,则会失败。其函数原型如下。
int rmdir(const char *pathname);
pathname:指向要删除的空目录路径名的指针,可以是绝对路径(从根路径“/”开始),也可以是相对路径(相对于当前工作目录)。
返回值:成功时返回0,失败时返回-1,并设置errno来指示具体的错误类型。
在下面的示例代码中,我们尝试在当前目录下删除一个名为“hope_wisdom”的子目录。
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main()
{
const char* pszDirPath = "./hope_wisdom";
if (rmdir(pszDirPath) == -1)
{
printf("Dir removed failed: %s\n", strerror(errno));
}
else
{
printf("Dir removed successfully\n");
}
return 0;
}
获取/改变当前工作目录
getcwd函数用于获取当前的工作目录,这对于记录程序运行的位置或恢复之前的工作目录非常有用。有时候,我们可能需要改变程序的工作目录(比如:切换到某个特定的路径下执行命令),这时就可以使用chdir函数。这两个函数的原型如下。
char *getcwd(char *buf, size_t size);
int chdir(const char *path);
getcwd函数各个参数和返回值的含义如下。
buf:一个指向缓冲区的指针,用于存放返回的绝对路径。如果这个参数为NULL,则getcwd会分配足够的内存来存储路径,并返回指向这块内存的指针(此时,需要调用者负责释放)。
size:缓冲区的大小。如果buf是NULL,该参数将被忽略。
返回值:成功时返回buf,即包含当前工作目录绝对路径的指针。失败时返回NULL,并设置errno来指示具体的错误类型。
chdir函数各个参数和返回值的含义如下。
path:指向新工作目录路径名的指针,可以是绝对路径或相对路径。
返回值:成功时返回0,失败时返回-1,并设置errno来指示具体的错误类型。
在下面的示例代码中,我们先通过getcwd函数获取了当前工作目录,然后通过chdir函数修改了当前工作目录为“hope_wisdom”。
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
int main()
{
char pszDir[PATH_MAX];
if (getcwd(pszDir, sizeof(pszDir)) != NULL)
{
printf("Current working directory: %s\n", pszDir);
}
else
{
printf("getcwd failed\n");
}
if (chdir("./hope_wisdom") == -1)
{
printf("chdir failed: %s\n", strerror(errno));
}
else
{
printf("chdir OK\n");
}
return 0;
}
注意:使用chdir函数改变工作目录后,所有相对路径的文件访问都将基于新的工作目录。另外,如果程序以多线程方式运行,需要注意多个线程共享相同的当前工作目录的情况。这是因为,此时可能会导致不可预测的行为。
猜你喜欢
- 2025-08-02 松勤软件测试:Linux进阶课:目录(文件夹)与文件操作
- 2025-08-02 Linux系统目录结构
- 2025-08-02 彻底清理UEFI启动菜单!手把手教你删除无用引导项!
- 2025-08-02 Win10新版19603推送:一键清理磁盘空间、首次集成Linux文件管理器
- 2025-08-02 Linux技巧:cp命令自动创建不存在的目录和只复制修改的文件
- 2025-08-02 tmpwatch命令清除旧文件
- 2025-08-02 第四章 Linux常用shell命令-4.5.磁盘管理
- 2025-08-02 Linux文件和目录管理常用重要命令(一)
- 2025-08-02 一天一个Linux命令:文件操作「删」rm
- 2025-08-02 【Linux学习】根目录常用文件夹功能介绍
你 发表评论:
欢迎- 08-06linux 和 windows文件格式互相转换
- 08-06谷歌 ChromeOS 已支持 7z、iso、tar 文件格式
- 08-06Linux下比较文件内容的6种方法
- 08-06文件格式及功能汇总
- 08-0610个Linux文件内容查看命令的实用示例
- 08-06Linux-如何区分不同文件类型
- 08-06Zabbix技术分享——监控windows进程资源使用情况
- 08-06Linux系统卡顿?学会ps命令这三招,轻松定位问题进程
- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)