如何在blog貼出程式碼?

程式碼貼出的時候,常常會遇到被瀏覽器轉換成程式碼的結果,而無法理想的秀出原始的程式碼,基本一點的作法有,在程式碼的前後加上<pre></pre>,讓程式碼原封不動的印出。

但是有些blog似乎不理<pre></pre>

這時候就可以利用編碼的網站,將您的code編碼之後在貼上,省去會被編譯器轉換的困擾

下面提供一個可以轉換code的網站作參考

http://www.opinionatedgeek.com/DotNet/Tools/HTMLEncode/Encode.aspx

checkbox經submit送出勾選的資料

ftp.php用來取得ftp上面擁有的檔案,並列出,勾選後送出給del.php
del.php接收到值之後印出,然後執行刪除的指令(本範例中沒有寫出刪除的語法)
ftp.php
--

<?php
$ftp_fd = ftp_connect("myweb.ncku.edu.tw");
ftp_login($ftp_fd, "xxxx","xxxx");
$list = ftp_nlist($ftp_fd, "fresh_night");
printf("<form action=\"del.php\" method=\"POST\">\n");
foreach($list as $key => $value){
printf("%02d <input type=\"checkbox\" name=\"file[]\" value=\"%s\">%s\n", $key, $value, $value);
echo "<br>";
}
printf("<input type=submit name=sub value=刪除所選檔案>");
printf("</form>");
?>


del.php
--

<?php
$file = $_POST['file'];
if(count($file)>0){
foreach($file as $k=>$v){
echo $k."=".$v;
echo "<br>";
}
}
?>

apt-get source.list

#官網
deb http://http.us.debian.org/debian testing main contrib
deb http://non-us.debian.org/debian-non-US testing/non-US main contrib

bsd ls 顏色顯示變亮眼彩色 超推薦!

install gnuls

cd /usr/ports/misc/gnuls/

make install clean

執行下面這一行

alias ls 'gnuls --color=auto --show-control-chars'


ref:http://freebsd.lab.mlc.edu.tw/gnuls.htm

tcpdump

tcpdump -i rv0 -w filename;儲存收到的封包到filename

kof server

http://kaillera.com/download.php
Kaillera server downloads:
(You need this if you want to create a Kaillera server)
- Kaillera server v0.86 (Windows binary) (21kb).
- Kaillera server v0.86 (Linux binary) (36kb).
http://kaillera.com/files/kaillerasrv-0.86-linux.tgz
- Kaillera server v0.86 (FreeBSD binary) (36kb).
http://kaillera.com/files/kaillerasrv-0.86-freebsd.tgz





如果出現以下錯誤訊息
> ./kaillerasrv
/usr/libexec/ld-elf.so.1: Shared object "libc_r.so.4" not found, required by
"kaillerasrv"

可以試試下面這篇文章解決方法

http://help.directadmin.com/item.php?id=55

If you get the following error when installing the Frontpage Extensions to a
domain:

Error setting up your web: /usr/libexec/ld-elf.so.1: /usr/lib/libc_r.so.4:
Undefined symbol "_flockfile"
or

Error setting up your web: /usr/libexec/ld-elf.so.1: Shared object
"libc.so.4" not found, required by "owsadm.exe"
then you'll need to do the following:

pkg_add -r compat4x
cd /usr/lib
mv libc_r.so.4 libc_r.so.4.old
ln -s /usr/local/lib/compat/libc_r.so.4.compat4x libc_r.so.4


If pkg_add fails, try this:

cd /usr/ports/misc/compat4x
make deinstall
make clean
make install
cd /usr/lib
mv libc_r.so.4 libc_r.so.4.old
ln -s /usr/local/lib/compat/libc_r.so.4.compat4x libc_r.so.4
For FreeBSD 6.0, try this code

cd /usr/lib
ln -s /usr/local/lib/compat/libcrypt.so.2
ln -s /usr/local/lib/compat/libm.so.2
mv libc.so.4 libc.so.4.old
ln -s /usr/local/lib/compat/libc.so.4
On one 6.1 system, after the compat libraries were setup, I had to run

cd /lib
ln -s libcrypt.so.3 libcrypt.so.2
which didn't actually use the compat libaries in the end.



kaillerasrv.conf的設置方式

; Kaillera server config file
; ServerName can be up to 64 characters long.
ServerName=Unknown serv0r  輸入你的伺服器名稱(任意)
; Location can be up to 64 characters long.
Location=Unknown location   輸入你伺服器所在位置(任意)
; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
URL=           輸入你伺服器連結(任意、可省略)
MaxUsers=10        伺服器人數上限
Port=27888         伺服器所使用 Port(建議不修改)
; Set Public to 0 if you want to run the server on a private LAN
Public=1          是否為私人伺服器(0 為區網、1 為網路)
; Use this parameter if you want to manually specify your server's
; IP address or leave blank for automatic
; (ex: IP=154.253.21.56)
IP=            輸入你的 IP(必要)
; Messages flood protection
; FloodMsgNb is the max. number of times a same message has to
; be received in FloodMsgTime seconds.
FloodMsgNb=5
FloodMsgTime=3
; Minimum ping restriction (in ms)
; 0=disabled
MinPing=0
; Maximum connection setting restriction
; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
MaxConnSet=0
; Message of the Day
; Note that you can stack "MotdLine" options
;MotdLine=Welcome to unknown serv0r! You can
;MotdLine=see our website at http://web.site/
; AllowWebAccess (1=yes,0=no)
AllowWebAccess=1
; End of Kaillera server config file

sh.sh

--a.sh--
#!/bin/sh
for unzipfile in $(ls *.tgz)
do
tar -zxf $unzipfile
echo "$unzipfile done!"
rm $unzipfile
done

