2013年8月12日 星期一

printf 顏色設置

以下是VT100終端中printf顏色設置,終端類型可以在SecureCRT中設置。
echo也能加顏色,只是必須要用echo -e ""(後面同printf)

printf輸出顏色和ANSI控制碼(高亮,下劃線,閃爍,光標位置,清屏等)
給printf的輸出加上些特效比如顏色,可以讓打印信息更鮮明,在debug的時候特別有用。
顏色:

#define NONE "\033[m"
#define RED "\033[0;32;31m"
#define LIGHT_RED "\033[1;31m"
#define GREEN "\033[0;32;32m"
#define LIGHT_GREEN "\033[1;32m"
#define BLUE "\033[0;32;34m"
#define LIGHT_BLUE "\033[1;34m"
#define DARY_GRAY "\033[1;30m"
#define CYAN "\033[0;36m"
#define LIGHT_CYAN "\033[1;36m"
#define PURPLE "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN "\033[0;33m"
#define YELLOW "\033[1;33m"
#define LIGHT_GRAY "\033[0;37m"
#define WHITE "\033[1;37m"
比如:
printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m")
int main()
{
     printf( CYAN "current function is %s " GREEN " file line is %d\n" NONE, __FUNCTION__, __LINE__ );
     fprintf(stderr, RED "current function is %s " BLUE " file line is %d\n" NONE, __FUNCTION__, __LINE__ );
     return 0;
}


顏色分為背景色和字體色,30~39用來設置字體色,40~49設置背景:
背景色字體色
40: 黑       30: 黑
41: 紅       31: 紅
42: 綠       32: 綠
43: 黃       33: 黃
44: 藍       34: 藍
45: 紫       35: 紫
46: 深綠   36: 深綠
47: 白色   37: 白色


記得在打印完之後,把顏色恢復成NONE,不然再後面的打印都會跟著變色。
另外,還可以加一些ANSI控制碼。加顏色只是以下控制碼中的一種:
\033[0m 關閉所有屬性
\033[1m 設置高亮度
\033[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- \033[37m 設置前景色
\033[40m -- \033[47m 設置背景色
\033[nA 光標上移n行
\033[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH  設置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\033[?25h 顯示光標


來源: http://chunchaichang.blogspot.tw/2011/07/printf.html

2013年4月11日 星期四

緒程(task, thread) 間資料的同步與鎖定

種類

適用情況 狀態  
Binary Semaphore 只能被唯一一個緒程獨佔存取的資源 佔用與非佔用 旗號可以被任意緒程獲取並釋放
Semaphore 允許多個緒程同時存取的資源

獲取:
‧將旗號值減1
‧如果旗號值小於0,則進入等待狀態,否則繼續進行。
釋放:
‧將旗號值加1
‧如果旗號值小於1,喚醒一個等待中的緒程。

旗號可以被任意緒程獲取並釋放
Mutex 只能被唯一一個緒程獨佔存取的資源   由同一個緒程獲取和釋放
Critical Section  

進入關鍵區段
離開關鍵區段

作用範圍僅限於該行程,其他行程無法獲取鎖定。
Read-Write Lock 適用於讀取頻繁,僅偶爾寫入的情況。

兩種獲取方式:
共用(Shared) 或 獨佔(Exclusive)


若鎖定處於共用狀態,緒程試圖獲取獨佔,必須等所有緒程釋放鎖定
 

2013年4月2日 星期二

在 Ubuntu 上快速安裝設定 pure-ftpd

# 切換成 root
sudo -i

# 安裝 pure-ftpd
apt-get install pure-ftpd

# 建立 ftpuser 家目錄
mkdir /home/ftpuser

# 新增 ftpuser 使用者以及 ftpgroup 群組
groupadd ftpgroup
useradd ftpuser -g ftpgroup -s /bin/false -d /home/ftpuser
chown -R ftpuser:ftpgroup /home/ftpuser

# 使用 pure-pw 指令來建立虛擬帳號
# 新增完畢後,您應可以在
# /etc/pure-ftpd/ 目錄下找到一個叫 pureftpd.passwd 的檔案,而這個檔案就類似於
# /etc/passwd 啦,只不過它是屬於虛擬帳號的 password file。
pure-pw useradd ftpuser -u ftpuser -g ftpgroup -d /home/ftpuser
Password:
Enter it again:

# 依據 pureftpd.passwd 來建立認證資料庫 /etc/pure-ftpd/pureftpd.pdb。
# 將來要是 pureftpd.passwd 有異動,須執行 "pure-pw mkdb",以更新資料庫內容。
pure-pw mkdb

# 其實您在建立虛擬帳號的同時,就可以使用 -m 參數來把 pureftpd.pdb 給順便建立起來:
# 上面兩個指令可以合併成下面一個指令
pure-pw useradd ftpuser -u ftpuser -g ftpgroup -d /home/ftpuser -m


# 重啟ftp服務器
/etc/init.d/pure-ftpd restart



2013年1月28日 星期一

How to remove a VOB or View from the ClearCase registry whose storage was deleted

同時有用 Clear Case 的 Windows 工具和 Linux 工具

Windows 介面親和功能操作方便但是很慢
Linux 介面使用指令操作,沒有華麗的GUI,但是快很多

有時候 clearcase view 整個資料夾位置經過搬動或是不正當被移除了
系統裡還存有之前的註冊資料,這時想要再用指令刪除 view 會遇到下面的錯誤:

%>cleartool unregister -view \\host1\ccstg_e\views\test.vws
cleartool: Error: Unable to open file "\\host1\ccstg_e\views\test.vws": No such file or directory.
cleartool: Error: \\host1\ccstg_e\views\test.vws is not a view: No such file or directory
cleartool: Error: Attempt to get location information about "\\host1\ccstg_e\views\test.vws" failed: ClearCase object not found.

這個時候必須要找出原來註冊的 uuid 才能刪除:

%>cleartool lsview -long test
Tag: test
Global path: \\host1\ccstg_e\views\test.vws
Server host: host1
Region: dev
Active: NO
View tag uuid:c8b329ed.60814357.9806.26:55:85:75:e2:bf
View on host: host1
View server access path: e:\ClearCase_Storage\views\test.vws
View uuid: c8b329ed.60814357.9806.26:55:85:75:e2:bf
View owner: DOM1\jdoe

移除註冊資訊:

VIEW example: cleartool unregister -view -uuid <uuid>
Example:
%>cleartool unregister -view -uuidc8b329ed.60814357.9806.26:55:85:75:e2:bf

移除 view tag

VIEW example: cleartool rmtag -view <view-tag>
Example:
%>cleartool rmtag -view test

移除 view

Run cleartool rmview -force -all -uuid <view uuid>



參考資料:
IBM: How to remove a VOB or View from the ClearCase registry whose storage was deleted