miniftp專案總結(三)

2021-10-04 23:04:03 字數 3146 閱讀 3173

struct stat 

;

結構體 dirent

struct dirent 

;

const

char

*statbuf_get_perms

(struct stat *sbuf)

if(mode & s_irusr)

if(mode & s_iwusr)

if(mode & s_ixusr)

if(mode & s_irgrp)

if(mode & s_iwgrp)

if(mode & s_ixgrp)

if(mode & s_iroth)

if(mode & s_iwoth)

if(mode & s_ixoth)

if(mode & s_isuid)

if(mode & s_isgid)

if(mode & s_isvtx)

return perms;

}const

char

*statbuf_get_date

(struct stat *sbuf)

;const

char

*p_date_format =

"%b %e %h:%m"

;//月 日 時 分

struct timeval tv;

//儲存當前時間的結構體

gettimeofday

(&tv,

null);

//使用函式gettimeofday()函式來得到時間。它的精度可以達到微妙,第二個引數帶回的是時區的資訊,null預設是系統的時區

time_t local_time = tv.tv_sec;

if(sbuf-

>st_mtime > local_time ||

(local_time - sbuf-

>st_mtime)

>60*

60*24*

182)

//早於系統時間半年前的時間格式

//這一行做了修改!!!

struct tm* p_tm =

localtime

(&sbuf-

>st_mtime)

;//根據檔案建立總秒數得到標準時間

strftime

(datebuf,

sizeof

(datebuf)

, p_date_format, p_tm)

;return datebuf;

}void

list_common

(session_t *sess)

struct dirent *dt;

struct stat sbuf;

//stat結構體裡面存的是讀到的檔案的資訊

while

((dt =

readdir

(dir))!=

null)if

(dt-

>d_name[0]

=='.'

)//判斷隱藏檔案的

char buf[

1024]=

;const

char

*perms =

statbuf_get_perms

(&sbuf)

;//sysutil中實現的

int off =0;

//sprintf()函式的返回值:寫入到 buffer 的字元數(不計空終止字元),或若輸出錯誤或編碼錯誤(對於字串和字元轉換指定符)發生則為負值。

off +

=sprintf

(buf,

"%s "

, perms)

; off +

=sprintf

(buf + off,

" %3d %-8d %-8d ",(

int)sbuf.st_nlink, sbuf.st_uid, sbuf.st_gid)

; off +

=sprintf

(buf + off,

"%8lu ",(

unsigned

long

)sbuf.st_size)

;const

char

*datebuf =

statbuf_get_date

(&sbuf)

;//sysutil中實現的

off +

=sprintf

(buf + off,

"%s "

, datebuf);if

(s_islnk

(sbuf.st_mode)

)//通過st_mode判斷是不是鏈結檔案

;/*readlink()將符號鏈結路徑名的內容放在

緩衝區buf,大小為bufsiz。 readlink()不附加null

位元組到buf。它將(默默地)截斷內容(達到一定長度)

的bufsiz字元),以防緩衝區太小而無法容納所有

內容。成功執行後,這些呼叫將返回放置在buf中的位元組數。

(如果返回的值等於bufsiz,則截斷可能包含

錯誤發生時,返回-1並將errno設定為指示錯誤。

*/readlink

(dt-

>d_name, tmp,

sizeof

(tmp));

off +

=sprintf

(buf + off,

"%s -> %s\r\n"

, dt-

>d_name, tmp);}

else

writen

(sess-

>data_fd, buf,

strlen

(buf));

}closedir

(dir)

;}

4 226 directory send ok.

linux下時間函式的關係:

miniftp專案總結(七)

空閒斷開 當客戶端夠多的時候,伺服器的壓力很大。客戶端連線進行一些短時的操作,操作完成之後,空閒時間達到一定的程度,就會斷開。如何實現這個功能?kill l設定鬧鐘的函式 void start cmdio alarm void 在ftppro中接收客戶端命令的語句之前,收到鬧鐘訊號之後的處理函式 v...

miniftp專案總結(八)

最大連線數的限制 在session結構體重增加乙個num clients成員,在主線程式中,每當來乙個客戶端就使num clients 子程序在開啟會話前要進行最大連線數限制的檢查,只有小於最大連線數的限制才開啟會話。那麼子程序退出的時候如何對num clients進行維護呢?void check ...

小型專案總結之三

這個小型專案有點曲折,始於2006年,當時由於沒有總結經驗,所以後來又做了n個類似的專案,鑑於此,記下總結。系統所用硬體規格建議 項 目品 名 規 格 數 量7 1.ibm x 345 server 4 xeon 3.06cpu及以上1 cache 每顆cpu 512kb及以上 2g pc 133m...