2014-03-24 47 views
0

我正在爲RSSI(我的興趣是探測請求和數據null,時間戳和源MAC地址)嗅探WiFi數據包,並且我需要將結果保存在pcap文件中以供進一步處理。在嵌入式Linux中安排文件操作

問題是我需要將信息分成多個不同的文件,每小時創建一個文件。
我不知道如何檢查我的程序中的運行時間,除了多線程(while(1),sleep()和檢查clock()函數)。我使用的是Ubuntu,但目標平臺是安裝了Linux OpenWrt的路由器。

我的第一場音樂會是交叉編譯+ pthread.h,thread.h或其他的問題,或者OpenWrt應該沒有問題?

問題的另一面 - 使用多線程處理這個愚蠢的問題不是太複雜嗎?
也許還有其他解決方案? (即一個小的僞多線程解決方案,或一些更簡單的技巧)?

回答

2

您應該使用cron:

cron是用於在指定的時間來執行(背景)所需任務的系統守護進程。

基本上,你定義一個腳本中每隔一小時執行這個語法:

0 */1 * * * /path/to/script.sh 

在這裏獲得更多的信息:https://help.ubuntu.com/community/CronHowto

對於OpenWrt的具體設置,點擊這裏:http://martybugs.net/wireless/openwrt/cron.cgi

對於您的具體情況,您可以使用以下設計:

  • Cron作業每隔一小時觸發一次
  • 自定義腳本被執行並使用IPC機制通知主應用程序。
  • 主要應用已在writter處理程序,做什麼是必要重置writter專門的功能(其他函數調用,文件刪除,創建新文件等)

enter image description here

對於IPC方法的概述以幫助您開始,請檢查this Wikipedia article

對於具體的實現,您可以使用Boost.Interprocess,Sockets, Pipes等。

+0

據我所知,cron可以使用一些shedule來運行sh腳本,但是如何讓我的程序開始在下一個文件(file0.pcap - > file1.pcap)中寫入? – Ralor

+0

這是您必須實施的邏輯。我能想到的最簡單的方法是創建一個文件,例如'/ var/tmp/startnew',並讓cron腳本每隔一小時寫一個'1'。在你的主程序的每一次寫入中,你都會檢查這個文件是否包含值'1'。如果確實如此,則向其寫入'0'並開始一個新文件。 但當然,這不是理想的解決方案,只是一個可以讓你開始的最小努力解決方案。如果你有很多寫入文件,讀取額外的文件將是一個很大的開銷。在這種情況下,您應該使用其他技術。 – bosnjak

+0

這是我的主要問題,我需要在一小時後直接停止寫入文件,而不是在寫入前進行檢查。 – Ralor