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...