2007年11月5日 星期一

回家渡假

一切都來的很突然,一早到實驗室拿了筆電就回台北了。也許是給自己太大的壓力,只有回到家才會回放鬆的感覺。
雖然說是回家渡假,但多少還是要有些進度。實驗或許不如預期,但論文還是要寫。已經說好下星期要交給老師修改過後的論文,所以,回家這幾天就來改一下論文,不會太累又可以休息。

話說明天過後,都是棒球比賽~~~

安裝NVIDIA顯示卡驅動程式

在Linux上安裝NVIDIA顯示下的驅動程式很容易,首先到官網下載適當的驅動程式。筆電顯卡為NVidia GeForce Go 7300,所以就載了NVIDIA-Linux-x86-100.14.19-pkg1.run

安裝開始前,系統需具備一些編譯工具

# uname -r
2.6.22-2-686
# apt-get install linux-headers-2.6.22-2-686
# apt-get install build-essential

接著就可以開始安裝
# sh NVIDIA-Linux-x86-100.14.19-pkg1.run

按照指示一步一步做即可成功編譯。

Network Byte Order

Internet Protocols是採用Big-endian,因此有四個函式(定義於"netinet/in.h")可供我們轉換host byte order <--> network byte order

uint16_t htons(uint16_t host16bitvalue) ; // host to network short
uint32_t htonl(uint32_t host32bitvalue) ;
// host to network long

uint16_t ntohs(uint16_t net16bitvalue) ; // network to host short
uint32_t ntohl(uint32_t net32bitvalue) ;
// network to host long


當處理port的時候,可以使用hotns()和ntohs()
當處理IPv4位址,可以使用hotnl()和ntohl()

2007年11月4日 星期日

Byte Odering

資料存在記憶體有兩種存法,一個為Big-endian,另一個為Little-endian

  • Big-endian:最高位元組(Significant Byte)存在記憶體的前頭。
  • Little-endian:最低位元組(Least Significant Byte)存在記憶體前頭。
如259(0100000011)存在16位元的記憶體中(小->大)
00000001 00000011 Big-endian
00000011 00000001 Little-endian

2007年11月3日 星期六

Value-Result

Socket address sturcture總是以reference(指標指向結構)傳進socket函式,而結構的大小也會被傳入。然而長度傳入的方法取決於process to kernel或是kernel to process

Process to Kernel(bind, connect, sendto)

struct sockaddr_in serveraddr;

bind(sockfd, (Struct sockaddr *) &serveraddr, sizeof(serveraddr));

長度的資訊是用來告訴該copy多少資料從process到kernel


Kernel to Process(accept, recvfrom, getsockname, getpeername)

struct sockaddr_in clientaddr;
socklen_t letngth;

length = sizeof(clientaddr);
getpeername( sockfd, (Struct sockaddr*) &clientaddr, &length)

其中,長度的值會改變。用指標傳入,告訴kernel所傳入的struture大小。而當函式結束時,會回傳kernel儲存多少資料在structure,將值存在length上。像length這種參數稱為value-result參數。

2007年11月1日 星期四

Socket Address Structure

IPv4與IPv6的Socket Address Structure定義於"netinet/in.h"裡。

IPv4 Socket address structure: sockaddr_in

/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr {
in_addr_t s_addr;
};

/* Structure describing an Internet socket address. */
struct sockaddr_in {
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8]; /* Padding */
};

/* IPv6 address */
IPv6 Socket address structure: sockaddr_in6
struct in6_addr {
uint8_t s6_addr[16];
};
struct sockaddr_in6 {
uint8_t sin6_len;
sa_family_t sin6_family; /* AF_INET6 */
in_port_t sin6_port;
uint32_t sin6_flowinfo
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};