01-打开目录 -- opendir
02-读目录 -- readdir
03-关闭目录 -- closedir
一、opendir
#include <dirent.h>
DIR *opendir(const char *name);
功能:
打开一个目录获得一个目录流指针
参数:
name:目录名
返回值:
成功 返回目录流指针
失败 返回NULL
1 #include <stdio.h>
2 #include <dirent.h>
3
4 int main(int argc, const char *argv[])
5 {
6 DIR *dir = opendir(argv[1]);
7
8 if (dir == NULL)
9 {
10 perror("opendir fail");
11 return -1;
12 }
13
14 printf("success\n");
15
16 return 0;
17 }
二、readdir
struct dirent *readdir(DIR *dirp);
功能:
从目录流中读取文件信息并将保存信息的结构体
地址返回
参数:
dirp:目录流指针
返回值:
包含文件信息的结构体
出错或者读到目录流末尾返回 NULL
1 #include <stdio.h>
2 #include <dirent.h>
3
4 int main(int argc, const char *argv[])
5 {
6 DIR *dir = opendir(argv[1]);
7
8 if (dir == NULL)
9 {
10 perror("opendir fail");
11 return -1;
12 }
13
14 printf("success\n");
15
16 while (1)
17 {
18 struct dirent *pdir = readdir(dir);
19
20 if (pdir == NULL)
21 break;
22 printf("Inode = %ld\n",pdir->d_ino);
23 printf("type = %d\n",pdir->d_type);
24 printf("name = %s\n",pdir->d_name);
25 }
26
27 closedir(dir);
28
29 return 0;
30 }
练习:实现ls的功能
1 #include <stdio.h>
2 #include <dirent.h>
3
4 int main(int argc, const char *argv[])
5 {
6 if (argc != 2)
7 {
8 printf("Usage:%s <dirname>\n",argv[0]);
9 return -1;
10 }
11
12 DIR *dir = opendir(argv[1]);
13 if (dir == NULL)
14 {
15 perror("opendir fail");
16 return -1;
17 }
18
19 struct dirent *pdir = NULL;
20 while (pdir = readdir(dir))
21 {
22 if (pdir->d_name[0] != '.')
23 printf("%s ",pdir->d_name);
24 }
25
26 putchar('\n');
27 closedir(dir);
28
29 return 0;
30 }
三、chdir
chdir ("/home/linux"); "../../"
fopen("1.mp4")
int chdir(const char *path);// /home/linux
功能:
改变当前程序的工作路径
参数:
path:改变到的路径
返回值:
成功返回0
失败返回-1
四、getcwd //pwd
char *getcwd(char *buf, size_t size);
功能:
获得当前的工作路径
参数:
buf:保存工作路径空间的首地址
size:保存路径空间的长度
返回值:
成功返回包含路径空间的字符串首地址
失败返回NULL
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main(int argc, const char *argv[])
5 {
6 char buf[100];
7 getcwd(buf,sizeof(buf));
8 printf("buf = %s\n",buf);
9
10 if (chdir("/home/linux") < 0)
11 {
12 perror("chdir fail");
13 return -1;
14 }
15
16 getcwd(buf,sizeof(buf));
17 printf("buf = %s\n",buf);
18 return 0;
19 }
五、mkdir
int a =200;
int mkdir(const char *pathname, mode_t mode);//777 666 --x--x--x
功能:
创建一个目录
666-
参数:
pathname:路径
mode:
mode & ~umask 0002
返回值:
成功返回0
失败返回-1
1 #include <stdio.h>
2 #include <sys/stat.h>
3 #include <sys/types.h>
4
5 int main(int argc, const char *argv[])
6 {
7 if (mkdir(argv[1],0666) < 0)
8 {
9 perror("mkdir fail");
10 return -1;
11 }
12
13 return 0;
14 }
六、rmdir
int rmdir(const char *pathname);
功能:
删除一个空目录文件
参数:
pathname:目录文件的名字
返回值:
成功返回0
失败返回-1
173 int rmdir_dir(int num,const char *dirname)
174 {
175 if (num != 2)
176 {
177 printf("Usage:%s dirnamn\n",str[0]);
178 return -1;
179 }
180
181 if (rmdir(str[1]) < 0)
182 {
183 perror("rmdir fail");
184 return -1;
185 }
186 return 0;
187 }