2010年4月30日 星期五

[Linux] 少用但是你被卡住時好用的指令 fuser and lsof

小微微常常刪檔或是改檔的時候會跟你靠腰說"檔案正在使用中...",讓你不能刪除檔案,但有時候還是不知道誰在用,linux下面也有。

fuser

Show which processes use the named files, sockets, or filesystems

lsof
list open files

多好用?
欲哭無淚的時候,很好用.....
紀錄幾個常用用法

fuser -v -mu /home/bejo
fuser -v -mu /proc


-v: 不加沒辦法閱讀啦
查看目錄或是檔案被誰用。查proc妙用無窮(疑?
也可以用來砍掉再用的process,不過...

lsof -i
-i 查哪些程式在用網路資源...(上次TFTP就是這樣找出來的 囧>)

lsof -u root
查root用了哪些東西

組合起來就可以用

lsof -u root -a -i
查root開了哪些網路程式
-a: 用來組合其他條件,例如 -i

有程式亂活動馬上就知道@__@!!!


2010年4月28日 星期三

[小微微]開機指令檔/關機指令檔

最近想放棄WINXP換系統.....
可是發現我一窮二白...買不起W7

只好整理開機流程加快一下系統O__Q
XP系統如果想在登入帳號之前執行使用者想要執行的動作,如COPY檔案、檢查檔案、撥PPPoE連線等等

埋在"啟動"資料夾、排程、系統服務都不適當

應該要放在
開始=>執行=>gpedit.msc (就是群組原則啦)
電腦設定=>windows設定=>將 [開機指令檔] 指向 想執行的程式(*.BAT也可)。

這也提供[關機指令檔] (用新增的) 可以在關機的時候做。
類似linux的S60_XXX,S99_XXX 開機執行,跟rc file的執行階段不大一樣。

會在Windowns登入使用者之前就執行。

看來想換DX10來打電動要再久一點了.....(哭哭

2010年4月26日 星期一

[語言] 沒營養的 - do{} while(0)

看code 有時候會看到沒營養的
do{ XXX } while(0)

直覺上會覺得很北七...  顯然北七的只是表面...
這種寫法常見在

#define


#define BEJO(x) {a(x-2);b(x);} while(0)
#define a(x) printf("%d\n", x)
#define b(x) printf("%d\n", x)

如果這樣寫
#define BEJO(x) a(x-2);b(x);

if(x >0 )
   BEJO(x);
else
.....
會被展開成
if(x >0 )
   a(x-2);b(x);;
else
.....

當場就b(x)爆炸了.....

那如果這樣寫
#define BEJO(x) {a(x-2);b(x)}
就...
if(x >0 )
   {a(x-2);b(x)};
else
.....

那如果這樣寫
#define BEJO(x) {a(x-2);b(x);}
就...
if(x >0 )
   {a(x-2);b(x);};
else
.....

不管怎麼寫~~都有可能會被呼叫者誤用到爆炸
按照
本來BEJO(x); <-- 會加分號的習性

do{} while(0)

剛剛好...
if(x >0 )
   BEJO(x);
else
.....
會被展開成
if(x >0 )
   {a(x-2);b(x);} while(0);
else
.....

很安全.....