目前分類:[程式源碼] (11)

瀏覽方式: 標題列表 簡短摘要

IPC(InterProcess Communication) - Unix Domain Sockets篇

  在寫Linux程式的時候,最常遇到的問題就是如果進行二個執行中的程式 (Daemons) 即時溝通,目前我使用的方式有

1、讀/寫特定檔案(或資料庫),進行資料交換。

Leo 發表在 痞客邦 留言(0) 人氣()

Building for Linux Kernel after version 2.6.36

在2.6.36之後的版本,原先使用的IOCTL已經完全的被移除掉,而在這之後的版本IOCTL可以看到

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

其中ioctl改成使用unlocked_ioctl,如果User Space是32位元,Kernel是64位元,則使用compat_ioctl

範例

2.6.35以前使用方式
static struct file_operations MyDriver_fops = {
  .owner = THIS_MODULE,

Leo 發表在 痞客邦 留言(1) 人氣()

[演算法] 泡沫排序法

泡沬排序法,是依序判斷每個數字,每次判斷之最大數會移到最上方,如泡泡一般,稱為泡沫排序法(Bubble Sort)。

 

例:

 2 12 8 7 39 1

泡沬排序法:

[第一次]

 2 12 8 7 39 1 ( 2是否比12大,否,下一位 )

 2 12  8 7 39 1 ( 12是否比8大,是,交換,下一位 )

 2 8 12 7 39 1 ( 12是否比7大,是,交換,下一位 )

 2 8 7 12 39 1 ( 12是否比39大,否,下一位 )

 2 8 7 12 39 1 ( 39是否比1大,是,交換)

 2 8 7 12 1 39 ( 結果)

第一次排完後,39即被移到最右方,接著再進行第二次排序

 2 8 7 12 1 39  ( 2是否比8大,否,下一位 )

 2 8 7 12 1 39  ( 8是否比7大,是,交換,下一位 )

 2 7 8 12 1 39  ( 8是否比12大,否,下一位 )

 2 7 8 12 1 39  ( 12是否比1大,是,交換 )

 2 7 8 1 12 39 ( 結果)

第二次排完後,12被移到最右方第二位,接下來一直進行排到全部換完為止。

 

提早結束事件

當某一次排序時完全沒發生交換的事件則代表其實已經全部都排列完成了。

例:

 2 12 25 20 

泡沬排序法:

[第一次]

 2  12 25 20 ( 2是否比12大,否,下一位 )

 2 12 25 20 ( 12是否比25大,否,下一位 )

 2 12 25 20 ( 25是否比20大,是,交換)

 2 12 20  ( 結果)

進行第二次排序時,會發現沒有發生任何交換事件,因此可提早結束排序。

程式範例( Linux C ):

 

#include
#include
#include

Leo 發表在 痞客邦 留言(0) 人氣()

[演算法] 基數排序法

基數排序法,是按照位數順序進行排序的一種方法,從個位數開始排序至最大位數稱為LSD(Least sgnificant digital),從最大位數排序至個位數稱為MSD(Most sgnificant digital),利用這種分配性的排列方式,稱為基數排序法(Radix Sort)。

 

例:

 2 12 8 7 39 1

插入排序(LSD):

[第一次]

 1   3 0 ( 取得個位數,並進行個位數排序 )

1 2 12 8 9 39(結果)

[第二次]

1 2 2 8 9 9 ( 利用個位數排序結果,取得個十數,並進行十位數排序 ,如數不足十位數則為0)

1 2 8 9 12 39(結果)

 

實作時,需要用到較多的Buffer來暫時儲存結果。

 

程式範例( Linux C ):

 

#include
#include
#include

Leo 發表在 痞客邦 留言(1) 人氣()

[演算法] 插入排序法

插入排序法,是一個依序將值插入到判斷完成的答案中,直到完成為止,因此稱為插入排序法(Insert Sort)。

 

例:

 2 12 8 7 39 1

插入排序:

[第一次]

  12 8 7 39 1 ( 和2比較,取得12的位置在第二格 )

 2 12  7 39 1 ( 和2~12比較,取得8的位置在第二格 )

 2  8 12  39 1 ( 和2~12比較,取得7的位置在第二格 )

 2  7 8 12 39 1 ( 和2~12比較,取得39的位置在第五格 )

 2  7 8 12 39  ( 和2~39較,取得1的位置在第一格 )

 1 2 7 8 12 39 ( 結果 )

但其實在實作時,會浪費許多時間在位移的時間。

 

程式範例( Linux C ):

 

#include
#include
#include

Leo 發表在 痞客邦 留言(0) 人氣()

[出題與解題] 生病的三角樹林

[題目說明]

來源 - http://dowdow.wordpress.com

Leo 發表在 痞客邦 留言(0) 人氣()

Android手機搖身變成電腦滑鼠

[程式完成圖]


Leo 發表在 痞客邦 留言(5) 人氣()

Shell Script for Linux

        在Linux中,許多工作都可以用Script的方式來自動化,減少要一字一字輸入指令的麻煩,不過Script的語法與C語言有點不太一樣,因此需要習慣一下,在此就介紹幾個常用又基本的語法。在此我是用Bash shell來寫。記得在一開始的第一行一定要宣告#!/bin/bash,在最後有提供下面幾個範例的檔案下載,有興趣的人可以下載來玩玩。本人的測試環境為Fedora 14 (Bash Shell)。

 

Leo 發表在 痞客邦 留言(0) 人氣()

遊戲製作-猜數字遊戲

[程式完成圖]

   

Leo 發表在 痞客邦 留言(3) 人氣()

用Visual Basic 6.0寫簡易即時通訊軟體

[程式完成圖]

Client登入畫面

Leo 發表在 痞客邦 留言(8) 人氣()

用Visual Basic 6.0寫KTV點歌系統

[程式完成圖]

歌手列表

Leo 發表在 痞客邦 留言(15) 人氣()