目 錄 操 作
打開目錄 ===》遍歷目錄 ===》切換目錄 ===》關閉目錄
opendir() ===>readdir()/chdir() ====>closedir()
頭文件:
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
原型:DIR *opendir(const char *name);
功能: 從指定的name路徑+目錄名下打開該目錄
參數: name 要打開的目錄所在路徑+目錄名稱
返回值:成功 目錄流對象,DIR * 結構體指針
失敗 NULL
原型:struct dirent *readdir(DIR *dirp);
功能:從已經打開的目錄流對象drip中獲取一個文件信息。
參數:dirp 已經打開的流對象
返回值: 成功 返回一個文 件結構體,重點是d_name 成員變量,表示文件名稱。
失敗或者目錄流結尾 NULL
原型:int chdir(const char *path);
功能:將程序的執行目錄修改爲指定的path路徑
參數:path 新的工作目錄
返回值:成功 0
失敗 -1
原型:int closedir(DIR *dirp);
功能:關閉指定的目錄流對象
參數:dirp 要關閉的流對象
返回值: 成功 0
失敗 -1;
注意:closedir 不能關閉多次,否則段錯誤。
2、文件屬性操作 ===>stat 命令對應的 函數
頭文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
原型:int stat(const char *path, struct stat *buf);
功能:從指定的path路徑+文件名稱獲取文件屬性信息到buf對象中。
參數:path 要打開的文件路徑+名稱
buf 文件屬性結構體
返回值:成功 0
失敗 -1;
注意:如果要獲取鏈接文件的屬性信息用 lstat函數
如果文件已經被open函數打開,可用fstat函數獲取其信息。
文件類型:
普通文件 -
目錄文件 d
鏈接文件 l /dev/stdin
字符設備文件 c /dev/tty
塊設備文件 b /dev/sda
套接子文件 s /dev/log
管道文件 p
用戶信息獲取:/etc/passwd =>id == name
1、getpwuid() ===>函數得到如下信息:
頭文件: pwd.h
函數: getpwuid()
結構體: struct passwd *
2 用戶組信息
struct group *getgrgid(gid_t gid);
文件的大小:
buf.st_size
3、時間函數 ===> time() localtime() asctime()
頭文件:
#include <time.h>
原型:time_t time(time_t *t);
功能:獲取當前系統時間與格林尼治時間之間的秒數。
參數:t 要獲取的時間結構體,如果是NULL 則表示默認當前時間。
如果是變量則在變量中存儲秒數。
返回值:如果參數是NULL ,則用該返回值表示獲取的秒數/
如果參數不是NULL,則一般用參數獲取秒數/
原型:struct tm *localtime(const time_t *timep);
功能:將指定的timep秒數的數據值轉換成struct tm 類型的時間結構體。
參數:timep 之前通過time函數或已知的時間秒數。
返回值:成功 時間結構體
失敗 NULL
原型:char *asctime(const struct tm *tm);
功能:將指定的時間結構體直接轉換成時間字符串。
參數: tm 經過localtime 函數轉換的結構
返回值:成功 最終地時間結構體
失敗 NULL
練習: 綜合以上知識點,完成如下功能:
設計一個程序,可以通過住函數傳參的方式打印輸出該文件的
所有屬性信息,如果該文件是目錄則輸出目錄中包含的文件屬性信息。
比如:
./a.out abc ===>普通文件abc的屬性信息輸出
./a.out ./ ===>當前目錄的所有文件屬性信息遍歷輸出。
4、IO 總結
源碼方式安裝軟件:
1、下載源碼包 xxx.tar xxx.tar.gz
2、解壓縮 tar -xvf xxx.tar tar -zxvf xxx.tar.gz
3、切換目錄 cd xxxx
4、配置環境 ./configure
5、生成可執行程序 make
6、安裝 make install
ctags 的使用:
1、進入系統目錄 cd /usr/include
2、生成tags文件 ctags -R *
3、在當前目錄中追查變量或者結構體
vi -t xxx
4、 如果定位的結果已經顯示的是基本數據類型,則表示追蹤截至。
如果第一次沒有定位到變量的基本數據類型,則用ctrl+] 向下追查
要求光標必須在要追查的類型的原始定義處。
如果要向後回退則用ctrl+t 回退一次。
5、用 :q 退出vi