--sh.sh--
rm -r /home/bbs/usr
rm -r /home/bbs/brd
rm -r /home/bbs/gem/brd
rm /home/bbs/.BRD
rm /home/bbs/.USR
mkdir /home/bbs/usr
mkdir /home/bbs/brd
mkdir /home/bbs/gem/brd
cp -r /bbs.data/usr0831.0901.02.03/* /home/bbs/usr/
cp /home/bbs/a.sh /home/bbs/usr/a
cd /home/bbs/usr/a
sh a.sh
mv a.sh ../b
cd ../b
sh a.sh
mv a.sh ../c
cd ../c
sh a.sh
mv a.sh ../d
cd ../d
sh a.sh
mv a.sh ../e
cd ../e
sh a.sh
mv a.sh ../f
cd ../f
sh a.sh
mv a.sh ../g
cd ../g
sh a.sh
mv a.sh ../h
cd ../h
sh a.sh
mv a.sh ../i
cd ../i
sh a.sh
mv a.sh ../j
cd ../j
sh a.sh
mv a.sh ../k
cd ../k
sh a.sh
mv a.sh ../l
cd ../l
sh a.sh
mv a.sh ../m
cd ../m
sh a.sh
mv a.sh ../n
cd ../n
sh a.sh
mv a.sh ../o
cd ../o
sh a.sh
mv a.sh ../p
cd ../p
sh a.sh
mv a.sh ../q
cd ../q
sh a.sh
mv a.sh ../r
cd ../r
sh a.sh
mv a.sh ../s
cd ../s
sh a.sh
mv a.sh ../t
cd ../t
sh a.sh
mv a.sh ../u
cd ../u
sh a.sh
mv a.sh ../v
cd ../v
sh a.sh
mv a.sh ../w
cd ../w
sh a.sh
mv a.sh ../x
cd ../x
sh a.sh
mv a.sh ../y
cd ../y
sh a.sh
mv a.sh ../z
cd ../z
sh a.sh
rm a.sh
mkdir /home/bbs/usr/@
chown -R bbs:bbs /home/bbs/usr
cp -r /bbs.data/brd0904.05/* /home/bbs/brd
cp /home/bbs/a.sh /home/bbs/brd
cd /home/bbs/brd
sh a.sh
rm a.sh
chown -R bbs:bbs /home/bbs/brd
cp -r /bbs.data/gem0906/* /home/bbs/gem/brd
cp /home/bbs/a.sh /home/bbs/gem/brd
cd /home/bbs/gem/brd
sh a.sh
rm a.sh
chown -R bbs:bbs /home/bbs/gem
cp /bbs.data/20080907.BRD /tmp
cp /bbs.data/20080907.USR /home/bbs/.USR

GCC_4.2.0_下載,更新!

ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.2.0/

以書喻人的話,女生是紅樓夢,男生是金瓶梅

以書喻人的話,

女生是紅樓夢,

男生是金瓶梅。
















有阿,你很有這一方面的潛能,只不過埋得很深,比較難挖掘




















只尋找被愛,

而吝於愛人,

很難覓得真愛的吧。
















早就告訴過你們,

安全第一,

你們知道被車子撞飛在空中的樣子多像一個殘破的娃娃嗎?
















寬鬆的上衣讓我幾乎可以毫無阻礙的窺視進去





















節錄自很多書,多到我忘了有哪些

分享一個不錯的 .bashrc SP1設定

PS1='\[\033[1;33m\]\u\[\033[1;37m\]@\[\033[1;32m\]\h\[\033[1;37m\]:\[\033[1;31m\]\W \[\033[1;36m\]\$ \[\033[0m\]'

看起來像這個樣子 (比較容易識別):
root@zaurus:home #


說明:
\[\033[ 是 ANSI 顏色控制碼起始

1;33m\] 是顏色控制碼
第一個數字是亮度, 1 是高亮度,0是普通亮度,還有2閃爍 (少數 shell 才有支援)
第二個數字是顏色代碼

\[\033[0m\] 是關閉 ANSI 顏色控制碼,必須加於末尾,後來畫面顯示的文字才不會帶顏色



轉貼自http://forum.palmislife.com/viewthread.php?tid=12210

什麼是伺服器?What is server?

什麼是伺服器?
一般人對伺服器的印象常常是『一個巨大的機房,裡面放著很多機器,很多線路,好像那種東西是一般大眾買不到的、很神秘的東西!』其實,完全不對!

在維基百科上面,伺服器的定義如下:『伺服器以硬體來說,通常是指那些具有較高計算能力,能夠提供給多個用戶使用的電腦主機。 伺服器與個人電腦的不同點太多了,例如個人電腦在同一個時間通常只為一個使用者服務。而伺服器同時給很多人使用。』

不過這已經是舊時代的想法了,以現在(20080810)市面上的電腦來說,一個一萬二的主機,不含螢幕價錢,其實也可以勝任一個不錯的伺服器。大約可以給兩百人同時瀏覽架設於其上的網頁沒有問題!有人說,電腦硬體就像一個軀殼,軟體就像思想或靈魂,硬體的效能決定了軀殼強壯與否,而軟體決定了CPU這個軀殼的身份以及行為。

伺服器就硬體上而言我們期待它是『夠強壯』的軀殼好勝任繁重的工作,並搭配合適的軟體讓它扮演特定角色;舉例來說,它會扮演成客服人員、接洽窗口、銀行行員、行政人員或是銷售員等各種角色,就像各種類型的伺服器軟體所提供的服務。

而使用者要使用這些服務也會有不同的方法,像有些單位會要求你領取號碼牌等候或是按照某些行政流程處理事項等,因此使用者使用特定服務時也有對應的客戶端程式來存取伺服器提供的服務。

那究竟伺服器是怎麼辦到的呢?遊戲的伺服器、MSN的伺服器、網頁的伺服器、FTP的伺服器、※夢之大地※的伺服器?這些可以讓我們連上去使用的服務,例如,你可以連上魔獸世界進行你的副本,你可以連上MSN取得你的朋友清單,可以連上GOOGLE進行你要的資料搜尋,可以連上夢之大地去course版找到你要的課的建議!這些服務是怎麼辦到的呢?

其實,仔細分析一下,上述的那些動作都可以分解為
『①利用某軟體,②然後去某處,③送出並傳回某些資料』

其中的第一項這個動作就是在你的電腦上面,也就是在所謂的客戶端上面完成,例如:
① 你開啟你安裝的魔獸世界執行檔
下一個步驟是在遠端的伺服器上面完成的,遠端的伺服器機器讓你的帳號登入,並且將你的角色資料從硬碟中讀到記憶體裡面,例如:
② 連去魔獸世界的伺服器
最後一個步驟從遠端伺服器開始,終於客戶端,也就是你自己的個人電腦。
③你送出你的帳密、或者你的角色移動的方向給魔獸伺服器
魔獸的伺服器會傳回帳密是否正確,或者你的角色移動之後的場景樣式給你的電腦,接著你的電腦上面的魔獸執行檔就會把那些電子資訊轉換成螢幕上的楊子給你看到了!又或者以網頁來說。
① 你打開你安裝的火狐瀏覽器
② 連去咕狗的首頁
③ 送出你搜尋的關鍵字,然後咕狗回傳給你搜尋的結果

上面所述流程就是所有伺服器的運作模式了!相信你所看到的!這絕對是『所有』伺服器的運作模式!任何伺服器提供的服務絕對都可以分解成以上動作,不過你必須知道,上面那些分解是為了讓大家容易瞭解伺服器做的事情,而正常我們在架設伺服器,對於網路的狀況作分析時,並不是像那樣分析的。

這些伺服器其實就只是一台電腦,一台可以開打他的網路某個通訊埠,讓別人的電腦可以透過這個通訊埠來取得資料的電腦!

具上所述,只要你的電腦可以連上網路,然後裝上可以回應出別人從網路上送出的要求的軟體!那麼,那就是一台俗稱的伺服器!

如何成為伺服器!
上面說過了!只要你的電腦可以回應給其他電腦正確的資訊時,那就是一台伺服器!

舉例來說:你想要一台網頁伺服器該怎麼作呢?

首先,你必須知道哪些軟體可以回應別人的電腦發出的HTTP協定要求,然後安裝他,並且開啟該軟體會使用到的通訊埠。真的!這樣就搞定了!當然了,只有作這樣的話其實並沒有做好一個伺服器該有的規劃,一個好的伺服器必須把硬碟的分割包含檔案分配做好,平均分散每顆硬碟的使用率,做好定期備份重要檔案,設置防火牆以免網頁被駭。即使你不去作這些規劃,你的伺服器依然可以運作,而且運氣好的話甚至可以運作得很順利(當然這不太可能…)。

至於,什麼是可以回應HTTP通訊協定的軟體?這本講義可以簡單的給你一個答案『Apache』。他唸作『阿帕契』
在Debain系統下你可以利用以下指令安裝Apache
apt-get install apache2

等系統將apache2下載並安裝完畢之後。基本上,你的網頁伺服器就完成了。

詳細的安裝和設定Apache,這就不在本講義的範圍之內了,不過我可以告訴你幾個地方,讓你有跡可循。
● 鳥哥的私房菜。鳥哥是成大的環工學長喔!鳥網裡面會告訴你,如何安裝linux(通常我們用這個os架站),如何安裝Apache和其他伺服軟體,例如電子郵件、FTP、DNS…。而且都會寫上非常詳細的各種服務的觀念!非常建議閱讀!
● Study-Area。這個網站裡面最富盛名的應該就是網中人了(netman),這個站裡面除了對於linux系統有非常多的介紹之外,也有寫到BSD系統的freeBSD。那也是一個非常棒的伺服器OS選擇!夢大就是運行在freeBSD上面的呢!
● FreeBSD架設管理與應用。其實這是一本書啦,這本書成大總圖有,不過全書內容都在作者佛心的分享之下統統都上線了!講義中我偏偏不俗套的附上網址,反正附了你們也不可能一個字一個字打上網址列,相信我,直接咕狗『FreeBSD架設管理與應用』比打網址快多了!這本書應該是最適合新手上路的一本書,因為他從基礎的安裝作業系統,到進階的伺服器設定都有深入淺出的介紹。筆者我就是從這本書開始我的伺服器之旅的!

其他還有說不盡的資訊通通都在網路上,多花點時間上網搜尋,或者直接進入網愛社面對面功力傳授,你的伺服器功力肯定都可以有大幅度進步!

小宅宅:『那一個首頁會在一台伺服器的哪裡呢?為什麼我安裝了Apache之後,別人連過來我的IP就會有首頁了?』
大宅宅:『其實那就是所謂設定Apache的部份了,這個問題如果弄懂了之後應該有助於大家對伺服器基礎的,且重要的認知!所以下面簡單介紹一下!』

以freeBSD為例,當你利用port安裝Apache後,再沒有更改安裝參數的情況之下,『你的首頁』是下面這個路徑這個檔案!
/usr/local/www/data-dist/index.html
只要你更改了那個檔案的內容,別人連過來你的電腦看到的首頁就會你改過的樣子了!
freeBSD之下安裝Apache的方法附於下:
# cd /usr/port/www/apache20
# make install clean
要進行這些步驟你還必須對unix-like系統有相當程度的認識,至少要知道什麼是超級使用者(root),還要可以將自己的權限提昇到超級使用者,才能正確的安裝Apache軟體。
Windows之下安裝了Apache之後,預設的首頁路徑大概如下
C:\Appserv\data\index.html

恩…其實我沒有在Windows之下安裝伺服器的經驗,上面那個路徑是我猜的………哈哈。

附帶一提,Windows上面的伺服器軟體最普遍被一般人使用的是Appserv,你可以用這個關鍵字直接去咕狗,你可以找到他的官方網站,並且下載該軟體,安裝方法應該也是所謂的『一直下一步』。這東西我沒安裝過,不提了。

有哪些伺服服務?
這裡簡單介紹幾種伺服服務。
→DHCP:設定一個網域的自動ip分配服務。
→DNS:將數字ip轉換為文字ip的網址服務。
→WWW:網頁服務。
→SAMBA:讓win的電腦可以存取unix的檔案。
→Mail:電子郵件服務
→Proxy:可以節省頻寬的網路服務。
以上的伺服器都可以在鳥網看到非常詳細的介紹。

什麼是PHP、HTML、BBS?
其實所有『你看到的』網頁都是html語法了,但是你看到的html語法可能是由php、cgi、JavaScript產生的,但是無論如何,那些程式都是經由你在瀏覽器上面送出的資訊,利用那些資訊運算出你要的資訊,製作成html語法傳給你的瀏覽器,瀏覽器再將那些html語法解釋出來,作成各種貼圖,文字效果,然後產生你看到的網頁!
現在的網頁幾乎都會把各種語言來拿綜合著用,例如我自己作過的類似youtube的影片播放網頁,裡面就有html和JavaScript!也就是在一份index.html裡面寫著html和JavaScript的語法。
php舉例說明;
echo Date( "D" ) ;
?>
上面三行php程式碼在有安裝php的伺服器中,會回應出當天的星期,例如如果你是禮拜二去瀏覽該網頁的,那麼,上面那三行php程式碼就會變成:
Tru
Tru這三個英文字!而你無法在瀏覽器上面看到Tru這三個英文字是原本寫上去的html語法,或者是php在伺服器上面運算出來的結果!

附帶一提,php是在伺服器上面運算,然後將運算出來的結果傳給瀏覽器,所以要能夠執行php語法的伺服器還必須安裝php程式,這樣才能正確執行php語法。php除了像上面那種Date函式之外,你還可以像C語言那樣撰寫迴圈,變數。

說到BBS,那可以算是中港台三地的網路應用神蹟了!因為台灣的網路速度普遍頻寬很低,所以可以高速作為交流的BBS平台相當受大學生族群的歡迎!而能夠把一台機器和程式的效能發揮的如此淋漓盡致,也堪稱是在逆境中求生存的最優異表現了!當大家利用PCman連上夢大、PTT,可以看到網址開頭的六個英文字是『telnet』,其實那就是BBS使用的通訊協定了,其實telnet原本是用來登入遠端機器作為遠端管理的工具,其畫面擷取如下。
在如何成為伺服器那邊說過了,伺服器會有一支程式來處理客戶端要求的資料,telnet就是那麼一支在處理使用者登入之後的程式!telnet程式將你的登入資訊和儲存在硬碟裡面的資料作比對,正確的話就讓你正確登入BBS,然後你看到的每一篇文章都是一個在硬碟上面的檔案,就如同Apache一樣,Apache有/usr/loacal/www/date-dist放置首頁,BBS也會有自己的檔案放置位址,一般BBS都會將主程式放置在/home/bbs/bin/裡面,通常這個位址裡面會有一個叫做bbsd的程式在處理你的登入資訊和各種要求,這隻bbsd就是telnet程式了!

附帶一提,bbsd可以理解為BBS Daemon,Daemon的意思是『在unix之下獨立運行的程式』。

另外,你還需要知道的是,BBS是最早也是最快速的『互動式表單系統』,web2.0起於各種互動式網頁的產生,大家可以在網頁論壇上面留下自己的意見,跟世界各地的網友互動,www利用html、php、MySQL處理各項資料,但是速度永遠比不上瞬間完成的BBS,但是若未來網路速度可以提升到全民光纖的時代,產生像BBS那樣快速方便好用的web服務是有可能的!

什麼是FTP?
比起前面的Apache、BBS,FTP真的是簡單太多了!長話短說,FTP就是一個可以登入遠端機器,利用FTP程式裡面的程式取回遠端電腦的檔案。
如同前面所說的任何服務一樣,FTP也會開啟一個通訊埠(通常是21)讓客戶端連進來,然後客戶端傳送要求資料的訊息,再來伺服器就把檔案送給客戶端。如此,就完成了FTP在做的事情了!

比較特別的是,FTP程式利用兩個通訊埠,port21是讓客戶端的登入資訊命令、移動到其他資料夾的命令、下載某檔案的命令通行的通訊埠,port20才是我們真正在傳輸檔案的port!至於為什麼會一次使用兩個port?這點我也不清楚,待查了………!

在unix-likeOS上面常用的ftp軟體很多種,我推薦pure-ftpd。因為他真的很單純,但是也不會單純到功能東缺稀少!使用的記憶體也非常少量!獨立運行也不曾掛掉。

什麼是PORT?
當我們連上某個網址的時候,例如,bbs.ncku.edu.tw,我們在PCman裡面輸入這個網址,不過,為什麼我們不會連到這個網址提供的其他服務(如果有的話),例如www或者ftp呢?
這就是port的功用了,我們在PCman裡面輸入的網址,PCman軟體會以預設的telnet通訊埠23作為溝通的管道,然後夢大伺服器上面在管理telnet的軟體會處理的訊號也就是從port23過來的資訊,所以如果你在PCman連到bbs.ccns.ncku.eud.tw:21的話,只會發生連不上主機的情況而已了!
各種服務都有制式化的port,稱之為
『well known port』
你可以直接上網查詢這個關鍵字,你可以看到
ftp:21
ssh:22
telnet:23
http:80
還有其他很多port都有規定,當然了,這些port都可以改,但是改了之後別人要進入你提供的服務就要再另外加上那些port才能使用你提供的服務了,例如如果你改了你的telnet通訊埠到408。那麼別人就要在網址後面加上:480,如『telnet://bbs.ccns.ncku.edu.tw:408』這樣才可以登入你的服務!

Windows VS UNIX
眾所皆知,以個人桌上型或者筆記型電腦來說,作業系統絕對是以Windows為大宗,不過,一旦提到伺服器這方面,如果你使用Windows作為你的OS的話,恩,那我會替你捏把冷汗………。

為什麼大家都用Windows作為個人電腦的作業系統,但是一旦當作伺服器的作業系統時,卻又敬而遠之呢?這邊,我簡單說明一下!

伺服器最重要的就是所謂的uptime,中文意思就是開機上線進行服務的時間,例如夢大之前常常當機,那夢大一年下來的uptime就不到99%了!一台標準的伺服器要可以做到有99%的上線時間,也就是一年中有三千一百二十二萬零六百四十分鐘必須是可以讓使用者連線上的,以另外一種說法來說,一年只能不在線上三十一萬五千三百六十分鐘,也就是八十七點六小時,也就是一年下來總和離線時間只能有三點六五天!但是這只是一般的標準,真正進行商業行為的網站對於uptime要求絕對比99%還要高出很多很多很多,甚至是100%。畢竟商業服務容不得任何時間讓客戶連不上網站阿!

總的來說,因為不能讓各種硬體或者軟體問題導致斷線,所以在硬體方面,幾乎所有大型伺服器都會有備援機,也就是兩台機器裡面的資料是一模一樣的,如果其中一台忽然硬體掛掉了,那麼另一台馬上接手繼續之前的服務,其中的間隙是使用者感覺不出來的。那麼,在軟體方面,因為Windows上面有各種亂七八糟的病毒肆虐,OS的記憶體也管理做的不好,一來無法防治病毒無情的惡搞,記憶體管理的不好也會讓開機時間和效能呈現負相關成長,開機越久,效能越低。

小宅宅:『病毒攻擊和記憶體管理不好的情形大概是什麼阿?很嚴重嗎?』
大宅宅:『病毒可以簡單的想成,你的電腦開了那些網頁服務之後,或許會因為OS軟體裡面某個通訊可以透過你已經開啟的服務,讓駭客傳送奇怪的資料導致OS將開不應該開啟的通訊埠打開,然後對方以這個通訊埠傳送命令過來,例如刪除windows底下所有D槽裡面的檔案這種指令,當然囉,這樣被搞過之後你的伺服器上得資料肯定跟你說拜拜了。
那麼記憶體管理的話,你可以回家打開你的Windows電腦,叫出你的windows工作管理員,切換到處理程序那個分頁,按下檢視…選擇欄位…把虛擬記憶體也勾選起來,你可以看到每一支程式總使用的記憶體量裡面,差不多會有30%~50%是放在虛擬記憶體上面的,而虛擬記憶體是在硬碟上面分割出來當作記憶體使用的東西,這部份詳談的話,是另一個故事了,跳過不提。你只要知道受限於硬碟傳送資料速度約為記憶體的萬分之一,所以虛擬記憶體會拖垮程式速度,而unix-like系統上面會優先使用實體記憶體,甚至把目前沒有實際使用到的記憶體快取起來,所以可以的對於網路上送來的要求,快速開啟一支對於該要求產生回應或者處理資料的程式』

通篇而論,想要有長時間上線,又擁有優異效能,unix-like是你的首選!

本篇文章立意主在釐清新手對於伺服器的概念,不包含建立伺服器的方法,因為建立伺服器的方法在網路上有太多太多文章你必須參考,那些文章都很棒,非看不可!

by magicallove
2008/8/12

所謂?戰?

原因是我不願意放下身段思考,秉持著我的意見單刀直入,硬押著夥伴

或者敵人上架,不顧其他人甚至是一個團隊的好處,我堅持著那樣做就

是那樣做。


我媽說,人人不一樣,資質、經歷都有差。是的,我可以繼續這樣戰,

戰那些跟我意見不一樣的人,用我的高調語氣與尖銳的語言。月亮的男

人說我這樣不成人之美,以我的腦袋多想兩分鐘就可以用其他句子來說

一件事情,但我以前喜歡,也常用聽聞起來較為刺耳的字詞,因為那很

爽,可以把別人弄到失焦或者火冒三丈。我就像是惟恐天下不亂的樣子




就像是老師教學生那樣,老師可以用不同的方法教不同程度的學生,讓

每個學生都快快樂樂的有所學,不過那樣老師要花很多力氣想教學方法

。也可以用教精英的方法教所有學生,不過那樣的話,後段的學生只會

在下課後幹譙,或者跑去看妹。但是精英的學生可以學到更多東西!


這讓我想到『曲高和寡』的故事,不過不知道這意思這樣對不對。


看到很多人常常花時間放鬆自己,甚至有人無時無刻都在放鬆自己,而

且是近乎渾沌了的那種放鬆,他們花時間去做那種我認為毫無意思的事

情(注意到沒,這句話容易引戰?應該吧)我媽建議我選擇閉口不語,

我可以知道或者認為誰怎麼樣做不好,但是不用說出來,反正別人的命

是他的,他要怎麼使用與我何干?後面兩句話是我自己的註解。不是我

媽說的。


我認為,沒有什麼事情是不能說出來的,彼此的友誼或者任何關係之間

糝有著秘密或者謊言,怎麼可能不會垮掉?為什麼有人會認為不能講?

不講就會好嗎?學研營有一句話,做了不一定有機會,不做絕對沒機會

,依照偉期的照樣照句『說了不一定會好,不說一定不會好!』


如果我為了迎合每個人,開始去掩飾原本的情緒,開始用皆大歡喜的說

法來溝通,是不是會比較好?



如果生氣,卻還要想想如何表達才能不傷人,又要傳達出我很憤怒的情

緒?這樣真的能行嗎?這樣還叫做生氣嗎?



給那些不一定有幸看到這篇文章,但是我有些話想告誡的人

Who do you think you are? You are nobody!

沒有那個能耐讓大家亂了陣腳!

永遠別再希冀誰會再給予幫助。

rm link director 刪除建立的連結或者資料夾

案發經過(下面是一模一樣情況的模擬,不是刪掉當時檔案的經過)

pwd:/usr/home/aaa/bbb

ln -s /usr/home/aaa/ccc/ /usr/home/aaa/bbb/ccc

rm -r ccc/

也就是說我在 /usr/home/aaa/bbb/ccc

給了刪除ccc這個link的指令 rm -r ccc/

但是正確的方法是 rm ccc

我要刪掉的ccc是一個連結檔案,給了斜線並加上 -r 之後

變成遞迴刪除ccc/底下的東西,哭哭阿!!!

因為多給了一條斜線,所以資料全毀了!

最基本的密碼登入網頁製作方法

1. login.html







<html>
<FORM METHOD=POST ACTION="auth.php">
帳號: <INPUT TYPE="text" NAME="account"><BR>
密碼: <INPUT TYPE="text" NAME="password"><BR>
<INPUT TYPE="submit" value="送出">
</FORM>
</html>



2. auth.php







<?php
if($account == "lord" && $password == "pass"){
echo "歡迎 $_POST[account], 你的密碼是 $_POST[password]";
}elseif($_POST[account] == "god" && $_POST[password] == "dog"){
$y = date("Y") - 1911;
$m = date("m");
$d = date("d");
echo "歡迎 $_POST[account], 今天是民國".$y."年".$m."月".$d."日";
}else{
echo "登入失敗:<hr> 輸入的資料:<br>帳號: $_POST[account] <br>密碼: $_POST[password]";
}
?>



真的很簡單

在login.php輸入的資訊為兩個字串(當作是字串就可以了)

執行的動作是以POST的方法送到auth.php

然後執行auth.php這個網頁

又,在login.php裡面的字串有在auth.php裡面使用到

用途是作為判斷要輸出哪個字串的

伺服器端不會判斷你到底是不是正確使用者

但是他會檢查你輸入的字串符合哪個輸出條件,然後輸出相對應的東西

至於什麼是POST方法(另一種是GET方法)

新手可以先不要管,照著寫就好。

如果你想要深入了解的話在去找資料看吧

google,php教學就有很多資料了

或者,我推薦,「碼上學會PHP5&MySQL5」這本中文書

ISBN
978-986-6884-05-4


上面的code轉自
http://php.igt.com.tw/unit_102.htm

防止被搜尋引擎找到的方法

http://www.mcanerin.com/EN/search-engine/robots-txt.asp

要不被搜索引擎找到

你必須是該網站的管理員才行

因為我們必須新增一個叫做robots.txt的純文字檔案

並且放在www服務的根目錄下

最基本的範例,如
--
# Disallows all robots

User-agent: *
Disallow: /
--
將上面的內容寫到名為robots.txt的檔案裡面

並將該檔放置於網頁根目錄,如此一來搜索引擎機器人就不會搜索你的網頁了

至於,放在其他地方會不會生效。

這份文件是怎麼作用的我並不清楚,改天知道的話會來補充。

BBS ACCT 結構

下面是夢大的code
/*-------------------------------------------------------*/
/* struct.h ( NTHU CS MapleBBS Ver 2.36 ) */
/*-------------------------------------------------------*/
/* target : all definitions about data structure */
/* create : 95/03/29 */
/* update : 95/12/15 */
/*-------------------------------------------------------*/


