S ISREG等幾個常見的巨集

2021-09-06 08:30:20 字數 1229 閱讀 7667

**:

stat函式講解:

表頭檔案: #include

#include

定義函式: int stat(const char *file_name, struct stat *buf);

函式說明: 通過檔名filename獲取檔案資訊,並儲存在buf所指的結構體stat中

返回值: 執行成功則返回0,失敗返回-1,錯誤**存於errno

錯誤**:

enoent 引數file_name指定的檔案不存在

enotdir 路徑中的目錄存在但卻非真正的目錄

eloop 欲開啟的檔案有過多符號連線問題,上限為16符號連線

efault 引數buf為無效指標,指向無法存在的記憶體空間

eaccess 訪問檔案時被拒絕

enomem 核心記憶體不足

enametoolong 引數file_name的路徑名稱太長

int stat(const char *file_name,struct stat *buf);

int fstat(int filedes,struct stat *buf);

stat 結構定義於:/usr/include/sys/stat.h 檔案中

struct stat finfo;

stat( sfilename, &finfo );

int size = finfo. st_size;

struct stat ;

stat用來判斷沒有開啟的檔案,而fstat用來判斷開啟的檔案.我們使用最多的屬性是st_mode.通過著屬性我們可以判斷給定的檔案是乙個普通檔案還是乙個目錄,連線等等.可以使用下面幾個巨集來判斷.

s_islnk(st_mode):是否是乙個連線.

s_isreg是否是乙個常規檔案.

s_isdir是否是乙個目錄

s_ischr是否是乙個字元裝置.

s_isblk是否是乙個塊裝置

s_isfifo是否是乙個fifo檔案.

s_issock是否是乙個socket檔案. 

用法://定義乙個結構體

struct stat m;

//使用者輸入的檔名(用來判斷是否是目錄)。

char *filename;

int a;

int n = stat(filename,&m);

a = s_isdir(m.st_mode);

如果a為真,則說明是目錄,否則不是。

幾個有用的巨集

分類 c c 1.列印錯誤資訊 如果程式的執行必須要求某個巨集被定義,在檢查到巨集沒有被定義是可以使用 error,warning列印錯誤 警告 資訊,如 ifndef unix error this section will only work on unix systems endif 只有 u...

幾個有用的巨集

1.列印錯誤資訊 如果程式的執行必須要求某個巨集被定義,在檢查到巨集沒有被定義是可以使用 error,warning列印錯誤 警告 資訊,如 ifndef unix error this section will only work on unix systems endif 只有 unix 巨集被...

關於container of等巨集的整理

一直很是疑惑container of是什麼意思,最近看了一些資料,整理一下。1 typeof 首先,我們要知道typeof,它是gcc的c語言擴充套件保留字,用於宣告變數型別。typeof的引數可以是兩種形式 表示式或型別。例如 typeof x 這裡假設x是乙個函式指標,這樣就可以得到這個函式返回...