修改了《unix環境高階程式設計第二版》程式清單4-7,使用chdir變換當前工作目錄,使用檔案名字而不是檔案路徑進行處理。通過測試,執行效率提高了。測試環境為centos 6.5
#include "apue.h"
#include "stdio.h"
#include "fcntl.h"
#include "unistd.h"
#include "errno.h"
#include "sys/stat.h"
#include "dirent.h"
#include "limits.h"
***#include ***
extern
int errno;
typedef
int myfunc(const
char *,const
struct stat *,int);
static myfunc myfunc;
static
int myftw(char *,myfunc *);
static
int dopath(myfunc *);
static
long nreg,ndir,nblk,nchr,nfifo,nslink,nsock,ntot;
int main(int argc,char *argv)
#define ftw_f 1
#define ftw_d 2
#define ftw_dnr 3
#define ftw_ns 4
static
char *fullpath;
static
int myftw(char *pathname, myfunc *func)
static
int dopath(myfunc* func)
if((ret=func(fullpath,&statbuf,ftw_d))!=0) return(ret);
***//ptr=fullpath+strlen(fullpath);
//*ptr++='/';
//*ptr=0;***
if((dp=opendir(fullpath))==null) return(func(fullpath,&statbuf,ftw_dnr));
***//新增如下
if(chdir(fullpath)<0) err_sys("chdir error");***
while((dirp=readdir(dp))!=null)
***//ptr[-1]=0;***
***//新增
if(chdir("..")<0) err_sys("chdir error");***
if(closedir(dp)<0) err_ret("can`t close directory %s",fullpath);
return(ret);
}static
int myfunc(const
char *pathname,const
struct stat * statptr,int type)
break;
case ftw_d: ndir++;break;
case ftw_dnr:err_ret("can't read directory %s",pathname);break;
case ftw_ns: err_ret("stat error for %s",pathname);break;
default : err_dump("unknow type %d for pathname %s",type,pathname);
}return(0);
}
測試結果如下:
[root@simonxie
c]# ./dir / #執行未修改過的程式
regular
files = 222903, 81.78
%diretories
files = 25313, 9.29
%block
files = 31, 0.01
%char
files = 160, 0.06
%fifos = 4, 0.00
%symbolic
links = 24091, 8.84
%sockets = 67, 0.02
%time
ofrunning: 1770686
[root@simonxie
c]# ./dir_v2 / #執行修改過的程式
regular
files = 222903, 81.78
%diretories
files = 25313, 9.29
%block
files = 31, 0.01
%char
files = 160, 0.06
%fifos = 4, 0.00
%symbolic
links = 24091, 8.84
%sockets = 67, 0.02
%time
ofrunning: 1414655
UNIX環境高階程式設計第二版 讀書筆記5章
5.1 標準i o由dennis ritchie在1975年左右編寫。5.2 第三章的i o都是針對檔案描述符。而標準i o庫是圍繞stream,開啟或建立檔案時,我們已經使乙個stream與檔案相關聯。stream的定向決定了讀寫的字元是單字元還是多位元組。在未定向的流上使用i o函式可以改變定向...
UNIX環境高階程式設計第二版 讀書筆記6章
6.1 由於歷史原因,大量系統有關的資料檔案都是ascii文字檔案。6.2 口令檔案中shell如果為 dev null表示阻止任何人以該使用者名義登陸。finger p username可以顯示使用者相關資訊。有些系統提供了vipw命令,允許管理員編輯口令檔案。獲取口令檔案項的函式。struct ...
UNIX環境高階程式設計 第二章
這一節介紹了三個重要的標準 由於c語言在unix系統中的地位不言而喻,c語言的標準化也是unix標準化的重要組成部分。iso c標準當中包括了 時間線 1989 發布 1999 更新 2001 2004 2007 勘誤 2011 更新 posix portable operating system ...