IPC(InterProcess Communication) - Unix Domain Sockets篇
在寫Linux程式的時候,最常遇到的問題就是如果進行二個執行中的程式 (Daemons) 即時溝通,目前我使用的方式有
1、讀/寫特定檔案(或資料庫),進行資料交換。
IPC(InterProcess Communication) - Unix Domain Sockets篇
在寫Linux程式的時候,最常遇到的問題就是如果進行二個執行中的程式 (Daemons) 即時溝通,目前我使用的方式有
1、讀/寫特定檔案(或資料庫),進行資料交換。
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, |
[演算法] 泡沫排序法
泡沬排序法,是依序判斷每個數字,每次判斷之最大數會移到最上方,如泡泡一般,稱為泡沫排序法(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 25 ( 結果)
進行第二次排序時,會發現沒有發生任何交換事件,因此可提早結束排序。
程式範例( Linux C ):
#include |
[演算法] 基數排序法
基數排序法,是按照位數順序進行排序的一種方法,從個位數開始排序至最大位數稱為LSD(Least sgnificant digital),從最大位數排序至個位數稱為MSD(Most sgnificant digital),利用這種分配性的排列方式,稱為基數排序法(Radix Sort)。
例:
2 12 8 7 39 1
插入排序(LSD):
[第一次]
02 12 08 07 39 01 ( 取得個位數,並進行個位數排序 )
1 2 12 8 9 39(結果)
[第二次]
01 02 12 08 09 39 ( 利用個位數排序結果,取得個十數,並進行十位數排序 ,如數不足十位數則為0)
1 2 8 9 12 39(結果)
實作時,需要用到較多的Buffer來暫時儲存結果。
程式範例( Linux C ):
#include |
[演算法] 插入排序法
插入排序法,是一個依序將值插入到判斷完成的答案中,直到完成為止,因此稱為插入排序法(Insert Sort)。
例:
2 12 8 7 39 1
插入排序:
[第一次]
2 12 8 7 39 1 ( 和2比較,取得12的位置在第二格 )
2 12 8 7 39 1 ( 和2~12比較,取得8的位置在第二格 )
2 8 12 7 39 1 ( 和2~12比較,取得7的位置在第二格 )
2 7 8 12 39 1 ( 和2~12比較,取得39的位置在第五格 )
2 7 8 12 39 1 ( 和2~39較,取得1的位置在第一格 )
1 2 7 8 12 39 ( 結果 )
但其實在實作時,會浪費許多時間在位移的時間。
程式範例( Linux C ):
#include |
Shell Script for Linux
在Linux中,許多工作都可以用Script的方式來自動化,減少要一字一字輸入指令的麻煩,不過Script的語法與C語言有點不太一樣,因此需要習慣一下,在此就介紹幾個常用又基本的語法。在此我是用Bash shell來寫。記得在一開始的第一行一定要宣告#!/bin/bash,在最後有提供下面幾個範例的檔案下載,有興趣的人可以下載來玩玩。本人的測試環境為Fedora 14 (Bash Shell)。