在這個教程裡我將寫乙個程式,其作用是檢測系統的裝置插拔事件,當有裝置插入 系統時,就可以檢測到這個裝置並把裝置的資訊顯示出來,如果裝置從系統裡移除,也同樣可以檢測出來,並移除裝置。這個**是參考了udev-139的原始碼 的,如果讀者有興趣也可以參考udev的原始碼。其中在udev-139**中有個小小的錯誤,我將在下面的**中說出。
首先先說一下udev的乙個命令,你可以在控制台下執行:
udevadm monitor
我的執行如下圖所示:
當插入我的金士頓優盤時,便可以檢測到優盤的插入,如下圖:
我們現在要做就是寫個程式,其輸出和上面的一樣,其實也就是udevadm的 原始碼,我只是把它的大部分**移除,只留個檢測插拔事件的**,並把很多地方的巨集和函式整合到乙個檔案中。其中具體**的api可參考libudev reference manual的說明:http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev /ch01.html
下面是源**udevadm.c:
view plain
copy to clipboard
print?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#undef asmlinkage
#ifdef __i386__
#define asmlinkage __attribute__((regparm(0)))
#else
#define asmlinkage
#endif
#define udev_max(a,b) ((a) > (b) ? (a) : (b))
#define udev_list_entry_foreach(entry, first) /
for (entry = first; /
entry != null; /
entry = udev_list_entry_get_next(entry))
static
int debug;
static
int udev_exit;
static
void asmlinkage sig_handler( int signum)
static
void print_device( struct udev_device *device, const
char *source, int env)
}
int udevadm_monitor( struct udev *udev)
if (getuid() != 0 && print_kernel)
/* set signal handlers */
memset(&act, 0x00, sizeof ( struct sigaction));
act.sa_handler = (void (*)( int )) sig_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = sa_restart;
sigaction(sigint, &act, null);
sigaction(sigterm, &act, null);
printf("monitor will print the received events for:/n" );
if (print_udev)
if (udev_monitor_enable_receiving(udev_monitor)
printf("udev the event which udev sends out after rule processing/n" );
}
if (print_kernel)
if (udev_monitor_enable_receiving(kernel_monitor)
printf("uevent the kernel uevent/n" );
}
printf("/n" );
while (!udev_exit)
if ((kernel_monitor != null) && fd_isset(udev_monitor_get_fd(kernel_monitor), &readfds))
if ((udev_monitor != null) && fd_isset(udev_monitor_get_fd(udev_monitor), &readfds))
}
out:
udev_monitor_unref(udev_monitor);
udev_monitor_unref(kernel_monitor);
return rc;
}
int main( int argc, char *argv)
下面是makefile
view plain
copy to clipboard
print?
myudevadm: udevadm.c
gcc -g -wall -ludev udevadm.c -o myudevadm
當插入和拔出優盤是的顯示如下圖:
記得加個sudo,要退出按ctrl-c,我的執行環境是ubuntu9.10。可看到我的優盤裝置是sde,有關分割槽是sde4,這個你可以在/dev目錄下找到,並且是usb裝置。/
寫個shell檢測多台機器磁碟
將需要檢測的機器的ip統一touch到乙個檔案裡面,此處我們命名為 linux server list.config 然後寫shell就ok了 shell如下 檔名 diskcheck.sh 用途 批量檢查磁碟空間 cd diskcheck 刪除之前已經存在的檔案 rm rf df all grep...
目標檢測 SSD(九)
可以看到ssd有以下優勢 ssd提取了不同尺度的特徵圖來做檢測,大尺度特徵圖可以用來檢測小物體,而小特徵圖用來檢測大物體 ssd採用了不同尺度和長寬比的先驗框,在faster r cnn中稱為anchors。yolo演算法缺點是難以檢測小物體,而且定位不准,但是對於這幾點,ssd在一定程度上克服這些...
用Python寫個程序監控程式
有個應用程式不是很穩定,又暫時找到具體問題,只知道出現錯誤時日誌檔案會反映出來.該應用定時更新日誌目錄,有兩個日誌檔案 fromclient.log 記錄接收請求,fromserver.log記錄接收服務端返回.出現問題時一般是fromclient.log日誌在更新,但是fromserver.log...