高階程式設計之目錄(二)

2021-07-09 14:00:17 字數 2640 閱讀 3973

目 錄 操 作

開啟目錄 ===》遍歷目錄 ===》切換目錄 ===》關閉目錄

opendir() ===>readdir()/chdir() ====>closedir()

標頭檔案:

#include

#include

#include

原型: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

#include

#include

原型: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_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 總結

原始碼方式安裝軟體:

ctags 的使用:

1、進入系統目錄   cd   /usr/include

2、生成tags檔案   ctags -r *

3、在當前目錄中追查變數或者結構體

vi -t  ***

4、 如果定位的結果已經顯示的是基本資料型別,則表示追蹤截至。

如果第一次沒有定位到變數的基本資料型別,則用ctrl+] 向下追查

要求游標必須在要追查的型別的原始定義處。

如果要向後回退則用ctrl+t 回退一次。

5、用 :q 退出vi

高階程式設計之目錄(一)

目 錄 流 1.dir opendir const char name 功能 開啟乙個目錄獲得乙個目錄流指標 引數 name 檔名 返回值 成功目錄流指標 失敗返回null 2.struct dirent readdir dir dirp 功能 從目錄流中讀到乙個檔案的資訊 引數 dirp 目錄流指...

高階程式設計之程序(二)

進 程 1 程序的退出 return 只有在main函式中執行才能將程序退出。exit 程序退出函式,會自動重新整理快取區。exit 強制退出程序,不會重新整理快取區。2 特殊程序 2.1 孤兒程序 父程序退出,而子程序單獨存在。子程序變成孤兒程序。2.2 殭屍程序 父程序存在,子程序退出。父程序沒...

高階程式設計之檔案I O 二

函 數 接 口 1.time time t time time t t 功能 獲得1970年到現在所過的秒數 引數 t 要存放秒數空間的指標 返回值 成功返回所過的秒數 失敗返回 time t 1 2.localtime struct tm localtime const time t timep ...