2015年11月2日 星期一
2015年10月27日 星期二
linux 中斷 interrupt
http://www.wowotech.net/linux_kenrel/soft-irq.html
http://www.cnblogs.com/yangzd/archive/2010/10/16/1852975.html
http://blog.csdn.net/lightseed/article/details/4250623
linux spin lock
http://blog.chinaunix.net/uid-20543672-id-3252604.html
http://www.wowotech.net/kernel_synchronization/spinlock.html
http://huenlil.pixnet.net/blog/post/23999871-%5B%E8%BD%89%5Dspinlock-%E7%B0%A1%E4%BB%8B
2015年10月14日 星期三
有關C語言的struct進階初始化
假設有一個student的結構定義如下:
typedef struct student{
char name[50];
int studentNo;
int age;
}student;
按照一般教科書上的寫法,初始化的方式是先宣告一個struct student的變數,然後再用點(dot)運算子去存取內部成員並賦值,例如:
struct student st1;
st1.name = "Peter";
st1.studentNo = 1234;
st1.age = 18;
但是進階的初始化方法卻是宣告直接再以點(dot)運算子賦值,例如:
student st1={
.name = "Peter",
.age = 18,
.studentNo = 1234
};
原來點運算子就可以等同struct內的成員,多個成員則用(,)來分開,類似陣列(array)的宣告方法,不同的是,他賦值的順序是可以不用按照struct定義內的先後順序的!
說到陣列(array),他的宣告也是有幾種神奇的方法。
例如:
int a[7] = { [4]=29, 33, [2]=15 };
相當於
int a[7] = { 0, 0, 15, 0, 29, 33, 0 };
可以用[index]= value 的方法指定給特定的元素,沒有指派的值就是0這樣。
結合上面struct的用法,也可以一併使用combo連續技,例如:
student st2[5]={
[3]={
.name = "Titus",
.age = 22,
.studentNo = 1041 },
[2]={
.studentNo = 1042
.age = 23,
.name = "Stephen", },
}
[index]= 可以不必按照順序,裡頭的成員也不必按照順序,其餘沒指派的元素會自動初始化為0。
當然也可以將一連串連續的元素賦予相同的值,例如:
int a[]= { [0 ... 9]=1, [20 ... 99]=2, [100] =3};
其實這些進階的寫法有什麼實際的好處我也還沒參透(難道是這樣「看起來」有比較OO嗎?哈哈),但至少能看懂這些,以後再看別人的code有用這種語法時就不會再覺得好古怪好神奇了。這些小東西看在用JAVA或C#的人可能不值一提,不過我在這古老而傳統的C語言上能看見這些寫法,仍是感到十分特別又有趣的,所以說,C語言也是會與時俱進的!C語言好棒阿!(這種將C變成既簡潔又充滿彈性的極致語言我看就是Ruby了吧!哈哈!)
PS:以上應該都是使用革奴牌(GNU gcc)的延伸C語法,而不是標準的C語法,如果你是在非GNU gcc的compiler上要特別注意這種寫法是否能夠使用囉!
2015年9月22日 星期二
alias 的使用 .bashrc
http://jslinux.pixnet.net/blog/post/15534168-%E5%A5%BD%E7%94%A8%E7%9A%84-alias-%E6%8C%87%E4%BB%A4
寫在home底下的 .bashrc
# User specific aliases and functions
alias grep='grep --color=auto -n '
alias cat='cat -n '
alias tmux='TERM=xterm-256color tmux -2'
~
寫在home底下的 .bashrc
# User specific aliases and functions
alias grep='grep --color=auto -n '
alias cat='cat -n '
alias tmux='TERM=xterm-256color tmux -2'
~
2015年8月5日 星期三
2015年7月3日 星期五
source Insight 使用技巧
最近使用soruce insight 的一些常用技巧
Source Insight 4 遇到使用上非常log 卡頓
Source Insight 4 遇到使用上非常log 卡頓
=> Options -> Preference ->Display -> Page number in status bar 打勾取消
2015年5月19日 星期二
struct 宣告 在big_endian 和 little_endian 上的排列
若是以bit 為單位在
big_endian : struct 由上而下 在記憶體的位置則是以bits為單位 由高位排至低位
little_endian :struct 由上而下 在記憶體的位置以1byte 為單位 由最高位byte的最低位bit開始 往記憶體低位排
以ipv6 addr packet 的前4個byte 為例 (from wiki)
例子如下:
#ifdef _BIG_ENDIAN
uint32 version:4;
uint32 tclassH:4;
uint32 tclassL:4;
uint32 flow_lblH:4;
uint32 flow_lblL:16;
#elif _LITTLE_ENDIAN
uint32 tclassH:4;
uint32 version:4;
uint32 flow_lblH:4;
uint32 tclassL:4;
uint32 flow_lblL:16;
#endif
其中big_endian 其實也可以寫的更簡潔
uint32 version:4;
uint32 tclass:8;
uint32 flow_lblL:20;
big_endian : struct 由上而下 在記憶體的位置則是以bits為單位 由高位排至低位
little_endian :struct 由上而下 在記憶體的位置以1byte 為單位 由最高位byte的最低位bit開始 往記憶體低位排
以ipv6 addr packet 的前4個byte 為例 (from wiki)
例子如下:
#ifdef _BIG_ENDIAN
uint32 version:4;
uint32 tclassH:4;
uint32 tclassL:4;
uint32 flow_lblH:4;
uint32 flow_lblL:16;
#elif _LITTLE_ENDIAN
uint32 tclassH:4;
uint32 version:4;
uint32 flow_lblH:4;
uint32 tclassL:4;
uint32 flow_lblL:16;
#endif
其中big_endian 其實也可以寫的更簡潔
uint32 version:4;
uint32 tclass:8;
uint32 flow_lblL:20;
2015年5月13日 星期三
2015年4月20日 星期一
c語言中的0UL或1UL是什麼意思
0UL表示無符號長整型 0 1UL表示無符號長整型 1 如果不寫UL後綴,系統默認為:int, 即,有符號整數。
1.數值常數有:整型常數、浮點常數; 2.只有數值常數才有後綴說明; 3.數值常數後綴不區分字母大小寫。 (1)整型常數的表示形式有:十進制形式、以0開頭的八進制形式、以0x開頭的十六進制形式,無二進制形式。 整型常數默認是signed int的。 對整型常數進行類型轉換的後綴只有:u或U(unsigned)、l或L(long)、u/U與l/L的組合(如:ul、lu、Lu等)。例:100u; -123u; 0x123l; (2)浮點常數的表示形式有:科學計數形式和小數點形式。 浮點常數默認是double的。 對浮點常數進行類型轉換的後綴只有:f或F(單精度浮點數)、l或L(長雙精度浮點數)。(注:因浮點型常數總是有符號的,故沒有u或U後綴)。例:1.23e5f; 1.23l; -123.45f;
2015年4月17日 星期五
2015年4月16日 星期四
MTU MSS study
http://blog.crhan.com/2014/05/mtu-and-mss/
cisco (Resolve IP Fragmentation, MTU, MSS, and PMTUD Issues with GRE and IPSEC)
802.3ac | 1998 year | Max frame size extended to 1522 bytes (to allow "Q-tag") The Q-tag includes 802.1Q VLAN information and 802.1p priority information. |
2015年3月18日 星期三
synology NAS 建立 git server
基本上DSM 說明上有教你怎麼設定
若要允許使用者使用 Git:
- 使用具管理權限的帳號登入 DSM。前往控制台 > 終端機並啟動 SSH 服務。
- 啟動 Git 套件。選擇要讓哪些使用者從 repository check in 及 check out 檔案。
注意:
Git 使用者會受到 git-shell 之限制,僅能進行與 Git 相關的活動。此登入型 shell 會套用至 Git 使用者,以確保這些帳號僅用於 Git 相關之操作。因此,Git 使用者僅能使用 SSH 連線來 push 或 pull Git repository,無法完整存取 DSM。
若要新增 Git repository:
- 透過 SSH 以 root 或 admin 身份登入您的 Synology 伺服器。
- 變更目錄至 /volumeX (X 代表儲存空間編號) 來建立資料夾。例如:「git_repos」。該資料夾的權限會與 Linux 相同。
- 於資料夾中執行 git init 來建立空的 repository。
- Repository 建立完畢後,Git 用戶端可輸入下列指令來存取此 repository:
git clone ssh://[Git 使用者]@[您的 Synology 伺服器 IP 位址或主機名稱]/[Git repository 路徑]
照著上面設定完後就可以開心使用Git server 拉~~~ 才怪
2015年3月5日 星期四
2015年2月12日 星期四
linux 網路設定
修改的參數 | 設定檔與重要啟動腳本 | 觀察結果的指令 |
IP相關參數 | /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/init.d/network restart | ifconfig (IP/Netmask) route -n (gateway) |
DNS | /etc/resolv.conf | dig www.google.com |
主機名稱 | /etc/sysconfig/network /etc/hosts | hostname (主機名) ping $(hostname) reboot |
2015年2月11日 星期三
2015年2月10日 星期二
c/c++ 演算法技巧
今天看code 看到一個莫名其妙的東西,上網搜尋一下
unsigned popcount (unsigned u)
{
u = (u & 0x55555555) + ((u >> 1) & 0x55555555);
u = (u & 0x33333333) + ((u >> 2) & 0x33333333);
u = (u & 0x0F0F0F0F) + ((u >> 4) & 0x0F0F0F0F);
u = (u & 0x00FF00FF) + ((u >> 8) & 0x00FF00FF);
u = (u & 0x0000FFFF) + ((u >> 16) & 0x0000FFFF);
return u;
}
原來是個不知為何的演算法得出來的結果,原理大概是查表,此用法只適用於32位無號整數,目的是在算input u 總共有幾個bit為1,稍微紀錄一下。
=> 使用分治法
https://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E9%87%8D%E9%87%8F
簡單來說就是先算出兩個bit裡面有幾個1
A=b'1111
(A) &(b'0101) +(A>>1)&(b'0101) =b'1010
代表第
0,1 bit 有兩個為1
2,3bit 有兩個為1
接著就是 shift跟加法的問題
ref.
http://blog.csdn.net/rappy/article/details/1788969
unsigned popcount (unsigned u)
{
u = (u & 0x55555555) + ((u >> 1) & 0x55555555);
u = (u & 0x33333333) + ((u >> 2) & 0x33333333);
u = (u & 0x0F0F0F0F) + ((u >> 4) & 0x0F0F0F0F);
u = (u & 0x00FF00FF) + ((u >> 8) & 0x00FF00FF);
u = (u & 0x0000FFFF) + ((u >> 16) & 0x0000FFFF);
return u;
}
=> 使用分治法
https://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E9%87%8D%E9%87%8F
簡單來說就是先算出兩個bit裡面有幾個1
A=b'1111
(A) &(b'0101) +(A>>1)&(b'0101) =b'1010
代表第
0,1 bit 有兩個為1
2,3bit 有兩個為1
接著就是 shift跟加法的問題
ref.
http://blog.csdn.net/rappy/article/details/1788969
2015年1月21日 星期三
How many bytes in a packet?
Sometime, we found some devices that point out "forwarding rate, Mpps". The "pps" is the short term for packet per second. However, how many bytes in a packet? It depends, there is no specification on how many byte in a packet, you define it by yourself.
In the 100M Ethernet network,
100M bps / 8 = 12.5 MBps = 12500000 Bytes/s(Bps)
If you define the frame size is 64 Bytes (Minimum Ethernet framz size):
8 Bytes (preamble) + 64 Bytes + 12 Bytes (interframe gap) = 84 Bytes
So forwarding rate will be
12500000 Bps / 84 bytes = 148809 pps
If you define the frame size is 1518 Bytes (Maximum Ethernet framz size):
8 Bytes (preamble) + 1518 Bytes + 12 Bytes (interframe gap) = 1538 Bytes
So forwarding rate will be
12500000 Bps / 1538 bytes = 8127 pps
100M Ethernet's forwarding rate formula:
12500000 Bps / ( 8 Bytes (preamble) + (Feame Size) + 12 Bytes (interframe gap)) = forwarding rate, pps
In the 100M Ethernet network,
100M bps / 8 = 12.5 MBps = 12500000 Bytes/s(Bps)
If you define the frame size is 64 Bytes (Minimum Ethernet framz size):
8 Bytes (preamble) + 64 Bytes + 12 Bytes (interframe gap) = 84 Bytes
So forwarding rate will be
12500000 Bps / 84 bytes = 148809 pps
If you define the frame size is 1518 Bytes (Maximum Ethernet framz size):
8 Bytes (preamble) + 1518 Bytes + 12 Bytes (interframe gap) = 1538 Bytes
So forwarding rate will be
12500000 Bps / 1538 bytes = 8127 pps
100M Ethernet's forwarding rate formula:
12500000 Bps / ( 8 Bytes (preamble) + (Feame Size) + 12 Bytes (interframe gap)) = forwarding rate, pps
2015年1月9日 星期五
c/c++ 運算子優先順序
優先 符號 運算種類 結合
---- ---------------------- ------------- ------
1 (
) [ ] -> . 運算式 左至右
2 !
~ ++ -- - (運算元) 一元運算子 右至左
*
& sizeof
3 *
/ % 乘/除/餘數 左至右
4 +
- 加/減 左至右
5 <<
>> 左移/右移 左至右
6 <
<= > >= 關係運算子 左至右
7 ==
!= 關係運算子 左至右
8 & 位元 AND 左至右
9 ^
位元 XOR 左至右
10 |
位元 OR 左至右
11 &&
邏輯 AND 左至右
12 || 邏輯 OR 左至右
13 ?:
條件運算子 右至左
14 =
+= -= *= /= %= 指定運算子 右至左
<<=
>>= &= |= ^=
15 ,
循序計值 左至右
2015年1月8日 星期四
SVN externals 屬性 依賴 外部連結
快速
http://blog.csdn.net/echoisland/article/details/6584875
詳細
https://cylin.wordpress.com/2007/10/08/svnexternals%E5%B1%AC%E6%80%A7%E4%B9%8B%E4%BD%BF%E7%94%A8/
//windows 操作
http://ccd9527.blogspot.tw/2010/06/svnexternals.html
https://help.cloudforge.com/entries/22483742-Setting-up-svn-externals
原文
http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html
http://blog.csdn.net/echoisland/article/details/6584875
詳細
https://cylin.wordpress.com/2007/10/08/svnexternals%E5%B1%AC%E6%80%A7%E4%B9%8B%E4%BD%BF%E7%94%A8/
//windows 操作
http://ccd9527.blogspot.tw/2010/06/svnexternals.html
https://help.cloudforge.com/entries/22483742-Setting-up-svn-externals
原文
http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html
2015年1月6日 星期二
2015年1月5日 星期一
linux kthread
本來一個小程式打算用此寫,因此做了一些研究
做了點紀錄,雖然最後沒有用這個方式
ref.
http://blog.csdn.net/huofeng_2008/article/details/21177459
http://blog.csdn.net/wangyunqian6/article/details/6588274
http://blog.csdn.net/liuyuan_jq/article/details/6325175
http://nano-chicken.blogspot.tw/2010/01/linux-modules9-kthread.html
http://reneeciou.blogspot.tw/2013/08/linux-kernel-threads.html
做了點紀錄,雖然最後沒有用這個方式
ref.
http://blog.csdn.net/huofeng_2008/article/details/21177459
http://blog.csdn.net/wangyunqian6/article/details/6588274
http://blog.csdn.net/liuyuan_jq/article/details/6325175
http://nano-chicken.blogspot.tw/2010/01/linux-modules9-kthread.html
http://reneeciou.blogspot.tw/2013/08/linux-kernel-threads.html
訂閱:
文章 (Atom)