系統公告
★快來看ddy的公告★
部落格廣告

強力推薦,讓Blog的人氣轉換成現金,鼓勵Blog創作最佳的回饋方式,詳請見使用BloggerAds 為Blog賺取實質收益或點選上方圖片加入喔
基督徒串聯
最近文章發表
- 問答遊戲
- 當爸爸最驕傲的時刻
- 心機熊~~別跟我耍心機
- 變動
- 童言童語-Part 13
- Perl 小技巧(整理)
- 聽來的冷笑話
- 職場怪譚-大頭症
- 職場怪譚-清便便的故事
- 四川震災之心情隨筆
- 當爸爸最驕傲的時刻
- 心機熊~~別跟我耍心機
- 變動
- 童言童語-Part 13
- Perl 小技巧(整理)
- 聽來的冷笑話
- 職場怪譚-大頭症
- 職場怪譚-清便便的故事
- 四川震災之心情隨筆
隨機文章跑馬燈
Tags Cloud
最新的回應
Stephen7079:
我也是基督徒,...
godsgift:
哈! 又是一個笑翻!...
godsgift:
我講給兒子聽後...
godislove101:
cooool :D...
wesley77:
請幫我加入 卸卸你:)
maleveleve:
...
sec0526:
我成功了,謝謝你的用心...
fortuner:
哈哈~太好笑了......
lala:
請問站長...
sec0526:
我也要加入基督徒的串聯...
我也是基督徒,...
godsgift:
哈! 又是一個笑翻!...
godsgift:
我講給兒子聽後...
godislove101:
cooool :D...
wesley77:
請幫我加入 卸卸你:)
maleveleve:
...
sec0526:
我成功了,謝謝你的用心...
fortuner:
哈哈~太好笑了......
lala:
請問站長...
sec0526:
我也要加入基督徒的串聯...
搜尋此頻道內容
時光機器
謹民出生第 天
人氣指數
當日人次:
累積人次:
累積人次:
ddy 有多少客人
誰來我家
我的書籤(選單)
楊官教英文
ETC 台灣英語網
詩聲樂園
中央大學英語學習資料庫
SINO
發音與拼音學習輔助區
LiveABC 圖解字典
Star fall 英文學習網站
小笨霖英語筆記本
英文學習咖啡小站
翻譯網
ETC 台灣英語網
詩聲樂園
中央大學英語學習資料庫
SINO
發音與拼音學習輔助區
LiveABC 圖解字典
Star fall 英文學習網站
小笨霖英語筆記本
英文學習咖啡小站
翻譯網
Perl中文線上說明
Understand for C++(linux driver source code)
Delphi.KTOP
RFC Sourcebook
PHP5網管實驗室
SHELL SCRIPTING 教學與心得
Win32 Assembly
線上程式碼轉 html
Win32 Scripting
Perl 學習手扎
Perl 資源
Internet RFC/STD/FYI/BCP Archives
Linux commands source code
各類程式語言範例
Free Programming resources
Python 教學文件
OPEN SOURCE 共享資源
Internet FAQ Archives
Cobbler 全文檢索系統
雪龍KTOP 線上查詢
Understand for C++(linux driver source code)
Delphi.KTOP
RFC Sourcebook
PHP5網管實驗室
SHELL SCRIPTING 教學與心得
Win32 Assembly
線上程式碼轉 html
Win32 Scripting
Perl 學習手扎
Perl 資源
Internet RFC/STD/FYI/BCP Archives
Linux commands source code
各類程式語言範例
Free Programming resources
Python 教學文件
OPEN SOURCE 共享資源
Internet FAQ Archives
Cobbler 全文檢索系統
雪龍KTOP 線上查詢
每月文章彙集
.Jul 2008(4)
.Jun 2008(4)
.May 2008(6)
.Apr 2008(6)
.Mar 2008(9)
.Feb 2008(6)
.Jan 2008(11)
.Dec 2007(13)
.Nov 2007(16)
.Oct 2007(7)
.Sep 2007(1)
.Aug 2007(10)
.Jul 2007(5)
.May 2007(6)
.Apr 2007(13)
.Mar 2007(10)
.Feb 2007(2)
.Jan 2007(4)
.Dec 2006(14)
.Nov 2006(5)
.Oct 2006(11)
.Sep 2006(8)
.Aug 2006(10)
.Jul 2006(15)
.Jun 2006(16)
.May 2006(14)
.Apr 2006(15)
.Mar 2006(17)
.Feb 2006(9)
.Jan 2006(20)
.Dec 2005(18)
.Nov 2005(18)
.Oct 2005(30)
.Sep 2005(21)
.May 2005(5)
.Apr 2005(22)
.Mar 2005(17)
.Jun 2008(4)
.May 2008(6)
.Apr 2008(6)
.Mar 2008(9)
.Feb 2008(6)
.Jan 2008(11)
.Dec 2007(13)
.Nov 2007(16)
.Oct 2007(7)
.Sep 2007(1)
.Aug 2007(10)
.Jul 2007(5)
.May 2007(6)
.Apr 2007(13)
.Mar 2007(10)
.Feb 2007(2)
.Jan 2007(4)
.Dec 2006(14)
.Nov 2006(5)
.Oct 2006(11)
.Sep 2006(8)
.Aug 2006(10)
.Jul 2006(15)
.Jun 2006(16)
.May 2006(14)
.Apr 2006(15)
.Mar 2006(17)
.Feb 2006(9)
.Jan 2006(20)
.Dec 2005(18)
.Nov 2005(18)
.Oct 2005(30)
.Sep 2005(21)
.May 2005(5)
.Apr 2005(22)
.Mar 2005(17)
贊助商
其它資訊
本部落所刊登之內容,皆由作者個人所提供,不代表 yam天空部落 本身立場。
June 12, 2008
Perl 真的是很需要"理解"的語言,同一個功能可能會有數十種做法
這也是看別人寫的Perl 程式最痛苦的地方,最近又把學藝不精的Perl 拿出來玩
整理一些之前的筆記…
要巡覽陣列裡的每一個元素的方法
my @array=("aa","bb","cc","dd","ee");
1.
foreach $str (@array) {
print $str ."\n"
}
2.
print $array[$i] ."\n"
}
$#array ---> 能取得陣列的上標
3.
print $array[$i] ."\n"
}
scalar(@array) ---> 傳回陣列的元素數量
觀看全文...
這也是看別人寫的Perl 程式最痛苦的地方,最近又把學藝不精的Perl 拿出來玩
整理一些之前的筆記…
要巡覽陣列裡的每一個元素的方法
my @array=("aa","bb","cc","dd","ee");
1.
foreach $str (@array) {
print $str ."\n"
}
2.
for($i=0; $i<=$#array; $i++) {print $array[$i] ."\n"
}
$#array ---> 能取得陣列的上標
3.
for($i=0; $i<scalar(@array); $i++) {print $array[$i] ."\n"
}
scalar(@array) ---> 傳回陣列的元素數量
觀看全文...
April 21, 2008
前二天一個初學C語言的朋友在問…這是什麼爛語言呀~~怎麼資料轉來轉去的…頭都昏了
我哈哈大笑之後…跟他解釋原理,他大概能接受了。
但我想許多對初學者而言,資料的轉換仍然是一個問題,在此整理一些函式說明如下:
大概分為三類
字串與數值轉換
常見的就是atoi(),atol(),atof(),itoa() ... 之類的,其中itoa() 不被gcc所支援,可透過sprintf()來實現轉換,並僅以atoi()與sprintf()為例
位元順序轉換
位元序序轉換是因為x86 cpu讀取記憶體的順序與磁碟上存放的順序不同而造成的,x86架構是所謂的Little-Endian,在磁碟上儲存的位元組是照順序的,然而以32位元記憶體存取而言,會先從低位元開始讀取,例如…在磁碟上存放的資料是0x12345678,那麼讀進記憶體之後,就會是0x78 0x56 0x34 0x12
所以,從在儲存媒體與記憶體之間的資料需要轉換。另外就是用於Host Byte Order 與 Network Byte Order 互換,因為網路跨平台的特性,無論主機端是Big-Endian 或是Little-Endian 都要能正確地透過網路交換資料,所以在Socket定義上,Network Byte Order 採用 Big-Endian 。以下函式可達成轉換:
僅以host 中32位元記憶體中資料 0x78563412 為例:
網路位址轉換
觀看全文...
我哈哈大笑之後…跟他解釋原理,他大概能接受了。
但我想許多對初學者而言,資料的轉換仍然是一個問題,在此整理一些函式說明如下:
大概分為三類
- 字串與數值轉換
- 位元順序轉換
- 網路位址轉換
字串與數值轉換
常見的就是atoi(),atol(),atof(),itoa() ... 之類的,其中itoa() 不被gcc所支援,可透過sprintf()來實現轉換,並僅以atoi()與sprintf()為例
| 原型宣告 | 使用方法 | 使用時機 |
#include <stdlib.h> |
int a; a=atoi("100"); |
將數值字串轉換成整數 |
#include <stdio.h> |
char s[10]; sprintf(s,"%s",100); |
將數值轉換為字串 |
位元順序轉換
位元序序轉換是因為x86 cpu讀取記憶體的順序與磁碟上存放的順序不同而造成的,x86架構是所謂的Little-Endian,在磁碟上儲存的位元組是照順序的,然而以32位元記憶體存取而言,會先從低位元開始讀取,例如…在磁碟上存放的資料是0x12345678,那麼讀進記憶體之後,就會是0x78 0x56 0x34 0x12
所以,從在儲存媒體與記憶體之間的資料需要轉換。另外就是用於Host Byte Order 與 Network Byte Order 互換,因為網路跨平台的特性,無論主機端是Big-Endian 或是Little-Endian 都要能正確地透過網路交換資料,所以在Socket定義上,Network Byte Order 採用 Big-Endian 。以下函式可達成轉換:
#include <netinet/in.h>
uint32_t htonl(uint32_t hostlong);//32位元資料轉換
uint16_t htons(uint16_t hostshort);//16位元資料轉換
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
僅以host 中32位元記憶體中資料 0x78563412 為例:
| 原型宣告 | 使用方法 | 使用時機 |
#include <netinet/in.h> |
unsigned int a,b; a=0x78563412; b=htonl(a); |
1.host轉換成network 順序 2.memory 資料寫入磁碟的轉換 (0x78563412-->0x12345678) |
#include <netinet/in.h> |
unsigned int a,b; b=0x12345678; a=ntohl(b); |
1.network 轉換成host順序 (0x12345678-->0x12345678) |
網路位址轉換
觀看全文...
March 10, 2008
有時候我們為了提高程式的彈性,會使用shell script 來做部份的工作
再取得回傳值來判定正常或是異常
以下面的例子…使用script 判斷目錄是否存在~
可直接在shell 下觀察回傳值
而在C 語言程式裡…若要取得執行外部shell script 的回傳值的話,如下所示
觀看全文...
再取得回傳值來判定正常或是異常
以下面的例子…使用script 判斷目錄是否存在~
| #!/bin/sh #check directory if [ -d $1 ];then #do something... ls $1 exit 0 else exit 2 fi |
可直接在shell 下觀察回傳值
| echo $? |
而在C 語言程式裡…若要取得執行外部shell script 的回傳值的話,如下所示
觀看全文...
December 18, 2006
這幾天同事在研究為什麼Wintegra的程式出問題後,我們只需回傳stack資料他們就能知道那個函式出問題
以我早期的觀念,當主程式呼叫副程式時,會先將返回位址存到stack裡
所以透過傾印stack 可以得知在錯誤發生前的進入點是那個函式~~
這實在是很值得探討的方向,我就開始尋找一些資料
一面做實驗一面在整理…資訊太多…等有點心得後…轉換成自己的方式我會貼出來的
參考資料:
timhsu 兄所寫的 Who Call Me?
Printing back trace of functions inside a program
Unix編程/應用問答中文版 ---2.堆棧相關問題
Obtaining a stack trace in C upon SIGSEGV
Stack Backtracing Inside Your Program
以我早期的觀念,當主程式呼叫副程式時,會先將返回位址存到stack裡
所以透過傾印stack 可以得知在錯誤發生前的進入點是那個函式~~
這實在是很值得探討的方向,我就開始尋找一些資料
一面做實驗一面在整理…資訊太多…等有點心得後…轉換成自己的方式我會貼出來的
參考資料:
timhsu 兄所寫的 Who Call Me?
Printing back trace of functions inside a program
Unix編程/應用問答中文版 ---2.堆棧相關問題
Obtaining a stack trace in C upon SIGSEGV
Stack Backtracing Inside Your Program
December 15, 2006
在Linux 下GNU Readline Library 是很常用的,在許多交談式的程式裡都能見到其蹤影,最經典的莫過於shell了,使用readline() 所提供的功能,可以在文字模式使程式更容易操作更專業,一般來說包含了指令列的輸入/編輯等操作與熱鍵設定(符號化),甚至按[Tab] 鍵可以Auto completion 將未輸入完成的指令補齊,若搭配GNU History Library 則可以提供歷史指令的查詢,使用上/下鍵巡覽指令。
readline() 故名思義,就是一次讀一行資料,在輸入時會blocking 住,等待[CR] 鍵(Enter 鍵),才將輸入存入buffer,供程式讀取使用。在工作上我所採用的是以readline()做為輸入界面,一直以來都很好用,直到這二天需要getch() 這類功能才發現一些問題,例如,我希望按的鍵不要顯示,而且按完立即回應不要等待[CR],但是以readline() 預設模式是無法實現的,當然有其它方式可以解決不一定要用readline,像是使用curses所提供的getch(),基於系統限制我必須使用readline,所以在研究之後有了這一篇出現,程式碼如下:
觀看全文...
readline() 故名思義,就是一次讀一行資料,在輸入時會blocking 住,等待[CR] 鍵(Enter 鍵),才將輸入存入buffer,供程式讀取使用。在工作上我所採用的是以readline()做為輸入界面,一直以來都很好用,直到這二天需要getch() 這類功能才發現一些問題,例如,我希望按的鍵不要顯示,而且按完立即回應不要等待[CR],但是以readline() 預設模式是無法實現的,當然有其它方式可以解決不一定要用readline,像是使用curses所提供的getch(),基於系統限制我必須使用readline,所以在研究之後有了這一篇出現,程式碼如下:
觀看全文...
September 5, 2006
技術(6)

























































