1. 程式人生 > >檔案屬性及目錄相關係統呼叫

檔案屬性及目錄相關係統呼叫

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”:以文字模式開啟檔案