---
# System prepended metadata

title: 4/4 一對一題問

---

# 4/4 一對一題問
## 其他
1. 在 [Linux 核心設計(2021): 第 1 週作業解說](https://www.youtube.com/watch?v=a8GwXtrUc6Q&t=2486s) `1:41:46` 中提到的 Git commit message 檢查（自然語言實作）
2. 設計實驗實驗常用到的工具。

## 第一週作業
### lab0
1. 作業要求 **在 qtest 中實作 coroutine，並提供新的命令 web，提供 web 伺服器功能，注意: web 伺服器運作過程中，qtest 仍可接受其他命令** 中的 coroutine 概念。

    下面是我之前加入 longjmp/setjmp 的作法。
    ```c=
    static bool do_web(int argc, char *argv[])
    {
        ...
        // int i = 0;
        // for (; i < FORK_COUNT; i++) {
        pid_server = fork();
        if (pid_server == 0) {  //  child
            while (1) {
                connfd = accept(listenfd, (SA *) &clientaddr, &clientlen);
                process(connfd, &clientaddr);
                close(connfd);
            }
        } else if (pid_server > 0) {  //  parent
            printf("child pid is %d\n", pid_server);
            longjmp(jmpbuffer, 1);
        } else {
            perror("fork");
        }
        // }
        while (1) {
            connfd = accept(listenfd, (SA *) &clientaddr, &clientlen);
            process(connfd, &clientaddr);
            close(connfd);
        }

        return 0;
    }
    ```
    ```c=
    int main(int argc, char *argv[])
    {
        ...
        setjmp(jmpbuffer);
        ok = ok && run_console(infile_name);
        ...
    }
    ```




### quiz1
1. 雙底線在前的變數命名有什麼特殊含義？
    ```c=
    typedef struct __node {                   
        int value;
        struct __node *next;
    } node_t;
    ```
## 第二週作業
### quize2
1. 如何決定程式碼要放在 `.c` 或 `.h`。

## 第三週作業

## 第四週作業
1. 延伸問題中的 **嘗試使用 C11 Atomics 改寫上述程式碼，使其有更好的 scalability** 的 scalability 指的是什麼？