1.stat函式
stat函式返回乙個與此命名檔案有關的資訊結構,fstat函式獲得已在描述符filedes上開啟的檔案的有關資訊。lstat函式類似於stat,但是當命名的檔案是乙個符號連線時,lstat返回該符號連線的有關資訊,而不是由該符號連線引用的檔案的資訊。
view plaincopy to clipboardprint?
#include
#include
int stat(const char *pathname, struct stat *buf) ;
int fstat(int filedes,struct stat *buf) ;
int lstat(const char *pathname, struct stat *buf) ;
三個函式的返回:若成功則為0,若出錯則為-1
stat的資料結構如下所示
view plaincopy to clipboardprint?
struct stat {
mode_t st_mode; /* 檔案型別和許可權*/
ino_t st_ino; /* inode 號*/
nlink_t st_nlink; /* 鏈結數目*/
uid_t st_uid; /* 檔案所有者的uid*/
gid_t st_gid; /* 檔案所有者的組id */
off_t st_size; /* 檔案大小*/
time_t st_atime; /* 最後訪問時間*/
time_t st_mtime; /* 最後修改時間*/
time_t st_ctime; /* 最後檔案狀態修改時間*/
blksize_t st_blksize; /* 最佳讀寫i/o塊大小*/
blkcnt_t st_blocks; /* 一共有多少個塊*/
2.access函式
access按實際使用者id和實際組id進行檔案許可權的測試。
view plaincopy to clipboardprint?
#include
int access(const char *pathname, int mode) ;
返回:若成功則為0,若出錯則為-1
引數解析:
mode值可以是以下幾種:
r_ok 測試讀許可權
w_ok 測試寫許可權
x_ok 測試執行許可權
f_ok 測試檔案是否存在
3.truncate函式
truncate 把某個檔案截短到一定長度,跟open中的o_trunc類似。
view plaincopy to clipboardprint?
int truncate(const char *pathname, off_t length);
int ftruncate(int filedes, off_t length);
成功返回0 ,失敗返回-1
4.與鏈結有關的函式
link函式用來建立乙個硬鏈結檔案
int link(const char *existingpath, const char *newpath);
symlink用來建立乙個軟鏈結檔案
int symlink(const char *actualpath, const char *sympath);
unlink刪除軟鏈結時只刪除鏈結檔案本身,被連線的檔案不受影響。刪除硬鏈結時,如果inode引用數為0,則刪除檔案。如果有程序還在使用該檔案,則可以繼續使用。
int unlink(const char *pathname);
readlink只讀取軟連線本身
ssize_t readlink(const char* restrict pathname, char *restrict buf, size_t bufsize);
5.utime函式
utime讀取檔案的最後訪問時間和修改實際那
view plaincopy to clipboardprint?
#include
int utime(const char *pathname, const struct utimbuf *times);
struct utimbuf {
time_t actime; /* 最後訪問時間*/
time_t modtime; /* 最後修改時間*/
inode屬性的修改時間有核心來完成,應用程式沒有許可權去設定。
6.目錄操作函式
opendir用來開啟乙個目錄 的內容,並返回目錄指證。
#include
dir *opendir(const char *pathname); 成功返回dir指標,失敗返回null
readdir 以一定次序讀取目錄內容,
struct dirent *readdir(dir *dp);
struct dirent {
ino_t d_ino; /* i-node 號*/
char d_name[name_max + 1]; /*檔案或目錄名*/
rewinddir 重置目錄的輸入流,重置後從第乙個目錄項開始讀。
void rewinddir(dir *dp);
telldir 返回目錄流的當前位置
long telldir(dir *dp);
seekdir 設定目錄流位置。
void seekdir(dir *dp, long loc);
loc有telldir返回
closedir 關閉目錄流
int closedir(dir *dp);
下面的例子是遞迴遍歷乙個目錄,列印出這個目錄下所有的檔案和目錄,並且需要列印出這些檔案的型別(比如 鏈結檔案,普通檔案等)。
view plaincopy to clipboardprint?
#include
#include
#include
#include
#include
#include
#include
#include
void iterate_dir( char *dir );
int main(int argc, char **ar**)
if( argc != 2 ){
printf("usage: command dir/n");
return -1;
iterate_dir( ar**[1] );
return 0;
void iterate_dir ( char * dir )
dir *cur_dir;
struct dirent *dir_ent;
struct stat dir_stat;
char path[path_max];
cur_dir = opendir(dir);
if ( null == cur_dir ){
printf("open dir faild %s/n", strerror(errno));
return ;
while( null != ( dir_ent=readdir(cur_dir))){
if ( 0==strcmp(dir_ent->d_name,".") || 0==strcmp( dir_ent->d_name,"..")){
continue;
sprintf( path, "%s%s",dir,dir_ent->d_name);
if ( -1 == lstat(path, &dir_stat) ){
printf("lstat error %s /n",strerror(errno));
return ;
if ( s_isdir( dir_stat.st_mode) ){
strcat(path,"/");
printf("path: %s/n",path);
iterate_dir(path);
continue;
printf("file: %s /n", path);
linux程式設計之檔案與目錄
有興趣的朋友可以訪問我的 檔案有關的資訊結構 struct stat 檔案型別 linux系統中的常見檔案型別有 普通檔案 目錄檔案 字元特殊檔案 提供對裝置不帶緩衝的訪問 塊特殊檔案 提供對裝置帶緩衝的訪問 fifo檔案 用於程序間的通訊,命名管道 套介面檔案 用於網路通訊 檔案型別的判斷 使用如...
Linux 環境程式設計之檔案I O 檔案讀寫
函式介面 includessize t read int fd,void buf,size t nbytes ssize t write int fd,const void buf,size t nbytes read使用 write使用 測試 include include include inc...
linux程式設計之檔案I O
linux下c語言對於檔案的操作,我們會經常用到fopen fclose fwrite fread fgets 等一系列庫函式,基本和是和windows下學習c語言一樣的,其實這些庫函式就是在linuxx下對系統呼叫函式的封裝,因此這裡只介紹系統函式下的檔案操作函式。一 open 開啟檔案 incl...