#ifndef _STRUCT_H_
#define _STRUCT_H_


#define STRLEN 80 /* Length of most string data */
#define BTLEN 42 /* Length of board title */
#define BMLEN 36 /* Length of board managers */
#define TTLEN 72 /* Length of title */
#define FNLEN 28 /* Length of filename */
#define IDLEN 12 /* Length of board / user id */
#define PASSLEN 14 /* Length of encrypted passwd field */


#define BFLAG(n) (1 << n)/* 32 bit-wise flag */


typedef char const *STRING;
typedef unsigned char uschar; /* length = 1 */
typedef unsigned int usint; /* length = 4 */
typedef struct UTMP UTMP;

/* ban email 轉信用 */

typedef struct
{
char name[IDLEN+1];
} ADMIN;

typedef struct
{
char name[IDLEN+1];
char email[60];
} CONTACT;

typedef struct
{
char date[8];
char time[8];
char work[50];
} MEMORANDUM;

typedef struct
{
char data[48];
int mode;
time_t time;
int usage;
} BANMAIL;

typedef struct
{
char data[48];
int mode; time_t time;
int usage;
char name[IDLEN+1];
} FW;

#define FW_OWNER 0x01
#define FW_TITLE 0x02
#define FW_TIME 0x04
#define FW_PATH 0x08
#define FW_ORIGIN 0x10

#define FW_ALL 0xFF

/* ----------------------------------------------------- */
/* 使用者帳號 .ACCT struct : 512 bytes */
/* ----------------------------------------------------- */


typedef struct
{
int userno; /* 使用者編號 */
char userid[IDLEN + 1]; /* 使用者ID */
char passwd[PASSLEN]; /* DES編碼過後的密碼 */
uschar signature; /* 使用的簽名檔編號 */
char realname[20]; /* 真實性名 */
char username[24]; /* 暱稱 */
usint userlevel; /* user perm */
int numlogins; /* 登入次數 */
int numposts; /* 發文次數 */
usint ufo; /* user basic flags */
time_t firstlogin; /* 第一次登入時間 */
time_t lastlogin; /* 最後一次登入時間 */
time_t staytime; /* 總共停留時間 */
time_t tcheck; /* time to check mbox/pal */
char lasthost[32]; /* 上次登入來源 */
int numemail; /* 寄發 Inetrnet E-mail 次數 */
time_t tvalid; /* 通過認證、更改 mail address 的時間 */
char email[60]; /* 使用者信箱 */
char address[60]; /* 使用者地址 */
char justify[60]; /* FROM of replied justify mail */
char vmail[60]; /* 通過認證之 email */
time_t deny; /* user violatelaw time */
int extrambox; /* 加大信箱 (最大 50 封) */
int extrasize; /* 加大信箱容量 (最大 1000K) */
usint ufo2; /* 延伸的個人設定 */
char ident[104]; /* user remote host ident */
time_t vtime; /* validate time */
} ACCT;

typedef struct
{
int money; /* 夢幣 */
int save; /* 存款 */
int request; /* 小雞點券 */

// int request_times; /* 當天點歌次數 */
// char lastrequestdate[11]; /* 最後點歌日期 */
} MONEY;


typedef struct /* 16 bytes */
{
time_t uptime;
char userid[IDLEN];
} SCHEMA;


#ifdef HAVE_REGISTER_FORM

typedef struct /* 註冊表單 (Register From) 256 bytes */
{
int userno;
time_t rtime;
char userid[IDLEN + 1];
char agent[IDLEN + 1];
char realname[20];
char career[50];
char address[60];
char phone[20];
char reply[61];
char idno[11];
} RFORM;

#ifndef HAVE_SIMPLE_RFORM
typedef struct
{
int userno;
char userid[IDLEN + 1];
char msg[80];
} RFORM_R;
#endif
#endif


/* ----------------------------------------------------- */
/* User Flag Option : flags in ACCT.ufo */
/* ----------------------------------------------------- */


#define UFO_COLOR BFLAG(0) /* true if the ANSI color mode open */
#define UFO_MOVIE BFLAG(1) /* true if show movie */
#define UFO_BRDNEW BFLAG(2) /* 新文章模式 */
#define UFO_BNOTE BFLAG(3) /* 顯示進板畫面 */
#define UFO_VEDIT BFLAG(4) /* 簡化編輯器 */

#define UFO_PAGER BFLAG(5) /* 關閉呼叫器 */
#define UFO_QUIET BFLAG(6) /* 結廬在人境,而無車馬喧 */

//#define UFO_PAL BFLAG(7) /* 訊息上限拒收訊息 */
#define UFO_MAXMSG BFLAG(7) /* 訊息上限拒收訊息 */
#define UFO_FORWARD BFLAG(8) /* 自動轉寄 */
//#define UFO_ALOHA BFLAG(8) /* 自動轉寄 */

#define UFO_CLASSTABLE BFLAG(9) /* 功課表通知 */
//#define UFO_MOTD BFLAG(9) /* 功課表通知 */
//#define UFO_MIME BFLAG(13) /* MIME 解碼 */
#define UFO_BROADCAST BFLAG(14) /* 拒收廣播 */
//#define UFO_SIGN BFLAG(15) /* 簽名檔 */
//#define UFO_SHOWUSER BFLAG(16) /* 顯示 ID 和 暱稱 */
//#define UFO_WATER BFLAG(10) /* 多重水球 */
//#define UFO_BMWRECORD BFLAG(11) /* 水球紀錄 */
//#define UFO_BMWRESERVE BFLAG(12) /* 水球記錄離站預設保存 */
//#define UFO_BMWDELETE BFLAG(13) /* 水球記錄離站預設刪除 */

#define UFO_HIDEDN BFLAG(18) /* 隱藏來源 */
#define UFO_CLOAK BFLAG(19) /* true if cloak was ON */
#define UFO_ACL BFLAG(20) /* true if ACL was ON */
#define UFO_NET BFLAG(21) /* visor.991030: 網路程式 */
#define UFO_WEB BFLAG(22) /* visor.020325: WEB */
#define UFO_MPAGER BFLAG(10) /* lkchu.990428: 電子郵件傳呼 */
//#define UFO_NWLOG BFLAG(11) /* lkchu.990510: 不存對話紀錄 */
//#define UFO_NTLOG BFLAG(12) /* lkchu.990510: 不存聊天紀錄 */
#define UFO_MESSAGE BFLAG(23) /* visor.991030: 訊息全關 */
#define UFO_PAGER1 BFLAG(26) /* visor.991030: 呼叫器全關 */


/* ----------------------------------------------------- */
/* bit 24-27 : client/server or telnet BBS */
/* ----------------------------------------------------- */

#define UFO_BIFFN BFLAG(24) /* 有新訊息 */
#define UFO_SPARE BFLAG(25) /* ready for connection */

/* these are flags in UTMP.ufo */

#define UFO_BIFF BFLAG(27) /* 有新信件 */
#define UFO_SOCKET BFLAG(28) /* true if socket port active */
#define UFO_REJECT BFLAG(29) /* true if reject any body */

/* special purpose */

#define UFO_FCACHE BFLAG(30) /* 有好友 */
#define UFO_MQUOTA BFLAG(31) /* 信箱中有待清理之信件 */

#define UFO_UTMP_MASK (UFO_BIFF|UFO_BIFFN)
/* Thor.980805: 定義ufo中以utmp->ufo為本尊的flag, 解決與cuser.ufo不同步的問題 */

