2010-10-06 84 views
1

好吧,你們中的一些人可能已經注意到我一直在解決這個問題,並持續了大約3周。我無法弄清楚我的生活發生了什麼事情。下面是perl腳本,它保存來自USB讀卡器的輸入,就像鍵盤一樣。該機器是一個嵌入式系統,使用voyage linux運行在小型閃存驅動器上。linux和perl腳本輸入

use strict; 
use Time::Local; 

open(MATCH,'swipe_match.txt'); 
my @matches = <MATCH>; 
close(MATCH); 

my $error = qr/[+%;]E\?/; 

while(1) { 
     my $text = <STDIN>; 
     my $text1 = <STDIN>; 
     my $text2 = <STDIN>; 
     if (($text && $text1 && $text2) or ($text && $text1) or $text) { 
       my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime(); $year += 1900; 
       $mon+=1; 
       my $timestamp = "$mon/$mday/$year $hour:$min:$sec"; 
       chomp $text; 
     chomp $text1; 
     chomp $text2; 

#    my $matched = 0; 
#    foreach my $test (@matches) { 
#      chomp $test; 
#      $matched = 1 if ($text =~ /$test/i); 
#    } 
#    if ($matched) { 
#      system("aplay /SWIPE/good.wav >/dev/null 2>/dev/null"); 
#    } else { 
#      system("aplay /SWIPE/bad.wav >/dev/null 2>/dev/null"); 
#    } 

     # write out the swipe even if its bad... 
     open(LOG,'>>/DATA/SWIPES.TXT'); 
     print LOG $text."\t".$text1."\t".$text2."\t".$timestamp."\n"; 
     close(LOG); 

     if ($text =~ $error or $text1 =~ $error or $text2 =~ $error) { 
         system("aplay /SWIPE/bad.wav >/dev/null 2>/dev/null"); 
     } 
     else { 
         system("aplay /SWIPE/good.wav >/dev/null 2>/dev/null"); 
     } 
     } 
} 
exit; 

我沒有寫這個腳本,寫了這個腳本的人早已不在了。目前我有2臺機器。其中之一是工作,另一個是我試圖去工作的人。我試圖找出這個腳本如何獲得輸入(在工作的機器上)。我可以打開日誌文件/DATA/SWIPES.TXT並查看實際的滑動。目前有一些會影響腳本,這裏的機器上沒有正在運行的進程的進程:

PID TTY  STAT TIME COMMAND 
    1 ?  Ss  0:29 init [2] 
    2 ?  S<  0:00 [kthreadd] 
    3 ?  S<  0:04 [ksoftirqd/0] 
    4 ?  S<  3:21 [events/0] 
    5 ?  S<  0:00 [khelper] 
    44 ?  S<  0:00 [kblockd/0] 
    46 ?  S<  0:00 [kacpid] 
    47 ?  S<  0:00 [kacpi_notify] 
    94 ?  S<  0:00 [kseriod] 
    134 ?  S  0:00 [pdflush] 
    135 ?  S  0:06 [pdflush] 
    136 ?  S<  0:00 [kswapd0] 
    137 ?  S<  0:00 [aio/0] 
    138 ?  S<  0:00 [nfsiod] 
    795 ?  S<  0:00 [kpsmoused] 
    800 ?  S<  0:00 [rpciod/0] 
1627 ?  S<  0:00 [ksuspend_usbd] 
1631 ?  S<  0:00 [khubd] 
1646 ?  S<  0:00 [ata/0] 
1648 ?  S<  0:00 [ata_aux] 
1794 ?  S<s 0:00 udevd --daemon 
2913 ?  Ss  0:00 pump -i eth0 
2979 ?  Ss  0:00 /usr/sbin/rpc.idmapd 
3060 ?  S  0:01 /usr/sbin/syslogd --no-forward 
3083 ?  Ss  0:00 /usr/sbin/sshd 
3099 ?  S  0:00 /usr/sbin/inetutils-inetd 
3122 ?  Ss  0:00 /usr/sbin/pptpd 
3138 ?  Ss  0:00 /usr/sbin/cron 
3149 ?  SLs 0:33 /usr/sbin/watchdog 
3167 tty2  Ss+ 0:00 /sbin/mingetty tty2 
3169 tty3  Ss+ 0:00 /sbin/rungetty tty3 
3170 tty4  Ss+ 0:00 /sbin/rungetty tty4 
3173 tty5  Ss+ 0:00 /sbin/getty 38400 tty5 
3175 tty6  Ss+ 0:00 /sbin/getty 38400 tty6 
15677 ?  Ss  0:00 sshd: [email protected]/0 
15679 pts/0 Ss  0:00 -bash 
15710 ?  Z  0:00 [watchdog] <defunct> 
15711 pts/0 R+  0:00 ps x 

所以,從那裏,我不知道哪裏去了。任何人都可以給我任何建議或提示,如何這個腳本實際上接收來自USB讀卡器的輸入。此外,它還有一些如何在未登錄時接收輸入。該機器是嵌入式機器,我打開它,並使用perl腳本接受滑動並保存它們。

回答

0

關鍵位是在這裏:

while(1) { 
    my $text = <STDIN>; 

的USB讀卡器設置指導其輸入STDIN,因爲它表現得像一個鍵盤。當它完成讀卡時,它發送回車。 「輸入」然後被Perl讀取並卡入$text,然後等待下一次滑動。一旦完成三次滑動(三行<STDIN>行),它就會處理信息並將其寫入文件。然後,由於您處於while(1)循環中,因此它只是循環回到循環的頂部並等待更多輸入。

您可以通過運行該程序在另一臺計算機上模擬此操作,然後在等待輸入時鍵入一些文本並使用Enter鍵結束。做三次模擬三次滑動,程序應該處理它。

+0

是但程序沒有在機器上運行?它也不會在前臺運行。 – 2010-10-06 18:41:29

0

該腳本正在從stdin讀取,因此您需要找到哪個/哪些人正在調用此腳本,並查看stdin上正在管理的內容。

您是否檢查過系統的cron作業?您可以通過查看/DATA/SWIPES.TXT文件的時間戳和所有權來找到提示。