2010年11月26日 星期五

忽然想要列印 man page 怎麼辦?

老 Unix 玩家應該覺得很簡單,但對於新手的我還是要紀錄一下:
1. 先由命令查閱要列印的 man page 再哪裡? 例如 :
tom@glest:~/temp$ man -w groff
/usr/share/man/man1/groff.1.gz
2. 原來是有壓縮的,知道後就可以印了:
tom@glest:~/temp$ zcat `man -w groff` | groff -m man -T ps - | lpr

這裡 groff 是排版用的指令,輸入格式為 man page ,輸出格式為 ps 。
That's it !

p.s. 當然你的 lpr 要正確才行,如果有裝好 cups,下列命令就可以看到系統印表機狀態:
tom@glest:~/temp$ iceweasel http://localhost:631/admin



2010年11月19日 星期五

一些 C preprocessor 的用法

在 wireshark source 裡面,看到有些奇怪的 C 語言寫法 : 查不到定義的 _U_。在這裡當備忘錄記一下:
hostname$ cat foo.c
int  foo(int a _U_, int b _U_, int c)
{
    return c + 17;
}
#hostname$ gcc -D_U_=  -c -O2 -Wall -W foo.c
  foo.c: In function `foo':
  foo.c:2: warning: unused parameter `a'
  foo.c:2: warning: unused parameter `b'

上面定義 _U_  為"什麼東東都沒有" ,結果出現 compiler warning.

#hostname$ gcc -D_U_="__attribute((unused))" -c -O2 -Wall -W foo.c
#hostname$ gcc --version
2.95.1f

這裡 _U_ 被定義為 attribute of "suppress unused variable warning",所以就沒有 compiler warning 了!
那為何不使用的參數不拿掉呢? 不知道耶! 猜想是為了將來需要時不用動到很多 callers 就可以修改 function code 吧!