檔案屬性及目錄相關係統呼叫
阿新 • • 發佈:2019-01-01
stat()/fstat()/lstat()系統呼叫
功能
獲取檔案狀態
標頭檔案
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
函式原型
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
與stat()差別:為符號連線時,lstat()返回連線自身狀態
返回值
成功時返回0
否則-1
struct stat結構定義
struct stat {
mode_t st_mode; /*file type & mode*/
ino_t st_ino; /*inode number (serial number)*/
dev_t st_rdev; /*device number (file system)*/
nlink_t st_nlink; /*link count*/
uid_t st_uid; /*user ID of owner*/
gid_t st_gid; /*group ID of owner*/
off_t st_size; /*size of file, in bytes*/
time_t st_atime; /*time of last access*/
time_t st_mtime; /*time of last modification*/
time_t st_ctime; /*time of last file status change*/
long st_blksize; /*Optimal block size for I/O*/
long st_blocks; /*number 512-byte blocks allocated*/
};
access()系統呼叫
功能
按實際使用者ID和實際組ID測試檔案存取許可權
標頭檔案
#include <unistd.h>
函式原型
int access(const char *pathname, int mode);
返回值
成功時返回0
否則-1
mode引數說明
R_OK
W_OK
X_OK
F_OK
umask()系統呼叫
功能
為程序設定檔案存取許可權遮蔽字,並返回以前的值
標頭檔案
#include <sys/types.h>
#include <sys/stat.h>
函式原型
mode_t umask(mode_t mask);
chmod()/fchmod()系統呼叫
功能
更改檔案許可權
標頭檔案
#include <sys/types.h>
#include <sys/stat.h>
函式原型
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
返回值
成功時返回0
失敗返回-1
chown()/fchown()/lchown()系統呼叫
功能
變更檔案宿主
標頭檔案
#include <sys/types.h>
#include <unistd.h>
函式原型
int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
若path為符號連線, lchown()改變連線本身的所有者或組,chown()則改變連線所指向檔案的所有者或組
返回值
成功時返回0
失敗返回-1
link()/unlink()系統呼叫
功能
建立/刪除一個硬連結
標頭檔案
#include <unistd.h>
函式原型
int link(const char *oldpath, const char *newpath);
int unlink(const char *pathname);
刪除一個檔案的目錄項並減少它的連結數
返回值
成功時返回0
失敗返回-1
symlink()/readlink()系統呼叫
功能
建立/刪除一個符號連結
標頭檔案
#include <unistd.h>
函式原型
int symlink(const char *oldpath, const char *newpath);
返回值
成功時返回0
否則-1
int readlink(const char *path, char *buf, size_t bufsiz);
返回值
成功時返回放置在buffer中的字元數
否則-1
目錄處理相關係統呼叫
建立/刪除目錄
mkdir()/rmdir()
更改/獲取目錄
chdir()/fchdir(), getcwd()
讀取目錄資訊
opendir()/closedir()
readdir()
telldir()
seekdir()
mkdir()/rmdir()系統呼叫
功能
建立/刪除一個空目錄
標頭檔案
#include <sys/stat.h>
#include <sys/types.h>
函式原型
int mkdir(const char *pathname, mode_t mode);
int rmdir(const char *pathname);
返回值
成功時返回0
失敗時返回-1
chdir()/fchdir()系統呼叫
功能
更改工作目錄
標頭檔案
#include <unistd.h>
函式原型
int chdir(const char *path);
int fchdir(int fd);
返回值
成功時返回0
失敗時返回-1
說明
當前工作目錄是程序的屬性,所以該函式隻影響呼叫chdir的程序本身
getcwd()系統呼叫
功能
獲得當前工作目錄的絕對路徑
標頭檔案
#include <unistd.h>
函式原型
char *getcwd(char *buf, size_t size);
返回值
成功時返回buf
出錯則為NULL
讀取目錄資訊
資料結構
DIR, struct dirent
基本操作
opendir()/closedir()
readdir()
telldir()
seekdir()
DIR
目錄流物件
標頭檔案
<dirent.h>
定義形式
typedef struct _dirstream DIR;
struct dirent
目錄項
標頭檔案
<dirent.h>
定義
ino_t d_ino; /* inode號*/
char d_name[NAME_MAX + 1]; /* 檔名*/
目錄基本操作
功能
開啟、關閉、讀、定位
標頭檔案
#include <sys/types.h>
#include <dirent.h>
函式原型
DIR *opendir(const char *name);
int closedir(DIR *dir);
struct dirent *readdir(DIR *dir);
off_t telldir(DIR *dir); //獲取目錄流讀取位置
void seekdir(DIR *dir, off_t offset);
fopen()函式
功能
開啟檔案流
標頭檔案
#include <stdio.h>
函式原型
FILE *fopen(const char *filename, const char *mode);
mode引數說明
“r”: 以讀方式開啟文字檔案
“w”: 以寫方式建立一個檔案,覆蓋老檔案
“a”: 以追加方式開啟檔案
“r+”: 以讀寫方式開啟一個現存檔案
“w+”:以讀寫方式開啟一個檔案
若不存在,將建立之
若存在,將覆蓋原檔案
“a+”: 以讀及追加方式開啟檔案,若不存在,將建立之
“b”:以二進位制模式開啟檔案
“t”:以文字模式開啟檔案