# lab0-c SandBox [TOC] [lab0-c weekly goal](/vRKL8gdmSVWBCO0MyZx27A) [lab0-c code review](/hT6F_bvxTP--8vkmFLLdnA) :ok_hand:: 已完成 :dart: 正在進行 * build lab0-c 所需 prerequisites ## 模仿仿別人開發流程 ### 依照 jserv - code review 進行修改 * ### AdrianHuang同學 :+1: [開發紀錄 (lab0)](https://hackmd.io/U5AimAfrSeS-cLvP6vhNUQ?view) / [GitHub](https://github.com/AdrianHuang/lab0-c) :::spoiler * :dart:Apply ascending order for execution time array * 探討 dudect 的問題 * patch to fix the problem that q_size() not constant time * :ok_hand: Fix the memory leakage when invoking q_insert_tail * >finished at [time=Thu, May 7, 2020 3:25 PM] * note: * [Linux Diary 5/4 (Mon)](/A3dg30R8Td6D3weR6R4vLg) * 待解答問題 - [x]如何追蹤 stackframe? - use `info stack` in gdb - use factorial function for example to show the stack - ref: [cs50 - call stack](https://www.youtube.com/watch?v=aCPkszeKRa4) - [ ]what does it mean? still allocated - [ ]what does it mean? still reachable * [Linux Diary 5/4 (Mon)](/A3dg30R8Td6D3weR6R4vLg) * :ok_hand:Support natural sort * [Linux Diary 5/4 (Mon)](/A3dg30R8Td6D3weR6R4vLg) * :ok_hand:Add more info to sort command * [Linux Diary 5/4 (Mon)](/A3dg30R8Td6D3weR6R4vLg) * :ok_hand:Export a generic registration function for q_sort * 5/2 * :ok_hand:Introduce merge sort implementation * [Linux Diary 5/1 (Fri)](/noDSXYRZQ1iMASofP4Ln5w) * [Linux Diary 5/2 (Sat)](/0lfHgji9RUaBryBjUvAEPQ) * :ok_hand:Refine the code of q_size() * 5/1 * :ok_hand:Rename the member ‘n’ of queue_t to ‘size’ * 5/1 * :ok_hand:Remove the unnecessary assignment in q_free() * 5/1 * :ok_hand:Remove the unnecessary comments * 5/1 * :ok_hand:Implement basic queue operations * 5/1 ::: ## makefile 理解 * [Randy 同學範本](https://hackmd.io/@randy870819/system-prog-lab0?fbclid=IwAR3spFl04I9SYw_aRsYDtHl4oDX3rlQxlC8ujqgbywIBqhbzZIpA9bjLbwU) ## valgrind 分析 ## qtest 實作 * 瀏覽 [2020 年春季 Linux 核心設計課程作業 —— lab0](/@sysprog/linux2020-lab0)對 qtest 直譯器的解釋 * 步驟 * 大致瀏覽 * 列出問題 e.g. 函式呼叫 stack frame 的行為 * [q_test 分析](/EKXNCDb5QUuMZ_otZW5EAQ) * 解決問題,補齊知識 [你所不知道的 C 語言: 函式呼叫篇](/@dange/rk9xmgHKX?type=view) ### `do_hello()` 實作 * `do_hello` 呼叫後的 stack frame 觀察 * [Linux Diary 5/7 (Thu)](/jsQ2O2JpRHaCUGPDdpK_mg) * 加入 Kaomoji * [Linux Diary 5/3 (Sun)](/l1y2PajVSlqDr9yBfcWyFg) ### [linenoise 程式分析](/uzDRvr9fSI2ehkX9f71A1w) * :bulb:參考 KYWeng 同學的 [lab0-c](https://hackmd.io/@KYWeng/S1DPSVSQ8?fbclid=IwAR1fzgqXxhlnYyntG-GZIX2LHl-JeDQxBpUaspL1ZAmDP626WTPHO2SpXDI) 對 RIO 套件與 linenoise 的詳細說明,來看懂 qtest 設計 ### [RIO 套件 (Robust I/O) * [KYWeng 同學解說](https://hackmd.io/@KYWeng/S1DPSVSQ8?fbclid=IwAR1fzgqXxhlnYyntG-GZIX2LHl-JeDQxBpUaspL1ZAmDP626WTPHO2SpXDI#RIO-%E5%A5%97%E4%BB%B6-Robust-IO) * [解釋 select 系統呼叫在本程式的使用方式 ](https://hackmd.io/@KYWeng/S1DPSVSQ8?fbclid=IwAR1fzgqXxhlnYyntG-GZIX2LHl-JeDQxBpUaspL1ZAmDP626WTPHO2SpXDI#%E8%A7%A3%E9%87%8B-select-%E7%B3%BB%E7%B5%B1%E5%91%BC%E5%8F%AB%E5%9C%A8%E6%9C%AC%E7%A8%8B%E5%BC%8F%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F) * [使用 antirez/linenoise 強化 qtest 命令列功能 ](https://hackmd.io/@KYWeng/S1DPSVSQ8?fbclid=IwAR1fzgqXxhlnYyntG-GZIX2LHl-JeDQxBpUaspL1ZAmDP626WTPHO2SpXDI#%E4%BD%BF%E7%94%A8-antirezlinenoise-%E5%BC%B7%E5%8C%96-qtest-%E5%91%BD%E4%BB%A4%E5%88%97%E5%8A%9F%E8%83%BD) ## queue 實作 * `q_insert_head()` - [x] Quiz * B5 - 137 * [Linux Diary 5/15](https://hackmd.io/SgxZ8B5rRVaQ-WVxOgyonA) * `NULL_POINTER_GUARD(q)` Macro 實驗 * [Linux Diary 5/20 (Wed)](/ppT8m0SvQ1ezBnDi3Yk73g) * `q_insert_tail()` * `q_size()` - [x] Quiz * B5 -119 * `q_new()` - [x] Quiz * B5 -119 * `q_free()` * `q_remove_head()` * `q_reverse()` * `q_sort()` * 理解 sort 演算法 * 臨摹 AdrianHuang 同學程式碼 * 自己開 branch 提取練習