1. 程式人生 > >coreutils-4.5.1/false.c程式碼閱讀

coreutils-4.5.1/false.c程式碼閱讀

coreutils-4.5.1/false.c程式碼閱讀
自己還是要讀原始碼,提長自己的功力。網上購C標準庫,沒有了。淘寶上二手書幾百元一本,估計現在學c的人也多了。
我真想讀ruby0.49,可以連gcc都安裝不上。沒辦法。還是讀簡單的。
把看程式碼看成一種生活方法,不是為了在他人前裝13。
從最簡單的看起
cat *.c | wc -l |sort -n -k1
先看false.c
我最近不停安裝gcc,想安裝老版本,怕gcc不行了,於是先在src目錄下,
sudo make
下,用系統自帶的工具。發現報有錯誤,也不管了。自己再在false.c中加幾句printf,看能否有效果,再本地執行一下編譯後的檔案。
./false
發現有效果了。
於是就邊改邊讀。
加一句usage(15),發現果然彈出了那個訊息框,再
echo $?
返回值是15,我隨便再改成
usage(1112)
返回值就不對了,左想右想在usage()中已經有exit(status)了,為什麼返回值不是1112呢?後來想,可能是整數超過了。
不然為何小整數可以,大的整數就不可以了呢?

在main()中
有setlocale();
bindtextdomain();
textdomain();
這幾個函式不知道定義,在包含的標頭檔案中找,沒找到。於是想起,自己以前曾經ctags過一把,於是在vim中新增一行:
tags=./tags;../lib/tags
再ctrl+]  跳到函式的定義處,發現更暈了。

反正每個命令的原始碼前,都有這幾句,我以前,為了追求數量,一律略過了。現在回頭想把它看懂,居然看不懂。也許要通過makefile找線索。想起來,又想偷懶了。

./false  --help
的實現邏輯終於看懂了,他的意思是,如果你傳了兩個引數,並且 
args[0]給命令名,argv[1]是--help,若STREQ(argv[1],"--help")就顯示usage
哈哈,看程式碼也不能太急,要有一個沉穩的心態,我著相了。