C++真是越寫越好玩,今天又發現一個好玩的函式 _tsplitpath_s
這是用來將檔案路徑切分出 磁碟代號 資料夾 檔名 副檔名

先宣告四個字串
TCHAR strDrive[_MAX_DRIVE];        // 磁碟代號
TCHAR strDir[_MAX_DIR];                 // 資料夾
TCHAR strFile[_MAX_FNAME];         // 檔名
TCHAR strExt[_MAX_EXT];                // 副檔名


※ _MAX_DRIVE,_MAX_DIR,_MAX_FNAME,_MAX_EXT
是 compiler 決定值

假設 strFilePath 是所有路徑
TCHAR strFilePath;                            // 所有路徑

_tsplitpath_s(strFilePath, strDrive, _MAX_DRIVE, strDir, _MAX_DIR, \
strFile, _MAX_FNAME, strExt, _MAX_EXT);

就可以切出所有檔案路徑資訊

若有不想要的資訊,假設只要 副檔名 的資訊
_tsplitpath_s(strFilePath, NULL, 0, NULL, 0, \
NULL, 0, strExt, _MAX_EXT);

這樣就解決了

方便吧!

smalldd 發表在 痞客邦 留言(0) 人氣()

之前這篇 ubuntu 7.04 apache2+php5+mysql 作法寫的不是很清楚
今天重寫 apache2 部份

1.
安裝 apache2
>sudo apt-get install apache2


2.
設定 local user 家目錄下的 網頁目錄      ※可免

2.1
修改設定檔      ※可免
>sudo vim /etc/apache2/mods-available/userdir.conf

將以下紅字可修改成自己喜歡的名稱,小弟弟自己是改成 WWW
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        </Directory>
</IfModule>


2.2
啟動 userdir 模組
>sudo a2enmod userdir

2.3
重新啟動 apache2
>sudo /etc/init.d/apache2 restart


smalldd 發表在 痞客邦 留言(0) 人氣()

最近終於有時間把 server 從 7.10 重灌成 8.04
原因是 ubuntu-docs package 掛了
要重新安裝也不行,只好重灌

搞定好了 OS,當然就會想還有什麼可以玩

於是 server 就有一個新功能 分享印表機服務
使用 CUPS 這套軟體逹成

1.
安裝 CUPS
>sudo apt-get install cupsys


2.
編輯 CUPS 設定檔 cupsd.conf
> sudo vim /etc/cups/cupsd.conf

2.1
設定印表機服務和 web 服務的位址和埠
Listen localhost:631                      # 設定服務位址和埠

Listen <host name>:<port>
<host name> 為電腦名稱或 IP 位址,打電腦名稱比較方便的是會自己轉成 IP 位址
<port> 是服務的埠

我自己的設定是
Listen MyServer:631


2.2
設定印表機服務和 web 服務存取權

/ 目錄,提供基本服務和印表機服務
<Location />
    Order allow,deny
    Allow <address>
</Location>


/admin 目錄,管理者頁面
<Location /admin>
    Order allow,deny
    Allow <address>
</Location>


/admin/conf 目錄,服務設定頁面在管理者目錄下
<Location /admin/conf>
    Order allow,deny
    Allow <address>
</Location>


從上閱讀下來,我想大家都知道 Location 的功能了,指定某一 web 目錄
在 Location 內部就是設定此目錄的存取權

Order allow,deny 表示先判斷 allow 條件再判斷 deny 條件
Allow <address> 表示允許的位址
在 <address> 的部份可以填 @LOCAL、IP、host name
@LOCAL 指的是區網內的位址


我的設定是
<Location />
    Order allow,deny
    Allow @LOCAL
</Location>
<Location /admin>
    Order allow,deny
    Allow 192.168.1.2
</Location>
<Location /admin/conf>
    Order allow,deny
    Allow 192.168.1.2
</Location>

2.3
編輯完設定檔,當然要重開機讓設定生效
>sudo /etc/init.d/cupsys restart


3.
顯示主機有哪些印表機
>lpinfo -v
找 direct 開頭那行,並且有顯示印表機型號
我的顯示如下:
direct hp:/par/HP_LaserJet_2100_Series?device=/dev/parport0


4.
加入印表機
>sudo lpadmin -E -p <printer name> -v <printer URI> -P <PPD file> \
-L "<location>"

選項說明:
-E 啟動印表機的列印服務
-p <printer name> 設定印表機名稱
-v <printer URI> 設定印表機的路俓
-L "<location>" 設定印表機的位置    ※可免
-P <PPD file> 設定 PostScript Printer Description (PPD) 檔案     ※可免

我的設定如下:
>sudo lpadmin -E -p HP2100 \
-v hp:/par/HP_LaserJet_2100_Series?device=/dev/parport0 \
-P /usr/share/ppd/cups-included/HP/laserjet.ppd -L "My Printer"


5.
將印表機設定為預設印表機,一樣使用 lpadmin
>sudo lpadmin -d <printer name>
<printer name> 印表機名稱

我的設定如下:
>sudo lpadmin -d HP2100


6.
設定印表機,這部份就要連主機的 web 服務
為什麼不用指令呢?
因為使用 PPD 檔案,若要設定印表機選項,如:紙張大小
必須修改 /etc/cups/ppd/<printer name>.ppd ,相關設定太多
使用 web 來設定比較方便,且 web 服務有中文介面,親切多了
這部份就不多介紹


7.
設定 windows xp 的印表機
開始->印表機和傳真
新增印表機
選擇 網路印表機或連接到其它電腦的印表機
選擇 連線到網際網路、家用或公司網路上的印表機
填入 http://<host>:<port>/printers/<printer name>
<host> 是連接印表機電腦的網路位址
<port> 是服務的埠
<printer name> 印表機名稱

