mkdir 是用來建立一個空目錄的,而 rmdir 用來删除空目錄。與 linux 指令的
mkdir
不同的是,mkdir 函數需要指定目錄的權限位。想必你已經對 mode 相當熟悉了。不過,對于目錄來說,權限位還有一些坑,也沒那麼容易。
1 目錄的權限位
- 目錄的權限位,至少要設定一個執行許可位。即
中的那個rwx
位。如果不設定,就沒辦法使用x
指令進入目錄,也無法讀取目錄下的檔案内容。是以,這個位是必須的。cd
- 目錄的寫權限位。如果未設定寫權限位(
位),将導緻無法向目錄檔案中寫入目錄項(dir_entry 結構)。比如不能使用 touch 指令建立檔案。w
- 目錄的讀權限位。如果未設定讀權限位,将導緻無法讀取目錄檔案中的目錄項。比如你不能使用 ls 指令檢視目錄項的具體内容。
推薦使用的目錄權限位是
rwxrwxr-x
,即 8 進制的 775.
2 執行個體
2.1 實作 mymkdir 指令
- 函數原型
int mkdir(const char
- 代碼
// mymkdir.c
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if (mkdir(argv[1], 0775) == -1) { // 權限位設定為 0775 注意前面的 0 不能少,它表示 8 進制的數。
perror("mkdir");
return -1;
}
return 0;
}
- 編譯
$ gcc mymkdir.c -o mymkdir
- 運作
$ ./mymkdir testdir
$ ll
drwxrwxr-x 3 allen allen 4096 12月 4 18:06 ./
drwxrwxr-x 10 allen allen 4096 12月 3 12:46 ../
-rwxrwxr-x 1 allen allen 7460 12月 3 12:42 mychdir*
-rw-rw-r-- 1 allen allen 199 12月 3 12:42 mychdir.c
-rwxrwxr-x 1 allen allen 7384 12月 4 18:02 mymkdir*
-rw-rw-r-- 1 allen allen 203 12月 4 18:02 mymkdir.c
-rwxrwxr-x 1 allen allen 7384 12月 3 22:34 myrmdir*
-rw-rw-r-- 1 allen allen 152 12月 3 22:34 myrmdir.c
drwxrwxr-x 2 allen allen 4096 12月 4 18:02 testdir/
2.2 實作 rmdir 指令
- 函數原型
int rmdir(const char
- 代碼
// myrmdir.c
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if (rmdir(argv[1]) == -1) {
perror("rmdir");
return -1;
}
return 0;
}
- 編譯
$ gcc myrmdir.c -o myrmdir
- 運作
$ ./myrmdir testdir
3 總結
- 知道不合适的目錄權限位會帶來什麼後果
- 掌握 mkdir 函數和 rmdir 函數
- 知道 mkdir 不能建立多級目錄
- 知道 rmdir 隻能删除空目錄