【Linux C編程】第九章 目錄操作相關函數
一、整體大綱
二、相關函數
1. getcwd
函數作用:獲取當前目錄
頭文件
#include
函數原型
char *getcwd(char *buf, size_t size);
參數說明:
buf傳出參數,路徑
size緩沖區大小
返回值
成功:返回路徑的指針
失敗:返回NULL
2. chdir
函數作用:改變工作路徑
頭文件
#include
函數原型
int chdir(const char *path);
函數參數:
path對應的目標工作路徑
返回值
成功:返回0
失敗:返回-1,設置errno
注意:改變工作路徑-注意屬于進程獨有。
示例:
chdir示例
1 #include
3. mkdir
函數作用:創建目錄
頭文件
#include
函數原型
int mkdir(const char *pathname, mode_t mode);
參數說明:
pathname創建的目錄路徑
mode目錄權限 (mode & ~umask & 01777),注意權限,如果目錄沒有可執行權限,不可進入
返回值
成功:返回0
失敗:返回-1,設置errno
4. rmdir
函數作用:只能刪除空文件夾
5. opendir
函數作用:打開目錄
頭文件
#include
函數原型
DIR *opendir(const char *name);
參數說明:
pathname打開的目錄
返回值
成功:返回指向該目錄流的指針
失敗:返回-1,設置errno
6. readdir
函數作用:讀目錄
頭文件
#include
函數原型
struct dirent *readdir(DIR *dirp);
參數說明:
dirp傳入參數,opendir返回的指針
返回值
成功:讀到目錄項的內容
失敗:NULL代表讀到末尾或者有錯誤
struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* not an offset; see NOTES */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; /* type of file; not supported by all file system types */ char d_name[256]; /* filename */ };
7. closedir
函數作用:關閉目錄
頭文件
#include
函數原型
int closedir(DIR *dirp);
函數參數:
dirp傳入參數,opendir返回的指針
返回值
成功:返回0
失敗:返回-1,設置errno
需求:統計一下指定目錄下的文件個數?
統計指定目錄下文件個數
1 #include
8. dup2
函數作用:文件描述符重定向
頭文件
#include
函數原型
int dup2(int oldfd, int newfd);
參數說明:
關閉newfd對應的文件描述符,將newfd重新指向為old對應的文件
返回值
成功:返回0
失敗:返回-1,設置errno
9. dup
函數作用:復制文件描述符
頭文件
#include
函數原型
int dup(int oldfd);
參數說明:
新返回一個文件描述符指向oldfd對應的文件
返回值
成功:返回0
失敗:返回-1,設置errno
需求:在代碼中執行2次printf("hello world\n");一次輸出到hello文件,后一次輸出到屏幕上?
需求實現
1 #include
10.?errno
函數作用:輸出函數,根據errnum得到相應的錯誤信息
頭文件
#include
函數原型:
char *strerror(int errnum);
11.?fcntl
改變已經打開的文件的屬性
打開文件的時候: 只讀
修改文件的: 添加追加 O_APPEND
三、補充
1. 索引節點inode
保存的其實是實際的數據的一些信息,這些信息稱為“元數據”(也就是對文件屬性的描述)。例如:文件大小,設備標識符,用戶標識符,用戶組標識符,文件模式,擴展屬性,文件讀取或修改的時間戳,鏈接數量,指向存儲該內容的磁盤區塊的指針,文件分類等等。( 注意數據分成:元數據+數據本身 )
注意inode怎樣生成的:每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定(現代OS可以動態變化),一般每2KB就設置一個inode。一般文件系統中很少有文件小于2KB的,所以預定按照2KB分,一般inode是用不完的。所以inode在文件系統安裝的時候會有一個默認數量,后期會根據實際的需要發生變化。
注意inode號:inode號是唯一的,表示不同的文件。其實在Linux內部的時候,訪問文件都是通過inode號來進行的,所謂文件名僅僅是給用戶容易使用的。當我們打開一個文件的時候,首先,系統找到這個文件名對應的inode號;然后,通過inode號,得到inode信息,最后,由inode找到文件數據所在的block,現在可以處理文件數據了。
2. inode和文件的關系
當創建一個文件的時候,就給文件分配了一個inode。一個inode只對應一個實際文件,一個文件也會只有一個inode。inodes最大數量就是文件的最大數量。
C 語言 Linux
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。