/* ----------------------------------------------------- */
/* User Flag Option Extend: flags in ACCT.ufo2 */
/* ----------------------------------------------------- */


#define UFO2_COLOR BFLAG(0) /* true if the ANSI color mode open */
#define UFO2_MOVIE BFLAG(1) /* true if show movie */
#define UFO2_BRDNEW BFLAG(2) /* 新文章模式 */
#define UFO2_BNOTE BFLAG(3) /* 顯示進板畫面 */
#define UFO2_VEDIT BFLAG(4) /* 簡化編輯器 */

#define UFO2_PAL BFLAG(5) /* true if show pals only */

#define UFO2_MOTD BFLAG(6) /* 簡化進站畫面 */
#define UFO2_MIME BFLAG(7) /* MIME 解碼 */
#define UFO2_SIGN BFLAG(8) /* 簽名檔 */
#define UFO2_SHOWUSER BFLAG(9) /* 顯示 ID 和 暱稱 */

#define UFO2_PRH BFLAG(10) /* 顯示推薦文章分數 */

#define UFO2_SHIP BFLAG(11) /* visor.991030: 好友描述 */
#define UFO2_NWLOG BFLAG(12) /* lkchu.990510: 不存對話紀錄 */
#define UFO2_NTLOG BFLAG(13) /* lkchu.990510: 不存聊天紀錄 */
#define UFO2_CIRCLE BFLAG(14) /* 循環閱讀 */
#define UFO2_ORIGUI BFLAG(15) /* 關閉風之塔超炫介面 */

#define UFO2_DEF_ANONY BFLAG(16) /* 預設不匿名 */
#define UFO2_DEF_LEAVE BFLAG(17) /* 預設不離站 */
#define UFO2_REPLY BFLAG(18) /* 開啟水球回顧介面 */
#define UFO2_READNEWS BFLAG(19) /* 上站就讀新聞 */
#define UFO2_ONLINE BFLAG(20) /* 關閉作者線上提示 */
#define UFO2_BOTTOM BFLAG(21) /* 關閉置底功能 */

#define UFO2_ACL BFLAG(24) /* true if ACL was ON */
#define UFO2_REALNAME BFLAG(28) /* visor.991030: 真實姓名 */

#include "hdr.h"


/* ----------------------------------------------------- */
/* control of board vote : 256 bytes */
/* ----------------------------------------------------- */


typedef struct VoteControlHeader
{
time_t chrono; /* 投票開辦時間 */ /* Thor:為 key */
/* 而且 match HDR chrono */
time_t bstamp; /* 看板辨識代碼 */ /* Thor:為 key */
time_t vclose; /* 投票結束時間 */
char xname[17]; /* 主檔名 */ /* Thor: match HDR的xname */
char vsort; /* 開票結果是否排序 */
char vpercent; /* 是否顯示百分比例 */
char cdate[9]; /* 結束日期 */ /* Thor.990329: 只供顯示, y2k */
int maxblt; /* 每人可投幾票 */
char owner[129]; /* 舉辦人 */
char check; /* 學生投票系統 */
char date[9]; /* 開始日期 */ /* Thor: match HDR的date*/
char title[TTLEN + 1]; /* 投票主題 */
} VCH;

typedef struct VoteStudents
{
char grad[3];
char major[2];
char first[4];
char last[4];
char end;
} VCHS;


typedef char vitem_t[32]; /* 投票選項 */


/* filepath : brd//.VCH, brd//@/... */


/* ----------------------------------------------------- */
/* Mail-Queue struct : 256 bytes */
/* ----------------------------------------------------- */


typedef struct
{
time_t mailtime; /* 寄信時間 */
char method;
char sender[IDLEN + 1];
char username[24];
char subject[TTLEN + 1];
char rcpt[60];
char filepath[77];
char *niamod; /* reverse domain */
} MailQueue;


#define MQ_UUENCODE 0x01 /* 先 uuencode 再寄出 */
#define MQ_JUSTIFY 0x02 /* 身分認證信函 */
#define MQ_MIME 0x04 /* MIME */

/* ----------------------------------------------------- */
/* PAL : friend struct : 64 bytes */
/* ----------------------------------------------------- */


typedef struct
{
char userid[IDLEN + 1];
char ftype;
char ship[46];
int userno;
} PAL;

#ifdef HAVE_BANMSG
typedef struct
{
char userid[IDLEN + 1];
char ship[46];
int userno;
} BANMSG;
#endif


/* 上站通知名單 */
typedef struct
{
char userid[IDLEN+1];
int userno;
} ALOHA;


#define PAL_BAD 0x02 /* 好友 vs 損友 */


/* ----------------------------------------------------- */
/* structure for call-in message : 100 bytes */
/* ----------------------------------------------------- */


typedef struct
{
time_t btime;
UTMP *caller; /* who call-in me ? */
// unsigned long long sender; /* calling userno */
// unsigned long long recver; /* called userno */
int sender;
int recver;
char userid[IDLEN + 1];
char msg[71]; /* 熱訊 */
} BMW; /* bbs message write */

#define BMW_MODE 0x01


/* ----------------------------------------------------- */
/* Structure used in UTMP file : 148 bytes */
/* ----------------------------------------------------- */
#ifdef HAVE_PIP_FIGHT1
typedef struct
{
char name[20];
int pid;
int hp; /*體力*/
int maxhp; /*體力上限*/
int mp; /*法力*/
int maxmp; /*法力上限*/
int attack; /*攻擊*/
int resist; /*防禦*/
int speed; /*速度*/
int mresist; /*魔法防禦*/
int resistmore; /*防禦型態*/
int nodone; /*完成*/
int leaving; /*離開*/
int pipmode; /*狀態*/
int mode; /*幾代雞*/
int msgcount; /*訊息個數*/
int chatcount;
char msg[150]; /*訊息內容*/
char chat[10][150]; /*聊天內容*/
} pipdata;

typedef struct
{
pipdata pip1;
pipdata pip2;
} PIPUTMP;
#endif

struct UTMP
{
pid_t pid; /* process ID */
int userno; /* user number in .PASSWDS */

time_t idle_time; /* active time for last event */
usint mode; /* bbsmode */
usint ufo; /* the same as userec.ufo */
u_long in_addr; /* Internet address */
int sockport; /* socket port for talk */
UTMP *talker; /* who talk-to me ? */

BMW *mslot[BMW_PER_USER];

char userid[IDLEN + 1]; /* user's ID */
char mateid[IDLEN + 1]; /* partner's ID */
char username[24];
char realname[20];
usint userlevel;
char from[30]; /* remote host */
char today[5];
#ifdef HAVE_SHOWNUMMSG
int num_msg; /* receive messages */
#endif
int pal_max; /* friends max */
int pal_spool[PAL_MAX]; /* friends spool */
#ifdef HAVE_BANMSG
int banmsg_max; /* banmsg max */
int banmsg_spool[BANMSG_MAX]; /* banmsg spool */
#endif
#ifdef HAVE_BOARD_PAL
// char board_pal[IDLEN + 1];
int board_pal;
#endif
#ifdef HAVE_PIP_FIGHT1
pipdata *pip;
#endif
#ifdef PREFORK
int bgen; /* generation */
#endif
};


/* ----------------------------------------------------- */
/* BOARDS struct : 256 bytes */
/* ----------------------------------------------------- */


typedef struct BoardHeader
{
char brdname[IDLEN + 1]; /* board ID */
char title[BTLEN + 1];
char color;
char class[5];
char BM[BMLEN + 1]; /* BMs' uid, token '/' */

uschar bvote; /* 共有幾項投票舉行中 */

time_t bstamp; /* 建立看板的時間, unique */
usint readlevel; /* 閱讀文章的權限 */
usint postlevel; /* 發表文章的權限 */
usint battr; /* 看板屬性 */
time_t btime; /* .DIR 的 st_mtime */
int bpost; /* 共有幾篇 post */
time_t blast; /* 最後一篇 post 的時間 */
usint expiremax; /* Expire Max Post */
usint expiremin; /* Expire Min Post */
usint expireday; /* Expire old Post */
char reserve[116]; /* 保留未用 */
} BRD;

#define BRD_NOZAP 0x00001 /* 不可 zap */
#define BRD_NOTRAN 0x00002 /* 不轉信 */
#define BRD_NOCOUNT 0x00004 /* 不計文章發表篇數 */
#define BRD_NOSTAT 0x00008 /* 不納入熱門話題統計 */
#define BRD_NOVOTE 0x00010 /* 不公佈投票結果於 [sysop] 板 */
#define BRD_ANONYMOUS 0x00020 /* 匿名看板 */
#define BRD_NOFORWARD 0x00040 /* lkchu.981201: 不可轉寄 */
#define BRD_LOGEMAIL 0x00080 /* 自動附加e-mail */
#define BRD_NOBAN 0x00100 /* 不擋信 */
#define BRD_NOLOG 0x00200 /* 不紀錄站內違法 */
#define BRD_NOCNTCROSS 0x00400 /* 不紀錄 cross post */
#define BRD_NOREPLY 0x00800 /* 不能回文章 */
#define BRD_NOLOGREAD 0x01000 /* 不紀錄看版閱讀率 */
#define BRD_CHECKWATER 0x02000 /* 紀錄灌水次數 */
#define BRD_CHANGETITLE 0x04000 /* 版主修改版名 */
#define BRD_MODIFY 0x08000 /* 使用者修改文章 */
#define BRD_PRH 0x10000 /* 推薦文章 */
#define BRD_BOTTOM 0x20000 /* 關閉置底功能 */
#define BRD_NOCROSS 0x40000 /* 不接受轉文章轉錄 */

#define POST_STOP_PERM 0x01 /* 自動抓 crosspost 開關旗標 */

typedef struct NewBoardHeader
{
char brdname[IDLEN + 1];
char title[49];
char category[5];
char bm[IDLEN * 3 + 3];
time_t btime;
time_t etime;
char xname[32];
char owner[IDLEN +1];
char date[9];
usint mode;
usint total;
usint agree;
usint assist;
char reserve[64];
} NBRD;


#define NBRD_ING 0x01 /* 連署中 */
#define NBRD_OPEN 0x02 /* 已開版 */
#define NBRD_CLOSE 0x04 /* 未達連署人數 */
#define NBRD_STOP 0x08 /* 禁止開版 停止連署 */
#define NBRD_OK 0x10 /* 連署完成 */
#define NBRD_START 0x20 /* 申請通過 */
#define NBRD_REJECT 0x40 /* 申請不通過 */
#define NBRD_NBRD 0x1000 /* 新版 */
#define NBRD_CANCEL 0x2000 /* 廢版主 */
#define NBRD_OTHER 0x8000 /* 其它 */

#define NBRD_MASK (NBRD_NBRD|NBRD_CANCEL|NBRD_OTHER)

/* ----------------------------------------------------- */
/* Class image */
/* ----------------------------------------------------- */


#define CLASS_INIFILE "Class"
#define CLASS_IMGFILE "run/class.img"
#define PROFESS_INIFILE "Profess"
#define PROFESS_IMGFILE "run/profess.img"

#define CH_END -1
#define CH_TTLEN 64


typedef struct
{
int count;
char title[CH_TTLEN];
short chno[0];
} ClassHeader;


/* ----------------------------------------------------- */
/* cache.c 中運用的資料結構 */
/* ----------------------------------------------------- */


typedef struct
{
int shot[MOVIE_MAX]; /* Thor.980805: 可能還要再加1,因合理範圍為0..MOVIE_MAX */
char film[MOVIE_SIZE];
} FCACHE;


#define FILM_SIZ 4000 /* max size for each film */


#define FILM_WELCOME (0)
#define FILM_GOODBYE (1)
#define FILM_APPLY (2) /* new account */
#define FILM_TRYOUT (3)
#define FILM_POST (4)
#define FILM_GEM (5) /* help message */
#define FILM_BOARD (6)
#define FILM_CLASS (7)
#define FILM_PAL (8)
#define FILM_MAIL (9)
#define FILM_ULIST (10)
#define FILM_VOTE (11)
#define FILM_MORE (12)
#define FILM_EDIT (13)
#define FILM_BMW (14)
#define FILM_BANMAIL (15)
#define FILM_INCOME (16)
#define FILM_ADMIN (17)
#define FILM_SONG (18)
#define FILM_MIME (19)
#define FILM_CONTACT (20)
#define FILM_MEMORANDUM (21)
#define FILM_ALOHA (22)
#define FILM_SIGNUP (23)
#define FILM_MOVIE (24) /* normal movies */


#define FILM_ROW (40)

typedef struct
{
UTMP uslot[MAXACTIVE]; /* UTMP slots */
usint count; /* number of active session */
usint offset; /* offset for last active UTMP */

double sysload[3];
int avgload;

BMW *mbase; /* sequential pointer for BMW */
BMW mpool[BMW_MAX];
#ifdef HAVE_PIP_FIGHT1
PIPUTMP pip[PIP_MAX];
#endif

} UCACHE;


typedef struct
{
BRD bcache[MAXBOARD];
int number;
time_t uptime;
} BCACHE;

