2012-05-26 70 views
4

當這些文字在結構中時,我必須觀察一定數量的日誌文件(可隨時更改)以查看它們是否包含「禁止」字樣。在實施過程中,我對執行實施的最佳方式有一些懷疑。C - 使用進程監控文件

  1. 難道是一個好主意,有一個過程來分析文件的列表進行監測,每一次我們看到的是一個有變化,我們送一個過程,看是否包含某些單詞「禁」 ?
  2. 作爲一個日誌文件,修改只發生在最後,所以要查看文件是否發生了變化,我們必須查看大小是否已被修改。做一個«活躍等待»:
While(1) 
if (「old size!= new size」) 
    send process run for this file to see if contains some words 「forbidden」. 

可能有人給我一些想法,如果告訴我,我在做什麼是某種不正確的?

+1

操作系統爲這類事情提供了特殊的接口。您是否需要針對不同操作系統的解決方案,或者您是否僅限於特定的操作系統 –

+0

如果你跟蹤以前的大小,你可以''尋找()'到那個位置,只讀取和檢查新的內容。 – tripleee

+0

我完全同意德米特里丘巴羅夫,例如你已經習慣了Linux。這是你可以使用的東西嗎? – Fred

回答

0

對於單個文件,這看起來與less的確很相似。使用strace我偷看了一下less做了什麼,它似乎只是保持一個打開的文件描述符,然後在一個循環睡眠一秒鐘,並嘗試讀取更多的輸入。如果沒有太多的日誌文件要監視(並且你不介意爲每個文件描述符保留一個打開的文件描述符),也許你可以使用這種方法。