修改《Unix環境高階程式設計第二版》程式清單4 7

2021-06-28 15:26:04 字數 2665 閱讀 8514

修改了《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 ...