typedef struct
{
BANMAIL fwcache[MAXFIREWALL];
int number;
} FWCACHE;

typedef struct
{
FW fwocache[MAXOFILEWALL];
int mode;
} FWOCACHE;


typedef struct
{
char verb[9]; /* 動詞 */
char chinese[7]; /* 中文翻譯 */
char part1_msg[60]; /* 介詞 */
char part2_msg[60]; /* 動作 */
} ChatAction;


typedef struct
{
ChatAction chat_speak[SPEAK_MAX+1];
ChatAction chat_condition[CONDITION_MAX+1];
ChatAction chat_party[PARTY_MAX+1];
ChatAction chat_party2[PARTY_MAX+1];
ChatAction chat_person[CONDITION_MAX+1];
} MUD;


/* ----------------------------------------------------- */
/* screen.c 中運用的資料結構 */
/* ----------------------------------------------------- */


#define ANSILINELEN (255) /* Maximum Screen width in chars */
/* 假設 160 個就夠用了,最多可以到 255 */


/* Screen Line buffer modes */


#define SL_MODIFIED (1) /* if line has been modifed, screen output */
#define SL_STANDOUT (2) /* if this line contains standout code */
#define SL_ANSICODE (4) /* if this line contains ANSI code */


typedef struct screenline
{
uschar oldlen; /* previous line length */
uschar len; /* current length of line */
uschar width; /* padding length of ANSI codes */
uschar mode; /* status of line, as far as update */
uschar smod; /* start of modified data */
uschar emod; /* end of modified data */
uschar sso; /* start of standout data */
uschar eso; /* end of standout data */
uschar data[ANSILINELEN];
} screenline;


typedef struct LinkList
{
struct LinkList *next;
char data[0];
} LinkList;


/* ----------------------------------------------------- */
/* xover.c 中運用的資料結構 */
/* ----------------------------------------------------- */


typedef struct OverView
{
int pos; /* current position */
int top; /* top */
int max; /* max */
int key; /* key */
char *xyz; /* staff */
struct OverView *nxt; /* next */
char dir[0]; /* data path */
} XO;


typedef struct
{
int key;
int (*func) ();
} KeyFunc;


typedef struct
{
XO *xo;
KeyFunc *cb;
int mode;
} XZ;


typedef struct
{
time_t chrono;
int recno;
} TagItem;


#ifdef MODE_STAT
typedef struct
{
time_t logtime;
time_t used_time[30];
} UMODELOG;


typedef struct
{
time_t logtime;
time_t used_time[30];
int count[30];
int usercount;
} MODELOG;
#endif

/* ----------------------------------------------------- */
/* acct.c 中運用的資料結構 */
/* ----------------------------------------------------- */
#define DENY_SEL_TALK 0x00000001
#define DENY_SEL_POST 0x00000002
#define DENY_SEL_MAIL 0x00000004
#define DENY_SEL_AD 0x00000008
#define DENY_SEL_SELL 0x00000010
#define DENY_SEL_OK 0x00000020
#define DENY_SEL (DENY_SEL_TALK|DENY_SEL_POST|DENY_SEL_MAIL|DENY_SEL_AD|DENY_SEL_SELL)

#define DENY_DAYS_1 0x00010000
#define DENY_DAYS_2 0x00020000
#define DENY_DAYS_3 0x00040000
#define DENY_DAYS_4 0x00080000
#define DENY_DAYS_5 0x00100000
#define DENY_DAYS (DENY_DAYS_1|DENY_DAYS_2|DENY_DAYS_3|DENY_DAYS_4|DENY_DAYS_5)

#define DENY_MODE_TALK 0x01000000
#define DENY_MODE_MAIL 0x02000000
#define DENY_MODE_POST 0x04000000
#define DENY_MODE_GUEST 0x08000000
#define DENY_MODE_NICK 0x10000000
#define DENY_MODE_ALL (DENY_MODE_TALK|DENY_MODE_MAIL|DENY_MODE_POST|DENY_MODE_NICK|DENY_MODE_GUEST)


typedef struct
{
char email[60];
int num;
} SAME_EMAIL;

typedef struct
{
char email[56];
int times;
time_t deny;
} EMAIL;

/* ----------------------------------------------------- */
/* classtable.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int lost;
char name[9];
char teacher[9];
char class[5];
char obj_id[7];
} CLASS;

typedef struct
{
int hour;
int min;
} CLOCK;


typedef struct
{
CLOCK start[13];
CLOCK end[13];
} CLASS_TIME;

typedef struct
{
int mode;
CLASS table[6][13];
CLASS_TIME time;
} CLASS_TABLE;

/* ----------------------------------------------------- */
/* list.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
char userid[IDLEN+1];
char userdesc[51];
} LIST;

typedef struct
{
char title[MAX_LIST][41];
} LIST_TITLE;

/* ----------------------------------------------------- */
/* counter.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int hour_max_login;
int day_max_login;
int samehour_max_login;
int max_regist;
int cur_hour_max_login;
int cur_day_max_login;
time_t samehour_max_time;
int max_regist_old;
int samehour_max_login_old;
char ident[90];
} COUNTER;

typedef struct
{
time_t date;
int mode;
char userid[IDLEN + 1];
char username[19];
char buf[3][80];
} notedata;

typedef struct
{
int start;
int end;
} REAPER_TIME;

/* ----------------------------------------------------- */
/* 生日年齡星座統計 中運用的資料結構 */
/* ----------------------------------------------------- */

#ifdef HAVE_PERSON_DATA
#define USER_ATTR_SUPPORT 0x00000001


typedef struct
{
int year;
int month;
int day;
int sex;
int blood;
int mode;
char reserve[232];
} USER_ATTR;
#endif

typedef struct
{
char *grad;
char *server;
} YZU_MAIL;

typedef struct
{
char name[20];
char host[26];
char ip[16];
char port[6];
} BBSNET;


#define TOPLOGINS (0)
#define TOPPOSTS (1)

#define TOPNUM (50)
#define TOPNUM_HALF (TOPNUM/2)

typedef struct
{
char userid[IDLEN + 1];
char username[24];
int num;
} DATA;

#ifdef HAVE_CLASSTABLE
typedef struct
{
char condensation[9];
char name[30];
char teacher[11];
char other[30];
char room[20];
int valid;
int x;
int y;
} CLASS_TABLE2;

#ifdef HAVE_CLASSTABLEALERT
typedef struct
{
char condensation[9];
char room[20];
usint used;
} CLASS_TABLE_ALERT_ITEM;

typedef struct
{
CLASS_TABLE_ALERT_ITEM item[78];
usint userno;
} CLASS_TABLE_ALERT;

#endif
#endif

#ifdef HAVE_OBSERVE_LIST
typedef struct
{
char userid[16];
usint userno;
char title[64];
char reserve[44];
} OBSERVE;

typedef struct
{
usint userno[MAXOBSERVELIST];
int total;
int mode;
} OCACHE;

#endif

typedef struct
{
void *func;
/* int (*func) (); */
usint level;
int umode;
char *desc;
} MENU;

typedef struct PersonalBoard
{
char userid[IDLEN + 1];
char email[60];
char brdname[IDLEN + 1];
char brdtitle[BTLEN + 1];
usint state;
} PB;

#define PB_APPLY 0x01 /* 申請中 */
#define PB_OPEN 0x02 /* 已開版 */

#endif /* _STRUCT_H_ */

利用 javascript 嵌入 flv 影片至網頁

不知道怎麼讓code顯示出來
所以我貼圖好了= =a



裡面的播放畫面會用到 mediaplayer.swf

js檔案會用到 swfobject.js

我通通上傳到 http://www.mediafire.com/?jhzgya3xbs0 方便大家下載回去使用

code很簡單,看不懂的話再問吧

OpenOffice3.0beta,台灣高速下載點

官方連結速度太慢了

來義守大學速度快些,差不多你的網路有多快下載就有多快

http://ftp.isu.edu.tw/pub/OpenOffice/extended/

http://ftp.isu.edu.tw/pub/OpenOffice/extended/3.0.0beta/OOo_3.0.0beta_20080429_Win32Intel_install_wJRE_zh-TW.exe
順便附上3.0beta的連結~~

VI的使用重點

下面很多可以看,但是助益最大的一句話是!

「ESC :沒事多按逃脫鍵,有益身體健康。」

自從看到這句話之後我的vi速度變快了...



一。從命令到編輯模式
a :將游標放到目前游標後一個字元,開始文字編輯模式。insert
i :將游標放在目前游標位置,開始文字編輯模式。append
o :將游標放到下一行起始位置,開始文字編輯模式。open new line
比較常用就是i,a,o,I,A,O了,將來多試幾次就好了,就很熟悉了。

二從編輯到命令
ESC :沒事多按逃脫鍵,有益身體健康。

三命令模式中的其他命令
在命令模式中的按鍵就很多了,這些需要好好熟練一下了。
在vi命令模式裡面,有的按鍵按完後他還是在命令模式,有的改個字元或copy/paste後
又回到命令模式,有的就一去不回頭變成文字編輯模式了。
有些按鍵會把你原本想改的內容做特殊的定位,例如要改個word,也會把你帶離命令模式

檔案
:q 離開vi
:e xxxx 編輯xxxx
:w 存檔
:w xxxx 另存檔案xxxx
:q! 不存檔強迫離開
:w! 強迫存檔
:wq 存檔與離開

游標移動
h,j,k,l 往左,往下,往上,往右
0 到行首
$ 到行尾
^ 到這行的第一個非空白字元

w,W 到下個字, 到下個非空白的字
b,B 回上個字, 到上個非空白的字
e,E 到這個字的字尾, 到下個非空白的字字尾

Ctrl-F ,Ctrl-B 往後一頁,往前一頁
G 到檔尾
:n 到第n行 (所以到檔頭就是:1)
Ctrl-G 顯示第幾行
J 合併兩行

搜尋與取代
/
/pattern 尋找pattern
?pattern 往上尋找pattern
n 再往下尋找
N 再往上尋找
:s/patrn/str/cgi搜尋patrn取代str
其中:跟s間必需指定範圍(range)沒設範圍就是游標這行
1,10 表示 1-10行
% 表示整篇
最後cgi
c 表示confirm尋問
g 表示global全部
i 表示ignore不分大小寫

常用字元字串處理
cc 改變整行
dd 砍掉整行
yy 拷貝整行(yank whole line)
p,P 貼上(paste) 你最近砍掉或拷貝的

cw 改變一個字
d$ 砍到行尾
ye 拷貝到這個字尾

r,R 取代一個字元, 取代整行
u,U undo 最後修改,UNCHANGE整行
x,X 砍一個字元, 往回砍個字元(等於按backspace)

重複的處理
. 重複剛剛的命令或輸入

這些試試看
ce, 3x, 5dd, 10w, d0, y$, 5G

indentation
>> 往右一個indent
<< 往左一個indent

vim的多檔與多窗
:e xxx 編輯xxx
:buffers 列出所有編輯檔
:bn n是數 b1 b2 b3....表是開第n個buffer
:bdn n是數:bd1 :bd2 表示殺掉第n個buffer

:new 一個水平新窗
:vnew 開個垂直新窗
:only 只留一個窗窗

C-w j k h l 移到下 上 左 右 窗去


轉自
http://www.study-area.org/cyril/opentools/opentools/x62.html

函式指標,借由傳入不同的參數達到不同的功用

分隔線
/*main.c*/
#include
#include "stdlib.h"
#include "sort.h"

