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);
這樣就解決了
方便吧!
- May 21 Wed 2008 19:51
C++ Windows 上 切割檔案路徑 的公用函式
- May 06 Tue 2008 21:09
ubuntu 8.04 安裝 apache2 及 設定 local user 網頁目錄
之前這篇 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
- May 01 Thu 2008 13:14
ubuntu 8.04 安裝 CUPS 分享印表機服務 給 Windows XP
最近終於有時間把 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
接著選擇印表機的驅動程式
大功告成
- Apr 26 Sat 2008 19:33
ubuntu 8.04 VirtualBox 1.5.6 OSE 鍵盤失效解決
一開始玩 8.04 alpha 就遇到這個問題
今天終於有解決方法了,由此也可以見到我花太少時問在學習上
感謝 sshlog 前輩讓我知道到了這解決方案
就是再安裝一個套件
1.
sudo apt-get install scim-bridge-client-qt
2.
重開視窗介面
Ctrl + Alt + Backspace
收工
- Mar 20 Thu 2008 20:58
C++ 兩個類別要互相引用怎麼辦呢?
類別要互相使用彼此偶爾會遇到
但是兩個類別標頭檔案(.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()
{
}
============
這樣兩個類別就可以互相使用了
- Mar 20 Thu 2008 20:46
ubuntu 8.04 alpha 6 設定 ASUS F9E 音效
安裝 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.
重開機
- Mar 13 Thu 2008 14:31
ubuntu 8.04 alpha 6 設定網路卡 卡號
設定網路卡 卡號
>sudo ifconfig <網路卡名稱> hw <網路卡類型> <卡號>
Example:
一張網路卡的卡號要設成 00:11:22:33:44:55
>sudo ifconfig eth0 hw ether 00:11:22:33:44:55
- Mar 13 Thu 2008 14:15
ubuntu 8.04 alpha 6 在英文介面安裝中文輸入法
因為 8.04 的英文介面已經預先掛載 scim
只需要再安裝 scim 中文套件
安裝 scim-tables-zh
>sudo apt-get install scim-tables-zh
- Mar 06 Thu 2008 08:05
ubuntu 8.04 alpha 5 編譯核心 compile kernel
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
- Nov 29 Thu 2007 18:21
ubuntu 7-zip 壓縮檔案
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 &
這樣子,我就可以先去做其他事情