summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLAN-TW <lantw44@gmail.com>2013-10-13 15:56:42 +0800
committerLAN-TW <lantw44@gmail.com>2013-10-13 15:56:42 +0800
commit2f5c01991bb93ec44624b9b45edb130ad0bd6a36 (patch)
treeb3c863762a8e656d3abf702ac0b1e413bd753e5c
parent10588f724677e532c49d4eeadce3b9e73321d37d (diff)
downloadsp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.tar
sp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.tar.gz
sp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.tar.bz2
sp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.tar.lz
sp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.tar.xz
sp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.tar.zst
sp2013-2f5c01991bb93ec44624b9b45edb130ad0bd6a36.zip
HW1: 加入 README.txtHW1
-rw-r--r--hw1/Makefile.am2
-rw-r--r--hw1/README.txt43
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 與檔
+ 案數量並不多,所以僅使用簡單的陣列存放資料,並無使用特殊資料結
+ 構來加速。