int main(void) {
int number1[] = {3, 5, 1, 6, 9};
sort(number1, 5, larger);
printf("大的在前 ");
int i;
for(i = 0; i < i =" 0;" t =" *a;" a =" *b;" b =" t;"> b;
}

int smaller(int a, int b) {
return a < flag =" 1;" i =" 0;" flag ="="" flag =" 0;" j =" 0;" flag =" 1;" t =" *a;" a =" *b;" b =" t;"> b;
}

int smaller(int a, int b) {
return a < b;
}

void sort(int* arr, int length, CMP compare) {
int flag = 1;
int i, j;
for(i = 0; i < length-1 && flag == 1; i++) {
flag = 0;
for(j = 0; j < length-i-1; j++) {
if(compare(arr[j+1], arr[j])) {
swap(arr + j + 1, arr + j);
flag = 1;
}
}
}
}

struct結構與struct當作函數參數傳遞 by reference

#include
#include
typedef struct {
char color[10];
double radius;
} Ball;

void foo(Ball*);

int main(void) {
Ball ball = {"red", 5.0};

foo(&ball);
printf("ball: %s,\t%.2f\n", ball.color, ball.radius);
system("pause");
return 0;
}

void foo(Ball *ball) { // ball 成員值被複製過來
ball->radius = 100.0;
}

Ports更新

cd /usr/ports/net/cvsup-without-gui
make install clean
cp /usr/share/examples/cvsup/ports-supfile /root/
vi /root/ports-supfile
*default host=cvsup.tw.freebsd.org
cvsup -g -L 2 /root/ports-supfile

建議在做更新之前先把/etc/make.conf裡面的站台位置換成台灣的網站

這樣會快很多很多

magicallove# cat /etc/make.conf
# added by use.perl 2008-05-07 13:55:22
PERL_VER=5.8.8
PERL_VERSION=5.8.8
# Port master sites.
#
# If you want your port fetches to go somewhere else than the default
# (specified below) in case the distfile/patchfile was not found,
# uncomment this and change it to a location nearest you. (Don't
# remove the "/${DIST_SUBDIR}/" part.)
#

MASTER_SITE_BACKUP?= \
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp5.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp10.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp4.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp7.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp9.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp11.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp12.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/

#
# If you want your port fetches to check the above site first (before
# the MASTER_SITES specified in the port Makefiles), uncomment the
# line below. You can also change the right side to point to wherever
# you want.
#
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
#

就是這樣啦,把/etc/make.conf裡面的內容加入上面那幾個吧!
真的會快很多

Scp使用範例-安全又簡單的遠端複製指令

scp -r ID@xxx.xxx.xxx.xxx:/home/ID/ ./

scp -r ./ ID@xxx.xxx.xxx.xxx:/home/ID/

-r 遞迴複製遠端路徑底下的所有資料,包含子資料夾

ID 要登入的遠端機器的帳號,如同 ssh 登入一樣,你只能複製這個 ID 可以讀取的資料

xxx.xxx.xxx.xxx 遠端的 ip,後面一定要記得接上冒號之後再接絕對位置

最後面是本地端路徑


如同 cp 指令一樣,只要將前後兩邊的路徑對調一下就可以變成複製到遠端了

DNS新手架設教學

>1.
cat /etc/named/named.conf
//設定要正解的網域是ncku.edu.tw, DNS 伺服器類型是master(另一種是slave)
//並且到 master 資料夾裡面的 naku.edu.tw.rev 找 ncku.edu.tw 的設定
zone "ncku.edu.tw" {
type master;
file "master/ncku.edu.tw.rev";
};

//設定要反解的ip範圍是140.116.250.*, DNS 伺服器類型是master(另一種是slave)
//並且到 master 資料夾裡面的 140.116.250.rev 找反解設定
//注意!我們有整個class C的網域(140.116.250.*),其他反解寫法不管,反正用不到
zone "250.116.140.in-addr.arpa" {
type master;
file "master/140.116.250.rev";
};

named.conf 裡面會有很多範例,那些範例是我們不能直接使用的...

>2.
vi /etc/manedb/master/140.116.250.rev

加入以下兩行
30 IN PTR forum.ccns.ncku.edu.tw.
26 IN PTR magicallove.ccns.ncku.edu.tw.

>3.
vi /etc/namedb/master/ncku.edu.tw.rev
加入以下兩行
forum.ccns IN A 140.116.250.30
magicallove.ccns IN A 140.116.250.26

>4.ps -aux|grep named
找出named的程序
例如:bind 81173 0.0 0.1 4920 3668 ?? Ss 接下行
8:00PM 0:00.19 /usr/sbin/named -t /var/named -u bind

然後kill 81173,砍掉目前的named(我考慮了很久到底要不要把cat開啟的bind砍掉 怕死)
再輸入指令重新開啟BIND這支程式 /etc/rc.d/named start
我不知道為什麼輸入/etc/rc.d/named restart沒有效果

另外,在 /etc/resolv.conf 裡面
domain ccns.ncku.edu.tw
nameserver 163.28.112.1
nameserver 163.28.113.1
nameserver 168.95.1.1

還不太清楚這個檔案是做啥用的,不過應該有很大用途!待釐清= =

Sudo 安裝與簡單設定

Sudo 可以讓 wheel 群組的使用者在被列入可以變身為 root 名單後
利用自己的密碼變身為sudo
對於管理來說實在非常方便!

安裝了sudo喔
安裝過程如下,簡單的很~~

su
變身為 root ,這樣才能安裝軟體喔!

whereis sudo
/usr/ports/security/sudo
如果你已經知道 sudo 放哪裡的話當然可以不用這個步驟

cd /usr/ports/security/sudo
make install clean
移動到該目錄下,直接用第二行指令安裝

visudo
編輯可以使用 sudo 這個指令變身 root 的名單,怎麼寫也很簡單
我節錄如下
# User privilege specification
root ALL=(ALL) ALL
mXXXXXXXXXX ALL=(ALL) ALL
rXXXXX9 ALL=(ALL) ALL
也就是說 magciallove renn999 可以變身為 root
至於後面除了接ALL=(ALL) ALL之外,還可以接什麼參數我也不曉得。
不過應該這樣就夠用了

rehash
這行到底做了什麼事情我也不太確定,不過安裝了軟體之後
如果有新的指令就要跑一下這 rehash ,應該是把執行檔路徑加進去吧

搞定

批次壓縮解壓tar系列的ShellScript

批次解壓:

#!/bin/sh
for unzipfile in $(ls *.tgz)
do
tar -zxf $unzipfile
echo "$unzipfile done!"
rm $unzipfile
done

====================

#!/bin/sh
這一行代表要使用的shell語言,最前面那個#不是註解掉這一行喔= =

for unzipfile in $(ls *.tgz)
.
.
done
這是個迴圈,會將 in 後面接的 list 傳到 unzipfile 作為變數使用
這邊寫上unvipfile其實就可以當做你在宣告這個變數了
這裡用的 list 是(ls *.tgz)
動作是列出與這個 shell 同一個路徑下的所有 .tgz 檔案
並將其檔名一次一個放到 unzipfile 裡面。

tar -zxf $unzipfile
解壓縮檔案,這行如果看不懂就去辜狗tar吧...
$unzipfile,這個是要被解壓縮的檔名,變數要使用時要加上 $ 符號

echo "$unzipfile done!"
這行純粹是讓使用者看到目前進行到哪個檔案了

rm $unzipfile

解壓縮完後刪除該壓縮檔

====================

批次壓縮:

#!/bin/sh
for zipfile in $(ls)
do tar -czf $zipfile.tgz $zipfile
echo "$zipfile done!"
rm -r $zipfile
done
====================
btw

你可以用 vi 或者任何你喜歡的編輯器輸入上面的 script 例如:

vi unzipfile.sh

#!/bin/sh
for unzipfile in $(ls *.tgz)
do
tar -zxf $unzipfile
echo "$unzipfile done!"
rm $unzipfile
done

:wq

執行方法有兩種

1.sh < unzipfile.sh
把這個 script 丟給 sh 執行

2.chmod a+x unzipfile.sh

./unzipfile.sh

把這個script變為可執行,然後直接執行他

Netstat 欄位說明

netstat -na

-n 將ip以數字顯示,而不以dns查名稱,這樣會快很多!

-a 除了已連結的port外,一併列出監聽中的port,可以觀察一下有沒有奇怪的port被打開= =

各參數意義如下
CLOSED 表示插槽沒被使用。
LISTENING 表示正在監聽進入的連接。
SYN_SENT 表示正在試著建立連接。
SYN_RECEIVED 進行連接初始同步。
ESTABLISHED 表示連接已被建立。
CLOSE_WAIT 表示遠程計算機關閉連接,正在等待插槽的關閉。
FIN_WAIT_1 表示插槽關閉,正在關閉連接。
CLOSING 先關閉本地插槽,然後關閉遠程插槽,最後等待確認信息。
LAST_ACK 遠程計算機關閉後,等待確認信號。
FIN_WAIT_2 插槽關閉後,等待來自遠程計算機的關閉信號。
TIME_WAIT 連接關閉後,等待遠程計算機關閉重發。

CLOSED ---- Closed. The socket is not being used.
LISTEN ---- Listening for incoming connections.
SYN_SENT ---- Actively trying to establish connection.
SYN_RECEIVED ---- Initial synchronization of the connection under way.
ESTABLISHED ---- Connection has been established.
CLOSE_WAIT ---- Remote shut down; waiting for the socket to close.
FIN_WAIT_1 ---- Socket closed; shutting down connection.
CLOSING ---- Closed, then remote shutdown; awaiting acknowledgement.
LAST_ACK ---- Remote shut down, then closed ;awaiting acknowledgement.
FIN_WAIT_2 ---- Socket closed; waiting for shutdown from remote.
TIME_WAIT ---- Wait after close for remote shutdown retransmission.

netstat -I rl0(這一個參數是你的網路卡代號!你的不一定跟我的一樣!而且要注意,1和 l 不好分辨= =)
>netstat -I rl0
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
rl0 1500 00:02:44:59:d6:be 205831 0 231610 0 0
rl0 1500 140.116.250/2 she911 137997 - 231609 - -

網路卡代號可以用ifconfig查看
>ifconfig
rl0: flags=8843 mtu 1500
通常第一個裝置就是你的網路卡了

支援utf8和big5的ftp站台

ftp/pure-ftpd 是你最好選擇啊 :p

因為有 jnlin 大神寫的 patch,所以現在支援 RFC 2640 了

你可以看到 pure-ftp.conf 有這一行

# UTF-8 support for file names (RFC 2640)
# Define charset of the server filesystem and optionnally the default charset
# for remote clients if they don't use UTF-8.
# Works only if pure-ftpd has been compiled with --with-rfc2640

FileSystemCharset utf-8
ClientCharset big5

如果 client 用的是 filezilla 懂得 utf-8 的軟體,他就會吐 utf-8 給 client

不懂的話,就會幫你轉成 big5

=====================

建議先cvsup更新pure-ftp到最新版 因為6.2裡面預設的好像沒有這個功能(不確定啦= =) 如何使用cvsup更新port,在"FreeBSD 6.0架設管理與應用",有詳細的說明。不難

簡易安裝步驟如下

  1. cd /usr/ports/ftp/pure-ftpd/
  2. make install clean

我用p3 667M的CPU編譯安裝花了約半小時,學網下載很快,網路下載時間略過。


=====================
安裝後的設定檔位於
/usr/local/etc
/usr/local/etc/rc.d
詳細設定方法還在研究ing...

=====================

pure-ftpd.conf.sample

############################################################
# #
# Configuration file for pure-ftpd wrappers #
# #
############################################################

# If you want to run Pure-FTPd with this configuration
# instead of command-line options, please run the
# following command :
#
# /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf
#
# Please don't forget to have a look at documentation at
# http://www.pureftpd.org/documentation.shtml for a complete list of
# options.

# Cage in every user in his home directory

ChrootEveryone yes



# If the previous option is set to "no", members of the following group
# won't be caged. Others will be. If you don't want chroot()ing anyone,
# just comment out ChrootEveryone and TrustedGID.

# TrustedGID 100



# Turn on compatibility hacks for broken clients

BrokenClientsCompatibility no



# Maximum number of simultaneous users

MaxClientsNumber 50



# Fork in background

Daemonize yes



# Maximum number of sim clients with the same IP address

MaxClientsPerIP 8



# If you want to log all client commands, set this to "yes".
# This directive can be duplicated to also log server responses.

VerboseLog no



# List dot-files even when the client doesn't send "-a".

DisplayDotFiles yes



# Don't allow authenticated users - have a public anonymous FTP only.

AnonymousOnly no



# Disallow anonymous connections. Only allow authenticated users.

NoAnonymous no



# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# The default facility is "ftp". "none" disables logging.

SyslogFacility ftp



# Display fortune cookies

# FortunesFile /usr/share/fortune/zippy



# Don't resolve host names in log files. Logs are less verbose, but
# it uses less bandwidth. Set this to "yes" on very busy servers or
# if you don't have a working DNS.

DontResolve yes



# Maximum idle time in minutes (default = 15 minutes)

MaxIdleTime 15



# LDAP configuration file (see README.LDAP)

# LDAPConfigFile /etc/pureftpd-ldap.conf



# MySQL configuration file (see README.MySQL)

# MySQLConfigFile /etc/pureftpd-mysql.conf


# Postgres configuration file (see README.PGSQL)

# PGSQLConfigFile /etc/pureftpd-pgsql.conf


# PureDB user database (see README.Virtual-Users)

# PureDB /etc/pureftpd.pdb


# Path to pure-authd socket (see README.Authentication-Modules)

# ExtAuth /var/run/ftpd.sock



# If you want to enable PAM authentication, uncomment the following line

# PAMAuthentication yes



# If you want simple Unix (/etc/passwd) authentication, uncomment this

# UnixAuthentication yes



# Please note that LDAPConfigFile, MySQLConfigFile, PAMAuthentication and
# UnixAuthentication can be used only once, but they can be combined
# together. For instance, if you use MySQLConfigFile, then UnixAuthentication,
# the SQL server will be asked. If the SQL authentication fails because the
# user wasn't found, another try # will be done with /etc/passwd and
# /etc/shadow. If the SQL authentication fails because the password was wrong,
# the authentication chain stops here. Authentication methods are chained in
# the order they are given.



# 'ls' recursion limits. The first argument is the maximum number of
# files to be displayed. The second one is the max subdirectories depth

LimitRecursion 2000 8



# Are anonymous users allowed to create new directories ?

AnonymousCanCreateDirs no



# If the system is more loaded than the following value,
# anonymous users aren't allowed to download.

MaxLoad 4



# Port range for passive connections replies. - for firewalling.

# PassivePortRange 30000 50000



# Force an IP address in PASV/EPSV/SPSV replies. - for NAT.
# Symbolic host names are also accepted for gateways with dynamic IP
# addresses.

# ForcePassiveIP 192.168.0.1



# Upload/download ratio for anonymous users.

# AnonymousRatio 1 10



# Upload/download ratio for all users.
# This directive superscedes the previous one.

# UserRatio 1 10



# Disallow downloading of files owned by "ftp", ie.
# files that were uploaded but not validated by a local admin.

AntiWarez yes



# IP address/port to listen to (default=all IP and port 21).

# Bind 127.0.0.1,21



# Maximum bandwidth for anonymous users in KB/s

# AnonymousBandwidth 8



# Maximum bandwidth for *all* users (including anonymous) in KB/s
# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.

# UserBandwidth 8



# File creation mask. : .
# 177:077 if you feel paranoid.

Umask 133:022



# Minimum UID for an authenticated user to log in.

MinUID 100



# Allow FXP transfers for authenticated users.

AllowUserFXP no



# Allow anonymous FXP for anonymous and non-anonymous users.

AllowAnonymousFXP no



# Users can't delete/write files beginning with a dot ('.')
# even if they own them. If TrustedGID is enabled, this group
# will have access to dot-files, though.

ProhibitDotFilesWrite no



# Prohibit *reading* of files beginning with a dot (.history, .ssh...)

ProhibitDotFilesRead no



# Never overwrite files. When a file whoose name already exist is uploaded,
# it get automatically renamed to file.1, file.2, file.3, ...

AutoRename no



# Disallow anonymous users to upload new files (no = upload is allowed)

AnonymousCantUpload no



# Only connections to this specific IP address are allowed to be
# non-anonymous. You can use this directive to open several public IPs for
# anonymous FTP, and keep a private firewalled IP for remote administration.
# You can also only allow a non-routable local IP (like 10.x.x.x) to
# authenticate, and keep a public anon-only FTP server on another IP.

#TrustedIP 10.1.1.1



# If you want to add the PID to every logged line, uncomment the following
# line.

#LogPID yes



# Create an additional log file with transfers logged in a Apache-like format :
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# This log file can then be processed by www traffic analyzers.

# AltLog clf:/var/log/pureftpd.log



# Create an additional log file with transfers logged in a format optimized
# for statistic reports.

# AltLog stats:/var/log/pureftpd.log



# Create an additional log file with transfers logged in the standard W3C
# format (compatible with most commercial log analyzers)

# AltLog w3c:/var/log/pureftpd.log



# Disallow the CHMOD command. Users can't change perms of their files.

#NoChmod yes



# Allow users to resume and upload files, but *NOT* to delete them.

#KeepAllFiles yes



# Automatically create home directories if they are missing

#CreateHomeDir yes



# Enable virtual quotas. The first number is the max number of files.
# The second number is the max size of megabytes.
# So 1000:10 limits every user to 1000 files and 10 Mb.

#Quota 1000:10



# If your pure-ftpd has been compiled with standalone support, you can change
# the location of the pid file. The default is /var/run/pure-ftpd.pid

#PIDFile /var/run/pure-ftpd.pid



# If your pure-ftpd has been compiled with pure-uploadscript support,
# this will make pure-ftpd write info about new uploads to
# /var/run/pure-ftpd.upload.pipe so pure-uploadscript can read it and
# spawn a script to handle the upload.

#CallUploadScript yes



# This option is useful with servers where anonymous upload is
# allowed. As /var/ftp is in /var, it save some space and protect
# the log files. When the partition is more that X percent full,
# new uploads are disallowed.

MaxDiskUsage 99



# Set to 'yes' if you don't want your users to rename files.

#NoRename yes



# Be 'customer proof' : workaround against common customer mistakes like
# 'chmod 0 public_html', that are valid, but that could cause ignorant
# customers to lock their files, and then keep your technical support busy
# with silly issues. If you're sure all your users have some basic Unix
# knowledge, this feature is useless. If you're a hosting service, enable it.

CustomerProof yes



# Per-user concurrency limits. It will only work if the FTP server has
# been compiled with --with-peruserlimits (and this is the case on
# most binary distributions) .
# The format is : :
# For instance, 3:20 means that the same authenticated user can have 3 active
# sessions max. And there are 20 anonymous sessions max.

# PerUserLimits 3:20



# When a file is uploaded and there is already a previous version of the file
# with the same name, the old file will neither get removed nor truncated.
# Upload will take place in a temporary file and once the upload is complete,
# the switch to the new version will be atomic. For instance, when a large PHP
# script is being uploaded, the web server will still serve the old version and
# immediatly switch to the new one as soon as the full file will have been
# transfered. This option is incompatible with virtual quotas.

# NoTruncate yes



# This option can accept three values :
# 0 : disable SSL/TLS encryption layer (default).
# 1 : accept both traditional and encrypted sessions.
# 2 : refuse connections that don't use SSL/TLS security mechanisms,
# including anonymous sessions.
# Do _not_ uncomment this blindly. Be sure that :
# 1) Your server has been compiled with SSL/TLS support (--with-tls),
# 2) A valid certificate is in place,
# 3) Only compatible clients will log in.

# TLS 1



# Listen only to IPv4 addresses in standalone mode (ie. disable IPv6)
# By default, both IPv4 and IPv6 are enabled.

# IPV4Only yes



# Listen only to IPv6 addresses in standalone mode (ie. disable IPv4)
# By default, both IPv4 and IPv6 are enabled.

# IPV6Only yes

# UTF-8 support for file names (RFC 2640)
# Define charset of the server filesystem and optionnally the default charset
# for remote clients if they don't use UTF-8.
# Works only if pure-ftpd has been compiled with --with-rfc2640

# FileSystemCharset big5
# ClientCharset big5

內容如下,歡迎慢慢研究= =



[轉貼]安裝FreeBSD6.3 mysql+apache2+php4經驗

像標題這樣的裝法應該很多人很熟悉了,這裡把昨天安裝的經驗分享一下,或
許有大大可以指正,或者還在摸索的朋友可以參考。

6.3安裝完之後因為所有軟體我習慣從PORTS安裝,所以我習慣先更新一下PORTS
,更新步驟如下:

先安裝portupgrade與cvsup-withoutgui,然後去修改ports-supfile
#ee /usr/share/examples/ports-supfile

檔案裡把host指定改為: "tw.freebsd.org"

更新ports-tree:

#cd /usr/ports
#cvsup -L2 /usr/share/examples/ports-supfile
#portsdb -Uu (更新PORTS)
#
#pkgdb -F (check and fix package database)
#
#portupgrade -acCv (把已安裝的套件升級)

再來去PORTS安裝mysql,安裝完之後要經過下面程序才能啟動mysql:

1. 執行initial db script
#/usr/local/bin/mysql_install_db

2. 找到mysql提供的設定檔範例,拷貝到/etc檔名為my.cnf

3. 更改目錄擁有者
#cd /var/db
#chown -R mysql mysql

4. 啟動 mysql
#/usr/local/bin/safe_mysqld &

5. 更改 mysql root's password.

然後安裝Apache2,安裝完之後再安裝PHP4與PHP4-extension,安裝步
驟精華區裡好像都有。

安裝完之後PHP4會自動修改httpd.conf,但我看apache還是不能讀php
檔,所以我找了一下資料,把httpd.conf裡頭的php參數改為:

AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

5. 更改 mysql root's password.

然後安裝Apache2,安裝完之後再安裝PHP4與PHP4-extension,安裝步
驟精華區裡好像都有。

安裝完之後PHP4會自動修改httpd.conf,但我看apache還是不能讀php
檔,所以我找了一下資料,把httpd.conf裡頭的php參數改為:

AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

原來的參數好像沒有Handler字眼。

接著便是修改rc.conf讓這些軟體可以在開機時執行,我喜歡用webmin設
定比較方便,在剛裝好的freebsd裡面我會安裝lynx,再用lynx去
www.webmin.com下載新版webmin。
分享一下,前陣子記的
http://blog.pixnet.net/bojack/post/14064752

自從 FreeBSD 6.2 開始,系統就內建了 csup 這指令來更新 Ports,使用方法就和cvsup\
一模一樣,的確省去大幅時間在安裝 cvsup

要使用前記得搭配 /etc/make.conf 的設定喔 ( 如下 )

SUP_UPDATE=yes
SUP=/usr/bin/csup
SUPFLAGS=-g -L 2
SUPHOST=cvsup.tw.FreeBSD.org
SUPFILE=/usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=/usr/share/examples/cvsup/ports-supfile

MASTER_SITE_BACKUP?= \
ftp://cvsup.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://cvsup2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://cvsup3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}

安裝 Apache + PHP + MySQL
http://blog.pixnet.net/bojack/post/12983723

架設ftp,檔名有空白該怎麼更改檔名?

OS freeBSD6.2
ftp smbftpd 王俊斌改寫的那個

我開放匿名上傳

有人上傳的檔案名稱有空白鍵

而且因為我設定匿名上傳資料夾裡面的檔案disable_modify

所以沒有辦法透過ftp軟體修改檔名

我用ssh連線到主機想要改檔名,可是輸入rm BABY COME AROUND.MP3

可想而知,他會判斷成三個檔案= =

所以刪不掉

同時,BABY開頭的檔案又不只一個

也不能用rm BABY*的方法刪除

請問還有沒有其他辦法可以刪掉該檔案?



很巧!我剛剛輸入某個有空白的檔名前半部分(還沒有到有空白的地方)

也很巧這個檔案檔名跟其他都差很多

我用的是tcsh

所以當我按下tab時!電腦讓我知道...加入\(跳脫字元)就可以包含空白了

例如:rm 舞曲大帝國12-13-CLOUND 9.mp3
要寫成rm 舞曲大帝國12-13-CLOUND\ 9.mp3

自己解答了!也希望對其他人有幫助到!

安裝freeBSD硬碟掛載路徑太長,可以嗎?

安裝freeBSD時,如果掛載路徑太長例如:/home/ftp/iloveyou/youloveme
輸入確定之後在畫面上面看不到完整路徑
但是這沒關係
一樣可以正常掛載上去的!

進入single mode修正系統

進入單人模式時,會出現下列提示
Enter full pathname of shell of RETURN for /bin/sh:
(直接按 enter即可以 B shell進入單人模式)

必要時執行以下動作-
# fsck -p    檢查並修正檔案系統(preen filesystem)
# mount -u /    重新載入 / ,-u 代表改變為可讀可寫狀態
# mount -a -t ufs  載入所有 /etc/fstab有記錄、型態為 ufs的檔案系統
# swapon -a   開啟swap
# adjkerntz -i 讀取CMOS clock為當地時間,如果存在/etc/wall_cmos_clock,就參考時區設定,調整 kernel clock為UTC(格林威治時間)

可以參考這邊的東西
http://cu.ttc.edu.tw/wordpress/
蠻多的!

如何卸載swap!

要掛載成swap的硬碟分割區,必須是Linux swap(type 82)的類型。

掛載swap磁區
語法:
swapon <裝置名稱>
swapon -a
【範例1】
將/dev/hda2的swap磁區掛載。
swapon /dev/hda2
【範例2】
將所有的swap磁區掛載。
swapon -a


卸載swap磁區
語法:
swapoff <裝置名稱>
swapoff –a
【範例1】
將/dev/hda2的swap磁區卸載。
swapoff /dev/hda2
【範例2】
將所有的swap磁區卸載。
swapoff -a

假如有一顆只有分割出一個256MBswap空間的300G硬碟要割出另外要使用的分割曹

上面的意思就是說阿,要重新分割已經被分割過的硬碟前要先卸載上面的分割區

我的機器上面swap只有使用200k

不知道如果一台swap吃很大的機器卸載之後會怎麼樣= =

忘記freeBSD root密碼處理

忘記freeBSD root密碼處理

1.開機進入single mode

2.fsck

3.mount -a

4.passwd

完成

FreeBSD安裝在RAID上面,實做經驗!

freeBSD安裝在RAID上面,實做經驗!

使用的機器是ASUS TS300-E4 PA4

按照使用手冊上的步驟進入LSI Logic Embedded SATA RAID設定RAID1

過程都可以從使用手冊上找到。在此不說明。

設定完後會要求重新開機,此時再到BIOS設為RAID為開機裝置

我安裝的系統是freeBSD amd64版本

安裝方法可以參考http://www.twbsd.org/

amd64和一般的i386都一樣

但是要注意的地方如下說明!

設定RAID之後,安裝系統時候的硬碟裝置要選擇ar0或者ar1...之類開頭的硬碟裝置

其他ad(n)安裝會出問題。而且選下去的瞬間就會跳出磁區錯誤的訊息了

而且我安裝的機器有四顆硬碟,我只有設定其中兩顆為RAID1。

另外兩顆一般使用。

但是當我安裝過程中要設定掛載ad硬碟時,選下去的瞬間就會跳出硬碟磁區錯誤的警告訊息了

雖然電腦依然可以讓你安裝系統在沒有被設定RAID的硬碟,

不過就我的安裝經驗來說!

同時擁有RAID、和一般硬碟時,選擇一般硬碟都會出現磁區錯誤的訊息,也就是說只能安裝在RAID過的硬碟

因此,我將系統安裝在RAID1硬碟,另外的硬碟不在安裝系統時掛載,這樣就不會出錯了!


另外

如果我設定四顆硬碟為兩個RAID1邏輯硬碟,那麼當我安裝系統在選擇硬碟時,

我沒有辦法分辨出哪個ra(n)硬碟對應到哪組硬碟,

也就是說如果想要保留原本存放在RAID1上面的資料的話,就一定要先將那組硬碟拔下來

我的機器好像沒有辦法在開了RAID之後再到BIOS設定哪顆硬碟不要被偵測到


而且還有一點很奇怪的是!

當我將RAID1初始化之後,做兩顆硬碟資料比對的動作

它會馬上跳出資料不一致的訊息,而且是連0%都還沒跑完就跳出這個訊息了哦= =

這點很奇怪...不知道為什麼會這樣...

FreeBSD 安裝vim

FreeBSD 安裝vim

【 FreeBSD vim 】

1. cd /usr/ports/editors/vim

2. make -DWITHOUT_X11 install clean # 安裝文字版的 vim

3. cd /root

4. vi .vimrc # 新增喜好設定檔

5. 注意!以下參數的中文註解部分請勿輸入,否則會載入失敗
set cindent
set enc=taiwan
set fileencoding=taiwan
set hls
set nocompatible # 方向鍵不會出現英文
set sw=2
set guifontset=8x16,kc15f,-*-16-*-big5-0 # 設定 zh_TW.Big5 locale
syntax on
highlight Comment ctermfg=darkcyan
highlight Search term=reverse ctermbg=4 ctermfg=7

6. cp .vimrc /home/usr # 將 .vimrc 設定檔拷貝給現有使用者

7. cp .vimrc /usr/share/skel/dot.vimrc # 日後新增帳號自動複製


* 以 tcsh 為例:

使用者登入後,會讀取 /etc/csh.cshrc & /etc/csh.login

1. vi /etc/csh.cshrc

2. setenv EDITOR vim # 預設文字編輯器改成 vim
alias vi vim # 輸入 vi 時,會使用 vim 當作編輯器

3. vi /etc/csh.login

4.
# 遠端能輸入中文
setenv ENABLE_STARTUP_LOCALE zh_TW.Big5
setenv LC_CTYPE is_IS.ISO8859-1
setenv LANG zh_TW.Big5
# console 下輸入中文

# 5.x is_IS.ISO8859-1
# 4.x is_IS.ISO_8859-1


zh_TW.UTF-8

5. /usr/share/skel/dot.cshrc & dot.login

# 可加入上面的設定,作為日後新增帳號的設定。


paulnet.bbs@wretch.twbbs.org

參考資料 :
http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/vim.html - VI 的進階編輯器
FreeBSD 5.x 架設管理與應用 - 王俊斌

感謝:
ERICJ.bbs@ysmis.twbbs.org
Adios.bbs@bbs.comm.ccu.edu.tw

初稿-2004/08/30


--
順便作一下筆記
在.vimrc中可以加上
如果你用的背景是黑色的可以加上下列這一行會看的比較清楚
set background=dark
將tab的空格改為8個
set expandtab
set shiftwidth=4
set softtabstop=4
set tabstop=4
--

以上轉自
http://phorum.study-area.org/index.php/topic,25722.html


19.3. vim - VI 的進階編輯器



它包括了一些和 vi 很像但 celvis-1.3 所沒有的特色,像是行號, 回繞行,及大型檔最主要的是可以輸入中文。

安裝 editors/vim

我知道有人很討厭 vim,因為還要裝 X。 其實只要用 make -DWITHOUT_X11 install 就可以了只安裝文字版的 vim。

安裝 ports/editors/vim 後, 根據個人喜好設定 .vimrc

set fileencoding=taiwan

set guifontset=8x16,kc15f,-*-16-*-big5-0

並且設定 zh_TW.Big5 的 locale,這樣子就可以一次刪除一個中文字。

以下是建議的設定

set cindent

set enc=taiwan

set fileencoding=taiwan

set hls

set nocompatible

set sw=2

syntax on

highlight Comment ctermfg=darkcyan

highlight Search term=reverse ctermbg=4 ctermfg=7

在啟動的時候建議使用 env TERM=xterm-color vim ,這樣漂亮的顏色才會出來 :)

