2010年7月13日 星期二

AF_INET和PF_INET的區別

在寫網路程式的時候,建立TCP socket一般是這樣的:   
 sock = socket(PF_INET, SOCK_STREAM, 0);

然後在綁定本地地址或連接遠程地址時需要初始化sockaddr_in結構,其中指定address family時一般設置為AF_INET,即使用IP。
問題是AF_INET和PF_INET到底有什麼區別,甚至很多參考書上都是混用。今 天查了一下相關頭文件的定義,找到了答案。


AF = Address Family
PF = Protocol Family
 

AF_INET = PF_INET

所以,理論上建立socket時是指定協議,應該用PF_xxxx,設置地址時應該用AF_xxxx。當然AF_INET和 PF_INET的值是相同的,混用也不會有太大的問題。


reference Andy Yang

2010年7月1日 星期四

Ubuntu SSH遠端安全連線安裝及設定以及scp指令用法

# sudo apt-get install openssh-server 就這麼簡單

如何連入遠端電腦?

linux下
# ssh username@ip

windows
請Google PieTTY 這套軟體

scp用法 
#scp filename username@ip:filename

假設使用者allen要傳資料/home/allen/test.txt
到david桌面(ip:123.123.123.123) 指令可以這樣打 
#scp /home/allen/test.txt david@123.123.123.123:/home/david/桌面/

如果要抓回來 顛倒即可
#scp david@123.123.123.123:/home/david/桌面/test.txt /home/allen

Windows 對 Linux
可以Google WinSCP這套軟體

2010年4月30日 星期五

搶先安裝 Ubuntu 10.04 LTS

最新的Ubuntu 10.04 LTS (Long Term Support) 下載處

走的是紫色風格 令人耳目一新的感覺

看圖



心動不如行動 趕快去抓來裝吧!!

Ubuntu裡如何用指令查詢已安裝套件

在 Ubuntu 可以用下列指令找出指定的套件是不是已經安裝過了 

dpkg --get-selections | grep 查詢的字串

也可以用這個指令來產生已安裝套件的清單檔

dpkg --get-selections > output.txt

然後在開啟查詢

2010年4月14日 星期三

VirtualBox 使用USB裝置

之前有介紹過 VirtualBox 分享資料夾使用步驟


為什麼到今天才將 VirtualBox 使用USB裝置 給搞定呢??
經過指點 答案很簡單 我沒重開機 XD
不囉唆 看圖! 步驟其實都大同小異

ps: 主機:Ubuntu 8.04 LTS VirtualBox:XP







 設定好記得重開主機



 插入USB 看到USB圖示有閃  代表你成功了


XP也有看到該Flash memory

謝謝收看!!


2010年4月8日 星期四

新的 ipad 下場是...粉碎

Oh ! No ~ ~
有錢也不是這樣花的 新的 ipad 也!
不喜歡就送我嘛 幹麻砸爛它勒??

2010年3月19日 星期五

ARM Assembler V.S GNU Assembler


ARM與GNU Assembler差異到底有多大,只能說非常的大!用過就知道,之前就將GNU 可成功Make的程式丟到ADS(他用的是ARM Assembler,自家開發的嘛)上模擬,看看中斷點、暫存器數值、程式流程。

錯誤居然有309個(組合語言部分,C語言倒是沒什麼問題)Google了ADS_Errors_and_Warnings、An Introduction to the GNU Assembler、GNU ARM Assembler Quick Reference以及網路上各方精華才知道,問題出在哪?還一直以為是環境設置的問題(當然環境設置也很重要,弄不好一樣不能跑!)。

ADS顯示的主要錯誤
1. Error   : A1163E: Unknown opcode
組譯器擺明就是看不懂
2. Error   : C2470E: function prototype formal '__packed__' needs type or class - 'int' assumed
這個__attribute__((__packed__))是GNU才有的用法 ARM Assembler也是看不懂的,記得Mark(註解)起來

其實真正的錯誤是下面這些(是非常多 XD)
     ARM        ->          GNU
INCLUDE 替換成 .INCLUDE
TCLK2 EQU PB25
替換成 .equ TCLK2, PB25
EXPORT 替換成 .global
IMPORT
替換成 .extern
DCD
替換成 .long
IF :DEF:
替換成 .IFDEF
ELSE 替換成 .ELSE
ENDIF
替換成 .ENDIF
:OR:
替換成 |
:SHL:
替換成 <<
END
替換成 .end
AREA Word, CODE, READONLY --> .text
AREA Block, DATA, READWRITE --> .data
CODE32 --> .arm
CODE16 --> .thumb
LTORG --> .ltorg
For ADS environment
    __asm{
            rsbs    dumy, var2, 0
            movmi   L_var_out, L_var1, lsl var2
            movpl   L_var_out, L_var1, asr dumy
         }
For GNU environment
       __asm__ __volatile__(
            " rsbs    %0, %3, #0;\n\r"
            " movmi   %1, %2, lsl %3;\n\r"
            " movpl   %1, %2, asr %0"
            :"=r" (dumy), "=r" (L_var_out)
            :"r" (L_var1), "r" (var2)
);
or
    asm volatile(
               " rsbs    %0, %3, #0;\n\r"
            " movmi   %1, %2, lsl %3;\n\r"
            " movpl   %1, %2, asr %0"
            :"=r" (dumy), "=r" (L_var_out)
            :"r" (L_var1), "r" (var2)
       ); 

不知道的人,這部分可能弄個一輩子都不知道問題在哪?明明沒有錯看半天,上面只是主要的部分,其實還有很多想不到的,像是少加了個冒號、程式前面沒空白、有的地方必須是小寫,所有令人意想不到的錯誤都出現了。如果你很習慣GNU GDB(GNU DeBugger) 或是你根本就在Windows上開發一開始就是學ARM Assembler語法,那你就沒這個問題了,但如果你要將程式從GNU轉ARM或是倒過來ARM轉GNU記得先看看。




2010年3月9日 星期二

Ubuntu on HTC

Ubuntu on HTC



這實在是太酷了
這可以當個超小 "小筆電 "
HTC又有新的目標了
話說  這樣不能打電話喔 別亂學 哈哈