coreutils4.5.1 dirname.c原始碼分析3
老調重彈,每次先按程式碼量排序,從行數少的程式開始讀,總能有所收穫。比如,在dirname.c中,我發現幾條:
第一、函式和括號可以用空格隔開,很奇怪。如
void
usage (int status)
在usage與(中有一個空格,我寫了一個測試程式,也驗證了猜想。
第二、對字元取地址,真怪異!
static char const dot = '.';
result = argv[1];
len = dir_len (result);
if (! len)
{
result = ˙
len = 1;
}
我排程過,當
./dirname abc.c
結果是
.
./dirname /abc.c
結果是
/
也就是如果目錄為空,就用當前目錄程式碼。但是,dot是字元變數呀,天,怎麼當成字串來使用。
還是學得不精。
對命令列解析的那個函式,也沒弄懂,下次要搞明白。
相關推薦
coreutils4.5.1 dirname.c原始碼分析3
老調重彈,每次先按程式碼量排序,從行數少的程式開始讀,總能有所收穫。比如,在dirname.c中,我發現幾條: 第一、函式和括號可以用空格隔開,很奇怪。如 void usage (int status) 在usage與(中有一個空格,我寫了一個測試程式,也驗證了猜想。 第二、對字元取地址,真怪異!
coreutils4.5.1 basename.c原始碼分析3
coreutils4.5.1 basename.c原始碼分析2 前幾天又重新讀了basename.c對其中去掉字尾的那段,終於理解了。現總結如下; static void remove_suffix (char *name, const char *suffix) { char *
coreutils4.5.1 paste.c原始碼分析
coreutils4.5.1 paste.c原始碼分析 今天天冷,幾天沒出門了。把新買的電熱取暖器放在電腦房,然後拉上窗簾,開始讀原始碼,學習linus,很好玩。 paste這個命令有啥應用場景呢?先學習使用: head -n 100 a1 a2 ==> a1 <== thi
coreutils4.5.1 uniq.c原始碼分析1
uniq.c這個檔案其實沒讀懂,不過從程式中發現了幾個支點,下次再細細品。 第一。交換兩行的寫法。 #define SWAP_LINES(A, B) \ do
coreutils4.5.1 expr.c 原始碼分析2
今天又開始讀程式碼。前段時間看演算法分析相關的書,蒐集了不少演算法相關書籍,感覺自己功力太淺,還是讀讀原始碼吧。好在,讀小說,養成了快速讀書的好習慣,再加不求甚解,把快速+不求甚解利用到讀程式碼上,感覺也很有意思。 今天重點翻了翻expr.c,這個原始碼,很有特色,首先啟用debug功能。 文件中有
coreutils4.5.1 wc.c程式碼分析
coreutils4.5.1 wc.c程式碼分析 再讀wc.c,看出了一點眉目,有些誇張了,我只是說,對程式的大體框架有些瞭解,離能修改程式碼的程度還差得遠呢。不過,正因為是新手,所以不妨把步子邁得大些,反正就是練手,不要太多的成見在裡面。 先看main() 其中對選項的處理很簡單,設定幾個全域性量
coreutils4.5.1 uname.c程式碼分析
coreutils4.5.1 uname.c程式碼分析 今天把以前讀過的程式碼又快速的閱讀一次,感覺真是書讀百遍,其義自現。程式碼重讀一次,又有了新的收穫。 在uname.c中,其中沒有複雜的邏輯,但其中處理列印選項時,很有意思。它是如何實現的呢? /* Values that are bitwis
coreutils-4.5.1 head.c原始碼分析03
今天真是把head.c看懂了。 今天天真冷,我網上購了電熱取暖器,沒送到。但邊聽音樂,邊讀程式碼,感覺也很愜意。 看程式碼不能著急,要慢慢看,也許就像有人講的,郝培強講的,一開始要慢,開始慢,後面才能越看越快。是的。看程式碼,開始要慢。不要著急。 head有幾個選項 -n 行數 -c 位元組數 -q
coreutils-4.5.1 expr.c 原始碼閱讀
在linux下試試五筆是否好用。感覺打字也還很快的。 很久沒有上csdn了,最近沒有看原始碼了,回顧自己,感覺還是寫程式碼太少,應該多寫,多讀。想來想去,感覺還是要看coreutils的程式碼,因為這些程式碼都簡單,那些作業系統,編譯器的程式碼量太大了,就算sed,awk,ruby早版本的程式碼量都
coreutils-4.5.1/dirname.c
coreutils-4.5.1/dirname.c basename.c的作者留的名字是:fixme unknown,作者很幽默呀,名字都不留。 也許作者真是覺得寫程式就是好玩。名氣算什麼?當飯吃?有意思。 剛才看了dirname.c,這個程式有意思的一個地方是,求目錄名時,如 "/usr/ab/d
gnu coreutils-4.5.1 comm.c程式碼分析4
gnu coreutils-4.5.1 comm.c程式碼分析4 昨天睡覺時,也在想writeline(),總為其中列印\t原因不解,當時在想,為什麼case 3:時,要在乎是否列印了only_file_1,only_file_2呢?想了一會,終於明白了。現把自己的理解說一下。 writeline(
Android 5.0 Camera系統原始碼分析(3):Camera預覽流程控制流
1. 前言 本文分析的是Android系統原始碼,從frameworks層到hal層,記錄了Camera進入預覽模式的重點程式碼,主要為控制流程的程式碼,有關影象buffer的傳遞暫不涉及,硬體平臺基於mt6735。由於某些函式比較複雜,在貼出程式碼時會適當對
coreutils-4.5.1/basename.c 讀原始碼的方法
coreutils-4.5.1/basename.c 讀原始碼的方法 為了按行數看程式碼的命令寫錯了,應該寫成這樣: ls -s *.c | sort -n -k1 | more 我想,讀原始碼,的最大方法,是要改於開啟原始碼,開始讀,只要開始了,方法總會有的。 路雖遠,行則達。 有時,我感覺很
LAV Filter 原始碼分析 3: LAV Video (1)
LAV Video 是使用很廣泛的DirectShow Filter。它封裝了FFMPEG中的libavcodec,支援十分廣泛的視訊格式的解碼。在這裡對其原始碼進行詳細的分析。LAV Video 工程程式碼的結構如下圖所示直接看LAV Video最主要的類CLAVVideo
Redis網路庫原始碼分析(3)之ae.c
一、aeCreateEventLoop & aeCreateFileEvent 上一篇文章中,我們已經將伺服器啟動,只是其中有些細節我們跳過了,比如aeCreateEventLoop函式到底做了什麼? 接下來我們要分析ae.c檔案,它是整個Redis
雙臺服務器rsync同步報錯(code 5) at main.c(1503) [sender=3.0.6]
雙臺服務器rsync同步報錯(code 5) at main.c(1503) [sender=3.0.6]環境:某某項目的代碼機器70配置有雙網卡:232.182.23.70(聯通)61.10.45.70(電信)另一臺代碼機器是滄州聯通的代碼機器102,配置單網卡:121.15.1.102(聯通)rsync服
J.U.C原始碼分析:CountDownLatch
CountDownLoad是在併發程式設計中使用較多的一個類,可以完成多個執行緒之間的相互等待和協作,原始碼內容不多但功能強大且使用場景複雜多樣。 原始碼
lucene原始碼分析(3)facet例項
簡單的facet例項 public class SimpleFacetsExample { private final Directory indexDir = new RAMDirectory(); private final Directory taxoDir = new RAMD
Shiro原始碼分析(3) - 認證器(Authenticator)
本文在於分析Shiro原始碼,對於新學習的朋友可以參考 [開濤部落格](http://jinnianshilongnian.iteye.com/blog/2018398)進行學習。 Authenticator就是認證器,在Shiro中負責認證使用者提交的資訊,
5.1-day01-C++語言語法基礎
bank.cpp #include <iostream> using namespace std; //namespace { void print (int money) { cout << money <&