如果覺得字色太暗,可以用 :set background=dark


轉自 http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/vim.html


hls 是hlsearch,是highlight search 的簡寫。

FreeBSD 中文環境設定

vi /etc/csh.login

# 支援中文的環境,讓我們可以在 console 下或 telnet 中使用中文。
setenv LANG zh_TW.Big5

結構中使用函式指標

#include

typedef struct Ball CBall;
struct Ball {
char *color;
double radius;
double (*volumn)(CBall*); // 函式指標
};

// 計算實例體積
double volumn(CBall *this) {
double r = this->radius; // 模擬 this 指標 的行為
return r * r * 3.14;
}

void initBall(CBall *ball, char *color, double radius) {
ball->volumn = volumn; // 連結函式
ball->color = color;
ball->radius = radius;
}

int main(void) {
CBall ball;
initBall(&ball, "red", 5.0);

printf("ball 實例的體積: %.2f\n", ball.volumn(&ball));
return 0;
}




看一看吧!

看不懂的時候可以看這個網頁

http://caterpillar.onlyfun.net/Gossip/CGossip/StructPoint.html

另外,如果在dev-c上面要編這個程式的話是不會compile過的

因為dev-c++

this 是一個關鍵字

我是跑到freeBSD上面用gcc a.c編譯過的


