# 2018q3 Homework1 contributed by < `tony30701` > ###### tags: `sysprog2018` --- ### 選擇研究的題材 * 你所不知道的C語言 * 為什麼要深入學習 C 語言? (2017.05) * 指標篇 (2015.11) (2016.09) (2018.02) * C Traps and Pitfalls * Signal的呼叫方式 ## 你所不知道的C語言 #### 為什麼要深入學習 C 語言? #### 指標篇 - [ ] 取自 [C Traps and Pitfalls](http://www.literateprogramming.com/ctraps.pdf) 的案例 “Understanding Declarations” - [ ] signal的呼叫方式 > sighandler_t signal(int signum, sighandler_t handler); > 以下程式碼的運作使用signal函式接收3種不同的訊號, 分別為SIGINT, SIGQUIT, SIGUSR1, 收到訊號時則啟動不同的signal handler來執行對應的行動。 ![](https://i.imgur.com/AszECre.png) ```clike #include <stdio.h> #include <signal.h> void signal_handler2(int sig_num) { printf("Hello world from signal handler 2, sig_num: %d\n", sig_num); } void signal_handler1(int sig_num) { printf("Hello world from signal handler 1, sig_num: %d\n", sig_num); signal(SIGQUIT, signal_handler2); } void signal_handler(int sig_num) { printf("Hello world from signal handler, signum: %d\n", sig_num); } int main() { signal(SIGINT, signal_handler1); // SIGUSR1 signal(SIGUSR1, signal_handler); raise(SIGUSR1); raise(SIGUSR1); while (1) ; return 0; } ``` ```shell root@ubuntu:~/8_NCKU_system_software_2018/week1# killall --signal 2 hello_signal root@ubuntu:~/8_NCKU_system_software_2018/week1# killall --signal 3 hello_signal root@ubuntu:~/8_NCKU_system_software_2018/week1# killall --signal 10 hello_signal root@ubuntu:~/8_NCKU_system_software_2018/week1# killall --signal 3 hello_signal root@ubuntu:~/8_NCKU_system_software_2018/week1# killall --signal 2 hello_signal Output: root@ubuntu:~/8_NCKU_system_software_2018/week1# ./hello_signal Hello world from signal handler, signum: 10 Hello world from signal handler, signum: 10 Hello world from signal handler 1, sig_num: 2 Hello world from signal handler 2, sig_num: 3 Hello world from signal handler, signum: 10 Hello world from signal handler 2, sig_num: 3 Hello world from signal handler 1, sig_num: 2 ``` :::warning 避免用 root 權限執行程式 :notes: jserv ::: > 收到 by tony30701 [Ref] https://www.usna.edu/Users/cs/aviv/classes/ic221/s16/lec/19/lec.html - [ ]