Linux之管理目录
一、目录以及基础知识
在 linux 中,文件目录包含文件名列表,每一个文件名对应一个 inode 编号。
目录中还能包含其它子目录,在 linux 中所有的目录和文件都是以树形结构组织的。
既然是树形结构,那么肯定就有一个根,在 linux 下有一个根 root 目录,使用命令“cd /”就可以进入 root 目录。
注意:root 目录指的是根目录。另外有一个 root 用户的概念,一个是目录中的概念,一个是 linux用户中的概念,不要混淆。
在接下来的小节中会学习到当前工作目录,创建目录,删除目录,读取目录内容等。
二、getcwd 函数
1、使用 man 学习 getcwd 函数
如下图所示,使用命令“man 3 getcwd”。有三个类似的函数 getcwd,getwd,get_current_dir_name。
接着介绍一下 getcwd 和 get_current_dir_name 的用法。
注意:getwd函数已经过时,使用的时候会有警告。
char *getcwd(char *buf, size_t size);
//参数*buf:保存当前目录的缓冲区。
//参数 size:在现代 linux 中,buf 的长度至少可以为 255 字节。
//返回值:成功返回指向当前目录的指针,和 buf 的值一样,错误返回 NULL。
char *get_current_dir_name(void);
//参数:无
//返回值:成功返回指向当前目录的指针,错误返回 NULL。
关于get_current_dir_name函数,给大家再介绍一点额外的知识。
打开头文件“/usr/include/unistd.h”,找到函数定义。如下图所示。
如上图所示,必须定义“__USE_GNU”才能使用get_current_dir_name 函数。另外经过测试发现,getwd 函数,无论定义不定义条件,都会警告这个函数已经过时,虽然可以使用。
2、函数例程
编写简单的 getcwd.c 文件测试 getcwd 函数。
#include <stdio.h>
/*getcwd、getwd和get_current_dir_name
函数的头文件*/
#define __USE_GNU
#include <unistd.h>
#define LENTH 255
int main()
{
char pwd[LENTH];
char *wd;
//getcwd函数测试
if(!getcwd(pwd,LENTH)){
perror("getcwd");
return 1;
}
printf("\ngetcwd pwd is %s\n",pwd);
//getwd函数测试
wd = getwd(pwd);
if(!wd){
perror("getcwd");
return 1;
}
printf("\ngetwd pwd is %s\n",wd);
//get_current_dir_name函数测试
wd = get_current_dir_name();
if(!wd){
perror("getcwd");
return 1;
}
printf("\nget_current pwd is %s\n",wd);
return 0;
}
3、运行结果
如上图所示,由于作者运行程序的当前目录是 linux 的“/”,所示显示是“/”。大家可以在其它目录下运行,看一下效果。
三、mkdir 函数
1、 使用 man 学习 mkdir 函数
如下图所示,使用命令“man 2 mkdir”,并回车。