diff options
-rw-r--r-- | hw1/Makefile.am | 2 | ||||
-rw-r--r-- | hw1/README.txt | 43 |
2 files changed, 44 insertions, 1 deletions
diff --git a/hw1/Makefile.am b/hw1/Makefile.am index 6275cbb..610971a 100644 --- a/hw1/Makefile.am +++ b/hw1/Makefile.am @@ -1,4 +1,4 @@ -EXTRA_DIST = Makefile.simple +EXTRA_DIST = Makefile.simple README.txt bin_PROGRAMS = read_server write_server noinst_LIBRARIES = libsphw1.a libsphw1_a_SOURCES = common.c common.h server.c server.h diff --git a/hw1/README.txt b/hw1/README.txt new file mode 100644 index 0000000..cae2176 --- /dev/null +++ b/hw1/README.txt @@ -0,0 +1,43 @@ + +Compile (Makefile) +------------------ +檔案名稱為 Makefile.或 Makefile.simple,這兩個檔案的內容是相同的。 +輸入 make 即可編譯,make clean 可清除已編譯的檔案。有些變數可以在 +執行 make 時更改以符合需求。這個程式必須使用支援 C99 或 C11 的 C +編譯器才能編譯成功,無法使用 C89 或 C++ 編譯器來編譯。 + 可修改的變數: + CC C 編譯器執行檔名,預設是 c99 + CFLAGS 使用者傳給 C 編譯器的參數(不會取代預設的必要參數) + LDFLAGS 使用者傳給 linker 的參數(不會取代預設的必要參數) + +Compile (Autotools) +------------------- +執行 ./configure 即可產生 Makefile,並執行 make 來編譯。如果需要顯示編譯 +時執行的指令,可用 make V=1。輸入 make dist 可將作業打包成 .tar.gz 檔案, +但由於預設的檔名不符合作業要求,需要額外執行 make submit 才能將檔名轉換成 +作業要求的格式。 + +Fixed Severe Bug +---------------- +1. 修正傳送 ACCEPT / REJECT 時使用的 sizeof (const char*) 作為 buffer 大小的問 + 題。由於這是固定的數值,所以已經使用 #define 來替換。 +2. 修正當第一次從 client 讀取資料時沒讀到換行而導致程式終止的問題。目前作法改 + 為藉由多次 handle_read (我已將它改名為 request_read) 來組合成完整的檔名。 +3. 所有非 POSIX 標準函式都已經替換成 POSIX 內有規定的函式。bzero 改為 memset, + 而 getdtablesize 改成 sysconf (_SC_OPEN_MAX)。 + + +Other Notes and Changes +----------------------- +1. 將所有非必要的全域變數改為區域變數,減少名稱衝突的機會。 +2. 將部份區域變數移入 if、for、while 的區塊內以方便管理。 +3. init_server、init_request、free_request、handle_read 分別改為 + server_init、request_init、request_free、request_read。 +4. 為避免 client 提早離線導致 server 被終止,程式會忽略 SIGPIPE。 +5. 為方便 debug 與檢查 memory leak,SIGINT 改為顯示 server 狀態, + 而 SIGQUIT 則是正常結束 server 的方法(會使 while 迴圈結束)。 +6. 為統一 debug 訊息格式,新增了 request_msg 和 request_err。 +7. 對於相同的檔案,會記錄使用中的 client 數量,並統一管理所有使用 + 同一檔案的 client 的 file descriptor 和 lock。由於 client 與檔 + 案數量並不多,所以僅使用簡單的陣列存放資料,並無使用特殊資料結 + 構來加速。 |