Re: [問題] adb process 莫名咬住 created file

作者: flu (Crazy Rhythm)   2015-02-23 02:23:35
試試把 system(...) 改成這樣看看
就是強迫開啟shell來執行外部程式
system('cmd /c start "adb" adb shell ls') ;
或者用替代方案 就是把檔案鎖起來
use 5.016 ;
use Fcntl qw/:DEFAULT :flock/ ;
use autodie ;
open my $out_file, '>' , "out.log" ;
flock($out_file, LOCK_EX); # *1
# 呼叫外部程式
# (... 做些和輸出到$out_file有關的事...)
undef $out_file ;
*1 在windows NT 這一行會讓lock變mandatory, 不是 un*x 的 advisory
所以不怕外部程式不先檢查flock
只是這樣的作法要倚賴外部程式能夠恰當地處理遇到file lock的情形
另外個人覺得比較有可能是adb一側比較怪異
※ 引述《doom8199 (口卡口卡 修)》之銘言:
: 標題: [問題] adb process 莫名咬住 created file
: 時間: Fri Feb 20 01:46:05 2015
: 不確定這個問題該 po 到 Android 還是 Perl 版
: 最近用 Perl 寫有關 adb debugging 遇到一個詭異的問題
: 就是執行 perl 途中, adb process 會咬住 file created from perl
: 後來把問題 narrow down 成以下 script:
: =================================
: use strict;
: my $test = "out.log";
: system("adb kill-server"); # (1)
: open FILE, "> $test"; # (2)
: system("adb shell ls"); # (3)
: close FILE;
: unlink $test or die "Q_Q\n";
: =================================
: 只要執行該 script, console 一定會顯示 Q_Q
: (當然前提是 找的到 adb 程式 和 usb driver)
: 但若只要在 open file 前, 讓 adb daemon 可以起來
: 例如在 #(1) 和 #(2) 之間呼叫 adb remount:
: =================================
: system("adb kill-server"); # (1)
: system("adb remount"); # (4)
: open FILE, "> $test"; # (2)
: =================================
: 這樣的 script 就不會印出 Q_Q 了
: 不知道是不是因為 adb 起來的時候動到 file descriptor
: 讓檔案以為是 adb.exe 叫起來
: 但相同的邏輯,用 Python 跑卻沒事情
: 麻煩版上的大神們能幫忙指點迷津
: 感謝~
:

Links booklink

Contact Us: admin [ a t ] ucptt.com