我的 server IP 位址是 192.168.1.254,port 631
所以我填入的是 http://192.168.1.254:631/printers/HP2100

接著選擇印表機的驅動程式
大功告成

smalldd 發表在 痞客邦 留言(1) 人氣()

一開始玩 8.04 alpha 就遇到這個問題
今天終於有解決方法了,由此也可以見到我花太少時問在學習上
感謝 sshlog 前輩讓我知道到了這解決方案
就是再安裝一個套件

1.
sudo apt-get install scim-bridge-client-qt

2.
重開視窗介面
Ctrl + Alt + Backspace


收工

smalldd 發表在 痞客邦 留言(0) 人氣()

類別要互相使用彼此偶爾會遇到
但是兩個類別標頭檔案(.h)中互相引用(include)彼此的標頭檔案
在 Visual C++ 2005 中會造成 compiler 不認識彼此類別
這可真是一件頭痛的事,該怎麼辦呢?

有一個方法可以解決,就是在標頭檔案中
告訴 compiler 有外部類別存在
在類別實作檔案(.cpp)中,才引用(include)彼此的標頭檔案

範例:

class A
===== A.h =====

class B;

class A
{
  A(B b);
  ~A();
};
=============


==== A.cpp ====
#include "A.h"
#include "B.h"

A::A(B b)
{
}

A::~A()
{
}
============


class B
===== B.h =====

class A;

class B
{
  B(A a);
  ~B();
};
=============


==== B.cpp ====
#include "B.h"
#include "A.h"

B::B(A a)
{
}

B::~B()
{
}
============

這樣兩個類別就可以互相使用了

smalldd 發表在 痞客邦 留言(0) 人氣()

安裝 ubuntu 8.04 alpha 6 在 ASUS F9E 上
有個問題就是沒有聲音

該怎麼解決呢?
上網路查了一下,原來只要一個小小動作就可以辦到

1.
編輯 /etc/modprobe.d/alsa-base
>sudo vim /etc/modprobe.d/alsa-base

增加這一行
options snd-hda-intel model=lenovo


2.
重開機

smalldd 發表在 痞客邦 留言(0) 人氣()

設定網路卡 卡號
>sudo ifconfig <網路卡名稱> hw <網路卡類型> <卡號>

Example:
一張網路卡的卡號要設成 00:11:22:33:44:55
>sudo ifconfig eth0 hw ether 00:11:22:33:44:55

smalldd 發表在 痞客邦 留言(0) 人氣()

因為 8.04 的英文介面已經預先掛載 scim
只需要再安裝 scim 中文套件


安裝 scim-tables-zh
>sudo apt-get install scim-tables-zh

smalldd 發表在 痞客邦 留言(0) 人氣()

1.
將 sh link 改為 bash shell
>cd /bin
>sudo rm sh
>sudo ln -s bash sh


2.
安裝編譯時需的套件 kernel-package libncurses5-dev fakeroot
>sudo apt-get install kernel-package libncurses5-dev fakeroot

3.
下載 kernel source from www.kernel.org 至 /usr/src
>cd /usr/src
>sudo wget <kernel source url>

以下是的這次下載的網址
>sudo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.3.tar.bz2

本次下載的版本為2.6.24.3

4.
解壓縮 kernel source
>sudo tar jxvf linux-<source version>.tar.bz2

以下是我這次解壓縮的版本
>sudo tar jxvf linux-2.6.24.3.tar.bz2


5.
建立 kernel source 的資料夾 link 至 linux 資料夾
>sudo ln -s linux-<source version> linux

以下是我建立 link 的指令
>sudo ln -s linux-2.6.24.3 linux


6.
複製本機電腦的 kernel config 至 linux 資料夾內
>cd linux
>sudo cp /boot/config-`uname -r` .config


7.
設定 kernel source
>sudo make menuconfig
在 menuconfig 選單內,要 load 剛剛複製的 .config

8.
編譯核心前需先清除先前的設定
>sudo make-kpkg clean

9.
編譯核心
>sudo make-kpkg --initrd kernel_image kernel_headers

加入 --revision <number> 參數
可以設定 10.00.Custom_i386 的 10.00

10.
安裝核心
>sudo dpkg -i linux-image-<source version>_<source version>-10.00.Custom_i386.deb linux-headers-<source version>_<source version>-10.00.Custom_i386.deb

以下是我的安裝指令
>sudo dpkg -i linux-image-2.6.24.3_2.6.24.3-10.00.Custom_i386.deb linux-headers-2.6.24.3_2.6.24.3-10.00.Custom_i386.deb

安裝完後,可以到 /boot/grub/menu.lst
查看剛編譯的 kernel 是否已經加到選單內

11.
重開機
>sudo shutdown -r now

smalldd 發表在 痞客邦 留言(0) 人氣()

7-zip 是個免費且壓縮強大的壓縮格式
小弟弟也是其中一個愛好者
在ubuntu上,可以從其軟體庫下載
sudo apt-get install p7zip p7zip-full

壓縮檔案的指令
7z a <輸出檔名> <資料夾或檔案名>
例子:7z a -mx=9 -mmt directory.7z directory

以下介紹參數
壓縮率
-mx=0, 1, 3, 5, 7, 9
六種選擇,數字越大,壓縮率越高

多執行緒
-mmt
預設是2個執行緒

通常我會背景跑 7-zip,像這樣
7z a -mx=9 -mmt directory.7z directory > 7z.log &
這樣子,我就可以先去做其他事情

smalldd 發表在 痞客邦 留言(0) 人氣()