附帶一提,ball->volumn = volumn; // 連結函式

這一行的功能真的只是將這個指標指到 volumn 這個區塊而已,並不會執行

後來進行到 ball.volumn(&ball)

呼叫 ball 的 volumn 指標

才去執行 volumn 這個區塊,並且傳入參數ball

函式指標

─────────────分隔線───────────────

/*main.c*/
#include
#include "stdlib.h"
#include "sort.h"

int main(void) {
int number1[] = {3, 5, 1, 6, 9};
sort(number1, 5, larger);
printf("大的在前 ");
int i;
for(i = 0; i < 5; i++) {
printf("%d ", number1[i]);
}
putchar('\n');

int number2[] = {3, 5, 1, 6, 9};
sort(number2, 5, smaller);
printf("小的在前 ");
for(i = 0; i < 5; i++) {
printf("%d ", number2[i]);
}
putchar('\n');
system("pause");
return 0;
}

─────────────分隔線───────────────

/*sort.h*/
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}

int larger(int a, int b) {
return a > b;
}

int smaller(int a, int b) {
return a < b;
}

void sort(int* arr, int length, int (*compare)(int, int)) {
int flag = 1;
int i, j;
for(i = 0; i < length-1 && flag == 1; i++) {
flag = 0;
for(j = 0; j < length-i-1; j++) {
if(compare(arr[j+1], arr[j])) {
swap(arr + j + 1, arr + j);
flag = 1;
}
}
}
}


─────────────分隔線───────────────

sort.h 裡面的 compare 是一個指標

可以接受 main.c 呼叫他的時候給予不同的名稱,如 larger 或者 smaller

感覺就像是一個 char 指標指向不同的記憶體區塊,而獲得不同的內容

也就是說

sort(number1 , 5 , larger)
同於
sort(int* arr, int length, int larger(int, int))

不定參數Variable Argument

不定參數
就是傳入函式的參數是不固定的
可多可少
例如printf

int printf(const char *format [,argument]...);

那個中括號括起來的arguement可多可少
而且還可以不同型態
這就是不定參數

可以想像這些不定參數是以stack的方式存起來的

c語言提供va_list可以來實作不定參數的函式

va_start , va_arg , va_end是macro
而va_list是一個char *的型態

va_start做的事就是把va_list的指標指到第一個不定參數
va_arg做的事是以指定型態從va_list取出資料並把va_list指標指到下一個位置
va_end做的事就是當資料取完後把va_list歸零

參考
http://blog.pixnet.net/chiahsiang/post/13125997

http://zhanjun.net/?q=node/23
這篇比較詳細

附上code

/* va_arg example */
#include
#include
#include
void PrintLines ( char* first, ...)
{
char* str;//這個指標是為了在呼叫 va_arg 後,推進指標,用來儲存下一個arg用的
va_list vl;//放置arg陣列的指標名稱

//str=first;//原始code裡面寫的,原本的用途在文章下面會寫
printf("%s\n" , first);//用這一行來取代原始code裡面印出first第一個參數的功能

va_start(vl,first);//初始化

do {
str=va_arg(vl,char*);//這行執行後,str裡面儲存的就是第二個參數的位址了
printf ("%s\n",str);
} while (str!=NULL);

va_end(vl);
}

int main ()
{
PrintLines ("First","Second","Third","Fourth",NULL);
system("pause");
return 0;
}



上面的 code 是從 http://blog.pixnet.net/chiahsiang/post/13125997 複製過來的

不過我有改掉一些地方

因為原本的code為了依序顯示出 first second third fourth

而造成寫法上不易理解 va_start 的前面為什麼要加上 str=first,其實那是不需要的


原始寫法中,先 str=first 之後就可以在do while迴圈中先印出 str 的值

其後再用 va_arg 將下一個參數的位址放到str裡面。

不過這跟在迴圈外面印出 first 意思是一樣的

Innd 安裝教學

轉自【新客網FreeBSD教程】 INN安裝步驟小結
由magicalloveshe排版編修

1、
用vipw修改/etc/passwd文件,改為
news:*:8:8:News Subsystem:/usr/local/news:/bin/sh

2、
$tar zxvf inn-2.4.0.tar.gz
$cd inn-2.4.0
$./configure
$make && make install
預設安在/usr/local/news下

3、
修改etc/inn.conf

hiscachesize: 256
artcutoff: 60
maxartsize: 100000
localmaxartsize: 100000
enableoverview: true
ovmethod: tradindexed
spoolfirst: false
執行 /usr/local/news/bin/inncheck , 檢查inn.conf

4、文章過期策略設置修改expire.ctl如下:

##This entry uses the syntax appropriate when groupbaseexpiry is true in
inn.conf.

##This is an entry based on storage class, used when groupbaseexpiry is flase.

#0:10:never:never

5、初始化history文件
$cd /usr/local/news/db
$touch history
$../bin/makedbz -i
$for i in history.n*; do i=${i#history.n.};mv history.n.$i history.$i ;done
有的shell執行不了,也可以手工改正 (起的作用是把history.n.*改名為history.*)
$chown news:news history*
$chmod 644 history*

6、建立新的新聞組
su - news
/usr/local/news/bin/ctlinnd newgroup test1
/usr/local/news/bin/ctlinnd newgroup test2
要執行ctlinnd必須要先啟動innd
請先跳到第十項閱讀如何啟動innd
當然了,你可以試試如果不啟動能不能使用ctlinnd


7、
用mkuserdb.pl建立userpass文件,userpass文件一般存放在/usr/local/news/db下
magicallove:mkuserdb.pl在哪裡?
因為找不到mkuserdb.pl在哪裡,所以這項其實我沒有做

8、修改storage.conf文件,加入
method tradspool {
newsgroups: *
class: 1
}

magicallove:/usr/local/news/etc/storage.conf
這份storage.conf裡面原本就有
method tradspool {
newsgroups: *
class: 0
}
不知道是要修改還是新增在下面= =

9、修改readers.conf,格式如下
auth admin {
hosts: *
auth: "ckpasswd -f /usr/local/news/db/userpass"
default:
default-domain:
}

下面這塊在原本的文件中就存在囉
auth "localhost" {
hosts: "localhost, 127.0.0.1, stdin"
default: ""
}



access user1 {
users: "zhenhua@, !@"
newsgroups: "test2,!control.*,!junk,!control"
access: RP
}

access user2 {
users: "yingjia@, !@"
newsgroups: "test1,test2,!control.*,!junk,!control"
access: RP
}

下面這塊在原本的文件中就存在囉
access "localhost" {
users: ""
newsgroups: "*"
access: RPA
}

access fail {
users: "@*"
newsgroups: !*
}


配置syslog,記錄日誌

$ touch /usr/local/news/log/news.crit
$ touch /usr/local/news/log/news.err
$ touch /usr/local/news/log/news.notice
$ chown news /usr/local/news/log/news.*
$ chgrp news /usr/local/news/log/news.*
$ cat >> /etc/syslog.conf << style="color: rgb(0, 0, 153);">原本沒有log這個資料夾,請自己新增哦
cat >> /etc/syslog.conf <<>
這行需要一點串流概念,建議到鳥哥上面看完那份bash教學


10、啟動news服務:
$su - news
$/usr/local/news/bin/rc.news
netstat -an | grep LISTEN命令查看119 port是否開啟



11、用outlookexpress測試新聞群組
yingjia可以訂閱test1,test2
zhenhua只能訂閱test2

12.系統啟動時,自動啟動新聞組服務器確定
/etc/rc中有執行rc.local的部分,然後在rc.local(如沒有,則新建)中加入:
su news -c /usr/local/news/bin/rc.news


玉米BYIS開張了!

BYIS
讀音
by eyes
文字閱讀的意思
喜歡有意思的文字,不論是休閒小說或者新知文章!
學習目標!
bbs c language
FAMP+php
(FreeBSD+Apache+MySQL+PHP)