我在嘗試在c中編寫一個smallshell時遇到了一些問題。Unix編程 - 信號處理器
問題是:假設我爲信號處理程序編寫了一些代碼,在這種情況下,它被修改爲捕獲SIGCHLD
信號,我怎麼能通知我的程序信號已被捕獲?
如果我使用全局變量,問題很簡單,但這不是我想要去做的。所以任何建議/提示將不勝感激!
這就是我現在要解決的問題。
volatile sig_atomic_t exit_status; /* <--global variabel */
void sigchld_handler(int signal) {
switch (signal) {
case SIGCHLD:
exit_status = 1; /* SIGCHLD was caught, notify program.. */
break;
default:
fprintf(stderr, "Some signal catched\n"); /* not a signal of intrest */
break;
}
}
//感謝
絕對使用全局變量。另外,在使用'volatile'之前,請確保您閱讀[this](http://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf),它基本上表明(至少)普通編譯器混亂打開優化時使用'volatile'。或[內核文檔中的這一點](http://www.mjmwired.net/kernel/Documentation/volatile-considered-harmful.txt)。更何況丹尼斯里奇也反對'揮發性' – Shahbaz
謝謝,我會看看它:) –