gnu coreutils-4.5.1 comm.c程式碼分析4
阿新 • • 發佈:2019-01-13
gnu coreutils-4.5.1 comm.c程式碼分析4
昨天睡覺時,也在想writeline(),總為其中列印\t原因不解,當時在想,為什麼case 3:時,要在乎是否列印了only_file_1,only_file_2呢?想了一會,終於明白了。現把自己的理解說一下。
writeline(*line,*stream,class)本質上完成的任務就是根據class的類別,向stream上打印出line的內容。
class=1
如果only_file_1==0,表示檔案1特有的內容不列印,為此,結束程式。
class=2
如果only_file_2==0,表示檔案2特有的內容不列印,為此,結束程式。
如果此時,列印了only_file_1,為了與only_file_1的內容不攪在一起,先列印一個\t
class=3
如果only_file_3==0,表示檔案1與2共有的內容不列印,為此,結束程式。
如果此時,列印了only_file_1,為了與only_file_1的內容不攪在一起,先列印一個\t
如果此時,列印了only_file_2,為了與only_file_2的內容不攪在一起,先列印一個\t
做完上面的處理,再列印需要的內容。
我在上面還是沒有說明白,實際上,writeline()的目標 就是列印內容,但為了把檔案1特有的內容、檔案2特有的內容以及共有的內容分開顯示,需要在三組內容之間列印\t,以分欄顯示。為此,在列印檔案2特有內容之前顯示一個\t,在列印檔案1,2共有內容之前,一般要列印2個\t
感覺讀程式碼對自己理解C語言,相當有好處。我想,應該把程式碼當小說看,先了解主要情節,再慢慢深入細節。最後跳出程式碼,慢慢把玩。